

# 为目录存储桶中的新对象上传指定具有 AWS KMS 的服务器端加密（SSE-KMS）
<a name="s3-express-specifying-kms-encryption"></a>

对于目录存储桶，要使用服务器端加密来加密您的数据，可以使用具有 Amazon S3 托管式密钥的服务器端加密（SSE-S3）（默认设置）或具有 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）。我们建议存储桶的默认加密使用所需的加密配置，并且不要在 `CreateSession` 请求或 `PUT` 对象请求中覆盖存储桶默认加密。然后，使用所需的加密设置自动对新对象进行加密。有关目录存储桶中加密覆盖行为的更多信息，请参阅 [Specifying server-side encryption with AWS KMS for new object uploads](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html)。

默认情况下，所有 Amazon S3 存储桶都配置了加密，所有上传到 S3 存储桶的新对象都会自动静态加密。具有 Amazon S3 托管密钥的服务器端加密（SSE-S3）是 Amazon S3 中每个存储桶的默认加密配置。如果要为目录存储桶指定不同的加密类型，可以使用具有 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）。要使用 SSE-KMS 加密目录存储桶中的新对象，必须将具有 KMS 密钥（特别是 [customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)）的 SSE-KMS 指定为目录存储桶的默认加密配置。[AWS 托管式密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) (`aws/s3`) 不受支持。在存储桶的生命周期内，SSE-KMS 配置只能支持每个目录存储桶 1 个 [customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。在为 SSE-KMS 指定客户自主管理型密钥后，无法覆盖存储桶的 SSE-KMS 配置的客户自主管理型密钥。然后，当您使用 SSE-KMS 为新的对象指定服务器端加密设置时，必须确保加密密钥与您为目录存储桶的默认加密配置指定的客户自主管理型密钥相同。要对数据使用新的客户自主管理型密钥，我们建议使用新的客户自主管理型密钥将现有对象复制到新的目录存储桶中。

当您上传新对象或复制现有对象时，您可以应用加密。如果更改对象的加密，则会创建一个新对象来替换旧对象。

可以使用 REST API 操作、AWS SDK 和 AWS Command Line Interface（AWS CLI）指定 SSE-KMS。

**注意**  
 对于目录存储桶，加密覆盖行为如下所示：  
当您将 [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) 与 REST API 结合使用来验证可用区端点 API 请求并对其进行授权（[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 和 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 除外）时，仅当之前使用 SSE-KMS 指定了存储桶的默认加密时，才能将加密设置覆盖为 SSE-S3 或 SSE-KMS。
当您将 [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) 与 AWS CLI 或 AWS SDK 结合使用来对可用区端点 API 请求进行身份验证并为其授权（[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 和 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 除外）时，您根本无法覆盖加密设置。
在发出 [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 请求时，仅当之前使用 SSE-KMS 指定了存储桶的默认加密时，才能将加密设置覆盖为 SSE-S3 或 SSE-KMS。当您发出 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 请求时，无法覆盖加密设置。
您可以在 Amazon S3 中使用多区域 AWS KMS keys。但是，Amazon S3 目前将多区域密钥视为单区域密钥，且不使用密钥的多区域特征。有关更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[使用多区域密钥](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)。
如果您希望使用其它账户拥有的 KMS 密钥，您必须有权使用该密钥。有关 KMS 密钥的跨账户权限的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[创建其他账户可以使用的 KMS 密钥](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console)。

## 使用 REST API
<a name="s3-express-KMSUsingRESTAPI"></a>

**注意**  
 在存储桶的生命周期内，对于每个目录存储桶只支持 1 个 [customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。[https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) (`aws/s3`) 不受支持。将具有客户自主管理型密钥的 SSE-KMS 指定为存储桶的默认加密配置后，您无法更改存储桶的 SSE-KMS 配置的客户自主管理型密钥。

对于除 [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 和 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 之外的[可用区端点（对象级）API 操作](s3-express-differences.md#s3-express-differences-api-operations)，可以通过 [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) 对请求进行身份验证和为请求授权，以实现低延迟。我们建议存储桶的默认加密使用所需的加密配置，并且不要在 `CreateSession` 请求或 `PUT` 对象请求中覆盖存储桶默认加密。然后，使用所需的加密设置自动对新对象进行加密。要使用 SSE-KMS 加密目录存储桶中的新对象，必须将具有 KMS 密钥（特别是 [customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)）的 SSE-KMS 指定为目录存储桶的默认加密配置。然后，在为可用区端点 API 操作创建会话时，将在会话期间使用 SSE-KMS 和 S3 存储桶密钥自动加密和解密新对象。有关目录存储桶中加密覆盖行为的更多信息，请参阅 [Specifying server-side encryption with AWS KMS for new object uploads](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html)。

在使用 REST API 的可用区端点 API 调用中（[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 和 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 除外），您无法覆盖 `CreateSession` 请求中加密设置（`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`）的值。无需在可用区端点 API 调用中显式指定这些加密设置值，Amazon S3 将使用 `CreateSession` 请求中的加密设置值来保护目录存储桶中的新对象。

**注意**  
当您使用 AWS CLI 或 AWS SDK 时，对于 `CreateSession`，会话令牌会自动刷新，以避免在会话到期时服务中断。AWS CLI 或 AWS SDK 将存储桶的默认加密配置用于 `CreateSession` 请求。不支持覆盖 `CreateSession` 请求中的加密设置值。此外，在可用区端点 API 调用（[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 和 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 除外）中，不支持覆盖 `CreateSession` 请求中加密设置的值。

对于 [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)，要使用 SSE-KMS 加密目录存储桶中新的对象副本，必须将具有 KMS 密钥（特别是 [customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)）的 SSE-KMS 指定为目录存储桶的默认加密配置。然后，当您使用 SSE-KMS 为新的对象副本指定服务器端加密设置时，必须确保加密密钥与您为目录存储桶的默认加密配置指定的客户自主管理型密钥相同。对于 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)，要使用 SSE-KMS 加密目录存储桶中新的对象分段副本，必须将具有 KMS 密钥（特别是 [customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)）的 SSE-KMS 指定为目录存储桶的默认加密配置。无法在 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 请求标头中使用 SSE-KMS 为新的对象分段副本指定服务器端加密设置。此外，您在 [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) 请求中提供的加密设置必须与目标存储桶的默认加密配置相匹配。



**Topics**
+ [支持 SSE-KMS 的 Amazon S3 REST API 操作](#s3-express-sse-request-headers-kms)
+ [加密上下文（`x-amz-server-side-encryption-context`）](#s3-express-s3-kms-encryption-context)
+ [AWS KMS 密钥 ID（`x-amz-server-side-encryption-aws-kms-key-id`）](#s3-express-s3-kms-key-id-api)
+ [S3 桶密钥（`x-amz-server-side-encryption-aws-bucket-key-enabled`）](#s3-express-bucket-key-api)

### 支持 SSE-KMS 的 Amazon S3 REST API 操作
<a name="s3-express-sse-request-headers-kms"></a>

目录存储桶中的以下对象级 REST API 操作接受 `x-amz-server-side-encryption`、`x-amz-server-side-encryption-aws-kms-key-id` 和 `x-amz-server-side-encryption-context` 请求标头。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)：当您使用可用区端点（对象级）API 操作（CopyObject 和 UploadPartCopy 除外）时，可以指定这些请求标头。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) – 使用 `PUT` API 操作上传数据时，您可以指定这些请求标头。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) – 复制对象时，您同时具有源对象和目标对象。如果使用 `CopyObject` 操作传递 SSE-KMS 标头，这些标头仅应用于目标对象。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) – 使用分段上传 API 操作上传大型对象时，可以指定这些标头。您可以在 `CreateMultipartUpload` 请求中指定这些标头。

使用服务器端加密存储对象时，以下 REST API 操作的响应标头将返回 `x-amz-server-side-encryption` 标头。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)

**重要**  
如果您针对受 AWS KMS 保护的对象发出 `GET` 和 `PUT` 请求时未使用传输层安全性协议（TLS）或签名版本 4，则所有这些请求都将失败。
如果对象使用 SSE-KMS，则不应对 `GET` 请求和 `HEAD` 请求发送加密请求标头，否则将显示 HTTP 400 BadRequest 错误。

### 加密上下文（`x-amz-server-side-encryption-context`）
<a name="s3-express-s3-kms-encryption-context"></a>

如果您指定 `x-amz-server-side-encryption:aws:kms`，Amazon S3 API 将支持您可选提供带有 `x-amz-server-side-encryption-context` 标头的显式加密上下文。对于目录存储桶，加密上下文是一组键值对，其中包含有关数据的上下文信息。该值必须与默认加密上下文 [即存储桶的 Amazon 资源名称（ARN）] 相匹配。不支持额外的加密上下文值。

有关目录存储桶中加密上下文的信息，请参阅[加密上下文](s3-express-UsingKMSEncryption.md#s3-express-encryption-context)。有关加密上下文的一般信息，请参阅 *AWS Key Management Service 开发人员指南*中的 [AWS Key Management Service 概念 - 加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)。

### AWS KMS 密钥 ID（`x-amz-server-side-encryption-aws-kms-key-id`）
<a name="s3-express-s3-kms-key-id-api"></a>

您可以使用 `x-amz-server-side-encryption-aws-kms-key-id` 标头指定用于保护数据的客户自主管理型密钥的 ID。

在存储桶的生命周期内，SSE-KMS 配置只能支持每个目录存储桶 1 个 [customer managed key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。[https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) (`aws/s3`) 不受支持。此外，在为 SSE-KMS 指定客户自主管理型密钥后，无法覆盖存储桶的 SSE-KMS 配置的客户自主管理型密钥。

可以通过以下方式，确定您为存储桶的 SSE-KMS 配置指定的客户自主管理型密钥：
+ 您发出 `HeadObject` API 操作请求以查找响应中 `x-amz-server-side-encryption-aws-kms-key-id` 的值。

要对数据使用新的客户自主管理型密钥，我们建议使用新的客户自主管理型密钥将现有对象复制到新的目录存储桶中。

有关目录存储桶中加密上下文的信息，请参阅[AWS KMS keys](s3-express-UsingKMSEncryption.md#s3-express-aws-managed-customer-managed-keys)。

### S3 桶密钥（`x-amz-server-side-encryption-aws-bucket-key-enabled`）
<a name="s3-express-bucket-key-api"></a>

始终为目录存储桶中的 `GET` 和 `PUT` 操作启用 S3 存储桶密钥，并且不能禁用。当您通过 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)、[批量操作中的 Copy 操作](directory-buckets-objects-Batch-Ops.md)或 [import 任务](create-import-job.md)，将 SSE-KMS 加密的对象从通用存储桶复制到目录存储桶、从目录存储桶复制到通用存储桶，或在目录存储桶之间复制时，不支持 S3 存储桶密钥。在这种情况下，每次对 KMS 加密的对象发出复制请求时，Amazon S3 都会调用 AWS KMS。有关目录存储桶中 S3 存储桶密钥的信息，请参阅[加密上下文](s3-express-UsingKMSEncryption.md#s3-express-encryption-context)。

## 使用 AWS CLI
<a name="s3-express-KMSUsingCLI"></a>

**注意**  
当您使用 AWS CLI 时，对于 `CreateSession`，会话令牌会自动刷新，以避免在会话到期时服务中断。不支持覆盖 `CreateSession` 请求的加密设置值。此外，在可用区端点 API 调用（[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 和 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 除外）中，不支持覆盖 `CreateSession` 请求中加密设置的值。  
要使用 SSE-KMS 加密目录存储桶中的新对象，必须将具有 KMS 密钥（特别是客户自主管理型密钥）的 SSE-KMS 指定为目录存储桶的默认加密配置。然后，在为可用区端点 API 操作创建会话时，将在会话期间使用 SSE-KMS 和 S3 存储桶密钥自动加密和解密新对象。

要使用以下示例 AWS CLI 命令，请将 `user input placeholders` 替换为您自己的信息。

当您上传新对象或复制现有对象时，可以指定使用具有 AWS KMS 密钥的服务器端加密来加密数据。为此，请使用 `put-bucket-encryption` 命令将目录存储桶的默认加密配置设置为 SSE-KMS (`aws:kms`)。具体而言，就是将 `--server-side-encryption aws:kms` 标头添加到请求。使用 `--ssekms-key-id example-key-id` 添加您创建的[客户托管式 AWS KMS 密钥](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#customer-cmk)。如果您指定 `--server-side-encryption aws:kms`，则必须提供客户自主管理型密钥的 AWS KMS 密钥 ID。目录存储桶不使用 AWS 托管式密钥。有关示例命令，请参阅 [使用 AWS CLI](s3-express-bucket-encryption.md#s3-express-default-bucket-encryption-cli)。

然后，当您使用以下命令上传新对象时，Amazon S3 默认情况下使用存储桶默认加密设置来加密该对象。

```
aws s3api put-object --bucket bucket-base-name--zone-id--x-s3 --key example-object-key --body filepath
```

您不需要在可用区端点 API 操作命令中显式添加 `-\-bucket-key-enabled`。始终为目录存储桶中的 `GET` 和 `PUT` 操作启用 S3 存储桶密钥，并且不能禁用。当您通过 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)、[批量操作中的 Copy 操作](directory-buckets-objects-Batch-Ops.md)或 [import 任务](create-import-job.md)，将 SSE-KMS 加密的对象从通用存储桶复制到目录存储桶、从目录存储桶复制到通用存储桶，或在目录存储桶之间复制时，不支持 S3 存储桶密钥。在这种情况下，每次对 KMS 加密的对象发出复制请求时，Amazon S3 都会调用 AWS KMS。

可以将对象从源存储桶（例如通用存储桶）复制到新的存储桶（例如目录存储桶），然后对目标对象使用 SSE-KMS 加密。为此，请使用 `put-bucket-encryption` 命令将目标存储桶（例如目录存储桶）的默认加密配置设置为 SSE-KMS (`aws:kms`)。有关示例命令，请参阅 [使用 AWS CLI](s3-express-bucket-encryption.md#s3-express-default-bucket-encryption-cli)。然后，当您使用以下命令复制对象时，Amazon S3 默认情况下使用存储桶默认加密设置来加密该对象。

```
aws s3api copy-object --copy-source amzn-s3-demo-bucket/example-object-key --bucket bucket-base-name--zone-id--x-s3 --key example-object-key  
```

## 使用 AWS SDK
<a name="s3-express-kms-using-sdks"></a>

使用 AWS SDK 时，您可以请求 Amazon S3 使用 AWS KMS keys 进行服务器端加密。以下示例展示了如何将 SSE-KMS 与适用于 Java 和 .NET 的 AWS SDK 结合使用。有关其它 SDK 的信息，请参阅 AWS 开发人员中心上的[示例代码和库](https://aws.amazon.com/code)。

**注意**  
当您使用 AWS SDK 时，对于 `CreateSession`，会话令牌会自动刷新，以避免在会话到期时服务中断。不支持覆盖 `CreateSession` 请求的加密设置值。此外，在可用区端点 API 调用（[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 和 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 除外）中，不支持覆盖 `CreateSession` 请求中加密设置的值。  
要使用 SSE-KMS 加密目录存储桶中的新对象，必须将具有 KMS 密钥（特别是客户自主管理型密钥）的 SSE-KMS 指定为目录存储桶的默认加密配置。然后，在为可用区端点 API 操作创建会话时，将在会话期间使用 SSE-KMS 和 S3 存储桶密钥自动加密和解密新对象。  
有关使用 AWS SDK 将目录存储桶的默认加密配置设置为 SSE-KMS 的更多信息，请参阅[使用 AWS SDK](s3-express-bucket-encryption.md#s3-express-kms-put-bucket-encryption-using-sdks)。

**重要**  
在 Amazon S3 中使用 AWS KMS key 进行服务器端加密时，您必须选择对称加密 KMS 密钥。Amazon S3 仅支持对称加密 KMS 密钥。有关这些密钥的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[对称加密 KMS 密钥](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks)。

有关创建客户托管密钥的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[对 AWS KMS API 进行编程](https://docs.aws.amazon.com/kms/latest/developerguide/programming-top.html)。