使用 REST API 指定采用客户提供的加密密钥的服务器端加密 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本指南不再进行更新。有关当前信息和说明,请参阅新的 Amazon S3 用户指南

使用 REST API 指定采用客户提供的加密密钥的服务器端加密

在使用 REST API 创建对象时,您可以使用客户提供的加密密钥 (SSE-C) 指定服务器端加密。使用 SSE-C 时,必须使用以下请求标头提供加密密钥信息。

名称 描述
x-amz-server-side​-encryption​-customer-algorithm

使用此标头来指定加密算法。标头值必须为“AES256”。

x-amz-server-side​-encryption​-customer-key

使用此标头来提供 256 位的 base64 编码的加密密钥以供 Amazon S3 用于加密或解密您的数据。

x-amz-server-side​-encryption​-customer-key-MD5

使用此标头根据 RFC 1321 提供加密密钥的 base64 编码的 128 位 MD5 摘要。Amazon S3 使用此标头进行消息完整性检查以确保加密密钥的传输无误。

您可以使用 AWS 开发工具包包装库将这些标头添加到您的请求中。如果需要,您可以直接在应用程序中调用 Amazon S3 REST API。

注意

您不能使用 Amazon S3 控制台上传对象和请求 SSE-C。也不能使用控制台来更新使用 SSE-C 存储的现有对象(例如,更改存储类别或添加元数据)。

支持 SSE-C 的 Amazon S3 REST API

以下 Amazon S3 API 支持使用客户提供的加密密钥进行服务器端加密 (SSE-C)。

  • GET 操作 — 在使用 GET API 检索对象(请参阅 GET Object)时,您可以指定请求标头。使用 SSE-C 加密的对象不支持 Torrent。

  • HEAD 操作 — 要使用 HEAD API 检索对象元数据(请参阅 HEAD Object),可以指定这些请求标头。

  • PUT 操作 — 使用 PUT Object API 上传数据(请参阅 PUT Object)时,可以指定这些请求标头。

  • 分段上传 — 在使用分段上传 API 上传大对象时,可以指定这些标头。您可以在以下请求中指定这些标头:启动请求(请参阅启动分段上传)和每个后续分段上传请求(请参阅上传分段

    上传分段 - 复制

    )。对于每个分段上传请求,加密信息必须与您在启动分段上传请求中提供的信息相同。

  • POST 操作 — 使用 POST 操作上传对象(请参阅 POST Object)时,可在表单字段而不是请求标头中提供相同的信息。

  • Copy 操作 — 复制对象(请参阅 PUT Object - Copy)时,您同时具有源对象和目标对象:

    • 如果您希望使用具有 AWS 托管密钥的服务器端加密对目标对象加密,则必须提供 x-amz-server-side​-encryption 请求标头。

    • 如果您希望使用 SSE-C 对目标对象加密,则必须使用上表中描述的三个标头提供加密信息。

    • 如果源对象是使用 SSE-C 加密的,则您必须使用以下标头提供加密密钥信息,以便 Amazon S3 可以解密对象以进行复制。

      名称 描述
      x-amz-copy-source​-server-side​-encryption​-customer-algorithm

      包括此标头以指定 Amazon S3 用于解密源对象的算法。此值必须是 AES256

      x-amz-copy-source​-server-side​-encryption​-customer-key

      包括此标头以提供 base64 编码的加密密钥,供 Amazon S3 用于解密源对象。此加密密钥必须是您在创建源对象时为 Amazon S3 提供的加密密钥。否则,Amazon S3 无法解密对象。

      x-amz-copy-source-​server-side​-encryption​-customer-key-MD5

      包括此标头以根据 RFC 1321 提供加密密钥的 base64 编码的 128 位 MD5 摘要。

预签名 URL 和 SSE-C

您可以生成可用于上传新对象、检索现有对象或对象元数据等操作的预签名 URL。预签名 URL 支持 SSE-C,如下所示:

  • 在创建预签名 URL 时,您必须在签名计算中使用 x-amz-server-side​-encryption​-customer-algorithm 指定算法。

  • 在使用预签名 URL 上传新对象、检索现有对象或仅检索对象元数据时,您必须在您的客户端应用程序中提供所有加密标头。

    注意

    对于非 SSE-C 对象,您可以生成预签名 URL 并将其直接复制到浏览器中,(例如)以便访问数据。

    但对于 SSE-C 对象并非如此,因为除了预签名 URL 外,还需要包含 SSE-C 对象特定的 HTTP 标头。因此,您只能以编程方式将预签名 URL 用于 SSE-C 对象。

更多信息