如何设置从 Amazon QuickSight 到另一个账户中 Amazon S3 存储桶的跨账户存取?

上次更新时间:2022 年 8 月 2 日

我正在尝试使用来自另一个账户中 Amazon Simple Storage Service(Amazon S3)存储桶的数据在 Amazon QuickSight 中创建数据集。我该如何操作?

简短描述

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

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

注意:本文假定您的 S3 存储桶已加密。最佳实践还包括使用 AWS KMS 密钥对您的 S3 存储桶进行加密。有关如何为 S3 启用默认加密的更多信息,请参阅启用 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.    将 QuickSight 服务角色(来自账户 A)添加到可访问 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. 选择 Properties(属性)选项卡。AWS KMS 密钥 ARN 位于 Default encryption(默认加密)下。

要获取您的 QuickSight 服务角色 ARN,请执行如下操作:

  1. 在账户 A 中,打开 AWS Identity Access Management (IAM) 控制台
  2. 从左侧导航窗格中选择 Roles(角色)。
  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. 选择 Manage QuickSight(管理 QuickSight)。
  3. 选择 Security & permissions(安全性和权限)。
  4. 选择 Add or remove(添加或删除)。
  5. 选择 Details(详细信息)。
  6. 选择 Select S3 buckets(选择 S3 存储桶)。
  7. 选择 S3 buckets that you can access across AWS(您可以跨 AWS 访问的 S3 存储桶)选项卡,以验证您的 S3 存储桶已列入 QuickSight 访问权限。
  8. (可选)如果您的 S3 存储桶未列出,则在 Use a different bucket(使用不同的存储桶)下添加您的存储桶。
  9. 选择 Finish(完成)。

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

向账户 A 中的 QuickSight 服务角色 Add the following in-line IAM policy(添加以下内联 IAM 策略):

{
  "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 存储桶时,请考虑以下事项: