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

上次更新时间:2020 年 12 月 15 日

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

简短描述

要创建从 Amazon QuickSight 到另个一账户中的加密 Amazon S3 存储桶的跨账户访问,请执行以下步骤:

1.    在账户 B(S3 存储桶所在的位置)中更新 Amazon S3 存储桶策略。

2.    将 Amazon S3 存储桶(账户 B)添加为 Amazon QuickSight 服务角色(账户 A)可访问的资源。

3.    允许您的 Amazon QuickSight 服务角色(账户 A)访问 Amazon S3 存储桶(账户 B)的 KMS 密钥。

注意:本文假定您的 Amazon S3 存储桶已加密。 最佳实践还包括使用 KMS 密钥对您的 Amazon S3 存储桶进行加密。有关更多信息,请参阅如何为 Amazon S3 存储桶启用默认加密?

解决方法

在账户 B(S3 存储桶所在的位置)中更新 Amazon S3 存储桶策略

要设置从 Amazon QuickSight 到 Amazon S3 的跨账户访问,请执行以下步骤:

1.    采用这种方式更新 Amazon S3 存储桶的存储桶策略(在账户 B 中):

{
    "Version": "2012-10-17",
    "Id": "BukcetPolicy",
    "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/*"
            ]
        }
    ]
}

2.    将您的 Amazon Quicksight 服务角色(来自账户 A)添加到可访问 Amazon S3 存储桶的 KMS 密钥的用户列表中:

aws kms create-grant --key-id <KMS key ARN> --grantee-principal <Amazon QuickSight Role ARN> --operations Decrypt
注意:要获取 KMS 密钥 ARN,请打开 Amazon S3 控制台。转到包含数据文件的 Amazon S3 存储桶,然后选择 Properties(属性)选项卡。密钥 ARN 位于 Default encryption(默认加密)下。

要获取 Amazon QuickSight 服务角色 ARN,请在 Amazon QuickSight 订阅所在的账户 A 中打开 AWS Identity Access Management (IAM) 控制台。从左侧的导航窗格中选择 Roles(角色)。搜索 aws-quicksight-service-role,然后选择您的 Amazon QuickSight 服务角色。复制服务角色 ARN。

将 Amazon S3 存储桶(账户 B)添加为 Amazon QuickSight 服务角色(账户 A)可访问的资源

要允许您的 Amazon QuickSight 服务角色访问另一个账户中的 Amazon S3 存储桶,请执行以下步骤:

1.    打开您的 IAM 控制台

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 存储桶已列入 Amazon QuickSight 访问权限。

8.    (可选)如果您的 Amazon S3 存储桶未列出,请在 Use a different bucket(使用不同的存储桶)下添加您的存储桶。

9.    选择 Finish(完成)。

允许 Amazon QuickSight 服务角色(账户 A)访问 Amazon S3 存储桶(账户 B)的 KMS 密钥

向账户 A 中的 Amazon 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>"
        }
    ]
}

此更新的策略允许 Amazon QuickSight 服务角色访问 Amazon S3 存储桶所在的账户 B 中的 KMS 密钥。确保以内联方式添加策略。

如果您是将更新的角色策略附加到 Amazon QuickSight 服务角色,则可能会遇到权限错误。有关如何解决此权限错误的信息,请参阅如何排查 Amazon QuickSight 中的 AWS 资源权限错误?

其他注意事项

下面是一些其他注意事项: