S3 表类数据存储服务 SSE-KMS 加密的权限要求
当您对 S3 表存储桶中的表使用具有 Amazon Key Management Service(Amazon KMS)密钥的服务器端加密(SSE-KMS)时,您需要为账户中的不同身份授予权限。您的访问身份和 S3 表类数据存储服务维护主体至少需要具有访问您的密钥的权限,所需的其它权限取决于您的应用场景。
- 所需权限
要访问使用 KMS 密钥加密的表,您需要对该密钥具有以下权限:
kms:GenerateDataKey
kms:Decrypt
重要
要对表使用 SSE-KMS,Amazon S3 表类数据存储服务维护服务主体 (
maintenance.s3tables.amazonaws.com
) 需要对密钥具有kms:GenerateDataKey
和kms:Decrypt
权限。- 其他权限
-
根据您的应用场景,需要以下附加权限:
Amazon 分析服务集成的权限:如果您在 Amazon 分析服务中使用由 SSE-KMS 加密的表,则集成角色需要具有使用 KMS 密钥的权限。
直接访问的权限:如果您通过诸如 Amazon S3 表类数据存储服务 Iceberg REST 端点或适用于 Apache Iceberg 的 Amazon S3 表类数据存储服务目录之类的方法直接使用由 SSE-KMS 加密的表,则需要向客户端使用的 IAM 角色授予访问您的密钥的权限。
S3 元数据表的权限:如果您对 S3 元数据表使用 SSE-KMS 加密,则需要向 S3 元数据服务主体 (
metadata.s3.amazonaws.com
) 提供对 KMS 密钥的访问权限。这可让 S3 元数据更新加密的表,这样它们就能够反映您的最新数据更改。
注意
对于跨账户 KMS 密钥,您的 IAM 角色在密钥策略中同时需要密钥访问权限和显式授权。有关 KMS 密钥的跨账户权限的更多信息,请参阅《Amazon Key Management Service Service Developer Guide》中的 Allowing external Amazon accounts to use a KMS key。
主题
向 S3 表类数据存储服务维护服务主体授予对 KMS 密钥的权限
需要此权限才能创建通过 SSE-KMS 加密的表,并支持对加密的表进行自动表维护,例如压缩、快照管理和未引用文件移除。
注意
每当您发出请求来创建通过 SSE-KMS 加密的表时,S3 表类数据存储服务都会进行检查,以确保 maintenance.s3tables.amazonaws.com
主体有权访问您的 KMS 密钥。要执行此检查,需要在表存储桶中临时创建一个零字节对象,而未引用文件移除维护操作将自动移除该对象。如果您为加密指定的 KMS 密钥没有维护访问权限,则 createTable 操作将失败。
要授予对通过 SSE-KMS 加密的表的维护访问权限,您可以使用以下示例密钥策略。在此策略中,向 maintenance.s3tables.amazonaws.com
服务主体授予使用特定 KMS 密钥对特定表存储桶中的表进行加密和解密的权限。要使用此策略,请将用户输入占位符
替换为您自己的信息:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnableKeyUsage", "Effect": "Allow", "Principal": { "Service": "maintenance.s3tables.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "
<kms-key-arn>
", "Condition": { "StringLike": { "kms:EncryptionContext:aws:s3:arn":"<table-or-table-bucket-arn>
/*" } } } ] }
向 IAM 主体授予在集成的 Amazon 分析服务中使用加密表的权限
要在 Amazon 分析服务中使用 S3 表,可以将表存储桶与 Amazon SageMaker 智能湖仓集成。这种集成支持 Amazon 分析服务自动发现和访问表数据。有关集成的更多信息,请参阅将 Amazon S3 表类数据存储服务与 Amazon 分析服务结合使用。
当您在这些服务中使用通过 SSE-KMS 加密的表时,您使用的角色需要拥有使用 Amazon KMS 密钥进行加密操作的权限。您可以将这些权限应用于在集成期间创建的 S3TablesRoleForLakeFormation
角色或您自己的 IAM 角色。
以下内联 IAM 策略示例可用于向 S3TablesRoleForLakeFormation
服务角色授予使用您账户中的特定 KMS 密钥进行加密操作的权限。要使用此策略,请将输入占位符值
替换为您自己的信息。
{ "Sid": "AllowTableRoleAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
111122223333
:role/service-role/S3TablesRoleForLakeFormation" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "<kms-key-arn>
" }
向 IAM 主体授予直接使用加密表的权限
当您通过第三方或直接访问方法处理加密表时,必须向您使用的角色授予对 KMS 密钥的访问权限。以下示例说明如何通过 IAM 策略或 KMS 密钥策略授予访问权限。
向 S3 元数据服务主体授予使用您的 KMS 密钥的权限
要支持 Amazon S3 更新通过 SSE-KMS 加密的元数据表并对这些元数据表执行维护,您可以使用以下示例密钥策略。在此策略中,您可以让 metadata.s3.amazonaws.com
和 maintenance.s3tables.amazonaws.com
服务主体使用特定密钥对特定表存储桶中的表进行加密和解密。要使用此策略,请将用户输入占位符
替换为您自己的信息:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnableKeyUsage", "Effect": "Allow", "Principal": { "Service": [ "maintenance.s3tables.amazonaws.com", "metadata.s3.amazonaws.com" ] }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "
<kms-key-arn>
", "Condition": { "StringLike ": { "kms:EncryptionContext:aws:s3:arn": "<table-or-table-bucket-arn>
/*" } } } ] }