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

所要時間3分
0

AWS Direct Connect 接続を介してプライベート Amazon API Gateway に接続したいと考えています。

解決策

Amazon API Gateway サービス用の Amazon Virtual Private Cloud (Amazon VPC) エンドポイントを作成する

Amazon VPC エンドポイントは、VPC 内のプライベートリソースが API Gateway サービスと安全に通信できるようにします。API Gateway 用の Amazon VPC エンドポイントを作成するには、以下の手順に従います。

  1. Amazon VPC コンソールを開きます。
  2. ナビゲーションペインの **[Virtual Private Cloud]**で [エンドポイント] を選択します。
  3. [サービスカテゴリ][AWS サービス] を選択します。
  4. サービス名は、キーワード「execute-api」で検索してください。この検索では、「com.amazonaws.REGION.execute-api」という単一の結果が返されます。
  5. 「com.amazonaws.REGION.execute-api」を選択します。
  6. [VPC] で、Direct Connect 接続が設定されている Amazon VPC を選択します。
  7. [サブネット] で、API にアクセスできるようにするサブネットを選択します。
  8. [DNS 名を有効化][このエンドポイントで有効にする] チェックボックスをオフにします。この設定をオフにするには、Amazon VPC の「DNS ホスト名」がオンになっている必要があります。これはオプション機能です。この設定をオンのままにしておくと、VPC が Amazon 提供の DNS を使用している場合、デプロイされた Amazon VPC 内のパブリック API ゲートウェイ API へのすべてのアクセスが中断されます。
  9. **[セキュリティグループ]**で、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 ゲートウェイコンソールを開きます。
  2. Direct Connect 接続のリージョンを選択します。
  3. [API の作成] を選択します。
  4. [API タイプ][REST API プライベート] を選択します。
  5. [API プロトコル] で、REST を選択します。
  6. [新しい API の作成][サンプル API] を選択します。
  7. [設定] で、[エンドポイントタイプ][プライベート] に設定されていることを確認します。
  8. [インポート] を選択します。

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

  1. API 管理ページで、[リソースポリシー] を選択します。
  2. 以下のポリシーをリソースポリシーにコピーします。
    {
      "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 コンソール[エンドポイント] で ID を探します。
    注: このサンプルポリシーでは、Amazon VPC から API のすべてのリソースへのアクセスを許可します。アクセスをさらに制限するには、リソースキーを変更します。
  3. [保存] を選択します。

API をデプロイして変更をコミットする

API を作成してリソースポリシーを追加したら、API をステージにデプロイして変更を実装します。

  1. API Gateway コンソールで、ナビゲーションペインから [リソース] を選択します。
  2. [アクション] を選択します。
  3. **[API アクション] ** で [API をデプロイ] を選択します。
  4. [デプロイされるステージ] で、[新しいステージ] を選択します。
  5. ステージの名前を入力します。
  6. [デプロイ] を選択します。変更が API にデプロイされます。このプロセスが反映されるまでに数分かかることがあります。

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

アクセスをテストするには、次の手順に従います。

  1. Amazon VPC コンソール[エンドポイント] を選択し、作成した VPC エンドポイントを選択します。

  2. [詳細] で、次のような 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>

    **注:**YOUR_VPCE_HOSTNAME は、以前に作成した VPC エンドポイントのホスト名に置き換えてください。

    レスポンスは、Amazon VPC エンドポイントに対応するプライベート IP アドレスを返します。レスポンスでプライベート IP アドレスが返されない場合は、Amazon VPC コンソールの [エンドポイント] で 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>

    **注:**YOUR_API_ID は、プライベート REST API または以前に作成した API の ID に置き換えてください。YOUR_VPCE_HOSTNAME は VPC エンドポイントのホスト名に置き換え、STAGE は以前に作成したデプロイステージに置き換えます。

以下を確認してください。

  • レスポンスの最初の行に「HTTP/1.1 200 OK」が含まれていること。
  • レスポンスがない場合は、Amazon VPC エンドポイントに関連付けられているセキュリティグループが、送信元 IP アドレスからの TCP/443 でのインバウンド接続を許可していること。また、Direct Connect 接続を使用して接続が正しく行われていること。
  • 「403 Forbidden」というレスポンスを受け取った場合は、<YOUR_API_ID> ヘッダーが設定されていること。GET リクエストを送信していることと**<STAGE>**が正しく追加されていること。

**注:**この API とは異なるドメインから提供されるクライアント Web アプリケーションは、この API とやり取りする可能性があります。その場合、ブラウザは CORS のプリフライトリクエストを生成するため、x-apigw-api-id ヘッダーの設定が困難になります。この問題を解決するには、代わりに Route53 エイリアスを使用してプライベート API にアクセスしてください。

関連情報

CORSとは何ですか?

Direct Connect ゲートウェイのルーティングに関する問題をトラブルシューティングする方法を教えてください。

Direct Connect ゲートウェイを設定する方法を教えてください。

AWS公式
AWS公式更新しました 3ヶ月前
コメントはありません

関連するコンテンツ