

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

# 在目錄儲存貯體中使用伺服器端加密與 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)