使用分批操作、REST API、Amazon 软件开发工具包或 Amazon CLI 在对象级别配置 S3 Bucket 密钥 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用分批操作、REST API、Amazon 软件开发工具包或 Amazon CLI 在对象级别配置 S3 Bucket 密钥

当您使用 REST API、Amazon 软件开发工具包或 Amazon CLI 执行 PUT 或 COPY 操作时,您可以在对象级别启用或禁用 S3 Bucket 密钥。S3 Bucket 密钥通过减少从 Amazon S3 到 Amazon KMS 的请求流量,降低了使用 Amazon Key Management Service (Amazon KMS) (SSE-KMS) 进行服务器端加密的成本。有关更多信息,请参阅使用 Amazon S3 Bucket 密钥降低 SSE-KMS 的成本

当您使用 PUT 或 COPY 操作为对象配置 S3 Bucket 密钥时,Amazon S3 仅更新该对象的设置。目标存储桶的 S3 Bucket 密钥设置不会更改。如果您未为对象指定 S3 Bucket 密钥,则 Amazon S3 会将目标存储桶的 S3 Bucket 密钥设置应用于该对象。

先决条件:

在将对象配置为使用 S3 Bucket 密钥之前,请查看 启用 S3 Bucket 密钥之前需要注意的更改

Amazon S3 分批操作

要加密现有 Amazon S3 对象,可以使用 Amazon S3 分批操作。您为 S3 分批操作提供了要操作的对象列表,而分批操作调用相应的 API 来执行指定的操作。您可以使用 S3 分批操作复制操作复制现有的未加密对象,并将其作为加密对象写回同一存储桶。单个分批操作作业可对数十亿个对象执行指定操作。有关更多信息,请参阅 对 Amazon S3 对象执行大规模分批操作使用 Amazon S3 分批操作加密对象

使用 REST API

使用 SSE-KMS 时,您可以使用以下 API 为对象启用 S3 Bucket 密钥:

  • PutObject – 上传对象时,您可以指定 x-amz-server-side-encryption-bucket-key-enabled 请求标头以在对象级别启用或禁用 S3 Bucket 密钥。

  • CopyObject – 当您复制对象并配置 SSE-KMS 时,您可以指定 x-amz-server-side-encryption-bucket-key-enabled 请求标头以为对象启用或禁用 S3 Bucket 密钥。

  • PostObject – 当您使用 POST 操作上传对象并配置 SSE-KMS 时,您可以可以使用 x-amz-server-side-encryption-bucket-key-enabled 表单字段为对象启用或禁用 S3 Bucket 密钥。

  • CreateMultipartUpload – 当您使用分段上传 API 上载大型对象并配置 SSE-KMS 时,您可以使用 x-amz-server-side-encryption-bucket-key-enabled 请求标头为对象启用或禁用 S3 Bucket 密钥。

要在对象级别启用 S3 Bucket 密钥,请包含 x-amz-server-side-encryption-bucket-key-enabled 请求标头。有关 SSE-KMS 和 REST API 的更多信息,请参阅 使用 REST API

使用适用于 Java 的 Amazon 软件开发工具包 (PutObject)

您可以使用以下示例通过 Amazon SDK for Java 在对象级别配置 S3 Bucket 密钥。

Java
AmazonS3 s3client = AmazonS3ClientBuilder.standard()     .withRegion(Regions.DEFAULT_REGION)     .build(); String bucketName = "bucket name"; String keyName = "key name for object"; String contents = "file contents"; PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, contents)     .withBucketKeyEnabled(true);      s3client.putObject(putObjectRequest);

使用 Amazon CLI (PutObject)

您可以使用以下 Amazon CLI 示例作为 PutObject 请求的一部分在对象级别配置 S3 Bucket 密钥。

aws s3api put-object --bucket <bucket name> --key <object key name> --server-side-encryption aws:kms --bucket-key-enabled --body <filepath>