指定具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)
重要
Amazon S3 现在将具有 Amazon S3 托管密钥的服务器端加密(SSE-S3)作为 Amazon S3 中每个存储桶的基本加密级别。从 2023 年 1 月 5 日起,上传到 Amazon S3 的所有新对象都将自动加密,不会产生额外费用,也不会影响性能。S3 存储桶默认加密配置和上传的新对象的自动加密状态可在 AWS CloudTrail 日志、S3 清单、S3 Storage Lens 存储统计管理工具、Amazon S3 控制台中获得,并可用作 AWS Command Line Interface 和 AWS SDK 中的附加 Amazon S3 API 响应标头。有关更多信息,请参阅默认加密常见问题解答。
默认情况下,所有 Amazon S3 存储桶都配置了加密,所有上传到 S3 存储桶的新对象都会自动静态加密。具有 Amazon S3 托管密钥的服务器端加密(SSE-S3)是 Amazon S3 中每个存储桶的默认加密配置。要使用其他类型的加密,您可以指定要在 S3 PUT
请求中使用的服务器端加密类型,也可以在目标存储桶中设置默认加密配置。
如果您想在 PUT
请求中指定不同的加密类型,则可以使用具有 AWS Key Management Service(AWS KMS)密钥的服务器端加密(SSE-KMS)、具有 AWS KMS 密钥的双层服务器端加密(DSSE-KMS)或具有客户提供的密钥的服务器端加密(SSE-C)。如果您想在目标存储桶中设置不同的默认加密配置,则可以使用 SSE-KMS 或 DSSE-KMS。
您可以使用 S3 控制台、REST API、AWS SDK 和 AWS Command Line Interface(AWS CLI)指定 SSE-S3。有关更多信息,请参阅 为 Amazon S3 存储桶设置默认服务器端加密行为。
本主题介绍如何使用 AWS Management Console设置或更改对象的加密类型。使用控制台复制对象时,Amazon S3 将按原样复制对象。这意味着,如果对源对象加密,则也会对目标对象加密。可以使用控制台添加或更改对象的加密。
注意
-
如果更改对象的加密,则会创建一个新对象来替换旧对象。如果启用 S3 版本控制,则会创建对象的新版本,而现有对象将变为旧版本。更改属性的角色也会成为新对象(或对象版本)的拥有者。
-
如果您要更改具有用户定义标签的对象的加密类型,您必须拥有
s3:GetObjectTagging
权限。如果您要更改没有用户定义标签但大小超过 16 MB 的对象的加密类型,您还必须拥有s3:GetObjectTagging
权限。如果目标存储桶策略拒绝
s3:GetObjectTagging
操作,则将更新对象的加密类型,但将从对象中移除用户定义的标签,并且您将收到错误。
更改对象的加密
-
登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在左侧导航窗格中,选择存储桶。
-
在 Bucket(存储桶) 列表中,请选择包含对象的存储桶的名称。
-
在 Objects(对象) 列表中,请选择要为其添加或更改加密的对象的名称。
将显示对象的详细信息页面,其中有几个部分显示您的对象的属性。
-
选择属性选项卡。
向下滚动到服务器端加密设置部分,然后选择编辑。
在加密设置下,选择使用存储桶默认加密设置或覆盖存储桶默认加密设置。
-
如果您选择覆盖默认加密的存储桶设置,请配置以下加密设置。
-
在加密类型下,选择 Amazon S3 托管式密钥(SSE-S3)。SSE-S3 使用最强的数据块密码之一 [即 256 位高级加密标准(AES-256)] 来加密每个对象。有关更多信息,请参阅 使用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)。
-
-
选择 Save changes(保存更改)。
注意
此操作将加密应用于所有指定的对象。加密文件夹时,请等待保存操作完成,然后再将新对象添加到文件夹。
创建对象时(即,上传新对象或复制现有对象时),您可以通过向请求添加 x-amz-server-side-encryption
标头来指定您是否希望 Amazon S3 使用 Amazon S3 托管式密钥(SSE-S3)加密您的数据。将标头的值设置为 Amazon S3 支持的加密算法 AES256
。Amazon S3 通过返回响应标头 x-amz-server-side-encryption
来确认已使用 SSE-S3 存储对象。
以下 REST 上传 API 操作接受 x-amz-server-side-encryption
请求标头。
使用分段上传 API 操作上传大型对象时,您可以通过为启动分段上传请求添加 x-amz-server-side-encryption
标头来指定服务器端加密。复制现有对象时,不论源对象是否已经加密,都不会加密目标对象,除非您显式请求服务器端加密。
使用 SSE-S3 加密存储对象后,以下 REST API 操作的响应标头将返回 x-amz-server-side-encryption
标头。
注意
如果您的对象使用 SSE-S3,请不要发送 GET
请求和 HEAD
请求的加密请求标头,否则会收到 HTTP 状态代码 400(错误请求)错误。
使用 AWS SDK 时,您可以请求 Amazon S3 使用具有 Amazon S3 托管式加密密钥的服务器端加密(SSE-S3)。这部分提供了以多种语言使用 AWS SDK 的示例。有关其他 SDK 的信息,请转到示例代码和库
要在使用 AWS CLI 上传对象时指定 SSE-S3,请使用以下示例。
aws s3api put-object --bucket
--key
amzn-s3-demo-bucket1
object-key-name
--server-side-encryption AES256 --bodyfile path
有关更多信息,请参阅 AWS CLI 参考中的 put-object
有关使用 AWS CloudFormation 设置加密的示例,请参阅《AWS CloudFormation 用户指南》的 AWS::S3::Bucket ServerSideEncryptionRule
主题中的使用默认加密创建存储桶和通过 AWS KMS 服务器端加密使用 S3 存储桶密钥创建存储桶示例。