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

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

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

AWS Lake Formation 与 AWS Key Management Service(AWS KMS) 集成,使您能够更轻松地设置其他集成服务,以加密和解密亚马逊简单存储服务 (Amazon S3) 中的数据。

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

重要

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

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

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

  • Amazon S3 的营业地点与不在同一个 AWS 账户中 AWS Glue Data Catalog。

  • KMS密钥要么与数据目录在同一个 AWS 账户中,要么不在同一个账户中。

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

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

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

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

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

重要

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

开始前的准备工作

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

跨 AWS 账户注册加密的 Amazon S3 营业地点
  1. 使用与数据目录相同的 AWS 账户,登录 AWS Management Console 并打开IAM控制台https://console.aws.amazon.com/iam/

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

  3. 如果KMS密钥与数据目录不在同一个账户中,则向该角色添加授予KMS密钥所需权限的内联策略。以下是示例策略。Replace(替换) <cmk-region> 以及 <cmk-account-id> 以及KMS密钥的地区和账号。Replace(替换) <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 权限。下面是一个示例存储桶策略。Replace(替换) <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/km AWS KMS s 处打开控制台。然后,以管理员用户或可以修改用于加密位置的密钥策略的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. 打开 AWS Lake Formation 控制台,网址为https://console.aws.amazon.com/lakeformation/。以数据湖管理员身份登录数据目录 AWS 账户。

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

  8. 选择注册位置

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

    注意

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

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

  11. 选择注册位置