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

最終更新日: 2020 年 8 月 24 日

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

解決方法

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

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

1.    Amazon Virtual Private Cloud (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 接続が設定されている VPC を選択します。

7.    [Subnets] (サブネット) で、API にアクセスできるようにするサブネットを選択します。

8.    [Enable DNS name] (DNS 名を有効にする) で、[Enable for this endpoint] (このエンドポイントで有効にする) ボックスをオフにします。この設定を無効にするには、VPC で [DNS hostnames] (DNS ホスト名) が有効になっている必要があります。これはオプション機能です。この設定を有効にしておくと、VPC が Amazon が提供する DNS を使用している場合、デプロイされた VPC 内のパブリック API Gateway API へのすべてのアクセスが中断されます。

9.    [Security group] (セキュリティグループ) で、VPC エンドポイントのセキュリティグループを選択します。セキュリティグループは、VPC からの TCP/443 インバウンドでのアクセスを許可する必要があります。

10.    [Policy] (ポリシー) で、[Full Access] (フルアクセス) を選択します。このオプションは、AWS IAM アクセス許可を使用して VPC から VPC エンドポイントへのすべての接続を許可します。

11.    [Create Endpoint] (エンドポイントの作成) を選択します。

12.    VPC エンドポイント ID (例: 「vpce-01234567890abcdef」) を書き留めます。この ID は、API のリソースポリシーを編集するために後で必要になります。

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

1.    API Gateway コンソールを開きます。

2.    Direct Connect 接続のリージョンを選択します。

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

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

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

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

1.    API Gateway コンソールで、ナビゲーションペインから [Resources] (リソース) を選択します。

2.    [Actions] (アクション) を選択します。

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 を使用して VPC に接続しているコンピュータから、次のコマンドのいずれかを実行して、VPC エンドポイントの DNS ホスト名解決をテストします。

Windows PowerShell:

nslookup <YOUR_VPCE_HOSTNAME>

- または -

macOS/Unix:

nslookup <YOUR_VPCE_HOSTNAME>

応答は、VPC エンドポイントに対応するプライベート IP アドレスを返す必要があります。応答でプライベート IP アドレスを受け取らない場合は、Amazon VPC コンソールの [Endpoints] (エンドポイント) で 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」が含まれている必要があります。

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

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


この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?