在表存储桶中指定具有 AWS KMS 密钥的服务器端加密(SSE-KMS) - Amazon Simple Storage Service

在表存储桶中指定具有 AWS KMS 密钥的服务器端加密(SSE-KMS)

默认情况下,所有 Amazon S3 表存储桶都配置了加密,所有在表存储桶中创建的新表都会自动静态加密。具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)是每个表存储桶的默认加密配置。如果您要指定不同的加密类型,可以使用具有 AWS Key Management Service(AWS KMS)密钥的服务器端加密(SSE-KMS)。

可以在 CreateTableBucketCreateTable 请求中指定 SSE-KMS 加密,也可以在 PutTableBucketEncryption 请求中设置表存储桶中的默认加密配置。

重要

要支持对通过 SSE-KMS 加密的表和表存储桶进行自动维护,您必须向 maintenance.s3tables.amazonaws.com 服务主体授予使用 KMS 密钥的权限。有关更多信息,请参阅 S3 表类数据存储服务 SSE-KMS 加密的权限要求

为表存储桶指定加密

在创建新的表存储桶时,您可以指定 SSE-KMS 作为默认加密类型,有关示例,请参阅创建表存储桶。创建表存储桶后,您可以使用 REST API 操作、AWS SDK 和 AWS Command Line Interface(AWS CLI)来指定将 SSE-KMS 用作默认加密设置。

注意

当您将 SSE-KMS 指定为默认加密类型时,用于加密的密钥必须支持访问 S3 表类数据存储服务维护服务主体。如果维护服务主体没有访问权限,您将无法在该表存储桶中创建表。有关更多信息,请参阅 向 S3 表类数据存储服务维护服务主体授予对 KMS 密钥的权限

要使用以下示例 AWS CLI 命令,请将用户输入占位符替换为您自己的信息。

aws s3tables put-table-bucket-encryption \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket; \ --encryption-configuration '{ "sseAlgorithm": "aws:kms", "kmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }' \ --region us-east-1

您可以使用 DeleteTableBucketEncryption API 操作移除表存储桶的默认加密设置。移除加密设置后,在表存储桶中创建的新表将使用默认的 SSE-S3 加密。

为表指定加密

在使用查询引擎、REST API 操作、AWS SDK 和 AWS Command Line Interface(AWS CLI)创建新表时,可以对该表应用 SSE-KMS 加密。您在创建表时指定的加密设置优先于表存储桶的默认加密设置。

注意

对表使用 SSE-KMS 加密时,用于加密的密钥必须支持 S3 表类数据存储服务维护服务主体访问该表。如果维护服务主体没有访问权限,您将无法创建表。有关更多信息,请参阅 向 S3 表类数据存储服务维护服务主体授予对 KMS 密钥的权限

所需权限

创建加密表需要以下权限

  • s3tables:CreateTable

  • s3tables:PutTableEncryption

以下 AWS CLI 示例使用基本架构创建一个新表,并使用客户自主管理型 AWS KMS 密钥对其进行加密。要使用该命令,请将用户输入占位符 替换为您自己的信息。

aws s3tables create-table \ --table-bucket-arn "arn:aws:s3tables:Region:ownerAccountId:bucket/amzn-s3-demo-table-bucket" \ --namespace "mydataset" \ --name "orders" \ --format "ICEBERG" \ --encryption-configuration '{ "sseAlgorithm": "aws:kms", "kmsKeyArn": "arn:aws:kms:Region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }' \ --metadata '{ "iceberg": { "schema": { "fields": [ { "name": "order_id", "type": "string", "required": true }, { "name": "order_date", "type": "timestamp", "required": true }, { "name": "total_amount", "type": "decimal(10,2)", "required": true } ] } } }'