S3 表类数据存储服务 SSE-KMS 加密的权限要求 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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:GenerateDataKeykms: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 密钥策略授予访问权限。

IAM policy

将此内联策略附加到您的 IAM 角色,以支持访问 KMS 密钥。要使用此策略,请将输入占位符值替换为您自己的 KMS 密钥 arn。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "<kms-key-arn>" } ] }
KMS key policy

将此内联策略附加到 KMS 密钥,以让指定的 Amazon KMS 角色使用该密钥。要使用此策略,请将输入占位符值替换为您的 IAM 角色。

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

向 S3 元数据服务主体授予使用您的 KMS 密钥的权限

要支持 Amazon S3 更新通过 SSE-KMS 加密的元数据表并对这些元数据表执行维护,您可以使用以下示例密钥策略。在此策略中,您可以让 metadata.s3.amazonaws.commaintenance.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>/*" } } } ] }