【问题标题】:How to get/generate aws quicksight secure dashboard url如何获取/生成 aws quicksight 安全仪表板 URL
【发布时间】:2020-04-08 04:06:10
【问题描述】:

我想将 Quicksight 仪表板嵌入到应用程序中。我浏览了 AWS quicksight 文档,但没有找到安全签名的仪表板网址。

【问题讨论】:

    标签: amazon-web-services amazon-quicksight


    【解决方案1】:

    要生成 Quicksight 安全仪表板 URL,请按照以下步骤操作:

    第 1 步:创建一个新的身份池。转到https://console.aws.amazon.com/cognito/home?region=us-east-1,点击‘创建新身份池’

    给一个合适的名字。 转到 Authentication Provider 部分,选择 Cognito。 提供用户池 ID(您的用户池 ID)和应用程序客户端 ID(转到用户池中的应用程序客户端并复制 id)。 点击“创建池”。然后点击‘允许’在IAM中创建身份池的角色。

    第 2 步:将自定义策略分配给身份池角色

    使用以下 JSON 创建自定义策略。

    {
        "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 中的 dashboard ARN 名称,

    然后转到 IAM 中的角色。 选择身份池的 IAM 角色并将自定义策略分配给该角色。

    第 3 步:配置生成临时 IAM(STS) 用户

    使用用户凭据登录您的应用程序。 为了创建临时 IAM 用户,我们使用 Cognito 凭证。 当用户登录时,Cognito 会生成 3 个令牌 ID - IDToken、AccessToken、RefreshToken。这些令牌将被发送到您的应用服务器。

    为了创建临时 IAM 用户,我们使用 Cognito 访问令牌,凭证如下所示。

     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);
    })
    

    您可以为用户添加其他参数,例如持续时间(以秒为单位)。 现在,我们将获取临时用户的AccessKeyId、SecretAccessKeySession Token

    第 4 步:在 Quicksight 中注册用户

    借助第 3 步中使用的相同 Cognito 凭据,我们将使用带有以下参数的 quicksight.registerUser 方法快速注册用户 p>

    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”);
                       }
                   })
    

    现在用户将在 quicksight 中注册。

    第 5 步:使用新凭证更新 AWS 配置。

    以下代码显示了如何使用生成的新凭证配置 AWS.config()第 3 步

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

    第 6 步:为仪表板生成 EmbedURL:

    通过使用在步骤 3 中生成的凭据,我们将使用以下参数调用 quicksight.getDashboardEmbedUrl

    var params = {
      AwsAccountId: "account ID",
      DashboardId: "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。

    借助上面生成的 url 从前端调用 QuickSightEmbedding.embedDashboard。 结果将是嵌入在您的应用程序中的带有过滤器控件的仪表板。

    【讨论】:

    • 这是一个很好的答案,非常有帮助。您是否可能有一个示例 github 项目链接来查看所有不同的部分?
    • 请在下面的Github链接中找到quicksight上的示例项目github.com/sivasumanth483/quicksight
    • @SivaSumanth 这很棒,对我很有帮助!我检查了你的 github 链接,发现 getQuickSightUrl 函数需要一个 idToken 参数。你能告诉我你从哪里得到那个令牌吗?在你的步骤没有。 2,您提到“当用户登录时,Cognito 会生成 3 个令牌 ID - IDToken、AccessToken、RefreshToken。这些令牌将被发送到您的应用服务器。”这些令牌究竟是发送到哪里的,我在哪里可以找到有关为令牌实现此功能的更多信息?
    【解决方案2】:

    此链接将为您提供您需要的 aws cli https://aws.amazon.com/blogs/big-data/embed-interactive-dashboards-in-your-application-with-amazon-quicksight/

    这是第 3 步 aws cli cmd 为您提供嵌入 URL(我能够执行)

    aws quicksight get-dashboard-embed-url --aws-account-id (your account ID) --dashboard-id (your dashgboard ID) --identity-type IAM
    

    还有许多其他依赖项来启用每个 aws 文件的嵌入式仪表板。我无法成功地做到这一点。 GL,如果你做到了,请告诉我!

    【讨论】:

      【解决方案3】:

      PHP 实现

      (除了 Siva Sumanth 的回答)

      https://gist.github.com/evgalak/d0d1adf099e2d7bff741c16a89bf30ba

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-14
        • 1970-01-01
        • 2021-12-16
        • 2020-02-06
        • 1970-01-01
        • 2021-03-13
        • 2022-01-27
        • 2023-03-15
        相关资源
        最近更新 更多