View a markdown version of this page

S3 表类数据存储服务 SSE-KMS 加密的权限要求 - Amazon Simple Storage Service

S3 表类数据存储服务 SSE-KMS 加密的权限要求

当您对 S3 表存储桶中的表使用具有 AWS Key Management Service(AWS KMS)密钥的服务器端加密(SSE-KMS)时,您需要为账户中的不同身份授予权限。您的访问身份和 S3 表类数据存储服务维护主体至少需要具有访问您的密钥的权限,所需的其它权限取决于您的应用场景。

所需权限

要访问使用 KMS 密钥加密的表,您需要对该密钥具有以下权限:

  • kms:GenerateDataKey

  • kms:Decrypt

重要

要对表使用 SSE-KMS,Amazon S3 表类数据存储服务维护服务主体 (maintenance.s3tables.amazonaws.com) 需要对密钥具有 kms:GenerateDataKeykms:Decrypt 权限。

其他权限

根据您的应用场景,需要以下附加权限:

  • AWS 分析服务的权限与直接访问:如果您通过 AWS 分析服务或直接访问 S3 表的第三方引擎来处理使用 SSE-KMS 加密的表,则您使用的 IAM 角色需要具有使用 KMS 密钥的权限。

  • 启用 Lake Formation 时的权限:如果您选择加入 AWS Lake Formation 来进行访问控制,那么 Lake Formation 服务角色需要具有使用您的 KMS 密钥的权限。

  • S3 元数据表的权限:如果您对 S3 元数据表使用 SSE-KMS 加密,则需要向 S3 元数据服务主体 (metadata.s3.amazonaws.com) 提供对 KMS 密钥的访问权限。这可让 S3 元数据更新加密的表,这样它们就能够反映您的最新数据更改。

注意

对于跨账户 KMS 密钥,您的 IAM 角色在密钥策略中同时需要密钥访问权限和显式授权。有关 KMS 密钥的跨账户权限的更多信息,请参阅《AWS Key Management Service Service Developer Guide》中的 Allowing external AWS 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 密钥对特定表存储桶中的表进行加密和解密的权限。要使用此策略,请将用户输入占位符替换为您自己的信息:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "EnableKeyUsage", "Effect": "Allow", "Principal": { "Service": "maintenance.s3tables.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id", "Condition": { "StringLike": { "kms:EncryptionContext:aws:s3:arn":"<table-or-table-bucket-arn>/*" } } } ] }

向 IAM 主体授予在集成的 AWS 分析服务中使用加密表的权限

要在 AWS 分析服务中使用 S3 表,可以将表存储桶与 AWS Glue Data Catalog 集成。这种集成支持 AWS 分析服务自动发现和访问表数据。有关集成的更多信息,请参阅将 Amazon S3 表类数据存储服务与 AWS 分析服务集成

当您通过 AWS 分析服务或直接访问 S3 表的第三方和开源引擎来处理使用 SSE-KMS 加密的表时,您使用的 IAM 角色需要具有使用 AWS KMS 密钥进行加密操作的权限。

您可以通过附加到您的角色的 IAM 策略或 KMS 密钥策略来授予 KMS 密钥访问权限。

IAM policy

将此内联策略附加到您用于查询的 IAM 角色,以支持访问 KMS 密钥。将 KMS 密钥 ARN 替换为您自己的 ARN。

{ "Version":"2012-10-17",, "Statement": [ { "Sid": "AllowKMSKeyUsage", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }
KMS key policy

或者,将此语句附加到您的 KMS 密钥策略,以支持指定的 IAM 角色使用密钥。将角色 ARN 替换为您用于查询的 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": "*" }

当启用 Lake Formation 时向 IAM 主体授予使用加密表的权限

如果您已选择加入 AWS Lake Formation 以实现对 S3 表类数据存储服务集成的访问控制,那么 Lake Formation 服务角色需要具有使用 AWS KMS 密钥进行加密操作的权限。Lake Formation 使用此角色代表访问表的主体提供凭证。

以下 KMS 密钥策略示例向 Lake Formation 服务角色授予权限,以便在您的账户中使用特定的 KMS 密钥进行加密操作。请将占位符值替换为您自己的值。

{ "Sid": "AllowTableRoleAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/service-role/S3TablesRoleForLakeFormation" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "<kms-key-arn>" }

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

要支持 Amazon S3 更新通过 SSE-KMS 加密的元数据表并对这些元数据表执行维护,您可以使用以下示例密钥策略。在此策略中,您可以让 metadata.s3.amazonaws.com.rproxy.govskope.camaintenance.s3tables.amazonaws.com 服务主体使用特定密钥对特定表存储桶中的表进行加密和解密。要使用此策略,请将用户输入占位符替换为您自己的信息:

JSON
{ "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": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "StringLike": { "kms:EncryptionContext:aws:s3:arn":"<table-or-table-bucket-arn>/*" } } } ] }