选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

指定具有 AWS KMS 密钥的双层服务器端加密(DSSE-KMS)

聚焦模式
指定具有 AWS KMS 密钥的双层服务器端加密(DSSE-KMS) - Amazon Simple Storage Service

当您上传新对象或复制现有对象时,您可以应用加密。

您可以使用 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 CLIAWS SDK 来更改对象的加密。

  • 有关更改对象的加密所需的其它权限的列表,请参阅 Amazon S3 API 操作所需的权限。有关授予此权限的示例策略,请参阅Amazon S3 基于身份的策略示例

  • 如果更改对象的加密,则会创建一个新对象来替换旧对象。如果启用 S3 版本控制,则会创建对象的新版本,而现有对象将变为旧版本。更改属性的角色也会成为新对象(或对象版本)的拥有者。

添加或更改对象的加密
  1. 登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在导航窗格中,选择存储桶,然后选择通用存储桶选项卡。导航到包含要更改的对象的 Amazon S3 存储桶或文件夹。

  3. 选中要更改的对象所对应的复选框。

  4. 操作菜单上,从显示的选项列表中选择编辑服务器端加密

  5. 滚动到服务器端加密部分。

  6. 加密设置下,选择使用默认加密的存储桶设置覆盖默认加密的存储桶设置

  7. 如果您选择覆盖默认加密的存储桶设置,请配置以下加密设置。

    1. 加密类型下,选择具有 AWS Key Management Service 密钥的双层服务器端加密(DSSE-KMS)

    2. 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 密钥

  8. 对于存储桶密钥,选择禁用。DSSE-KMS 不支持 S3 存储桶密钥。

  9. 其它复制设置下,选择是要复制源设置请勿指定设置还是指定设置复制源设置是默认选项。如果您只想复制不带源设置属性的对象,请选择请勿指定设置。选择指定设置,来指定存储类、ACL、对象标签、元数据、服务器端加密和其它校验和的设置。

  10. 选择 Save Changes(保存更改)。

注意

此操作将加密应用于所有指定的对象。加密文件夹时,请等待保存操作完成,然后再将新对象添加到文件夹。

本节介绍如何使用 Amazon S3 控制台,将对象的加密类型设置或更改为使用具有 AWS Key Management Service(AWS KMS)密钥的双层服务器端加密(DSSE-KMS)。

注意
  • 如果对象小于 5 GB,则可以更改对象的加密。如果对象大于 5GB,必须使用 AWS CLIAWS SDK 来更改对象的加密。

  • 有关更改对象的加密所需的其它权限的列表,请参阅 Amazon S3 API 操作所需的权限。有关授予此权限的示例策略,请参阅Amazon S3 基于身份的策略示例

  • 如果更改对象的加密,则会创建一个新对象来替换旧对象。如果启用 S3 版本控制,则会创建对象的新版本,而现有对象将变为旧版本。更改属性的角色也会成为新对象(或对象版本)的拥有者。

添加或更改对象的加密
  1. 登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在导航窗格中,选择存储桶,然后选择通用存储桶选项卡。导航到包含要更改的对象的 Amazon S3 存储桶或文件夹。

  3. 选中要更改的对象所对应的复选框。

  4. 操作菜单上,从显示的选项列表中选择编辑服务器端加密

  5. 滚动到服务器端加密部分。

  6. 加密设置下,选择使用默认加密的存储桶设置覆盖默认加密的存储桶设置

  7. 如果您选择覆盖默认加密的存储桶设置,请配置以下加密设置。

    1. 加密类型下,选择具有 AWS Key Management Service 密钥的双层服务器端加密(DSSE-KMS)

    2. 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 密钥

  8. 对于存储桶密钥,选择禁用。DSSE-KMS 不支持 S3 存储桶密钥。

  9. 其它复制设置下,选择是要复制源设置请勿指定设置还是指定设置复制源设置是默认选项。如果您只想复制不带源设置属性的对象,请选择请勿指定设置。选择指定设置,来指定存储类、ACL、对象标签、元数据、服务器端加密和其它校验和的设置。

  10. 选择 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:dssex-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-encryptionx-amz-server-side-encryption-aws-kms-key-idx-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 保护的对象的所有 GETPUT 请求,则这些请求都将失败。

  • 如果对象使用 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 密钥

创建对象时(即上传新对象或复制现有对象时),您可以指定使用具有 AWS KMS keys 的双层服务器端加密(DSSE-KMS)来加密数据。为此,请将 x-amz-server-side-encryption 标头添加到请求。将标头的值设置为加密算法 aws:kms:dsse。Amazon S3 通过返回响应标头 x-amz-server-side-encryption 来确认已使用 DSSE-KMS 加密来存储对象。

如果您指定值为 aws:kms:dssex-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-encryptionx-amz-server-side-encryption-aws-kms-key-idx-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 保护的对象的所有 GETPUT 请求,则这些请求都将失败。

  • 如果对象使用 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 example-key-id 参数添加您创建的客户自主管理型 AWS KMS 密钥。如果您指定 --server-side-encryption aws:kms:dsse,但未提供 AWS KMS 密钥 ID,则 Amazon S3 将使用 AWS 托管式密钥(aws/s3)。

aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms:dsse --ssekms-key-id example-key-id --body filepath

您可以通过将未加密的对象复制回原位来加密该对象以使用 DSSE-KMS。

aws s3api copy-object --bucket amzn-s3-demo-bucket --key example-object-key --body filepath --bucket amzn-s3-demo-bucket --key example-object-key --sse aws:kms:dsse --sse-kms-key-id example-key-id --body filepath

当您上传新对象或复制现有对象时,可以指定使用 DSSE-KMS 来加密数据。为此,请将 --server-side-encryption aws:kms:dsse 参数添加到请求。使用 --ssekms-key-id example-key-id 参数添加您创建的客户自主管理型 AWS KMS 密钥。如果您指定 --server-side-encryption aws:kms:dsse,但未提供 AWS KMS 密钥 ID,则 Amazon S3 将使用 AWS 托管式密钥(aws/s3)。

aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms:dsse --ssekms-key-id example-key-id --body filepath

您可以通过将未加密的对象复制回原位来加密该对象以使用 DSSE-KMS。

aws s3api copy-object --bucket amzn-s3-demo-bucket --key example-object-key --body filepath --bucket amzn-s3-demo-bucket --key example-object-key --sse aws:kms:dsse --sse-kms-key-id example-key-id --body filepath
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。