

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

# Amazon DynamoDB 中的基礎設施安全性
<a name="network-isolation"></a>

Amazon DynamoDB 是受管服務，受到位於 AWS Well-Architected Framework 的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)中所述的 AWS 全球網路安全程序的保護。

您可以使用 AWS 發佈的 API 呼叫，透過網路存取 DynamoDB。用戶端可使用 TLS (Transport Layer Security) 1.2 或 1.3 版本。用戶端還必須支援具備完全正向加密 (PFS) 功能的密碼套件，例如臨時 Diffie-Hellman (DHE) 或橢圓曲線臨時 Diffie-Hellman (ECDHE)。現代系統 (如 Java 7 和更新版本) 大多會支援這些模式。此外，請求必須使用存取金鑰 ID 和與 IAM 主體相關聯的私密存取金鑰來簽署。或者，您可以使用 [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) 來產生暫時安全憑證來簽署請求。

 您也可以使用 DynamoDB 的虛擬私有雲端 (VPC) 端點，讓 VPC 中的 Amazon EC2 執行個體能夠使用其私有 IP 位址來存取 DynamoDB，卻不會暴露於公有網際網路。如需詳細資訊，請參閱[使用 Amazon VPC 端點來存取 DynamoDB](#vpc-endpoints-dynamodb)。

## 使用 Amazon VPC 端點來存取 DynamoDB
<a name="vpc-endpoints-dynamodb"></a>

基於安全考量，許多 AWS 客戶會在 Amazon Virtual Private Cloud 環境 (Amazon VPC) 中執行其應用程式。運用 Amazon VPC，您可以將 Amazon EC2 執行個體啟動到 Virtual Private Cloud 上，此 Virtual Private Cloud 與其他網路 (包括公有網際網路) 在邏輯上隔離。使用 Amazon VPC，您可以控制其 IP 位址範圍、子網路、路由表、網路閘道及安全設定。

**注意**  
如果您在 2013 年 12 月 4 日 AWS 帳戶 之後建立 ，則您已在每個 中擁有預設 VPC AWS 區域。預設的 VPC 已可供使用：您可以立即開始使用，不需執行任何其他設定步驟。  
如需詳細資訊，請參閱《*Amazon VPC 使用者指南*》中的[預設 VPC 和預設子網路](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html)。

若要存取公有網際網路，您的 VPC 必須擁有網際網路閘道，也即將 VPC 連線到網際網路的虛擬路由器。這可讓在 VPC 中的應用程式在 Amazon EC2 上執行，以便存取 Amazon DynamoDB 等網際網路資源。

根據預設，與 DynamoDB 之間的通訊會使用 HTTPS 協定，其使用 SSL/TLS 加密保護網路流量。下列圖示說明 VPC 中的 EC2 執行個體如何透過網際網路閘道而非 VPC 端點來存取 DynamoDB。

![\[工作流程圖顯示 EC2 執行個體透過路由器、網際網路閘道及網際網路來存取 DynamoDB。\]](http://docs.aws.amazon.com/zh_tw/amazondynamodb/latest/developerguide/images/ddb-no-vpc-endpoint.png)


許多客戶對於透過公有的網際網路來傳送和接收資料，都會有合法的隱私與安全性疑慮。您可以使用虛擬私有網路 (VPN)，來轉傳通過您自己企業網路基礎設施的所有 DynamoDB 網路傳輸資料，以解決前述的問題。但是這個方法可能會帶來頻寬和可用性的挑戰。

DynamoDB 的 VPC 端點可以減輕這些挑戰的阻礙。DynamoDB 的 *VPC 端點*可讓 VPC 中的 Amazon EC2 執行個體使用私有 IP 位址來存取 DynamoDB，卻不需暴露於公有網際網路。您的 EC2 執行個體不需公有 IP 位址，您也不需要網際網路閘道、NAT 裝置或 VPC 中的虛擬私有閘道。您可以使用端點政策來控制對 DynamoDB 的存取。您的 VPC 與 AWS 服務之間的流量不會離開 Amazon 網路。

**注意**  
 即使您使用公有 IP 地址，在 中託管的執行個體和服務之間的所有 VPC 通訊 AWS 都會在 AWS 網路中保持私有。來自 AWS 網路上具有目的地 AWS 的網路的封包會保留在全球 AWS 網路上，但往返 AWS 中國區域的流量除外。

當您建立 DynamoDB 使用的 VPC 端點時，區域 (例如 *dynamodb.us-west-2.amazonaws.com*) 內傳送到 DynamoDB 端點的所有要求，都會轉傳到 Amazon 網路中的私有 DynamoDB 端點。您不需要修改 VPC 中在 EC2 執行個體上執行的應用程式。端點的名稱會保持不變，但 DynamoDB 的路由會完全在 Amazon 網路中，不會存取公有網際網路。

下圖顯示 VPC 中的 EC2 執行個體如何使用 VPC 端點來存取 DynamoDB。

![\[該工作流程圖僅顯示 EC2 執行個體透過路由器和 VPC 端點存取 DynamoDB。\]](http://docs.aws.amazon.com/zh_tw/amazondynamodb/latest/developerguide/images/ddb-yes-vpc-endpoint.png)


如需詳細資訊，請參閱[教學課程：針對 DynamoDB 使用 VPC 端點](#vpc-endpoints-dynamodb-tutorial)。

### 共用 Amazon VPC 端點和 DynamoDB
<a name="vpc-endpoints-dynamodb-sharing"></a>

若要允許透過 VPC 子網路的閘道端點存取 DynamoDB 服務，您必須擁有該 VPC 子網路的擁有者帳戶許可。

 一旦 VPC 子網路的閘道端點取得 DynamoDB 存取權，任何具有該子網路存取權的 AWS 帳戶都可以使用 DynamoDB。這表示 VPC 子網路中的所有帳戶使用者，都可以使用他們擁有存取權的任何 DynamoDB 資料表。這包括與 VPC 子網路以外不同帳戶關聯的 DynamoDB 資料表。VPC 子網路擁有者仍可自行決定限制子網路中任何特定使用者透過閘道端點使用 DynamoDB 服務。

### 教學課程：針對 DynamoDB 使用 VPC 端點
<a name="vpc-endpoints-dynamodb-tutorial"></a>

此節會逐步說明如何設定並使用 DynamoDB 的 VPC 端點。

**Topics**
+ [步驟 1：啟動 Amazon EC2 執行個體](#vpc-endpoints-dynamodb-tutorial.launch-ec2-instance)
+ [步驟 2：設定您的 Amazon EC2 執行個體](#vpc-endpoints-dynamodb-tutorial.configure-ec2-instance)
+ [步驟 3：建立 DynamoDB 的 VPC 端點](#vpc-endpoints-dynamodb-tutorial.create-endpoint)
+ [步驟 4：(選用) 清除](#vpc-endpoints-dynamodb-tutorial.clean-up)

#### 步驟 1：啟動 Amazon EC2 執行個體
<a name="vpc-endpoints-dynamodb-tutorial.launch-ec2-instance"></a>

在此步驟中，您會在預設的 Amazon VPC 中啟動 Amazon EC2 執行個體。您可以接著為 DynamoDB 建立並使用 VPC 端點。

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 選擇 **Launch Instance** (啟動執行個體) 並執行下列作業：

   步驟 1：選擇 Amazon Machine Image (AMI)
   + 在 AMI 清單的第一項上，前往 **Amazon Linux AMI** 並選擇 **Select (選取)**。

   步驟 2：選擇執行個體類型
   + 在執行個體類型清單的第一項上，選擇 **t2.micro**。
   + 選擇 **Next: Configure Instance Details (下一步：設定執行個體詳細資訊)**。

   步驟 3：設定執行個體詳細資訊
   + 前往 **Network (網路)**，然後選擇您的預設 VPC。

     選擇 **Next: Add Storage (下一步：新增儲存體)**。

   步驟 4：新增儲存體
   + 選擇 **Next: Tag Instance** (下一步：為執行個體新增標籤) 以跳過此步驟。

   步驟 5：將執行個體加上標籤
   + 選擇 **Next: Configure Security Group (下一步：設定安全群組)** 以跳過此步驟。

   步驟 6：設定安全群組
   + 選擇 **Select an existing security group** (選取現有的安全群組)。
   + 在安全群組清單中，選擇 **default** (預設)。這是您 VPC 的預設安全群組。
   + 選擇 **Next: Review and Launch** (下一步：檢閱和啟動)。

   步驟 7：檢閱執行個體啟動
   + 選擇**啟動**。

1. 在 **Select an existing key pair or create a new key pair** (選取現有的金鑰對或建立新的金鑰對) 視窗中，執行下列其中一項作業：
   + 如果您沒有 Amazon EC2 金鑰對，請選擇 **Create a new key pair** (建立新的金鑰對) 並依照指示進行。系統會要求您下載私有金鑰檔案 (*.pem* 檔案)，您之後登入 Amazon EC2 執行個體時會需要此檔案。
   + 若您已擁有 Amazon EC2 金鑰對，請前往 **Select a key pair** (選取金鑰對)，然後從清單中選擇您的金鑰對。您必須已具備可用的私有金鑰檔案 (*.pem* 檔案) 才能登入您的 Amazon EC2 執行個體。

1. 當您設定好金鑰對後，請選擇 **Launch Instances** (啟動執行個體)。

1. 返回 Amazon EC2 主控台首頁，然後選擇您啟動的執行個體。在下方窗格的 **Description** (描述) 標籤上，找到您執行個體的 **Public DNS** (公有 DNS)。例如：`ec2-00-00-00-00.us-east-1.compute.amazonaws.com`。

   請記下此公有 DNS 名稱，因為在此教學課程 ([步驟 2：設定您的 Amazon EC2 執行個體](#vpc-endpoints-dynamodb-tutorial.configure-ec2-instance)) 的下一個步驟中您會需要此名稱。

**注意**  
Amazon EC2 執行個體會需要幾分鐘的時間才會變成可用。在您繼續進行下一個步驟之前，請先確定 **Instance State** (執行個體狀態) 為 `running`，並已通過其所有 **Status Checks** (狀態檢查)。

#### 步驟 2：設定您的 Amazon EC2 執行個體
<a name="vpc-endpoints-dynamodb-tutorial.configure-ec2-instance"></a>

在 Amazon EC2 執行個體可用時，您將能夠登入該執行個體並準備第一次使用。

**注意**  
下列步驟假設您從執行 Linux 的電腦連線至 Amazon EC2 執行個體。如需其他連線方式，請參閱《Amazon EC2 使用者指南》中的[連線至 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)。

1. 您需要允許 SSH 流量傳入 Amazon EC2 執行個體。若要執行此動作，您需要建立新的 EC2 安全群組，然後將安全群組指派給 EC2 執行個體。

   1. 在導覽窗格中，選擇 **Security Groups** (安全群組)。

   1. 選擇 **Create Security Group** (建立安全群組)。在 **Create Security Group** (建立安全群組) 視窗中，執行下列動作：
      + **Security group name** (安全群組名稱)：為您的安全群組輸入名稱。例如：`my-ssh-access`
      + **Description** (描述)：為安全群組輸入簡短描述。
      + **VPC**：請選擇預設 VPC。
      + 在 **Security group rules** (安全群組規則) 區段中，選擇 **Add Rule** (新增規則)，並執行下列動作：
        + **Type** (類型)：選擇 SSH。
        + **Source** (來源)：選擇 My IP (我的 IP)。

      當您滿意設定後，請選擇 **Create (建立)**。

   1. 在導覽窗格中，選擇**執行個體**。

   1. 選擇您在 [步驟 1：啟動 Amazon EC2 執行個體](#vpc-endpoints-dynamodb-tutorial.launch-ec2-instance) 中啟動的 Amazon EC2 執行個體。

   1. 選擇 **Actions** (動作) --> **Networking (聯網)** --> **Change Security Groups** (變更安全群組)。

   1. 在 **Change Security Groups** (變更安全群組) 下，選取您在前述步驟中建立的安全群組 (例如：`my-ssh-access`)。此外，還應選擇現有的 `default` 安全群組。完成設定後，請選擇 **Assign Security Groups** (指派安全群組)。

1. 使用 `ssh` 命令登入您的 Amazon EC2 執行個體，如下列範例所示。

   ```
   ssh -i my-keypair.pem ec2-user@public-dns-name
   ```

   您會需要指定您的私有金鑰檔案 (*.pem* 檔案) 和您執行個體的公有 DNS 名稱。(請參閱 [步驟 1：啟動 Amazon EC2 執行個體](#vpc-endpoints-dynamodb-tutorial.launch-ec2-instance))。

   登入 ID 為 `ec2-user`。不需要任何密碼。

1. 設定您的 AWS 登入資料，如下列範例所示。根據提示輸入您的 AWS 存取金鑰 ID、秘密金鑰和預設區域名稱。

   ```
   aws configure
   ```

   ```
   AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
   AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   Default region name [None]: us-east-1
   Default output format [None]:
   ```

您現在可以開始建立 DynamoDB 的 VPC 端點。

#### 步驟 3：建立 DynamoDB 的 VPC 端點
<a name="vpc-endpoints-dynamodb-tutorial.create-endpoint"></a>

在此步驟中，您要建立 DynamoDB 的 VPC 端點並對其進行測試，確保其可以正常運作。

1. 在開始之前，請確認您可以使用 DynamoDB 的公有端點來與 DynamoDB 通訊。

   ```
   aws dynamodb list-tables
   ```

   輸出會顯示您目前擁有的 DynamoDB 資料表清單。(如果沒有任何資料表，清單將是空白。)

1. 確認 DynamoDB 是在目前 AWS 區域中建立 VPC 端點的可用服務。(命令會以粗體文字顯示，後面接著輸出範例。)

   ```
   aws ec2 describe-vpc-endpoint-services
   ```

   ```
   {
       "ServiceNames": [
           "com.amazonaws.us-east-1.s3",
           "com.amazonaws.us-east-1.dynamodb"
       ]
   }
   ```

   在範例輸出中，DynamoDB 是其中一個可用的服務，因此您可以繼續為其建立 VPC 端點。

1. 確定您的 VPC 識別碼。

   ```
   aws ec2 describe-vpcs
   ```

   ```
   {
       "Vpcs": [
           {
               "VpcId": "vpc-0bbc736e", 
               "InstanceTenancy": "default", 
               "State": "available", 
               "DhcpOptionsId": "dopt-8454b7e1", 
               "CidrBlock": "172.31.0.0/16", 
               "IsDefault": true
           }
       ]
   }
   ```

   在範例輸出中，VPC ID 為 `vpc-0bbc736e`。

1. 建立 VPC 端點。對於 `--vpc-id` 參數，請指定上一個步驟的 VPC ID。使用 `--route-table-ids` 參數，將端點與路由表相關聯。

   ```
   aws ec2 create-vpc-endpoint --vpc-id vpc-0bbc736e --service-name com.amazonaws.us-east-1.dynamodb --route-table-ids rtb-11aa22bb
   ```

   ```
   {
       "VpcEndpoint": {
           "PolicyDocument": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"*\",\"Resource\":\"*\"}]}", 
           "VpcId": "vpc-0bbc736e", 
           "State": "available", 
           "ServiceName": "com.amazonaws.us-east-1.dynamodb", 
           "RouteTableIds": [
               "rtb-11aa22bb"
           ],
           "VpcEndpointId": "vpce-9b15e2f2", 
           "CreationTimestamp": "2017-07-26T22:00:14Z"
       }
   }
   ```

1. 確認您可以透過 VPC 端點存取 DynamoDB。

   ```
   aws dynamodb list-tables
   ```

   如果需要，您可以為 DynamoDB 嘗試其他一些 AWS CLI 命令。如需詳細資訊，請參閱《[AWS CLI 命令參考](https://docs.aws.amazon.com/cli/latest/reference/)》。

#### 步驟 4：(選用) 清除
<a name="vpc-endpoints-dynamodb-tutorial.clean-up"></a>

如果您要刪除自己在此教學課程中建立的資源，請按下列步驟執行：

**若要移除 DynamoDB 的 VPC 端點**

1. 登入 Amazon EC2 執行個體。

1. 決定 VPC 端點 ID。

   ```
   aws ec2 describe-vpc-endpoints
   ```

   ```
   {
       "VpcEndpoint": {
           "PolicyDocument": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"*\",\"Resource\":\"*\"}]}", 
           "VpcId": "vpc-0bbc736e", 
           "State": "available", 
           "ServiceName": "com.amazonaws.us-east-1.dynamodb", 
           "RouteTableIds": [], 
           "VpcEndpointId": "vpce-9b15e2f2", 
           "CreationTimestamp": "2017-07-26T22:00:14Z"
       }
   }
   ```

   在範例輸出中，VPC 端點 ID 為 `vpce-9b15e2f2`。

1. 刪除 VPC 端點。

   ```
   aws ec2 delete-vpc-endpoints --vpc-endpoint-ids vpce-9b15e2f2
   ```

   ```
   {
       "Unsuccessful": []
   }
   ```

   空白陣列 `[]` 表示成功 (沒有未成功的請求)。

**若要終止 Amazon EC2 執行個體**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**執行個體**。

1. 選擇 Amazon EC2 執行個體。

1. 依序選擇 **Actions** (動作)、**Instance State** (執行個體狀態) 和 **Terminate** (終止)。

1. 在確認視窗中，請選擇 **Yes, Terminate** (是，終止)。