跨 Amazon 账户注册加密的 Amazon S3 位置 - Amazon Lake Formation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

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

重要

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

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

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

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

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

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

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

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

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

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

重要

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

开始前的准备工作

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

跨 Amazon 账户注册加密的 Amazon S3 位置
  1. 在与数据目录相同的 Amazon 账户中,登录 Amazon Web Services 管理控制台并通过 https://console.amazonaws.cn/iam/ 打开 IAM 控制台。

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

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

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

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

    1. https://console.aws.amazon.com/kms 打开 Amazon 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": "*" }, ...

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

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

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

  8. 选择注册位置

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

    注意

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

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

  11. 选择注册位置