AWS Quicksight - 嵌入仪表板


您还可以将 Quicksight 仪表板嵌入到外部应用程序/网页中,或者可以使用 AWS Cognito 服务控制用户访问。要执行用户控制,您可以在 Cognito 中创建用户池和身份池,并将嵌入仪表板策略分配给身份池。

AWS Cognito 是一项 IAM 服务,允许管理员创建和管理临时用户以提供对应用程序的访问权限。通过使用身份池,您可以管理这些用户池的权限。

让我们看看如何生成安全的仪表板 URL 并执行用户控制 -

步骤 1 - 创建用户池和用户

在 AWS Cognito 中创建用户池并创建用户。转至Amazon Cognito → 管理用户池 → 创建用户池

亚马逊认知

第 2 步 - 创建身份池

创建用户池后,下一步是创建身份池。转到https://console.aws.amazon.com/cognito/home?region=us-east-1

单击“创建新身份池”。

身份池

输入身份池的适当名称。转到身份验证提供程序部分并选择“Cognito”选项。

创建池

第 3 步 - 创建 Cognito 角色

输入用户池 ID(您的用户池 ID)和应用程序客户端 ID(转到用户池中的应用程序客户端并复制 ID)。

接下来是单击“创建池”,然后单击“允许”在 IAM 中创建身份池的角色。它将创建 2 个 Cognito 角色。

第 4 步 - 分配自定义策略

下一步是将自定义策略分配给在上述步骤中创建的身份角色 -

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Action": "quicksight:RegisterUser",
         "Resource": "*",
         "Effect": "Allow"
      },
      {
         "Action": "quicksight:GetDashboardEmbedUrl",
         "Resource": "*",
         "Effect": "Allow"
      },
      {
         "Action": "sts:AssumeRole",
         "Resource": "*",
         "Effect": "Allow"
      }
   ]
}
政策

您可以在“quicksight:GetDashboardEmbedUrl”下传递仪表板 Amazon 资源名称 (ARN),而不是“*”,以限制用户只能访问一个仪表板。

第 5 步 - 登录 Cognito 应用程序

下一步是使用用户池中的用户凭据登录 Cognito 应用程序。当用户登录应用程序时,Cognito 会生成 3 个令牌 -

  • IDToken
  • 访问令牌
  • 刷新令牌

要创建临时 IAM 用户,凭据如下所示 -

AWS.config.region = 'us-east-1';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
   IdentityPoolId:"Identity pool ID", Logins: {
      'cognito-idp.us-east-1.amazonaws.com/UserPoolID': AccessToken
   }
});

为了生成临时 IAM 凭证,您需要使用以下参数调用 sts.assume 角色方法 -

var params = {
   RoleArn: "Cognito Identity role arn", RoleSessionName: "Session name"
};
sts.assumeRole(params, function (err, data) {
   if (err) console.log( err, err.stack); 
   // an error occurred
   else {
      console.log(data);
   })
}

步骤 6 - 在 Quicksight 中注册用户

下一步是使用“quicksight.registerUser”在 Quicksight 中注册用户,获取步骤 3 中生成的凭据,并使用以下参数 -

var params = {
   AwsAccountId: “account id”,
   Email: 'email',
   IdentityType: 'IAM' ,
   Namespace: 'default',
   UserRole: ADMIN | AUTHOR | READER | RESTRICTED_AUTHOR | RESTRICTED_READER,
   IamArn: 'Cognito Identity role arn',
   SessionName: 'session name given in the assume role creation',
};
quicksight.registerUser(params, function (err, data1) {
   if (err) console.log("err register user”); 
   // an error occurred
   else {
      // console.log("Register User1”);
   }
})

第 7 步 - 更新 AWS 配置文件

接下来是更新步骤 5 中生成的用户的 AWS 配置。

AWS.config.update({
   accessKeyId: AccessToken,
   secretAccessKey: SecretAccessKey ,
   sessionToken: SessionToken,
   "region": Region
});

第 8 步 - 为 Quicksight 仪表板生成嵌入 URL

使用步骤 5 中创建的凭据,使用以下参数调用 Quicksight.getDashboardEmbedUrl 以生成 URL。

var params = {
   AwsAccountId: "Enter AWS account ID",
   DashboardId: "Enter dashboard Id",
   IdentityType: "IAM",
   ResetDisabled: true,
   SessionLifetimeInMinutes: between 15 to 600 minutes,
   UndoRedoDisabled: True | False
}
quicksight.getDashboardEmbedUrl(params,function (err, data) {
   if (!err) {
      console.log(data);
   } else {
      console.log(err);
   }
});

您必须使用上面生成的 URL 从应用程序调用“QuickSightEmbedding.embedDashboard”。

与 Amazon Quicksight 一样,嵌入式仪表板也支持以下功能 -

  • 向下钻取选项
  • 自定义操作(链接到新选项卡)
  • 屏幕过滤器
  • 下载到 CSV
  • 按视觉效果排序
  • 选择加入电子邮件报告
  • 将仪表板重置为默认选项
  • 在仪表板上撤消/重做操作