Direct Connect 接続を介してプライベート API ゲートウェイに接続するにはどうすればよいですか?

最終更新日: 2022 年 1 月 21 日

AWS Direct Connect 接続を介してプライベート Amazon API Gateway に接続するにはどうすればよいですか?

解決方法

Amazon API Gateway サービス用の Amazon 仮想プライベートクラウド (Amazon VPC) エンドポイントを作成する

Amazon VPC エンドポイントを使用すると、VPC 内のプライベートリソースが API Gateway サービスと安全に通信できるようになります。API Gateway の Amazon VPC エンドポイントを作成するには:

  1. Amazon VPC コンソールを開きます。
  2. ナビゲーションペインの [Virtual Private Cloud] で、 [Endpoints] (エンドポイント) を選択します。
  3. [Service category] (サービスカテゴリー) で [AWS services] (AWS のサービス) を選択します。
  4. [Service Name] (サービス名) では、「execute-api」をキーワード検索します。これは、「com.amazonaws.REGION.execute-api」という単一の結果を返します。
  5. 「com.amazonaws.REGION.execute-api」を選択します。
  6. [VPC] で、Direct Connect 接続が設定されている Amazon VPC を選択します。
  7. [Subnets] (サブネット) で、API にアクセスできるようにするサブネットを選択します。
  8. [Enable DNS name] (DNS 名を有効にする) で、[Enable for this endpoint] (このエンドポイントで有効にする) ボックスをオフにします。この設定を無効にするには、Amazon VPC で [DNS hostnames] (DNS ホスト名) が有効になっている必要があります。これはオプション機能です。この設定を有効にしておくと、VPC が Amazon が提供する DNS を使用している場合、デプロイされた Amazon VPC 内のパブリック API Gateway API へのすべてのアクセスが中断されます。
  9. [Security group] (セキュリティグループ) で、Amazon VPC エンドポイントのセキュリティグループを選択します。セキュリティグループは、Amazon VPC からの TCP/443 インバウンドでのアクセスを許可する必要があります。
  10. [ポリシー] で、[フルアクセス] を選択します。このオプションは、AWS IAM 許可を使用して Amazon VPC から VPC エンドポイントへのすべての接続を許可します。
  11. [エンドポイントを作成] を選択します。
  12. Amazon VPC エンドポイント ID (例: 「vpce-01234567890abcdef」) を書き留めます。この ID は、API のリソースポリシーを編集するために後で必要になります。

プライベート REST API を作成する (まだ持っていない場合)

  1. API Gateway コンソールにログインします。
  2. Direct Connect 接続のリージョンを選択します。
  3. [Create API] を選択します。
  4. [API type] (API タイプ) については、[REST API Private] を選択します。
  5. API プロトコルについては、[REST] を選択します。
  6. [Create a New API] (新規 API の作成) で、[Example API] (API の例) を選択します。
  7. [Settings] (設定) で、[Endpoint Type] (エンドポイントの種類) が [Private] (プライベート) に設定されていることを確認します。
  8. [Import] (インポート) を選択します。

プライベート REST API にアクセスするための許可を Amazon VPC エンドポイントに付与する

  1. [API Management] (API の管理) のページで、[Resource Policy] (リソースポリシー) を選択します。
  2. 以下のポリシーを [Resource Policy] (リソースポリシー) にコピーします。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "execute-api:/*/*/*",
            "Condition": {
                "StringNotEquals": {
                    "aws:sourceVpce": "{{vpceID}}"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "execute-api:/*/*/*"
        }
    ]
}

{{vpceID}} の文字列を、VPC エンドポイントの作成後に書き留めた Amazon VPC エンドポイント ID に置き換えます。または、Amazon VPC コンソールの [Endpoints] (エンドポイント) で ID を見つけます。
注意: このポリシー例では、Amazon VPC から API 上のすべてのリソースへのアクセスを許可します。アクセスをさらに制限するには、Resource キーを変更します。

3.    [保存] を選択します。

API をデプロイ して変更を適用する

API を作成してリソースポリシーを追加したので、API をステージにデプロイして変更を実装する必要があります。API をステージにデプロイするには、以下の手順に従います。

  1. API Gateway コンソールで、ナビゲーションペインから [Resources] (リソース) を選択します。
  2. [アクション] を選択します。
  3. [API Actions] (API アクション) で、[Deploy API] (API のデプロイ) を選択します。
  4. [Deployment stage] (デプロイされるステージ) で、[New Stage] (新規ステージ) を選択します。
  5. ステージの名前を入力します。
  6. [Deploy] (デプロイ) を選択します。変更が API にデプロイされます。このプロセスは、伝達に数分かかることがあります。

Direct Connect 接続から API へのアクセスをテストする

  1. Amazon VPC コンソールで [Endpoints] (エンドポイント) を選択し、作成した VPC エンドポイントを選択します。
  2. [Details] (詳細) で、VPC エンドポイントの DNS 名をコピーします。例:
    「vpce-0123456789abcdef-b238e1kf.execute-api.REGION.vpce.amazonaws.com」
  3. Direct Connect を使用して Amazon VPC に接続しているコンピュータから、次のコマンドのいずれかを実行して、VPC エンドポイントの DNS ホスト名解決をテストします。

Windows PowerShell の場合:

nslookup <YOUR_VPCE_HOSTNAME>

- または -

macOS/Unix:

nslookup <YOUR_VPCE_HOSTNAME>

応答は、Amazon VPC エンドポイントに対応するプライベート IP アドレスを返す必要があります。応答でプライベート IP アドレスを受け取らない場合は、Amazon VPC コンソールの [Endpoints] (エンドポイント) で Amazon VPC エンドポイントのホスト名を確認します。

4.    DNS が機能している場合は、テストの HTTP 要求を行います。これを行うには、API Gateway コンソールから API ID が必要です。リストから API ID をコピーします。API ID は「chw1a2q2xk」などの文字列です。

5.    Direct Connect 接続に接続されたオンプレミスのコンピュータから、次のコマンドを実行します。

Windows PowerShell の場合:

curl -H @{'x-apigw-api-id' = '<YOUR_API_ID>'} https://<YOUR_VPCE_HOSTNAME>/<STAGE>

- または -

macOS/Unix:

curl -IX GET -H 'x-apigw-api-id:<YOUR_API_ID>' https://<YOUR_VPCE_HOSTNAME>/<STAGE>

応答の最初の行には「HTTP/1.1 200 OK」が含まれている必要があります。

応答を受信しない場合は、Amazon VPC エンドポイントに関連付けられたセキュリティグループが、送信元 IP アドレスからの TCP/443 でのインバウンド接続を許可していることを確認します。また、接続が Direct Connect 接続を適切に使用しているかどうかも確認してください。

「403 Forbidden」の応答を受け取った場合は、<YOUR_API_ID> ヘッダーが設定されていることを確認します。GET リクエストを送信していることを確認します。また、<STAGE> が正しく追加されていることを確認します。