使用 Amazon KMS (SSE-KMS) 指定服务器端加密
创建对象时,可以指定使用借助 Amazon Key Management Service (Amazon KMS) 密钥进行的服务器端加密来加密您的数据。这种加密称为 SSE-KMS。当您上载新对象或复制现有对象时,您可以应用加密。
您可以使用 Amazon S3 控制台、REST API 操作、Amazon 软件开发工具包和 Amazon Command Line Interface (Amazon CLI) 指定 SSE-KMS。有关更多信息,请参阅以下主题。
注意
您可以在 Amazon S3 中使用多区域 Amazon KMS keys。但是,Amazon S3 目前将多区域密钥视为单区域密钥,且不使用密钥的多区域功能。有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的使用多区域密钥。
本主题描述如何使用 Amazon S3 控制台设置或更改对象的加密类型。
注意
如果更改对象的加密,则会创建一个新对象来替换旧对象。如果启用 S3 版本控制,则会创建对象的新版本,而现有对象将变为旧版本。更改属性的角色也会成为新对象或(对象版本)的拥有者。
添加或更改对象的加密
-
登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在 Bucket(存储桶) 列表中,请选择包含对象的存储桶的名称。
-
在 Objects(对象) 列表中,请选择要为其添加或更改加密的对象的名称。
Object overview(对象概述)随即打开,其中显示对象的属性。
-
在 Server-side encryption settings (服务器端加密设置) 下,请选择 Edit (编辑)。
Edit server-side encryption (编辑服务器端加密) 页随即打开
-
要为对象启用服务器端加密,请在 Server-side encryption (服务器端加密) 下选择 Enable (启用)。
-
在 Encryption key type (加密密钥类型) 下,请选择 Amazon Key Management Service key (SSE-KMS) (Amazon Key Management Service 密钥(SSE-KMS))。
重要
如果您将 Amazon KMS 选项用于默认加密配置,则您将受到 Amazon KMS 的 RPS(每秒请求数)限制。有关 Amazon KMS 限制以及如何请求提高限制的更多信息,请参阅 Amazon KMS 限制。
-
在 Amazon KMS key (Amazon KMS 密钥) 下,请选择以下选项之一:
-
Amazon 托管密钥 (aws/s3)
-
从 Amazon KMS keys 中选择,然后选择 KMS key (KMS 密钥)。
-
输入 KMS 主密钥 ARN,然后输入您的 Amazon KMS 密钥 Amazon Resource Name (ARN)。
重要
您只能使用在与存储桶所在区域相同的Amazon Web Services 区域中启用的 Amazon KMS keys。当从您的 Amazon KMS keys 中选择时,S3 控制台仅对每个区域列出 100 个 KMS 密钥。如果您在同一区域中有超过 100 个 KMS 密钥,您只会在 S3 控制台中看到前 100 个 KMS 密钥。要使用控制台中未列出的 KMS CMK,请选择自定义 KMS ARN,然后输入相应的 KMS 密钥 ARN。
在 Amazon S3 中使用 Amazon KMS key 进行服务器端加密时,您必须选择与存储桶所在同一区域中启用的 KMS 密钥。此外,Amazon S3 仅支持对称加密 KMS 密钥,不支持非对称 KMS 密钥。有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的使用对称和非对称密钥。
有关创建 Amazon KMS key 的更多信息,请参阅 Amazon Key Management Service 开发人员指南中的创建密钥。有关将 Amazon KMS 与 Amazon S3 结合使用的更多信息,请参阅 使用具有 Amazon Key Management Service 的服务器端加密(SSE-KMS)。
-
选择保存更改。
注意
此操作将加密应用于所有指定的对象。加密文件夹时,请等待保存操作完成,然后再将新对象添加到文件夹。
创建对象时(即上载新对象或复制现有对象时),您可以指定通过使用 Amazon KMS keys 的服务器端加密来加密数据。为此,请将 x-amz-server-side-encryption
标头添加到请求。将标头的值设置为加密算法 aws:kms
。Amazon S3 通过返回响应标头 x-amz-server-side-encryption
来确认已使用 SSE-KMS 存储您的对象。
如果您指定值为 aws:kms
的 x-amz-server-side-encryption
标头,则还可以使用以下请求标头:
-
x-amz-server-side-encryption-aws-kms-key-id
-
x-amz-server-side-encryption-context
-
x-amz-server-side-encryption-bucket-key-enabled
主题
支持 SSE-KMS 的 Amazon S3 REST API 操作
以下 REST API 操作接受 x-amz-server-side-encryption
、x-amz-server-side-encryption-aws-kms-key-id
和 x-amz-server-side-encryption-context
请求标头。
使用服务器端加密存储对象后,以下 REST API 操作的响应标头将返回 x-amz-server-side-encryption
标头。
重要
-
如果您不让针对受 Amazon KMS 保护的对象的所有 GET 和 PUT 请求使用安全套接字层 (SSL)、传输层安全性 (TLS) 或签名版本 4,所有这些请求都将失败。
-
如果对象使用 SSE-KMS,则不应对
GET
请求和HEAD
请求发送加密请求标头,否则将显示HTTP 400 BadRequest
错误。
密上下文 (x-amz-server-side-encryption-context)
如果您指定 x-amz-server-side-encryption:aws:kms
,Amazon S3 API 将支持带有 x-amz-server-side-encryption-context
标头的加密上下文。加密上下文是一组键值对,其中包含有关数据的其他上下文信息。
Amazon S3 会自动使用对象或存储桶 Amazon Resource Name (ARN) 作为加密上下文对。如果您在不启用 S3 存储桶密钥的情况下使用 SSE-KMS,则将对象 ARN 用作加密上下文,例如,arn:aws:s3:::
。但是,如果您在启用 S3 Bucket 密钥的情况下使用 SSE-KMS,则将存储桶 ARN 用于加密上下文,例如,object_ARN
arn:aws:s3:::
。bucket_ARN
您可以选择使用 x-amz-server-side-encryption-context
标头提供其他的加密上下文对。但是,由于加密上下文未加密,请确保它不包含敏感信息。Amazon S3 将此额外的密钥对与默认加密上下文一起存储。
有关 Amazon S3 中加密上下文的信息,请参阅 加密上下文。有关加密上下文的一般信息,请参阅 Amazon Key Management Service 开发人员指南中的 Amazon Key Management Service 概念 - 加密上下文。
Amazon KMS 密钥 ID (x-amz-server-side-encryption-aws-kms-key-id)
您可以使用 x-amz-server-side-encryption-aws-kms-key-id
标头指定用于保护数据的客户托管密钥的 ID。如果您指定 x-amz-server-side-encryption:aws:kms
,但未提供 x-amz-server-side-encryption-aws-kms-key-id
,Amazon S3 将使用 Amazon 托管密钥来保护数据。如果要使用客户托管密钥,则必须提供客户托管密钥的 x-amz-server-side-encryption-aws-kms-key-id
标头。
重要
在 Amazon S3 中使用 Amazon KMS key 进行服务器端加密时,您必须选择对称加密 KMS 密钥。Simple Storage Service (Amazon S3) 仅支持对称加密 KMS 密钥,不支持非对称密钥。有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的使用对称和非对称密钥。
S3 存储桶密钥 (x-amz-server-side-encryption-aws-bucket-key-enabled)
您可以使用 x-amz-server-side-encryption-aws-bucket-key-enabled
请求标头在对象级别启用或禁用 S3 存储桶密钥。S3 存储桶密钥可以通过减少从 Amazon S3 到 Amazon KMS 的请求流量来降低您的 Amazon KMS 请求成本。有关更多信息,请参阅使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本。
如果您指定 x-amz-server-side-encryption:aws:kms
,但未提供 x-amz-server-side-encryption-aws-bucket-key-enabled
,则您的对象将使用目标存储桶的 S3 存储桶密钥设置来加密对象。有关更多信息,请参阅使用分批操作、REST API、Amazon 软件开发工具包或 Amazon CLI 在对象级别配置 S3 存储桶密钥。
使用 Amazon 软件开发工具包时,您可以请求 Amazon S3 使用 Amazon KMS keys。此部分提供的示例演示了如何使用适用于 Java 和 .NET 的 Amazon 软件开发工具包。有关其他 SDK 的信息,请转到示例代码和库
重要
在 Amazon S3 中使用 Amazon KMS key 进行服务器端加密时,您必须选择对称加密 KMS 密钥。Simple Storage Service (Amazon S3) 仅支持对称加密 KMS 密钥,不支持非对称密钥。有关更多信息,请参阅 Amazon Key Management Service 开发人员指南中的使用对称和非对称密钥。
复制操作
在复制对象时,您添加相同的请求属性(ServerSideEncryptionMethod
和 ServerSideEncryptionKeyManagementServiceKeyId
)来请求 Amazon S3 使用 Amazon KMS key。有关复制对象的更多信息,请参阅 复制对象。