

# Amazon DynamoDB のインフラストラクチャセキュリティ
<a name="network-isolation"></a>

マネージドサービスとして、Amazon DynamoDB は、AWS Well-Architected フレームワークにある[インフラストラクチャ保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)で説明されている AWS グローバルネットワークセキュリティ手順によって保護されます。

AWS が公開した API コールを使用して、ネットワーク経由で DynamoDB にアクセスします。クライアントは TLS (Transport Layer Security) バージョン 1.2 または 1.3 を使用できます。また、Ephemeral Diffie-Hellman (DHE) や Elliptic Curve Ephemeral Diffie-Hellman (ECDHE) などの Perfect Forward Secrecy (PFS) を使用した暗号スイートもサポートしている必要があります。これらのモードは、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 インスタンスを仮想プライベートクラウドで作成できます。そのため、パブリックインターネットなどの他のネットワークから論理的に分離されます。Amazon VPC を使用すると、IP アドレスの範囲、サブネット、ルーティングテーブル、ネットワークゲートウェイ、セキュリティ設定を適切に管理できます。

**注記**  
2013 年 12 月 4 日以降に AWS アカウントを作成した場合は、各 AWS リージョンにデフォルトの VPC が用意されています。デフォルトの VPC は、使用できる状態になっています。追加で設定手順を実行することなく、すぐに利用開始できます。  
詳細については、*Amazon VPC ユーザーガイド*の「[デフォルト VPC とデフォルトサブネット](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html)」を参照してください。

パブリックインターネットにアクセスするには、VPC にインターネットゲートウェイ (VPC をインターネットに接続する仮想ルーター) が必要です。これにより、VPC 内の Amazon EC2 で実行されているアプリケーションで、Amazon DynamoDB などのインターネットリソースにアクセスすることが可能になります。

デフォルトでは、DynamoDB との通信において、SSL/TLS 暗号化を使用してネットワークトラフィックを保護する HTTPS プロトコルが使用されます。次の図は、VPC 内の Amazon EC2 インスタンスから DynamoDB にアクセスするために、VPC エンドポイントではなくインターネットゲートウェイを使用する例を示しています。

![\[ルーター、インターネットゲートウェイ、およびインターネットを経由して DynamoDB にアクセスする Amazon EC2 インスタンスを示すワークフロー図。\]](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/ddb-no-vpc-endpoint.png)


多くのお客様が、パブリックインターネット間のデータ送受信に関して、プライバシーとセキュリティに関する正当な懸念を抱いています。これらの懸念を解決するために、仮想プライベートネットワーク (VPN) を使用して、すべての DynamoDB ネットワークトラフィックをお客様の企業ネットワークのインフラストラクチャ経由でルーティングできます。ただし、このアプローチでは、帯域幅や可用性の課題が生じる場合があります。

DynamoDB 用の VPC エンドポイントでは、これらの課題は軽減されます。DynamoDB 用の *VPC エンドポイント*を使用すると、VPC 内の Amazon EC2 インスタンスがパブリックインターネットにさらされることなく、プライベート IP アドレスを使用して DynamoDB にアクセスできるようになります。EC2 インスタンス にパブリック IP アドレスは必要ありません。また、VPC にインターネットゲートウェイ、NAT デバイス、仮想プライベートゲートウェイは不要です。DynamoDB へのアクセスを制御するには、エンドポイントのポリシーを使用します。VPC と AWS サービス間のトラフィックは、Amazon ネットワークを離れません。

**注記**  
 パブリック IP アドレスを使用する場合でも、AWS でホストされているインスタンスとサービスの間で発生するすべての VPC 通信は、AWS ネットワーク内でのプライベートな通信となります。AWS ネットワークから発信され、送信先が AWS ネットワーク上のパケットは、AWS 中国リージョンとの送受信されるトラフィックを除き、AWS グローバルネットワークに残ります。

DynamoDB 用の VPC エンドポイントを作成する際、リージョン内の DynamoDB エンドポイント (例: *dynamodb.us-west-2.amazonaws.com*) に対するリクエストはすべて、Amazon ネットワーク内のプライベートの DynamoDB エンドポイントにルーティングされます。VPC 内の EC2 インスタンスで実行されているアプリケーションを変更する必要はありません。エンドポイント名は変わりませんが、DynamoDB へのルートは Amazon ネットワーク内に完全にとどまります。パブリックインターネットにアクセスすることはありません。

次の図は、VPC 内の EC2 インスタンスが VPC エンドポイントを使用して DynamoDB にアクセスする様子を示しています。

![\[ルーターと VPC エンドポイントのみを経由して DynamoDB にアクセスする EC2 インスタンスを示すワークフロー図。\]](http://docs.aws.amazon.com/ja_jp/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. Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。

1. **[Launch Instance]** (インスタンスを起動) を選択して、以下を実行します。

   ステップ 1: Amazon マシンイメージ (AMI) の選択
   + AMI のリストの上部で [**Amazon Linux AMI**] に移動し、[**選択**] を選びます。

   ステップ 2: インスタンスタイプを選択する
   + インスタンスタイプのリストの上部で、[**t2.micro**] を選択します。
   + [**次のステップ: インスタンスの詳細の設定**] を選択します。

   ステップ 3: インスタンスの詳細を設定する
   + [**ネットワーク**] に移動し、デフォルトの VPC を選択します。

     [**次の手順: ストレージの追加**] を選択します。

   ステップ 4: ストレージを追加する
   + [**Next: Tag Instance**] を選択してこのステップをスキップします。

   ステップ 5: インスタンスをタグ付けする
   + [**次のステップ: セキュリティグループの設定**] を選択してこのステップをスキップします。

   ステップ 6: セキュリティグループを設定する
   + **[Select an existing security group]** (既存のセキュリティグループの選択) を選択します。
   + セキュリティグループのリストで、[**default (デフォルト)**] を選択します。これは VPC のデフォルトのセキュリティグループです。
   + **[Next: Review and Launch]** (次のステップ: 確認と起動) を選択します。

   ステップ 7: インスタンス起動の確認
   + **[Launch]** (起動する) を選択します。

1. [**既存のキーペアを選択するか、新しいキーペアを作成します。**] ウィンドウで、次のいずれかを実行します。
   + Amazon EC2 キーペアがない場合は、**[Create a new key pair]** (新しいキーペアの作成) を選択して指示に従います。プライベートキーファイル (*.pem* ファイル) をダウンロードするよう求められます。このファイルは、後で Amazon EC2 インスタンスにログインする際に必要になります。
   + 既存の Amazon EC2 キーペアがすでにある場合は、**[Select a key pair]** (キーペアの選択) を選択して、リストからキーペアを選択します。Amazon EC2 インスタンスにログインするには、既にプライベートキーファイル (*.pem* ファイル) が利用可能になっている必要があります。

1. キーペアを設定してある場合は、[**Launch Instances**] (インスタンスの起動) を選択します。

1. Amazon EC2 コンソールのホームページに戻り、起動したインスタンスを選択します。下のペインの **[Description]** (説明) タブで、インスタンスの **[Public DNS]** (パブリック DNS) を見つけます。例: `ec2-00-00-00-00.us-east-1.compute.amazonaws.com`。

   このパブリック DNS 名をメモします。パブリック 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. Amazon EC2 インスタンスへのインバウンド SSH トラフィックを認可する必要があります。これを行うには、新しい EC2 セキュリティグループを作成し、そのセキュリティグループを EC2 インスタンスに割り当てます。

   1. ナビゲーションペインで、[**Security Groups**] を選択します。

   1. [**Create Security Group** (セキュリティグループの作成)] を選択します。[**セキュリティグループを作成**] ウィンドウで以下を行います。
      + **[Security group name]** (セキュリティグループ名) — セキュリティグループの名前を入力します。例: `my-ssh-access`
      + **[Description]** (説明) — セキュリティグループの簡単な説明を入力します。
      + **VPC** — デフォルトの VPC を選択します。
      + **[Security group rules]** (セキュリティグループのルール) セクションで、**[Add Rule]** (ルールの追加) を選択して、次の操作を行います
        + **[Type]** (タイプ) — SSH を選択します。
        + **[Source]** (ソース) — My IP を選択します。

      すべての設定が正しいことを確認したら、[**作成**] を選択します。

   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 と通信できることを確認します。

   ```
   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 が利用可能なサービスの 1 つであるため、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. Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。

1. ナビゲーションペインで、[**インスタンス**] を選択します。

1. Amazon EC2 インスタンスを選択します。

1. [**Actions**]、[**Instance State**]、[**Terminate**] の順に選択します。

1. 確認ウィンドウで、**[Yes, Terminate]** (はい、終了します) を選択します。