API Gateway の IP アドレスベースのアクセス制御プラグインは、呼び出し元のソース IP アドレスまたは IP アドレス範囲に基づいて API へのアクセスを制御します。API のホワイトリストまたはブラックリストを設定して、特定のソースからのリクエストを許可または拒否できます。
1. 概要
ホワイトリストまたはブラックリストを使用できます:
-
ホワイトリスト:IP アドレス、または appId と IP アドレスの組み合わせに基づいてホワイトリストを設定できます。API Gateway は、ホワイトリストにないソースからのリクエストを拒否します。
-
IP ホワイトリスト:指定されたソース IP アドレスからのリクエストのみが許可されます。
-
appId が設定されている場合、ルールはそのアプリケーションにのみ適用され、他の承認済みアプリケーションに影響を与えることなく、指定された IP アドレスからのみ API にアクセスできるようになります。
-
-
ブラックリスト:IP ブラックリストを設定できます。API Gateway は、ブラックリストに登録されている IP アドレスからのすべてのリクエストを拒否します。
IP アドレスベースのアクセス制御プラグインは、IPv4 および IPv6 アドレスをサポートしています。
2. プラグイン設定
プラグインの設定には、JSON または YAML フォーマットを使用できます。スキーマは両方のフォーマットで同じです。フォーマットを変換するには、yaml to json 変換ツールを検索できます。次の表は、YAML フォーマットのテンプレートです。
---
type: ALLOW # コントロールモード。有効値:ALLOW (ホワイトリストの場合) および REFUSE (ブラックリストの場合)。
resource: "XFF:-1" # オプション。このパラメーターが指定されている場合、X-Forwarded-For ヘッダーの IP アドレスがクライアントのソース IP として評価に使用されます。この例では、ヘッダーの最後の IP アドレスを使用します。
items:
- blocks: # IP アドレス範囲。
- 61.3.XX.XX/24
appId: 219810 # オプション。指定した場合、このエントリはこの appId にのみ適用されます。
- blocks: # IP アドレス。
- 79.11.XX.XX
- blocks: # ユーザー VPC。
- 192.168.XX.XX/32 # これは専用型インスタンスに適用されます。ユーザー VPC から API Gateway に送信されるリクエストの場合、API Gateway が検出するソース IP アドレスはこのアドレス範囲内にあります。
専用型インスタンスの場合、API Gateway はユーザー VPC 内からのリクエストを許可します。この場合、API Gateway は VPC 内からソース IP アドレス (例:192.168.XX.XX) を直接読み取ることができます。ホワイトリストまたはブラックリストを設定する際に、これらの内部 VPC アドレスを直接使用できます。
3. WAF によって転送されたリクエストの処理
Web Application Firewall (WAF) のようなミドルウェアサービスが API Gateway の前にデプロイされている場合、resource フィールドを使用して API レベルの IP フィルタリングを適用します。このフィールドはオプションです。このフィールドを指定しない場合、前のホップの IP アドレスが評価に使用されます。このフィールドを指定すると、X-Forwarded-For ヘッダーの値に基づいて IP 評価を行うことができます。
WAF は、受信したリクエストのソース IP アドレスを X-Forwarded-For ヘッダーの末尾に追加し、リクエストを API Gateway に転送します。これにより、API Gateway は X-Forwarded-For ヘッダーの値を確認することでソース IP アドレスを特定できます。この場合、「XFF:-1」を使用して WAF の直前のホップの IP アドレスを特定することを推奨します。
resource パラメーターは XFF:index フォーマットである必要があります。index は、X-Forwarded-For ヘッダー内の IP アドレスの位置を指定します。インデックスはゼロベースで、負の値も指定できます。たとえば、X-Forwarded-For の値が IP1,IP2,IP3 の場合、インデックス 0 は IP1 を選択し、インデックス -1 は最後の IP アドレスである IP3 を選択します。
4. VPC 間アクセス
VPC 間アクセスのシナリオでは、API Gateway は発信元の VPC 内からソース IP アドレスを直接読み取ることができます。したがって、IP アドレスベースのアクセス制御プラグインで内部 VPC の IP アドレスを直接使用できます。API Gateway はソース VPC ID も読み取ることができるため、パラメーターベースのアクセス制御プラグインを使用して、特定の VPC からのアクセスのみを許可することもできます。
5. WAF と VPC 間トラフィックの組み合わせ
API がパブリックトラフィック (WAF 経由) と内部トラフィックの両方を処理する場合、resource と allowResourceMissing フィールドを使用して両方のシナリオを管理できます。resource フィールドを設定して、WAF トラフィックの X-Forwarded-For ヘッダーからクライアント IP を取得します。次に、allowResourceMissing を true に設定します。これにより、X-Forwarded-For ヘッダーを持たない内部トラフィックに対して、API Gateway は前のホップの IP にフォールバックできます。
---
type: ALLOW # コントロールモード。有効値:ALLOW (ホワイトリストの場合) および REFUSE (ブラックリストの場合)。
resource: "XFF:-1" # オプション。このパラメーターが指定されている場合、X-Forwarded-For ヘッダーの IP アドレスがクライアントのソース IP として評価に使用されます。この例では、ヘッダーの最後の IP アドレスを使用します。
allowResourceMissing: "true" # リソースが見つからないことを許可します。見つからない場合、前のホップの IP アドレスが評価に使用されます。
items:
- blocks: # IP アドレス範囲。
- 61.3.XX.XX/24 # CIDR ブロックを指定します。
appId: 219810 # オプション。指定した場合、このエントリはこの appId にのみ適用されます。
- blocks: # IP アドレス。
- 79.11.XX.XX # IP アドレスを指定します。
- blocks: # ユーザー VPC。
- 192.168.XX.XX/32 # これは専用型インスタンスに適用されます。ユーザー VPC から API Gateway に送信されるリクエストの場合、API Gateway が検出するソース IP アドレスはこのアドレス範囲内にあります。
6. プラグインデータセットの使用
プラグインの設定方法の詳細については、「IP アドレスベースのアクセス制御プラグイン」をご参照ください。
6.1. プラグインデータセットの作成
-
API Gateway コンソールにログインし、リージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。
-
[プラグインリスト] ページで、[プラグインデータセット] タブをクリックします。タブの右上隅にある [データセットの作成] をクリックします。表示されるダイアログボックスで、データセットの [名前] を入力し、[タイプ] ドロップダウンリストから IP_WHITELIST_CIDR を選択します。
-
対象のデータセットの ID をクリックして、その詳細ページに移動します。[データセットエントリの作成] をクリックします。表示されるダイアログボックスで、[データ値] (IP アドレスまたは CIDR ブロック) を入力し、[有効期間] を指定します。データエントリは自動的に有効期限切れになります。
[有効期間] には、[短期] (有効期限を指定) または [長期] を選択できます。また、任意で [説明] を入力することもできます。
プラグインデータセットは、専用型インスタンスでのみ有効です。データセットを使用するプラグインが専用型インスタンス上にない API にバインドされている場合、データセットの設定は有効になりません。
6.2. データセットを使用したプラグインの設定
IP アドレスベースのアクセス制御プラグインでプラグインデータセットを使用するには、items 配列内の item に blocksDatasetId フィールドを追加します。blocksDatasetId フィールドと blocks フィールドには互換性があります。各 item 内で、blocksDatasetId と blocks を一緒に、または個別に使用できます。
---
type: ALLOW
items:
- blocksDatasetId: 87b65008e92541938537b1a4a236eda5
appId: 219810
- blocksDatasetId: 87b65008e92541938537b1a4a236eda3
blocks:
- 127.0.XX.XX
- 192.168.XX.XX/24