Amazon API Gateway REST API へのアクセスを、特定の IP アドレスのみに許可したいです。
簡単な説明
特定の IP アドレスのみに REST API へのアクセスを許可するには、他のすべての IP アドレスに対し、アクセスを拒否するリソースポリシーを作成します。
リソースポリシーを REST API にアタッチすると、アクセス許可を持つユーザーは指定された IP アドレスから API を呼び出すことができるようになります。API は他の IP アドレスからの呼び出しを拒否し、HTTP 403 Forbidden エラーを返します。
特定の IP アドレスをブロックしてその他すべてへのアクセスを許可する場合は、「例: ソース IP アドレスまたは範囲に基づいて API トラフィックを拒否する」を参照してください。
注: API Gateway の HTTP API は現在、リソースポリシーをサポートしていません。
解決策
注: テストには、既存の API Gateway REST API を使用するか、REST API のサンプルを作成します。API 例にある PetStore を使用する場合は、「リソースポリシーを作成し、アタッチする」セクションに進んでください。
API メソッドを設定する
次の手順を実行します。
- API Gateway コンソールを開きます。
- 該当する REST API を選択します。
- [リソース] ペインの [メソッド] セクションで、[メソッドの作成] を選択します。
- [メソッドタイプ] のドロップダウンリストで [ANY] を選択します。
- [統合タイプ] で [モック] を選択します。
- [メソッドを作成] を選択します。
注: 設定のテストを補助するために、モック統合はあらゆるリクエストが届いたときに応答します。
リソースポリシーを作成してアタッチする
次の手順を実行します。
-
API Gateway コンソールを開きます。
-
ナビゲーションペインで [リソースポリシー] を選択します。
-
[ポリシーを作成] を選択します。
-
[リソースポリシー] テキストボックスに、次のリソースポリシー例を入力します。
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "execute-api:/*/*/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "execute-api:/*/*/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": ["sourceIpOrCIDRBlock", "sourceIpOrCIDRBlock"]
}
}
}
]
}
注: aws:SourceIp の sourceIpOrCIDRBlock は、アクセスを許可する対象の IP アドレスに置き換えます。CIDR 表記を使用して IP アドレスの範囲を指定します。CIDR 表記でリストされたパブリック IP アドレス文字列の例: ["52.95.36.0/22", "15.230.39.196/31", "52.93.178.219/32"]
重要: aws:SourceIp の条件は、パブリック IP アドレス範囲でのみ機能します。プライベート IP アドレス範囲へのアクセスを許可するには、aws:VpcSourceIp という条件を使用してください。aws:VpcSourceIp には、インターフェイスの仮想プライベートクラウド (VPC) エンドポイント経由でプライベート API エンドポイントを呼び出す HTTP クライアントの IP アドレスを入力します。API Gateway のプライベート API エンドポイントは、インターフェイス VPC エンドポイント経由以外では呼び出せません。
-
[変更を保存] を選択します。
注: Amazon CloudWatch Logs の $context.identity.sourceIp 変数に、REST API を呼び出すプライベート IP アドレスが一覧表示されます。詳細については、「データ変換用のコンテキスト変数」を参照してください。
API をデプロイする
次の手順を実行します。
- REST API の [リソース] ペインで、[API をデプロイ] を選択します。
- [デプロイステージ] で [新しいステージ] を選択します。
- [ステージ名] に名前を入力します。(例: "v1"、"demo")
- [デプロイ] を選択します。
重要: REST API は、リソースポリシーを変更するたびに再デプロイする必要があります。
リソースポリシーをテストする
REST API が許可された IP アドレスに応答 HTTP 200 OK を返すことを確認するには、curl を使用して API の呼び出し URL をテストします。または、Postman のウェブサイトにある Postman アプリを使用します。次に、許可されていない IP アドレスを持つ環境から別のテストを実行し、REST API が HTTP 403 Forbidden エラーを返すかどうかを確認します。
注: 複数の環境にアクセスできない場合は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスをセットアップしてください。Amazon EC2 インスタンスを使用する場合は、API のリソースポリシーにそのインスタンスの IP アドレスを追加してください。その後、API を再デプロイします。
curl を使用して REST API で応答 HTTP 200 OK または HTTP 403 エラーが発生していないかテストする
使用するオペレーティングシステム (OS) に応じて、次のいずれかのコマンドを実行します。
Linux、Unix、macOS 環境
curl -IX GET https://yourInvokeUrl/
Windows PowerShell
curl https://yourInvokeUrl/
注: https://yourInvokeUrl/ は、実際の REST API の呼び出し URL に置き換えます。
リソースポリシーが正しく設定されている場合、許可された環境には応答 HTTP 200 OK が返されます。拒否された環境には、HTTP 403 Forbidden エラーが返されます。
関連情報
API Gateway リソースポリシーを作成して API にアタッチする
API Gateway のリソースポリシー例
Amazon API Gateway でのアクセスポリシー言語に関する概要
API Gateway で REST API へのアクセスを制御、管理する