

# 管理 DynamoDB 中的加密表
<a name="encryption.tutorial"></a>

可以使用 AWS 管理控制台 或 AWS Command Line Interface (AWS CLI) 指定新表的加密密钥，更新 Amazon DynamoDB 现有表的加密密钥。

**Topics**
+ [指定新表的加密密钥](#encryption.tutorial-creating)
+ [更新加密密钥](#encryption.tutorial-update)

## 指定新表的加密密钥
<a name="encryption.tutorial-creating"></a>

请按照以下步骤，使用 Amazon DynamoDB 控制台或 AWS CLI 指定新表的加密密钥。

### 创建加密表（控制台）
<a name="encryption.tutorial-console"></a>

1. 登录 AWS 管理控制台，打开 DynamoDB 控制台：[https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)。

1.  在控制台左侧的导航窗格中，选择**表**。

1. 选择**创建表**。对于**表名称**，输入 **Music**。对于主键，输入 **Artist**；对于排序键，输入 **SongTitle**，两者均为字符串。

1. 在**设置**中，请确保选中了**自定义设置**。
**注意**  
如果选择**使用默认设置**，将使用 AWS 拥有的密钥 对表进行静态加密，不另行收费。

1. 在**静态加密**下，选择一种加密类型 - AWS 拥有的密钥、AWS 托管式密钥 或客户管理的密钥。
   +  **归 Amazon DynamoDB 所有**。AWS 拥有的密钥，具体来说，归 DynamoDB 所拥有和管理。使用此密钥不会产生额外的费用。
   + **AWS 管理的密钥**。密钥别名：`aws/dynamodb`。密钥存储在您的账户中，由 AWS Key Management Service（AWS KMS）托管。会产生 AWS KMS 费用。
   +  **存储在您的账户中，由您自行拥有和管理。**客户管理的密钥。密钥存储在您的账户中，由 AWS Key Management Service（AWS KMS）托管。会产生 AWS KMS 费用。
**注意**  
如果您选择自行拥有和管理密钥，请确保正确设置 KMS 密钥策略。有关更多信息，包括示例，请参阅[客户管理的密钥的密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

1. 选择**创建表**以创建加密表。要确认加密类型，请选择**概述**选项卡并查看**其他详细信息**部分。

### 创建加密表（AWS CLI）
<a name="encryption.tutorial-cli"></a>

使用 AWS CLI 创建一个表，具有默认的 AWS 拥有的密钥、AWS 托管式密钥 或适用于 Amazon DynamoDB 的客户托管密钥。

**创建包含默认 AWS 拥有的密钥 的加密表**
+ 如下所示创建 `Music` 加密表。

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5
  ```
**注意**  
现在使用 DynamoDB 服务账户中默认的 AWS 拥有的密钥 加密此表。

**创建包含适用于 DynamoDB 的 AWS 托管式密钥 加密表**
+ 如下所示创建 `Music` 加密表。

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --sse-specification Enabled=true,SSEType=KMS
  ```

   表说明的 `SSEDescription` 状态设置为 `ENABLED`，`SSEType` 设置为 `KMS`。

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

**创建包含适用于 DynamoDB 的客户托管密钥的加密表**
+ 如下所示创建 `Music` 加密表。

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --sse-specification Enabled=true,SSEType=KMS,KMSMasterKeyId=abcd1234-abcd-1234-a123-ab1234a1b234
  ```
**注意**  
对于 `KMSMasterKeyId`，您可以使用密钥 ID、密钥 ARN 或密钥别名。如果您使用密钥别名（例如 `alias/my-key`），DynamoDB 会解析别名并将基础 AWS KMS 密钥与表相关联。在表描述中，`KMSMasterKeyArn` 将始终显示已解析密钥的密钥 ARN，而不是别名。有关密钥标识符的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[密钥标识符（KeyId）](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id)。

   表说明的 `SSEDescription` 状态设置为 `ENABLED`，`SSEType` 设置为 `KMS`。

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

## 更新加密密钥
<a name="encryption.tutorial-update"></a>

还可以随时使用 DynamoDB 控制台或 AWS CLI，在 AWS 拥有的密钥、AWS 托管式密钥 和客户托管密钥之间更新现有表的加密密钥。

### 更新加密密钥（控制台）
<a name="encryption.tutorial-update-console"></a>

1. 登录 AWS 管理控制台，打开 DynamoDB 控制台：[https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)。

1.  在控制台左侧的导航窗格中，选择**表**。

1. 选择要更新的表。

1. 选择**操作**下拉菜单，然后选择**更新设置**选项。

1. 转至**其他设置**选项卡。

1. 在**加密**下，选择**管理加密**。

1. 选择一个加密类型：
   +  **归 Amazon DynamoDB 所有。**AWS KMS 密钥由 DynamoDB 拥有和管理。使用此密钥不会产生额外的费用。
   + **AWS 管理的密钥** 密钥别名：`aws/dynamodb`。密钥存储在您的账户中，由 AWS Key Management Service（AWS KMS）托管。会产生 AWS KMS 费用。
   +  **存储在您的账户中，由您自行拥有和管理。**密钥存储在您的账户中，由 AWS Key Management Service（AWS KMS）托管。会产生 AWS KMS 费用。
**注意**  
如果您选择自行拥有和管理密钥，请确保正确设置 KMS 密钥策略。有关更多信息，请参阅[客户管理型密钥的密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

   然后，选择**保存**更新加密表。要确认加密类型，请检查**概述**选项卡下的表详细信息。

### 更新加密密钥（AWS CLI）
<a name="encryption.tutorial-update-cli"></a>

以下示例介绍如何使用 AWS CLI 更新加密表。

**更新包含默认的 AWS 拥有的密钥 的加密表**
+ 如下面的示例所示更新 `Music` 加密表。

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=false
  ```
**注意**  
现在使用 DynamoDB 服务账户中默认的 AWS 拥有的密钥 加密此表。

**更新包含适用于 DynamoDB 的 AWS 托管式密钥 的加密表**
+ 如下面的示例所示更新 `Music` 加密表。

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=true
  ```

   表说明的 `SSEDescription` 状态设置为 `ENABLED`，`SSEType` 设置为 `KMS`。

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

**更新包含适用于 DynamoDB 的客户管理密钥的加密表**
+ 如下面的示例所示更新 `Music` 加密表。

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=true,SSEType=KMS,KMSMasterKeyId=abcd1234-abcd-1234-a123-ab1234a1b234
  ```
**注意**  
对于 `KMSMasterKeyId`，您可以使用密钥 ID、密钥 ARN 或密钥别名。如果您使用密钥别名（例如 `alias/my-key`），DynamoDB 会解析别名并将基础 AWS KMS 密钥与表相关联。在表描述中，`KMSMasterKeyArn` 将始终显示已解析密钥的密钥 ARN，而不是别名。

   表说明的 `SSEDescription` 状态设置为 `ENABLED`，`SSEType` 设置为 `KMS`。

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```