インターフェイス VPC エンドポイントを使用して、別のアカウントにある API Gateway プライベート REST API にアクセスするにはどうしたらよいですか?
インターフェイス仮想プライベートクラウド (VPC) エンドポイントを使用して、別の AWS アカウントにある Amazon API Gateway プライベート REST API にアクセスしたいと考えています。
簡単な説明
インターフェイス VPC エンドポイントを使用して、別の AWS アカウントにある API Gateway プライベート REST API にアクセスするには、次の手順を実行します:
- 1 つ目のアカウント (アカウント A) の Amazon Virtual Private Cloud (Amazon VPC) にインターフェイスエンドポイントを作成します。
- 2つ目のアカウント (アカウント B) に API Gateway プライベート REST API を作成します。
- インターフェイスエンドポイントによる API の呼び出しを許可するプライベート REST API の リソースポリシー を設定します。
- プライベート REST API のメソッドを設定します。
- プライベート REST API をデプロイします。
- アカウント A からプライベート REST API を呼び出し、セットアップをテストします。
注: Amazon API Gateway プライベート REST API と VPC エンドポイントは、同じ AWS リージョンになくてはなりません。
解決策
1 つ目のアカウント (アカウント A) の Amazon VPC にインターフェイスエンドポイントを作成する
新しいインターフェイス VPC エンドポイントの作成
アカウント A から、 「Create an interface VPC endpoint for API Gateway execute-api」の手順に従います。
重要: **[ポリシー]で、[フルアクセス]**を選択します。VPC エンドポイントポリシー を使用して、API ID によるエンドポイントへのアクセスを制限するのがベストプラクティスです。API Gateway リソースポリシー を使用して、プリンシパルによるエンドポイントへのアクセスを制限するのもベストプラクティスです。詳細については、 「最小特権アクセス許可を適用する」を参照してください。
インターフェイスエンドポイントを作成する場合は、次のアクションを実行してください:
- 異なるアベイラビリティーゾーンにある複数のサブネットを選択するのがベストプラクティスです。複数のアベイラビリティーゾーンにまたがってサブネットを設定すると、発生する可能性のある AZ 障害に対するインターフェイスエンドポイントの耐性が高まります。
- パブリック DNS またはプライベート DNS を使用して プライベート REST API に接続するには、 プライベート DNS を有効にします。
**注:**インターフェイス VPC エンドポイントのプライベート DNS を有効にすると、Amazon VPC から API Gateway パブリック API にアクセスできなくなります。詳細については、 「VPC から API Gateway API に接続すると、HTTP 403 禁止エラーが表示されるのはなぜですか?」を参照してください。 - セキュリティグループには、Amazon VPC 内のある IP アドレス範囲の TCP ポート 443 インバウンド HTTPS トラフィックを許可するルールが必要です。ルールは、Amazon VPC 内の別のセキュリティグループのものでもかまいません。
**注:**これらの要件のいずれかを満たすセキュリティグループがない場合は、新しいセキュリティグループを作成します。セキュリティグループを指定しない場合、デフォルトのセキュリティグループがエンドポイントネットワークインターフェイスに関連付けられます。
インターフェイスエンドポイントの VPC エンドポイント ID を取得
インターフェイスエンドポイントを作成すると、VPC エンドポイント ID が表示されます。新しいインターフェイスエンドポイントの VPC エンドポイント ID をコピーします (例: vpce-1a2b3c456d7e89012)。次に、[閉じる] を選択します。
注: プライベート REST API を作成および設定する場合は、この ID を使用します。
インターフェイスエンドポイントのパブリック DNS 名を取得
[閉じる] を選択すると、Amazon VPC コンソールに [エンドポイント] ページが表示されます。[エンドポイント] ページの [詳細] タブの [ DNS 名] 列に、インターフェイスエンドポイントのパブリック DNS 名をコピーします (例: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com)。
2 つ目のアカウント (アカウント B) に API Gateway プライベート REST API を作成する
- アカウント B で、API Gateway コンソールを開きます。
- [API の作成] を選択します。
- [API タイプを選択] で、**[REST API プライベート]**の下の [ビルド] を選択します。
- [作成] ページで、[プロトコルの選択] を **[REST]**に設定したままにします。
- [新規 APIの作成] で、[新規 API] を選択します。
- [設定] には、次の情報を入力します:
[API 名] には、名前を入力します。
(オプション) **[説明]**には、説明を入力します。
[エンドポイントタイプ] を **[プライベート]に設定します。
[VPC エンドポイント ID] には、インターフェイスエンドポイント ID を入力します。次に、[追加]**を選択します。
注:インターフェイスエンドポイントをプライベート REST API に関連付けると、API Gateway は、新しい Amazon Route 53 エイリアスレコードを生成します。Route53 エイリアスを使用すると、プライベート API にアクセスできます。 - [API の作成] を選択します。
詳細については、「Amazon API Gateway でのプライベート API の作成」を参照してください。
インターフェイスエンドポイントによる API の呼び出しを許可するプライベート REST API のリソースポリシーを設定
1. API Gateway コンソールのナビゲーションペインの API で、[リソースポリシー] を選択します。
2. リソースポリシー ページで、次のリソースポリシーの例をテキストボックスに入力します:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*/*/*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c456d7e89012" } } }, { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*/*/*" } ] }
**注:**vpce-1a2b3c456d7e89012 をインターフェイスエンドポイント ID に置き換えます。
詳細については、「プライベート API のリソースポリシーの設定」を参照してください。
プライベート REST API のメソッドをセットアップ
- API Gateway コンソールのナビゲーションペインで、API の下にある [リソース] を選択します。
- [リソース] ペインで、[アクション] を選択し、 次に [メソッド の作成] を選択します。
- [/resource] ノードの下のドロップダウンリストで [ANY] を選択し、次にチェックマークアイコンを選択します。
- [/ - ANY - Setup] ペインの **[統合タイプ]で、[モック]**を選択します。
**注:**モックインテグレーションは、そこに到達したリクエストに応答します。 - [保存] を選択します。
詳細については、「API Gateway での REST API メソッドの設定」を参照してください。
プライベート REST API をデプロイする
- API Gateway コンソールのリソースペインで、**[アクション]**を選択し、次に [API をデプロイ] を選択します。
- [API をデプロイ] ダイアログボックスに、次の情報を入力します:
デプロイステージで、[New Stage] を選択します。
[ステージ名] には、[dev] や [test] などの名前を入力します。 - [デプロイ] を選択します。
- [ステージエディター] ペインで、次のメッセージを探します: プライベート DNS が有効になっている場合は、次の URL を使用してください。プライベート REST API の呼び出し URL をコピーします。
**注:**プライベート REST API の呼び出し URL を使用してセットアップをテストします。
詳細については、「API Gateway コンソールを使用したプライベート API のデプロイ」を参照してください。
アカウント A からプライベート REST API を呼び出してセットアップをテストします
- アカウント A で、インターフェイスエンドポイントと同じ Amazon VPC で、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動します。
**重要:**インターフェイスエンドポイントに関連付けた セキュリティグループを選択します。 - Amazon EC2 インスタンスに接続します。
**注:**EC2 インスタンスでは、AWS アカウントに料金が発生する場合があります。テストするインスタンスを作成する場合、繰り返し請求されないように、テストが完了したらインスタンスを終了してください。 - Amazon EC2 インスタンスのコマンドラインから、次の curl コマンドのいずれかを実行して、アカウント B のプライベート REST API を呼び出します。
**注:**詳細については、「エンドポイント固有のパブリック DNS ホスト名 を使用したプライベート API の呼び出し」を参照してください。curl の詳細については、curl プロジェクトのウェブサイトをご覧ください。
プライベート DNS 名の場合
以下のコマンドを実行します:
curl -i https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name
**注:**https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name をプライベート API の呼び出し URL に置き換えます。このコマンドは、インターフェイスエンドポイントのプライベート DNS を有効にした場合にのみ機能します。詳細については、「プライベート DNS 名を使用してプライベート API を呼び出す」を参照してください。
ルート 53 エイリアスの場合
以下のコマンドを実行します:
curl -i https://a1bc234d5e-vpce-1a2b3c456d7e89012.execute-api.region.amazonaws.com/stage-name
注: a1bc234d5e をお使いの API の ID に置き換え、vpce-1a2b3c456d7e89012 をインターフェイスエンドポイント ID に置き換え、リージョン をご使用の API のリージョンに置き換えます。stage-name は、お使いのプライベート API をデプロイしたステージの名前に置き換えます。詳細については、「Route 53 エイリアスを使用してプライベート API にアクセスする」を参照してください。
ホストヘッダー付きのパブリック DNS 名の場合
以下のコマンドを実行します:
curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "Host: a1bc234d5e.execute-api.region.amazonaws.com"
注: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com をお使いのインターフェイスエンドポイントのパブリック DNS 名に置き換え、ステージ名 をプライベート API をデプロイしたステージの名前に置き換えます。 a1bc234d5e.execute-api.region.amazonaws.com をプライベート API の呼び出し URL に置き換えます。
x-apigw-api-id ヘッダーを含むパブリック DNS 名の場合
以下のコマンドを実行します:
curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "x-apigw-api-id:a1bc234d5e"
注: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com をお使いのインターフェイスエンドポイントのパブリック DNS 名に置き換え、ステージ名 をプライベート API をデプロイしたステージの名前に置き換えます。 a1bc234d5e をお使いの API の ID に置き換えます。
4. コマンド出力を確認します。接続が成功すると、API Gateway は 200 OK レスポンスを返します。
関連情報
API Gateway プライベート API エンドポイントへの接続時に発生した問題をトラブルシューティングするにはどうすればよいですか?
関連するコンテンツ
- 質問済み 3ヶ月前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前