使用分批操作、REST API、Amazon 软件开发工具包或 Amazon CLI 在对象级别配置 S3 存储桶密钥
当您使用 REST API、Amazon 软件开发工具包或 Amazon CLI 执行 PUT 或 COPY 操作时,您可以在对象级别启用或禁用 S3 存储桶密钥。S3 存储桶密钥通过减少从 Amazon S3 到 Amazon KMS 的请求流量,降低了使用 Amazon Key Management Service (Amazon KMS) (SSE-KMS) 进行服务器端加密的成本。有关更多信息,请参阅使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本。
当您使用 PUT 或 COPY 操作为对象配置 S3 存储桶密钥时,Amazon S3 仅更新该对象的设置。目标存储桶的 S3 存储桶密钥设置不会更改。如果您未为对象指定 S3 存储桶密钥,则 Amazon S3 会将目标存储桶的 S3 存储桶密钥设置应用于该对象。
先决条件:
在将对象配置为使用 S3 存储桶密钥之前,请查看 启用 S3 存储桶密钥之前需要注意的更改。
Amazon S3 分批操作
要加密现有 Amazon S3 对象,可以使用 Amazon S3 分批操作。您为 S3 分批操作提供了要操作的对象列表,而分批操作调用相应的 API 来执行指定的操作。您可以使用 S3 分批操作复制操作复制现有的未加密对象,并将其作为加密对象写回同一存储桶。单个分批操作作业可对数十亿个对象执行指定操作。有关更多信息,请参阅 对 Amazon S3 对象执行大规模分批操作 和 使用 Amazon S3 分批操作加密对象
使用 REST API
使用 SSE-KMS 时,您可以使用以下 API 为对象启用 S3 存储桶密钥:
-
PutObject – 上传对象时,您可以指定
x-amz-server-side-encryption-bucket-key-enabled
请求标头以在对象级别启用或禁用 S3 存储桶密钥。 -
CopyObject – 当您复制对象并配置 SSE-KMS 时,您可以指定
x-amz-server-side-encryption-bucket-key-enabled
请求标头以为对象启用或禁用 S3 存储桶密钥。 -
PostObject – 当您使用 POST 操作上传对象并配置 SSE-KMS 时,您可以可以使用
x-amz-server-side-encryption-bucket-key-enabled
表单字段为对象启用或禁用 S3 存储桶密钥。 CreateMultipartUpload – 当您使用分段上传 API 上载大型对象并配置 SSE-KMS 时,您可以使用
x-amz-server-side-encryption-bucket-key-enabled
请求标头为对象启用或禁用 S3 存储桶密钥。
要在对象级别启用 S3 存储桶密钥,请包含 x-amz-server-side-encryption-bucket-key-enabled
请求标头。有关 SSE-KMS 和 REST API 的更多信息,请参阅 使用 REST API。
使用适用于 Java 的 Amazon 软件开发工具包 (PutObject)
您可以使用以下示例通过 Amazon SDK for Java 在对象级别配置 S3 存储桶密钥。
使用 Amazon CLI (PutObject)
您可以使用以下 Amazon CLI 示例作为 PutObject
请求的一部分在对象级别配置 S3 存储桶密钥。
aws s3api put-object --bucket <bucket name> --key <object key name> --server-side-encryption aws:kms --bucket-key-enabled --body <filepath>