如何设置从 Amazon QuickSight 到另一个账户中 Amazon S3 存储桶的跨账户存取?
我正在尝试使用来自另一个账户中 Amazon Simple Storage Service(Amazon S3)存储桶的数据在 Amazon QuickSight 中创建数据集。我该如何操作?
简短描述
完成以下步骤以创建从 Amazon QuickSight(账户 A)到另一个账户(账户 B)中的加密 Amazon S3 存储桶的跨账户存取:
- 在账户 B(S3 存储桶所在的位置)中更新 S3 存储桶策略。
- 将该 S3 存储桶添加为 QuickSight 服务角色(账户 A)可访问的资源。
- 允许 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,请执行如下操作:
- 打开 Amazon S3 控制台。
- 转到包含数据文件的 S3 存储桶。
- 选择 Properties(属性)选项卡。AWS KMS 密钥 ARN 位于 Default encryption(默认加密)下。
要获取您的 QuickSight 服务角色 ARN,请执行如下操作:
- 在账户 A 中,打开 AWS Identity Access Management (IAM) 控制台。
- 从左侧导航窗格中选择 Roles(角色)。
- 搜索 aws-quicksight-service-role。
- 选择您的 QuickSight 服务角色,然后复制其 ARN。
**注意:**如果账户 A 中存在 aws-quicksight-s3-consumers-role-v0 角色,请确保改用此角色。否则,当您尝试连接到 Amazon S3 时,可能会收到错误消息。
将 S3 存储桶添加为 QuickSight 服务角色可以访问的资源
要允许 QuickSight 服务角色访问账户 B 中的 S3 存储桶,请完成以下步骤:
- 打开 Amazon QuickSight 控制台。
- 选择 Manage QuickSight(管理 QuickSight)。
- 选择 Security & permissions(安全性和权限)。
- 选择 Add or remove(添加或删除)。
- 选择 Details(详细信息)。
- 选择 Select S3 buckets(选择 S3 存储桶)。
- 选择 S3 buckets that you can access across AWS(您可以跨 AWS 访问的 S3 存储桶)选项卡,以验证您的 S3 存储桶已列入 QuickSight 访问权限。
- **(可选)**如果您的 S3 存储桶未列出,则在 Use a different bucket(使用不同的存储桶)下添加您的存储桶。
- 选择 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 存储桶时,请考虑以下事项:
- 检查您的 QuickSight 账户中的 IAM 策略分配。IAM 角色策略必须授予 QuickSight 服务角色访问 S3 存储桶的权限。有关查看策略分配的更多信息,请参阅通过 IAM 设置对 AWS 服务的粒度访问。
- 使用清单文件连接到 S3 存储桶并使用 S3 文件创建数据集。确保使用 S3 清单文件支持的格式。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 8 个月前
- AWS 官方已更新 4 个月前
- AWS 官方已更新 9 个月前