跨 AWS 账户注册加密的 Amazon S3 位置 - AWS Lake Formation

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

跨 AWS 账户注册加密的 Amazon S3 位置

AWS Lake Formation 与 AWS Key Management Service (AWS KMS) 集成,使您能够更轻松地设置其他集成服务,以加密和解密 Amazon Simple Storage Service (Amazon S3) 位置中的数据。

同时支持客户自主管理型密钥和 AWS 托管式密钥。不支持客户端加密/解密。

重要

避免注册启用了请求者付费的 Amazon S3 存储桶。对于在 Lake Formation 中注册的存储桶,用于注册存储桶的角色始终被视为请求者。如果存储桶由其他 AWS 账户访问,则当该角色与存储桶拥有者属于同一个账户时,存储桶拥有者需要支付数据访问费用。

本部分介绍如何在以下情况下注册 Amazon S3 位置:

  • Amazon S3 位置中的数据使用在 AWS KMS 中创建的 KMS 密钥进行加密。

  • Amazon S3 位置与 AWS Glue Data Catalog 不在同一个 AWS 账户中。

  • KMS 密钥与该数据目录位于或不位于同一个 AWS 账户中。

使用 AWS 账户 A 中的 AWS Identity and Access Management (IAM) 角色在 AWS 账户 B 中注册 AWS KMS 加密的 Amazon S3 存储桶需要以下权限:

  • 账户 A 中的角色必须授予对账户 B 中存储桶的权限。

  • 账户 B 中的存储桶策略必须向账户 A 中的角色授予访问权限。

  • 如果 KMS 密钥位于账户 B 中,则密钥策略必须向账户 A 中的角色授予访问权限,并且账户 A 中的角色必须授予对 KMS 密钥的权限。

在以下过程中,您将在包含数据目录的 AWS 账户(前面讨论中的账户 A)中创建一个角色。然后,使用此角色注册位置。Lake Formation 在访问 Amazon S3 中的基础数据时代入此角色。代入的角色具有对 KMS 密钥的所需权限。因此,您不必向使用 ETL 作业或集成服务(如 Amazon Athena)访问基础数据的主体授对 KMS 密钥的权限。

重要

您不能使用 Lake Formation 服务相关角色在其他账户中注册位置。您必须改用用户定义的角色。该角色必须符合用于注册位置的角色的要求中的要求。有关服务相关角色的更多信息,请参阅 Lake Formation 的服务相关角色权限

开始前的准备工作

查看用于注册位置的角色的要求

跨 AWS 账户注册加密的 Amazon S3 位置
  1. 在与数据目录相同的 AWS 账户中,登录 AWS Management Console并通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 创建新角色或查看符合用于注册位置的角色的要求中要求的现有角色。确保该角色包含授予对该位置的 Amazon S3 权限的策略。

  3. 如果 KMS 密钥与数据目录不在同一账户中,请向该角色附加一个内联策略,该策略授予对 KMS 密钥的所需权限。以下是示例策略。将 <cmk-region><cmk-account-id> 替换为 KMS 密钥所在的区域和账号。将 <key-id> 替换为密钥 ID。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:<cmk-region>:<cmk-account-id>:key/<key-id>" } ] }
  4. 在 Amazon S3 控制台上,添加存储桶策略,该策略向该角色授予所需的 Amazon S3 权限。下面是一个示例存储桶策略。将 <catalog-account-id> 替换为数据目录的 AWS 账号,将 <role-name> 替换为您的角色的名称,并将 <bucket-name> 替换为存储桶的名称。

    { "Version": "2012-10-17", "Statement": [ { "Effect":"Allow", "Principal": { "AWS":"arn:aws:iam::<catalog-account-id>:role/<role-name>" }, "Action":"s3:ListBucket", "Resource":"arn:aws:s3:::<bucket-name>" }, { "Effect":"Allow", "Principal": { "AWS":"arn:aws:iam::<catalog-account-id>:role/<role-name>" }, "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:PutObject" ], "Resource":"arn:aws:s3:::<bucket-name>/*" } ] }
  5. 在 AWS KMS 中,将该角色添加为 KMS 密钥的用户。

    1. https://console.aws.amazon.com/kms 打开 AWS KMS 控制台。然后,以管理员用户或可以修改用于加密位置的 KMS 密钥策略的用户身份登录。

    2. 在导航窗格中,选择客户自主管理型密钥,然后选择 KMS 密钥的名称。

    3. 在“KMS 密钥详细信息”页面的密钥策略选项卡下,如果未显示密钥策略的 JSON 视图,请选择切换到策略视图

    4. 密钥策略部分中,选择编辑,然后将该角色的 Amazon 资源名称 (ARN) 添加到 Allow use of the key 对象,如以下示例所示。

      注意

      如果缺少该对象,请使用示例中显示的权限添加该对象。

      ... { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<catalog-account-id>:role/<role-name>" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, ...

      有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的允许其他账户中的用户使用 KMS 密钥

  6. 通过 https://console.aws.amazon.com/lakeformation/ 打开 AWS Lake Formation 控制台。以数据湖管理员身份登录数据目录 AWS 账户。

  7. 在导航窗格的管理下,选择数据湖位置

  8. 选择注册位置

  9. 注册位置页面上,对于 Amazon S3 路径,输入位置路径 s3://<bucket>/<prefix>。将 <bucket> 替换为存储桶的名称,并将 <prefix> 替换为该位置路径的其余部分。

    注意

    您必须键入该路径,因为当您选择浏览时,跨账户存储桶不会显示在列表中。

  10. 对于 IAM 角色,从步骤 2 中选择角色。

  11. 选择注册位置