

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

# Amazon DocumentDB 彈性叢集的靜態資料加密
<a name="elastic-encryption"></a>

下列主題可協助您了解、建立和監控 Amazon DocumentDB 彈性叢集的 AWS Key Management Service 加密金鑰：

**Topics**
+ [Amazon DocumentDB 彈性叢集如何在 中使用授予 AWS KMS](#ec-encrypt-grants)
+ [建立客戶自管金鑰](#ec-encrypt-create)
+ [監控 Amazon DocumentDB 彈性叢集的加密金鑰](#ec-encrypt-monitor)
+ [進一步了解](#ec-encrypt-learn)

Amazon DocumentDB 彈性叢集會自動與 AWS Key Management Service (AWS KMS) 整合以進行金鑰管理，並使用稱為信封加密的方法來保護您的資料。如需封套加密的詳細資訊，請參閱 *AWS Key Management Service 開發人員指南*中的[封套加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。

 AWS KMS key 是金鑰的邏輯表示法。KMS 金鑰包含金鑰 ID、建立日期、說明和金鑰狀態等中繼資料。KMS 金鑰也包含可用來加密和解密資料的金鑰材料。如需 KMS 金鑰的詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的 [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)。

Amazon DocumentDB 彈性叢集支援使用兩種類型的金鑰加密：
+ **AWS 擁有的金鑰 —** Amazon DocumentDB 彈性叢集預設使用這些金鑰自動加密個人身分識別資料。您無法檢視、管理或使用擁有 AWS的金鑰，或稽核其使用方式。不過，您不需要採取任何動作或變更任何程式，即可保護加密您資料的金鑰。如需詳細資訊，請參閱《AWS Key Management Service 開發人員指南》**中的 [AWS 擁有的金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。
+ **客戶受管金鑰 —** 您建立、擁有和管理 AWS KMS keys 的對稱。您可以完全控制此層加密，因此能執行以下任務：
  + 建立和維護金鑰政策
  + 建立和維護 IAM 政策和授予操作
  + 啟用和停用金鑰政策
  + 輪換金鑰密碼編譯資料
  + 新增 標籤
  + 建立金鑰別名
  + 安排金鑰供刪除

  如需更多資訊，請參閱 *AWS Key Management Service 開發人員指南*中的[客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**重要**  
您必須使用對稱加密 KMS 金鑰來加密叢集，因為 Amazon DocumentDB 僅支援對稱加密 KMS 金鑰。請勿使用非對稱 KMS 金鑰來嘗試加密 Amazon DocumentDB 彈性叢集中的資料。如需詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的 中的[非對稱金鑰 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)。  
如果 Amazon DocumentDB 無法再存取叢集的加密金鑰，例如，當金鑰的存取遭到撤銷時，加密的叢集會進入結束狀態。在此情況下，您只能從備份中還原叢集。對於 Amazon DocumentDB，備份一律啟用 1 天。此外，如果您停用加密 Amazon DocumentDB 叢集的 金鑰，最終將會失去該叢集的讀取和寫入存取權。當 Amazon DocumentDB 遇到由無法存取的金鑰加密的叢集時，它會讓叢集進入終端狀態。在此情況下，該叢集再也無法使用，而且無法復原資料庫的目前狀態。若要還原叢集，您必須重新啟用對 Amazon DocumentDB 加密金鑰的存取，然後從備份還原叢集。

**重要**  
建立加密叢集之後，就無法變更該叢集的 KMS 金鑰。建立加密的彈性叢集之前，請務必判斷您的加密金鑰需求。

## Amazon DocumentDB 彈性叢集如何在 中使用授予 AWS KMS
<a name="ec-encrypt-grants"></a>

Amazon DocumentDB 彈性叢集需要[授予](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)才能使用客戶受管金鑰。

當您建立使用客戶受管金鑰加密的叢集時，Amazon DocumentDB 彈性叢集會透過傳送`CreateGrant`請求至 來代表您建立授予 AWS KMS。中的授予 AWS KMS 用於授予 Amazon DocumentDB 彈性叢集存取客戶帳戶中 KMS 金鑰的權限。

Amazon DocumentDB 彈性叢集需要授予 ，才能將客戶受管金鑰用於下列內部操作：
+ 傳送`DescribeKey`請求至 ， AWS KMS 以驗證在建立追蹤器或地理圍欄集合時輸入的對稱客戶受管 KMS 金鑰 ID 是否有效。
+ 傳送`GenerateDataKey`請求至 AWS KMS ，以產生由客戶受管金鑰加密的資料金鑰。
+ 將`Decrypt`請求傳送至 AWS KMS 以解密加密的資料金鑰，以便用來加密您的資料。
+ 您可以隨時撤銷授予的存取權，或移除服務對客戶受管金鑰的存取權。如果您這麼做，Amazon DocumentDB 彈性叢集將無法存取客戶受管金鑰加密的任何資料，這會影響相依於該資料的操作。

## 建立客戶自管金鑰
<a name="ec-encrypt-create"></a>

您可以使用 AWS 管理主控台 或 AWS KMS API 來建立對稱客戶受管金鑰。

**建立對稱客戶受管金鑰**

請依照《AWS Key Management Service 開發人員指南》**中[建立對稱客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)的步驟進行。

**金鑰政策**

金鑰政策會控制客戶受管金鑰的存取權限。每個客戶受管金鑰都必須只有一個金鑰政策，其中包含決定誰可以使用金鑰及其使用方式的陳述式。在建立客戶受管金鑰時，可以指定金鑰政策。如需詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》[AWS Key Management Service 概觀](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)中的 KMS 金鑰存取資訊。

若要將客戶受管金鑰與 Amazon DocumentDB 彈性叢集資源搭配使用，必須在金鑰政策中允許下列 API 操作：
+ [https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)：新增客戶受管金鑰的授權。授予控制對指定 KMS 金鑰的存取權，以允許存取 Amazon Location Service 所需的授予操作。如需使用授與的詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的 [中的授與 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)。
+ [https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) – 提供客戶受管金鑰詳細資訊，以允許 Docdb Elastic 驗證金鑰。
+ [https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) – 允許 Docdb Elastic 使用存放的加密資料金鑰來存取加密的資料。
+ [https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) – 允許 Docdb Elastic 產生加密的資料金鑰並將其儲存，因為資料金鑰不會立即用於加密。

如需詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*[》中的金鑰政策中的 AWS 服務許可](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-services.html)和[金鑰存取疑難排解](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html)。

**透過 IAM 政策限制客戶受管金鑰存取**

除了 KMS 金鑰政策之外，您也可以在 IAM 政策中限制 KMS 金鑰許可。

您可以透過各種方式使 IAM 政策更加嚴格。例如，若要允許客戶受管金鑰僅用於源自 Amazon DocumentDB 彈性叢集的請求，您可以使用 [`kms:ViaService`條件金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)搭配 `docdb-elastic.<region-name>.amazonaws.com`值。

如需詳細資訊，請參閱 *AWS Key Management Service 開發人員指南*中的[允許其他帳戶中的使用者使用 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

## 監控 Amazon DocumentDB 彈性叢集的加密金鑰
<a name="ec-encrypt-monitor"></a>

當您使用 AWS KMS key 客戶受管金鑰搭配 Docdb Elastic 資源時，您可以使用 AWS CloudTrail 或 Amazon CloudWatch Logs 來追蹤 Docdb Elastic 傳送的請求 AWS KMS。

下列範例是 `CreateGrant`、`Decrypt`、 `GenerateDataKeyWithoutPlainText`和 AWS CloudTrail 的事件`DescribeKey`，用於監控 Amazon DocumentDB 彈性叢集呼叫 AWS KMS key 的操作，以存取客戶受管金鑰加密的資料：

------
#### [ CreateGrant ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "Sampleuser01"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-05-09T23:04:20Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "docdb-elastic.amazonaws.com"
    },
    "eventTime": "2023-05-09T23:55:48Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "docdb-elastic.amazonaws.com",
    "userAgent": "docdb-elastic.amazonaws.com",
    "requestParameters": {
        "retiringPrincipal": "docdb-elastic.us-east-1.amazonaws.com",
        "granteePrincipal": "docdb-elastic.us-east-1.amazonaws.com",
        "operations": [
            "Decrypt",
            "Encrypt",
            "GenerateDataKey",
            "GenerateDataKeyWithoutPlaintext",
            "ReEncryptFrom",
            "ReEncryptTo",
            "CreateGrant",
            "RetireGrant",
            "DescribeKey"
        ],
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    },
    "responseElements": {
        "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE",
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    },
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ GenerateDataKey ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "Sampleuser01"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-05-10T18:02:59Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "docdb-elastic.amazonaws.com"
    },
    "eventTime": "2023-05-10T18:03:25Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "docdb-elastic.amazonaws.com",
    "userAgent": "docdb-elastic.amazonaws.com",
    "requestParameters": {
        "keySpec": "AES_256",
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ Decrypt ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "Sampleuser01"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-05-10T18:05:49Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "docdb-elastic.amazonaws.com"
    },
    "eventTime": "2023-05-10T18:06:19Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "docdb-elastic.amazonaws.com",
    "userAgent": "docdb-elastic.amazonaws.com",
    "requestParameters": {
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ DescribeKey ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE",
                "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "Sampleuser01"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-05-09T23:04:20Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "docdb-elastic.amazonaws.com"
    },
    "eventTime": "2023-05-09T23:55:48Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "DescribeKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "docdb-elastic.amazonaws.com",
    "userAgent": "docdb-elastic.amazonaws.com",
    "requestParameters": {
        "keyId": "alias/SampleKmsKey"
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------

## 進一步了解
<a name="ec-encrypt-learn"></a>

下列資源提供靜態資料加密的詳細資訊：
+ 如需 AWS KMS 概念的詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[AWS Key Management Service 基本概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)。
+ 如需 AWS KMS 安全性的詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的 [的安全最佳實務 AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html)。