如何设置从 Amazon QuickSight 到另一个账户的 Amazon S3 存储桶的跨账户访问权限?

2 分钟阅读
0

我想在另一个账户中使用来Amazon Simple Storage Service(Amazon S3)存储桶的数据在 Amazon QuickSight 中创建数据集。

简短描述

完成以下步骤,创建从 Amazon QuickSight(账户 A)到另一个账户(账户 B)中加密的 Amazon S3 存储桶的跨账户访问权限:

  1. 在 S3 存储桶所在的账户 B 中更新您的 S3 存储桶策略。
  2. 将 S3 存储桶添加为 QuickSight 服务角色(账户 A)可以访问的资源。
  3. 允许 QuickSight 服务角色访问 S3 存储桶的 AWS Key Management Service(AWS KMS)密钥。

**注意:**本文假设您的 S3 存储桶已加密。使用 AWS KMS 密钥加密您的 S3 存储桶也是最佳做法。有关如何激活 Amazon S3 的默认加密的更多信息,请参阅配置默认加密

解决方法

在账户 B 中更新您的 S3 存储桶政策

要设置从 QuickSight 到 Amazon S3 的跨账户访问权限,请完成以下步骤:

  1. 在账户 B 中更新您的 S3 存储桶的存储桶策略,例如:

    {  "Version": "2012-10-17",
      "Id": "BucketPolicy",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::<Account A>:role/service-role/aws-quicksight-service-role-v0"
          },
          "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectVersion"
          ],
          "Resource": [
            "arn:aws:s3:::cross-account-qstest-bucket",
            "arn:aws:s3:::cross-account-qstest-bucket/*"
          ]
        }
      ]
    }

    **注意:**如果账户 A 中存在 aws-quicksight-s3-consumers-role-v0 角色,请务必改用此角色。将 aws-quicksight-service-role-v0 替换为 aws-quicksight-s3-consumers-role-v0,以避免 Amazon S3 出现连接问题。

  2. 将账户 A 中的 QuickSight 服务角色添加到可以访问 S3 存储桶的 AWS KMS 密钥的用户列表中:

    aws kms create-grant --key-id aws_kms_key_arn --grantee-principal quickSight_role_arn --operations Decrypt
    

**注意:**将 aws_kms_key_arn 替换为您的 AWS KMS 密钥的 ARN,将 quicksight_role_arn 替换为您的 QuickSight 角色的 ARN。

要获取 AWS KMS 密钥 ARN,请执行以下操作:

  1. 打开 Amazon S3 控制台
  2. 前往包含您的数据文件的 S3 存储桶。
  3. 选择属性选项卡。AWS KMS 密钥 ARN 位于默认加密下。

要获得 QuickSight 服务角色 ARN,请执行以下操作:

  1. 在账户 A 中打开 AWS Identity Access Management(IAM)控制台
  2. 在导航窗格中,选择角色
  3. 搜索 aws-quicksight-service-role
  4. 选择您的 QuickSight 服务角色,然后复制其 ARN。

**注意:**如果账户 A 中存在 aws-quicksight-s3-consumers-role-v0 角色,请务必改用此角色。否则,当您尝试连接到 Amazon S3 时,您可能会收到错误。

将 S3 存储桶添加为 QuickSight 服务角色可以访问的资源

要允许 QuickSight 服务角色访问账户 B 中的 S3 存储桶,请完成以下步骤:

  1. 打开您的 Amazon QuickSight 控制台
  2. 选择**管理 QuickSight **。
  3. 选择安全性和权限
  4. 选择添加或删除
  5. 选择详细信息
  6. 选择选择 S3 存储桶
  7. 选择您可以通过 AWS 选项卡访问的 S3 存储桶,以验证您的 S3 存储桶是否已列入 QuickSight 访问权限。
  8. (可选)如果您的 S3 存储桶未列出,请在使用其他存储桶下添加您的存储桶。
  9. 选择完成

允许 QuickSight 服务角色访问 S3 存储桶的 AWS KMS 密钥

将以下内联 IAM 策略添加到账户 A 中的 QuickSight 服务角色中:

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt3",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
        ],
      "Resource": ""arn:aws:kms:us-east-1:<account ID of your S3 bucket>:key/<KEYID>"
    }
  ]
}

**注意:**前面的内联策略允许 QuickSight 服务角色访问您在账户 B 中的 AWS KMS 密钥。将 ExampleStmt3 替换为您的声明 ID。

**重要事项:**如果账户 A 中存在 aws-quicksight-s3-consumers-role-v0 角色,则必须将 AWS KMS 策略附加到该角色。AWS KMS 策略会解密您的 S3 存储桶中的数据。如果您将更新的角色策略附加到您的 QuickSight 服务角色,则可能会遇到权限错误。有关如何解决权限错误的信息,请参阅如何故障排除 Amazon QuickSight 中的 AWS 资源权限错误?

其他注意事项

当您设置从 QuickSight 到另一个账户中的 S3 存储桶的跨账户访问权限时,请考虑以下几点:

相关信息

Editing keys

I can't connect to Amazon S3

Troubleshooting Amazon QuickSight

Viewing a key policy (console)

AWS 官方
AWS 官方已更新 1 年前