

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

# 在 Amazon QLDB 中使用客戶受管金鑰
<a name="encryption-at-rest.using-cust-keys"></a>

您可以使用 AWS 管理主控台、 AWS Command Line Interface (AWS CLI) 或 QLDB API，為 Amazon QLDB 中的 AWS KMS key 新總帳和現有總帳指定 。下列主題說明如何管理和監控 QLDB 中客戶受管金鑰的使用情況。

**Topics**
+ [先決條件](#encryption-at-rest.using-cust-keys.prereqs)
+ [指定新總帳 AWS KMS key 的](#encryption-at-rest.using-cust-keys.specify)
+ [更新現有總帳 AWS KMS key 的](#encryption-at-rest.using-cust-keys.update)
+ [監控您的 AWS KMS keys](#encryption-at-rest.using-cust-keys.monitor)

## 先決條件
<a name="encryption-at-rest.using-cust-keys.prereqs"></a>

您必須先在 AWS Key Management Service () 中建立金鑰，才能使用客戶受管金鑰來保護 QLDB 總帳AWS KMS。您也必須指定金鑰政策，允許 QLDB AWS KMS key 代表您建立授予。

**建立客戶受管金鑰**  
若要建立客戶受管金鑰，請遵循《 *AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)中的步驟。QLDB 不支援[非對稱金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)。

**設定金鑰政策**  
金鑰政策是控制 中客戶受管金鑰存取的主要方式 AWS KMS。每個客戶受管金鑰必須只有一個金鑰政策。金鑰政策文件中的陳述式決定誰有使用 KMS 金鑰的許可以及可以使用它的方式。如需詳細資訊，請參閱[在 中使用金鑰政策 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。  
您可以在建立客戶受管金鑰時指定金鑰政策。若要變更現有客戶受管金鑰的金鑰政策，請參閱[變更金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html)。  
若要允許 QLDB 使用您的客戶受管金鑰，金鑰政策必須包含下列 AWS KMS 動作的許可：  
+ [kms:CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) – 將[授予](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)新增至客戶受管金鑰。准許控制對指定 KMS 金鑰的存取。

  當您使用指定的客戶受管金鑰建立或更新總帳時，QLDB 會建立授予，以允許存取其所需的[授予操作](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)。授予操作包括下列項目：
  + [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)
  + [解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
  + [加密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
+ [kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) – 傳回客戶受管金鑰的詳細資訊。QLDB 會使用此資訊來驗證金鑰。
**金鑰政策範例**  
以下是您可以用於 QLDB 的金鑰政策範例。此政策允許獲授權從 帳戶使用 QLDB 的主體`111122223333`呼叫 資源 上的 `DescribeKey`和 `CreateGrant`操作`arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`。  
若要使用此政策，請將範例中 *us-east-1*、*111122223333* 和 *1234abcd-12ab-34cd-56ef-1234567890ab* 取代為您自己的資訊。  

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid" : "Allow access to principals authorized to use Amazon QLDB",
            "Effect" : "Allow",
            "Principal" : {
                "AWS" : "*"
            },
            "Action" : [
                "kms:DescribeKey",
                "kms:CreateGrant"
            ],
            "Resource" : "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "Condition" : {
                "StringEquals" : {
                    "kms:ViaService" : "qldb.us-east-1.amazonaws.com",
                    "kms:CallerAccount" : "111122223333"
                }
            }
        }
    ]
}
```

## 指定新總帳 AWS KMS key 的
<a name="encryption-at-rest.using-cust-keys.specify"></a>

當您使用 QLDB 主控台或 建立新的總帳時，請依照下列步驟指定 KMS 金鑰 AWS CLI。

您可以使用 ID、別名或 Amazon Resource Name (ARN) 來指定客戶受管金鑰。若要進一步了解，請參閱《 *AWS Key Management Service 開發人員指南*》中的[金鑰識別符 (KeyId)](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id)。

**注意**  
不支援跨區域金鑰。指定的 KMS AWS 區域 金鑰必須與總帳位於相同的 中。

### 建立總帳 （主控台）
<a name="encryption-at-rest.using-cust-keys.specify.con"></a>

1. 登入 AWS 管理主控台，並在 [https://console.aws.amazon.com/qldb](https://console.aws.amazon.com/qldb)：// 開啟 Amazon QLDB 主控台。

1. 選擇**建立總帳**。

1. 在**建立分類帳**頁面上，執行下列動作：
   + **分類帳資訊** – 輸入目前 AWS 帳戶 和區域中所有分類帳中唯一的分類帳**名稱**。
   + **許可模式** – 選擇要指派給總帳的許可模式：
     + **允許所有**
     + **標準** (*建議*)
   + **加密靜態資料** – 選擇要用於靜態加密的 KMS 金鑰類型：
     + **使用 AWS 擁有的 KMS 金鑰** – 使用由 AWS 代您擁有和管理的 KMS 金鑰。這是預設選項，不需要額外的設定。
     + **選擇不同的 AWS KMS 金鑰** – 在您建立、擁有和管理的帳戶中使用對稱加密 KMS 金鑰。

       若要使用 AWS KMS 主控台建立新金鑰，請選擇**建立 AWS KMS 金鑰**。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。

       若要使用現有的 KMS 金鑰，請從下拉式清單中選擇或指定 KMS 金鑰 ARN。

1. 設定如您想要，請選擇**建立總帳**。

   當 QLDB 總帳的狀態變為**作用中**時，您可以存取它。這可能需要幾分鐘的時間。

### 建立總帳 (AWS CLI)
<a name="encryption-at-rest.using-cust-keys.specify.cli"></a>

使用 AWS CLI 在 QLDB 中使用預設 AWS 擁有的金鑰 或客戶受管金鑰建立總帳。

**Example – 使用預設值建立總帳 AWS 擁有的金鑰**  

```
aws qldb create-ledger --name my-example-ledger --permissions-mode STANDARD
```

**Example – 使用客戶受管金鑰建立總帳**  

```
aws qldb create-ledger \
    --name my-example-ledger \
    --permissions-mode STANDARD \
    --kms-key arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
```

## 更新現有總帳 AWS KMS key 的
<a name="encryption-at-rest.using-cust-keys.update"></a>

您也可以使用 QLDB 主控台或 AWS CLI ，隨時將現有總帳的 KMS 金鑰更新為 AWS 擁有的金鑰 或客戶受管金鑰。

**注意**  
Amazon QLDB AWS KMS keys 已於 2021 年 7 月 22 日推出對客戶管理的支援。根據 AWS 擁有的金鑰 預設，在啟動之前建立的任何總帳都會受到保護，但目前不符合使用客戶受管金鑰進行靜態加密的資格。  
您可以在 QLDB 主控台上檢視總帳的建立時間。

QLDB 中的金鑰變更是非同步的。在處理金鑰變更時，總帳可以完全存取，而不會影響任何效能。更新金鑰所需的時間取決於分類帳大小。

您可以使用 ID、別名或 Amazon Resource Name (ARN) 來指定客戶受管金鑰。若要進一步了解，請參閱《 *AWS Key Management Service 開發人員指南*》中的[金鑰識別符 (KeyId)](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id)。

**注意**  
不支援跨區域金鑰。指定的 KMS AWS 區域 金鑰必須與總帳位於相同的 中。

### 更新總帳 （主控台）
<a name="encryption-at-rest.using-cust-keys.update.con"></a>

1. 登入 AWS 管理主控台，並在 [https://console.aws.amazon.com/qldb](https://console.aws.amazon.com/qldb)：// 開啟 Amazon QLDB 主控台。

1. 在導覽窗格中，選擇 **Ledgers**。

1. 在分類帳清單中，選取您要更新的分類帳，然後選擇**編輯分類帳**。

1. 在**編輯總帳**頁面上，選擇要用於靜態加密的 KMS 金鑰類型：
   + **使用 AWS 擁有的 KMS 金鑰** – AWS 代表您使用由 擁有和管理的 KMS 金鑰。這是預設選項，不需要額外的設定。
   + **選擇不同的 AWS KMS 金鑰** – 在您建立、擁有和管理的帳戶中使用對稱加密 KMS 金鑰。

     若要使用 AWS KMS 主控台建立新金鑰，請選擇**建立 AWS KMS 金鑰**。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。

     若要使用現有的 KMS 金鑰，請從下拉式清單中選擇或指定 KMS 金鑰 ARN。

1. 選擇**確認變更**。

### 更新總帳 (AWS CLI)
<a name="encryption-at-rest.using-cust-keys.update.cli"></a>

使用 AWS CLI 以預設 AWS 擁有的金鑰 或客戶受管金鑰更新 QLDB 中的現有總帳。

**Example – 使用預設值更新總帳 AWS 擁有的金鑰**  

```
aws qldb update-ledger --name my-example-ledger --kms-key AWS_OWNED_KMS_KEY
```

**Example – 使用客戶受管金鑰更新總帳**  

```
aws qldb update-ledger \
    --name my-example-ledger \
    --kms-key arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
```

## 監控您的 AWS KMS keys
<a name="encryption-at-rest.using-cust-keys.monitor"></a>

如果您使用客戶受管金鑰來保護 Amazon QLDB 總帳，您可以使用 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)或 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 來追蹤 QLDB AWS KMS 代表您傳送給 的請求。如需詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[監控 AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-overview.html)。

下列範例是操作 `CreateGrant`、`GenerateDataKey`、`Encrypt`、 `Decrypt`和 的 CloudTrail 日誌項目`DescribeKey`。

**CreateGrant**  
當您指定客戶受管金鑰來保護總帳時，QLDB AWS KMS 會代表您將`CreateGrant`請求傳送至 ，以允許存取您的 KMS 金鑰。此外，QLDB 會使用 `RetireGrant`操作，在您刪除總帳時移除授予。  
QLDB 建立的授予專屬於總帳。`CreateGrant` 請求中的主體是建立資料表的使用者。  
記錄 `CreateGrant` 操作的事件類似於以下範例事件。這些參數包括客戶受管金鑰的 Amazon Resource Name (ARN)、承授者委託人和淘汰委託人 (QLDB 服務），以及授予涵蓋的操作。  

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AKIAIOSFODNN7EXAMPLE:sample-user",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/sample-user",
        "accountId": "111122223333",
        "accessKeyId": "AKIAI44QH8DHBEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AKIAIOSFODNN7EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/Admin",
                "accountId": "111122223333",
                "userName": "Admin"
            },
            "webIdFederationData": {},
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2021-06-04T21:37:11Z"
            }
        },
        "invokedBy": "qldb.amazonaws.com"
    },
    "eventTime": "2021-06-04T21:40:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "qldb.amazonaws.com",
    "userAgent": "qldb.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "granteePrincipal": "qldb.us-west-2.amazonaws.com",
        "operations": [
            "DescribeKey",
            "GenerateDataKey",
            "Decrypt",
            "Encrypt"
        ],
        "retiringPrincipal": "qldb.us-west-2.amazonaws.com"
    },
    "responseElements": {
        "grantId": "b3c83f999187ccc0979ef2ff86a1572237b6bba309c0ebce098c34761f86038a"
    },
    "requestID": "e99188d7-3b82-424e-b63e-e086d848ed60",
    "eventID": "88dc7ba5-4952-4d36-9ca8-9ab5d9598bab",
    "readOnly": false,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "eventCategory": "Management",
    "recipientAccountId": "111122223333"
}
```

**GenerateDataKey**  
當您指定客戶受管金鑰來保護總帳時，QLDB 會建立唯一的資料金鑰。它會傳送`GenerateDataKey`請求至 AWS KMS ，以指定總帳的客戶受管金鑰。  
記錄 `GenerateDataKey` 操作的事件類似於以下範例事件。使用者是 QLDB 服務帳戶。這些參數包括客戶受管金鑰的 ARN、需要 32 位元組長度的資料金鑰指標，以及識別內部金鑰階層節點的加密內容。  

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "qldb.amazonaws.com"
    },
    "eventTime": "2021-06-04T21:40:01Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "qldb.amazonaws.com",
    "userAgent": "qldb.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "numberOfBytes": 32,
        "encryptionContext": {
            "key-hierarchy-node-id": "LY4HWMnkeZWKYi6MlitVJC",
            "key-hierarchy-node-version": "1"
        }
    },
    "responseElements": null,
    "requestID": "786977c9-e77c-467a-bff5-9ad5124a4462",
    "eventID": "b3f082cb-3e75-454e-bf0a-64be13075436",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "eventCategory": "Management",
    "recipientAccountId": "111122223333",
    "sharedEventID": "26688de5-0b1c-43d3-bc4f-a18029b08446"
}
```

**解密**  
當您存取分類帳時，QLDB 會呼叫 `Decrypt`操作來解密分類帳的預存資料金鑰，使其可以存取分類帳中的加密資料。  
記錄 `Decrypt` 操作的事件類似於以下範例事件。使用者是 QLDB 服務帳戶。這些參數包括客戶受管金鑰的 ARN，以及識別內部金鑰階層節點的加密內容。  

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "qldb.amazonaws.com"
    },
    "eventTime": "2021-06-04T21:40:56Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "qldb.amazonaws.com",
    "userAgent": "qldb.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "encryptionContext": {
            "key-hierarchy-node-id": "LY4HWMnkeZWKYi6MlitVJC",
            "key-hierarchy-node-version": "1"
        }
    },
    "responseElements": null,
    "requestID": "28f2dd18-3cc1-4fe2-82f7-5154f4933ebf",
    "eventID": "603ad5d4-4744-4505-9c21-bd4a6cbd4b20",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "eventCategory": "Management",
    "recipientAccountId": "111122223333",
    "sharedEventID": "7b6ce3e3-a764-42ec-8f90-5418c97ec411"
}
```

**加密**  
QLDB 會呼叫 `Encrypt`操作，以使用客戶受管金鑰將純文字加密為加密文字。  
記錄 `Encrypt` 操作的事件類似於以下範例事件。使用者是 QLDB 服務帳戶。這些參數包括客戶受管金鑰的 ARN，以及指定總帳內部唯一 ID 的加密內容。  

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "qldb.amazonaws.com"
    },
    "eventTime": "2021-06-04T21:40:01Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Encrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "qldb.amazonaws.com",
    "userAgent": "qldb.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "encryptionContext": {
            "LedgerId": "F6qRNziJLUXA4Vy2ZUv8YY"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "requestID": "b2daca7d-4606-4302-a2d7-5b3c8d30c64d",
    "eventID": "b8aace05-2e37-4fed-ae6f-a45a1c6098df",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "eventCategory": "Management",
    "recipientAccountId": "111122223333",
    "sharedEventID": "ce420ab0-288e-4b4f-aee8-541e18a28aa5"
}
```

**DescribeKey**  
QLDB 會呼叫 `DescribeKey`操作，以判斷您指定的 KMS 金鑰是否存在於 AWS 帳戶 和 區域中。  
記錄 `DescribeKey` 操作的事件類似於以下範例事件。委託 AWS 帳戶 人是 中指定 KMS 金鑰的使用者。這些參數包括客戶受管金鑰的 ARN。  

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AKIAIOSFODNN7EXAMPLE:sample-user",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/sample-user",
        "accountId": "111122223333",
        "accessKeyId": "AKIAI44QH8DHBEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AKIAIOSFODNN7EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/Admin",
                "accountId": "111122223333",
                "userName": "Admin"
            },
            "webIdFederationData": {},
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2021-06-04T21:37:11Z"
            }
        },
        "invokedBy": "qldb.amazonaws.com"
    },
    "eventTime": "2021-06-04T21:40:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "DescribeKey",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "qldb.amazonaws.com",
    "userAgent": "qldb.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "responseElements": null,
    "requestID": "a30586af-c783-4d25-8fda-33152c816c36",
    "eventID": "7a9caf07-2b27-44ab-afe4-b259533ebb88",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "eventCategory": "Management",
    "recipientAccountId": "111122223333"
}
```