当您上传新对象或复制现有对象时,您可以应用加密。
您可以使用 Amazon S3 控制台、Amazon S3 REST API 和 AWS Command Line Interface(AWS CLI)指定 DSSE-KMS。有关更多信息,请参阅以下主题。
注意
您可以在 Amazon S3 中使用多区域 AWS KMS keys。但是,Amazon S3 目前将多区域密钥视为单区域密钥,且不使用密钥的多区域特征。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的 Using multi-Region keys。
注意
如果您希望使用其他账户拥有的 KMS 密钥,则您必须有权使用该密钥。有关 KMS 密钥的跨账户权限的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建其他账户可以使用的 KMS 密钥。
本节介绍如何使用 Amazon S3 控制台,将对象的加密类型设置或更改为使用具有 AWS Key Management Service(AWS KMS)密钥的双层服务器端加密(DSSE-KMS)。
注意
-
如果对象小于 5 GB,则可以更改对象的加密。如果对象大于 5GB,必须使用 AWS CLI 或 AWS SDK 来更改对象的加密。
-
有关更改对象的加密所需的其它权限的列表,请参阅 Amazon S3 API 操作所需的权限。有关授予此权限的示例策略,请参阅Amazon S3 基于身份的策略示例。
如果更改对象的加密,则会创建一个新对象来替换旧对象。如果启用 S3 版本控制,则会创建对象的新版本,而现有对象将变为旧版本。更改属性的角色也会成为新对象(或对象版本)的拥有者。
添加或更改对象的加密
登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在导航窗格中,选择存储桶,然后选择通用存储桶选项卡。导航到包含要更改的对象的 Amazon S3 存储桶或文件夹。
-
选中要更改的对象所对应的复选框。
-
在操作菜单上,从显示的选项列表中选择编辑服务器端加密。
滚动到服务器端加密部分。
在加密设置下,选择使用默认加密的存储桶设置或覆盖默认加密的存储桶设置。
-
如果您选择覆盖默认加密的存储桶设置,请配置以下加密设置。
-
在加密类型下,选择具有 AWS Key Management Service 密钥的双层服务器端加密(DSSE-KMS)。
-
在 AWS KMS 密钥下,执行以下操作以选择您的 KMS 密钥:
-
要从可用的 KMS 密钥列表中进行选择,请选择从您的 AWS KMS keys 中进行选择,然后从可用密钥的列表中选择您的 KMS 密钥。
AWS 托管式密钥(
aws/s3
)和您的客户自主管理型密钥都显示在此列表中。有关客户自主管理型密钥的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的客户密钥和 AWS 密钥。 -
要输入 KMS 密钥 ARN,请选择输入 AWS KMS key ARN,然后在显示的字段中输入您的 KMS 密钥 ARN。
-
要在 AWS KMS 控制台中创建新的客户自主管理型密钥,请选择创建 KMS 密钥。
有关创建 AWS KMS key 的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建密钥。
重要
您只能使用与存储桶所在相同的 AWS 区域中可用的 KMS 密钥。Amazon S3 控制台仅列出与存储桶位于同一区域中的前 100 个 KMS 密钥。要使用未列出的 KMS 密钥,您必须输入 KMS 密钥 ARN。如果您希望使用其他账户拥有的 KMS 密钥,则必须首先有权使用该密钥,然后必须输入相应的 KMS 密钥 ARN。
Amazon S3 仅支持对称加密 KMS 密钥,不支持非对称 KMS 密钥。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的确定非对称 KMS 密钥。
-
-
-
对于存储桶密钥,选择禁用。DSSE-KMS 不支持 S3 存储桶密钥。
-
在其它复制设置下,选择是要复制源设置、请勿指定设置还是指定设置。复制源设置是默认选项。如果您只想复制不带源设置属性的对象,请选择请勿指定设置。选择指定设置,来指定存储类、ACL、对象标签、元数据、服务器端加密和其它校验和的设置。
-
选择 Save Changes(保存更改)。
注意
此操作将加密应用于所有指定的对象。加密文件夹时,请等待保存操作完成,然后再将新对象添加到文件夹。
创建对象时(即上传新对象或复制现有对象时),您可以指定使用具有 AWS KMS keys 的双层服务器端加密(DSSE-KMS)来加密数据。为此,请将 x-amz-server-side-encryption
标头添加到请求。将标头的值设置为加密算法 aws:kms:dsse
。Amazon S3 通过返回响应标头 x-amz-server-side-encryption
来确认已使用 DSSE-KMS 加密来存储对象。
如果您指定值为 aws:kms:dsse
的 x-amz-server-side-encryption
标头,则还可以使用以下请求标头:
-
x-amz-server-side-encryption-aws-kms-key-id:
SSEKMSKeyId
-
x-amz-server-side-encryption-context:
SSEKMSEncryptionContext
主题
支持 DSSE-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
请求标头。
-
PutObject – 使用
PUT
API 操作上传数据时,您可以指定这些请求标头。 -
CopyObject – 复制对象时,您同时具有源对象和目标对象。如果使用
CopyObject
操作传递 DSSE-KMS 标头,它们仅应用于目标对象。复制现有对象时,不论源对象是否已经加密,都不会加密目标对象,除非您显式请求服务器端加密。 -
POST Object – 使用
POST
操作上传对象时,可在表单字段(而不是在请求标头)中提供相同的信息。 -
CreateMultipartUpload – 使用分段上传来上传大型对象时,可以在
CreateMultipartUpload
请求中指定这些标头。
使用服务器端加密存储对象时,以下 REST API 操作的响应标头将返回 x-amz-server-side-encryption
标头。
重要
-
如果您不让使用安全套接字层(SSL)、传输层安全性协议(TLS)或签名版本 4 发出针对受 AWS KMS 保护的对象的所有
GET
和PUT
请求,则这些请求都将失败。 -
如果对象使用 DSSE-KMS,则不应对
GET
请求和HEAD
请求发送加密请求标头,否则您将得到HTTP 400(错误请求)
错误。
加密上下文(x-amz-server-side-encryption-context
)
如果您指定 x-amz-server-side-encryption:aws:kms:dsse
,Amazon S3 API 将支持带有 x-amz-server-side-encryption-context
标头的加密上下文。加密上下文是一组键值对,其中包含有关数据的其他上下文信息。
Amazon S3 自动使用对象的 Amazon 资源名称(ARN)作为加密上下文对;例如 arn:aws:s3:::
。object_ARN
您可以选择使用 x-amz-server-side-encryption-context
标头提供其他的加密上下文对。但是,由于加密上下文未加密,请确保它不包含敏感信息。Amazon S3 将此额外的密钥对与默认加密上下文一起存储。
有关 Amazon S3 中加密上下文的信息,请参阅 加密上下文。有关加密上下文的一般信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS Key Management Service 概念 - 加密上下文。
AWS 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:dsse
标头但未提供 x-amz-server-side-encryption-aws-kms-key-id
标头,Amazon S3 将使用 AWS 托管式密钥(aws/s3
)来保护数据。如果要使用客户托管密钥,则必须提供客户托管密钥的 x-amz-server-side-encryption-aws-kms-key-id
标头。
重要
在 Amazon S3 中使用 AWS KMS key 进行服务器端加密时,您必须选择对称加密 KMS 密钥。Amazon S3 仅支持对称加密 KMS 密钥。有关这些密钥的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的对称加密 KMS 密钥。
当您上传新对象或复制现有对象时,可以指定使用 DSSE-KMS 来加密数据。为此,请将 --server-side-encryption
aws:kms:dsse
参数添加到请求。使用 --ssekms-key-id
参数添加您创建的客户自主管理型 AWS KMS 密钥。如果您指定 example-key-id
--server-side-encryption aws:kms:dsse
,但未提供 AWS KMS 密钥 ID,则 Amazon S3 将使用 AWS 托管式密钥(aws/s3
)。
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keyexample-object-key
--server-side-encryption aws:kms:dsse --ssekms-key-idexample-key-id
--bodyfilepath
您可以通过将未加密的对象复制回原位来加密该对象以使用 DSSE-KMS。
aws s3api copy-object --bucket
amzn-s3-demo-bucket
--keyexample-object-key
--bodyfilepath
--bucketamzn-s3-demo-bucket
--keyexample-object-key
--sse aws:kms:dsse --sse-kms-key-idexample-key-id
--bodyfilepath