

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在目錄儲存貯體中使用伺服器端加密與 AWS KMS 金鑰 (SSE-KMS)
<a name="s3-express-UsingKMSEncryption"></a>

 中的安全控制 AWS KMS 可協助您符合加密相關的合規要求。您可以選擇將目錄儲存貯體設定為搭配 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 使用伺服器端加密，並使用這些 KMS 金鑰來保護 Amazon S3 目錄儲存貯體中的資料。如需 SSE-KMS 的詳細資訊，請參閱「[搭配 AWS KMS 金鑰使用伺服器端加密 (SSE-KMS)](UsingKMSEncryption.md)」。

**許可**  
若要 AWS KMS key 在 Amazon S3 之間上傳或下載使用 加密的物件，您需要 金鑰的 `kms:GenerateDataKey`和 `kms:Decrypt`許可。如需詳細資訊，請參閱《AWS Key Management Service 開發人員指南》**中的[允許金鑰使用者在密碼編譯操作中使用 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-users-crypto)。如需分段上傳所需的 AWS KMS 許可資訊，請參閱 [分段上傳 API 與許可](mpuoverview.md#mpuAndPermissions)。

如需用於 SSE-KMS 的 KMS 金鑰詳細資訊，請參閱[使用 AWS KMS (SSE-KMS) 指定伺服器端加密](specifying-kms-encryption.md)。

**Topics**
+ [AWS KMS keys](#s3-express-aws-managed-customer-managed-keys)
+ [對跨帳戶操作使用 SSE-KMS](#s3-express-bucket-encryption-update-bucket-policy)
+ [Amazon S3 儲存貯體金鑰](#s3-express-sse-kms-bucket-keys)
+ [需要 SSE-KMS](#s3-express-require-sse-kms)
+ [加密內容](#s3-express-encryption-context)
+ [傳送 AWS KMS 加密物件的請求](#s3-express-aws-signature-version-4-sse-kms)
+ [稽核目錄儲存貯體中的 SSE-KMS 加密](#s3-express-bucket-encryption-sse-auditing)
+ [使用 AWS KMS (SSE-KMS) 為目錄儲存貯體中的新物件上傳指定伺服器端加密](s3-express-specifying-kms-encryption.md)

## AWS KMS keys
<a name="s3-express-aws-managed-customer-managed-keys"></a>

您的 SSE-KMS 組態在儲存貯體的生命週期內，每個目錄儲存貯體只能支援 1 個[客戶自管金鑰](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 客戶自管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)時，請僅使用金鑰 ID 或金鑰 ARN。不支援 KMS 金鑰的金鑰別名格式。

如需用於 SSE-KMS 的 KMS 金鑰詳細資訊，請參閱[AWS KMS keys](UsingKMSEncryption.md#aws-managed-customer-managed-keys)。

## 對跨帳戶操作使用 SSE-KMS
<a name="s3-express-bucket-encryption-update-bucket-policy"></a>

對目錄儲存貯體中的跨帳戶操作使用加密時，請注意下列事項：
+ 如果您想要授予 S3 物件的跨帳戶存取權，請設定客戶自管金鑰政策，以允許從另一個帳戶進行存取。
+ 若要指定客戶自管金鑰，您必須使用完整 KMS 金鑰 ARN。

## Amazon S3 儲存貯體金鑰
<a name="s3-express-sse-kms-bucket-keys"></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)、[Batch Operations 中的 Copy 操作](directory-buckets-objects-Batch-Ops.md)或 [import 作業](create-import-job.md)，將 SSE-KMS 加密物件從一般用途儲存貯體複製到目錄儲存貯體、從目錄儲存貯體複製到一般用途儲存貯體或在目錄儲存貯體之間複製時，不支援 S3 儲存貯體金鑰。在此情況下，Amazon S3 AWS KMS 會在每次對 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)，您會透過 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) 驗證和授權請求，以取得低延遲。建議儲存貯體的預設加密使用所需的加密組態，而且您不會覆寫 `CreateSession` 請求或 `PUT` 物件請求中的儲存貯體預設加密。然後，新的物件會以所需的加密設定自動加密。若要使用 SSE-KMS 加密目錄儲存貯體中的新物件，您必須使用 KMS 金鑰 (特別是[客戶自管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)) 將 SSE-KMS 指定為目錄儲存貯體的預設加密組態。然後，在為區域端點 API 操作建立工作階段時，系統會在工作階段期間使用 SSE-KMS 和 S3 儲存貯體金鑰自動加密和解密新物件。如需在目錄儲存貯體中覆寫加密行為的詳細資訊，請參閱[使用 指定伺服器端加密 AWS KMS 以進行新物件上傳](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html)。

S3 儲存貯體金鑰在 Amazon S3 內使用一段時間，進一步減少 Amazon S3 向 提出請求 AWS KMS 以完成加密操作的需求。如需使用 S3 儲存貯體金鑰的詳細資訊，請參閱[Amazon S3 儲存貯體金鑰](UsingKMSEncryption.md#sse-kms-bucket-keys)和[使用 Amazon S3 儲存貯體金鑰降低 SSE-KMS 的成本](bucket-key.md)。

## 需要 SSE-KMS
<a name="s3-express-require-sse-kms"></a>

若要針對特定目錄儲存貯體中的所有物件要求 SSE-KMS，您可以使用儲存貯體政策。例如，當您使用 `CreateSession` API 操作來授予上傳新物件 (`PutObject`、`CopyObject` 和 `CreateMultipartUpload`) 的許可時，如果 `CreateSession` 請求不包含請求 SSE-KMS 的 `x-amz-server-side-encryption-aws-kms-key-id` 標頭，則下列儲存貯體政策會拒絕上傳物件許可 (`s3express:CreateSession`)。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id":"UploadObjectPolicy",
   "Statement":[{
         "Sid":"DenyObjectsThatAreNotSSEKMS",
         "Effect":"Deny",
         "Principal":"*",
         "Action":"s3express:CreateSession",
         "Resource":"arn:aws:s3express:us-east-1:111122223333:bucket/amzn-s3-demo-bucket--usw2-az1--x-s3",
         "Condition":{
            "Null":{
               "s3express:x-amz-server-side-encryption-aws-kms-key-id":"true"
            }
         }
      }
   ]
}
```

------

若要要求 AWS KMS key 使用特定 來加密儲存貯體中的物件，您可以使用 `s3express:x-amz-server-side-encryption-aws-kms-key-id`條件金鑰。若要指定 KMS 金鑰，您必須使用 `arn:aws:kms:region:acct-id:key/key-id` 格式的金鑰 Amazon Resource Name (ARN)。 AWS Identity and Access Management 不會驗證 的字串`s3express:x-amz-server-side-encryption-aws-kms-key-id`是否存在。Amazon S3 用於物件加密的 AWS KMS 金鑰 ID 必須符合政策中的 AWS KMS 金鑰 ID，否則 Amazon S3 會拒絕請求。

如需如何將 SSE-KMS 用於新物件上傳的詳細資訊，請參閱[使用 AWS KMS (SSE-KMS) 為目錄儲存貯體中的新物件上傳指定伺服器端加密](s3-express-specifying-kms-encryption.md)。

如需目錄儲存貯體特定條件索引鍵的完整清單，請參閱[使用 IAM 授權地區端點 API 操作](s3-express-security-iam.md)。

## 加密內容
<a name="s3-express-encryption-context"></a>

對於目錄儲存貯體，「加密內容」**是一組金鑰/值對，其中包含資料的相關內容資訊。不支援額外的加密內容值。如需加密內容的詳細資訊，請參閱[加密內容](UsingKMSEncryption.md#encryption-context)。



根據預設，如果您在目錄儲存貯體上使用 SSE-KMS，Amazon S3 會使用儲存貯體 Amazon Resource Name (ARN) 作為加密內容對：

```
arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3
```

確保您的 IAM 政策或 AWS KMS 金鑰政策使用儲存貯體 ARN 做為加密內容。

您可以選擇在區域端點 API 請求中使用 `x-amz-server-side-encryption-context` 標頭 (例如 [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html#API_CreateSession_RequestSyntax))，來提供明確的加密內容對。此標頭的值是 UTF-8 編碼 JSON 的 Base64 編碼字串，其中包含加密內容作為金鑰/值對。對於目錄儲存貯體，加密內容必須符合預設加密內容，也就是儲存貯體的 Amazon Resource Name (ARN)。此外，由於加密內容未加密，因此請確保其中不包含敏感資訊。

您可以使用加密內容來識別和分類密碼編譯操作。您也可以透過檢視與哪個加密金鑰搭配使用的目錄儲存貯體 ARN AWS CloudTrail ，使用預設加密內容 ARN 值來追蹤 中的相關請求。

在 CloudTrail 日誌檔案的 `requestParameters` 欄位中，如果您在目錄儲存貯體上使用 SSE-KMS，加密內容值是儲存貯體的 ARN。

```
"encryptionContext": {
    "aws:s3express:arn": "arn:aws:s3:::arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3"
}
```

此外，對於目錄儲存貯體中使用 SSE-KMS 進行物件加密， AWS KMS CloudTrail 事件會記錄儲存貯體 ARN，而不是物件 ARN。

## 傳送 AWS KMS 加密物件的請求
<a name="s3-express-aws-signature-version-4-sse-kms"></a>

目錄儲存貯體只能透過 HTTPS (TLS) 存取。此外，目錄儲存貯體會使用 AWS Signature 第 4 版 (SigV4) 簽署請求。如需傳送 AWS KMS 加密物件請求的詳細資訊，請參閱 [傳送 AWS KMS 加密物件的請求](UsingKMSEncryption.md#aws-signature-version-4-sse-kms)。

如果您的物件使用 SSE-KMS，請不要傳送 `GET` 請求與 `HEAD` 請求的加密請求標頭。否則，您會收到 HTTP 400 Bad Request (HTTP 400 錯誤的請求) 錯誤。

## 稽核目錄儲存貯體中的 SSE-KMS 加密
<a name="s3-express-bucket-encryption-sse-auditing"></a>

若要稽核 SSE-KMS 加密資料的 AWS KMS 金鑰使用情況，您可以使用 AWS CloudTrail 日誌。您可以深入了解[密碼編譯操作](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations)，例如 [https://docs.aws.amazon.com/kms/latest/developerguide/ct-generatedatakey.html](https://docs.aws.amazon.com/kms/latest/developerguide/ct-generatedatakey.html) 和 [https://docs.aws.amazon.com/kms/latest/developerguide/ct-decrypt.html](https://docs.aws.amazon.com/kms/latest/developerguide/ct-decrypt.html)。CloudTrail 支援多種[屬性值](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_LookupEvents.html)來篩選搜尋，包括事件名稱、使用者名稱和事件來源。

**Topics**
+ [AWS KMS keys](#s3-express-aws-managed-customer-managed-keys)
+ [對跨帳戶操作使用 SSE-KMS](#s3-express-bucket-encryption-update-bucket-policy)
+ [Amazon S3 儲存貯體金鑰](#s3-express-sse-kms-bucket-keys)
+ [需要 SSE-KMS](#s3-express-require-sse-kms)
+ [加密內容](#s3-express-encryption-context)
+ [傳送 AWS KMS 加密物件的請求](#s3-express-aws-signature-version-4-sse-kms)
+ [稽核目錄儲存貯體中的 SSE-KMS 加密](#s3-express-bucket-encryption-sse-auditing)
+ [使用 AWS KMS (SSE-KMS) 為目錄儲存貯體中的新物件上傳指定伺服器端加密](s3-express-specifying-kms-encryption.md)

# 使用 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` 物件請求中的儲存貯體預設加密。然後，新的物件會以所需的加密設定自動加密。如需在目錄儲存貯體中覆寫加密行為的詳細資訊，請參閱[使用 指定伺服器端加密 AWS KMS 以進行新物件上傳](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 金鑰 (特別是[客戶自管金鑰](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 個[客戶自管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。為 SSE-KMS 指定客戶自管金鑰之後，即無法覆寫儲存貯體 SSE-KMS 組態的客戶自管金鑰。然後，當您使用 SSE-KMS 為新物件指定伺服器端加密設定時，您必須確保加密金鑰與您為目錄儲存貯體的預設加密組態指定的客戶自管金鑰相同。若要為資料使用新的客戶自管金鑰，建議您使用新的客戶自管金鑰，將現有的物件複製到新的目錄儲存貯體。

上傳新物件或複製現有物件時，您都可以套用加密。如果您變更物件的加密，則會建立新物件來取代舊物件。

您可以使用 REST API 操作、 AWS SDKs AWS CLI。 AWS Command Line Interface 

**注意**  
 對於目錄儲存貯體，加密覆寫行為如下所示：  
當您搭配 REST API 使用 [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) 來驗證和授權 [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 請求時，只有在您先前使用 SSE-KMS 指定儲存貯體的預設加密時，才能覆寫 SSE-S3 或 SSE-KMS 的加密設定。
當您搭配 AWS CLI 或 AWS SDKs 使用 [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) 來驗證和授權 [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 請求時，您完全無法覆寫加密設定。
當您提出 [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 個[客戶自管金鑰](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 金鑰 (特別是[客戶自管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)) 將 SSE-KMS 指定為目錄儲存貯體的預設加密組態。然後，在為區域端點 API 操作建立工作階段時，系統會在工作階段期間使用 SSE-KMS 和 S3 儲存貯體金鑰自動加密和解密新物件。如需在目錄儲存貯體中覆寫加密行為的詳細資訊，請參閱[使用 指定伺服器端加密 AWS KMS 以進行新物件上傳](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 SDKs 時，對於 `CreateSession`，工作階段字符會自動重新整理，以避免工作階段過期時服務中斷。 AWS CLI 或 AWS SDKs 會對`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 金鑰 (特別是[客戶自管金鑰](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 金鑰 (特別是[客戶自管金鑰](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)

**重要**  
如果您未使用 Transport Layer Security (TLS) 或第 4 版簽署請求提出這些請求，則受 AWS KMS 保護物件的所有 `GET` 和 `PUT` 請求都會失敗。
如果您的物件使用 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 Resource Name (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 個[客戶自管金鑰](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)、[Batch Operations 中的 Copy 操作](directory-buckets-objects-Batch-Ops.md)或 [import 作業](create-import-job.md)，將 SSE-KMS 加密物件從一般用途儲存貯體複製到目錄儲存貯體、從目錄儲存貯體複製到一般用途儲存貯體或在目錄儲存貯體之間複製時，不支援 S3 儲存貯體金鑰。在此情況下，Amazon S3 AWS KMS 會在每次對 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)、[Batch Operations 中的 Copy 操作](directory-buckets-objects-Batch-Ops.md)或 [import 作業](create-import-job.md)，將 SSE-KMS 加密物件從一般用途儲存貯體複製到目錄儲存貯體、從目錄儲存貯體複製到一般用途儲存貯體或在目錄儲存貯體之間複製時，不支援 S3 儲存貯體金鑰。在此情況下，Amazon S3 AWS KMS 每次對 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 SDKs
<a name="s3-express-kms-using-sdks"></a>

使用 AWS SDKs時，您可以請求 Amazon S3 使用 AWS KMS keys 進行伺服器端加密。下列範例示範如何使用 SSE-KMS 搭配適用於 Java 和 .NET AWS SDKs。如需其他 SDKs的資訊，請參閱 AWS 開發人員中心上的[範例程式碼和程式庫](https://aws.amazon.com/code)。

**注意**  
當您使用 AWS SDKs 時，對於 `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 SDKs將目錄儲存貯體的預設加密組態設定為 SSE-KMS 的詳細資訊，請參閱 [使用 AWS SDKs](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)。