IP アドレスベースのアクセス制御プラグインは、API Gateway が提供する API セキュリティ保護コンポーネントの 1 つです。API 呼び出しのソース IP アドレス (CIDR ブロックをサポート) を制御します。API のホワイトリストまたはブラックリストに IP アドレスを追加して、その IP アドレスからの API リクエストを許可または拒否できます。
1. 概要
ホワイトリストまたはブラックリスト方式をサポートします。
ホワイトリスト: IP アドレス、またはアプリケーション ID と IP アドレスの組み合わせを含むホワイトリストを構成できます。ホワイトリストにないリクエストは拒否されます。
許可された IP アドレスのみを含むホワイトリストを構成できます。この場合、ホワイトリスト内の IP アドレスからの API リクエストのみが許可されます。
アプリケーションとその IP アドレスの組み合わせを指定するホワイトリストを構成できます。この場合、指定されたアプリケーションは、指定された IP アドレスからのみリクエストを送信できます。他のアプリケーションは、IP アドレスに関係なくリクエストを送信できます。
ブラックリスト: IP アドレスのブラックリストを構成できます。API Gateway は、ブラックリスト内の IP アドレスからのすべての API リクエストを拒否します。
IP アドレスベースのアクセス制御プラグインは、IPv4 と IPv6 の両方のアドレスをサポートします。
2. 構成
IP アドレスベースのアクセス制御プラグインは、JSON または YAML フォーマットで構成できます。2 つのフォーマットは同じスキーマを持ち、yaml to json 変換ツールを使用して相互に変換できます。次のコードは、YAML フォーマットのプラグイン構成テンプレートを示しています。
---
type: ALLOW # 制御モード。このパラメーターを ALLOW に設定してホワイトリストを適用するか、REFUSE に設定してブラックリストを適用できます。
resource: "XFF:-1" # オプション。このパラメーターが指定されている場合、X-Forwarded-For ヘッダーの IP アドレスがソース IP アドレスとして使用されます。この例では、X-Forwarded-For ヘッダーの最後の IP アドレスがソース IP アドレスとして使用されます。
items:
- blocks: # API リクエストが送信される CIDR ブロック。
- 61.3.XX.XX/24 # CIDR ブロックを指定します。
appId: 219810 # オプション。このパラメーターを指定すると、IP アドレスベースのアクセス制御ポリシーはこのパラメーターで指定されたアプリケーションにのみ適用されます。
- blocks: # API リクエストが送信される IP アドレス。
- 79.11.XX.XX # IP アドレスを指定します。
- blocks: # API リクエストが送信される Virtual Private Cloud (VPC) の CIDR ブロック。
- 192.168.XX.XX/32 # VPC の CIDR ブロックを指定します。この設定は専用型インスタンスにのみ適用されます。API リクエストが VPC から専用型インスタンスに送信されると、API リクエストのソース IP アドレスには指定された CIDR ブロックが表示されます。最後の注記に特に注意してください。専用型インスタンスを使用する場合、API Gateway は VPC からの API リクエストを許可し、192.168.XX.XX などのソース VPC の IP アドレスを直接読み取ることができます。VPC 内の IP アドレスを直接ブラックリストまたはホワイトリストに追加できます。
3. WAF を使用する場合
Web Application Firewall (WAF) などのミドルウェアサービスが API Gateway と統合されている場合、API レベルの IP アドレスブラックリストまたはホワイトリストを構成するには、resource フィールドが必要です。resource フィールドを指定しない場合、API Gateway に直接接続されている前のホップの IP アドレスがソース IP アドレスとして使用されます。このフィールドを指定すると、X-Forwarded-For ヘッダーの値がソース IP アドレスとして使用されます。
WAF は、受信したリクエストのソース IP アドレスを X-Forwarded-For ヘッダーの末尾に追加し、その IP アドレスを API Gateway に送信します。API Gateway は、X-Forwarded-For ヘッダーの値をソース IP アドレスと見なします。この場合、API Gateway が WAF によって追加された IP アドレスをソース IP アドレスとして使用するように、「XFF:-1」を使用することをお勧めします。
resource フィールドの値は「XFF:index」フォーマットです。index の値は、X-Forwarded-For ヘッダー内の IP アドレスのシーケンス番号で、0 から始まり、負の数も許可されます。たとえば、X-Forwarded-For に IP1、IP2、IP3 の 3 つの IP アドレスが順番に含まれている場合、XFF:0 は IP1 を示し、XFF:-1 は IP3 (最後の IP アドレス) を示します。
4. VPC 間のアクセス
API リクエストが VPC から別の VPC の専用型インスタンスに送信された場合、API Gateway はリクエストからソース VPC の IP アドレスを直接読み取ることができます。VPC 内の IP アドレスに対してプラグインを安心して準備できます。API Gateway は、ソース VPC の ID も読み取ることができます。パラメーターベースのアクセス制御プラグインを構成して、指定された VPC のみが API にアクセスできるようにすることができます。
5. WAF 使用時の VPC 間アクセス
特定のシナリオでは、API がパブリックネットワークと内部ネットワークの両方に同時にサービスを提供する必要がある場合があります。パブリックネットワークでサービスを提供する場合、WAF ミドルウェアは API Gateway の前に接続され、API Gateway は WAF の前のクライアントに対して IP アクセス制御を実行する必要があります。同時に、内部ネットワークソースも制御する必要があります。API Gateway はこのシナリオに対応しています。resource フィールドと allowResourceMissing フィールドを併用することで、WAF などのミドルウェアを使用して、内部ネットワークとパブリックネットワークからのソース IP を同時に制御できます。resource フィールドを設定して、API Gateway が WAF ミドルウェアを通過する X-Forwarded-For ヘッダーからクライアント IP アドレスを取得するように指定できます。allowResourceMissing フィールドを使用して、クライアントが X-Forwarded-For ヘッダーを渡さない内部アクセスシナリオを API Gateway がどのように処理するかを構成し、前のホップからの IP を判断の基準として使用できます。例:
---
type: ALLOW # 制御モード。このパラメーターを ALLOW に設定してホワイトリストを適用するか、REFUSE に設定してブラックリストを適用できます。
resource: "XFF:-1" # オプション。このフィールドが設定されている場合、X-Forwarded-For ヘッダーの IP アドレスがソース IP アドレスとして使用されます。この例では、X-Forwarded-For ヘッダーの最後の IP アドレスがソース IP アドレスとして使用されます。
allowResourceMissing: "true" # resource フィールドが空の場合、API Gateway の直前の IP アドレスをソース IP アドレスとして使用します。
items:
- blocks: # API リクエストが許可される CIDR ブロック。
- 61.3.XX.XX/24 # CIDR ブロックを指定します。
appId: 219810 # オプション。このパラメーターを指定すると、この IP アドレスベースのアクセス制御ポリシーはこのパラメーターで指定されたアプリにのみ適用されます。
- blocks: # API リクエストが許可される IP アドレス。
- 79.11.XX.XX # IP アドレスを指定します。
- blocks: # API リクエストが許可される VPC の CIDR ブロック。
- 192.168.XX.XX/32 # VPC の CIDR ブロックを指定します。この項目は専用型インスタンスにのみ適用されます。API リクエストが VPC から専用型インスタンスに送信されると、API リクエストのソース IP アドレスは指定された CIDR ブロック内にあります。6. プラグインでプラグインデータセットを使用する
IP アドレスベースのアクセス制御プラグインを構成する方法の詳細については、「IP アドレスベースのアクセス制御プラグイン」をご参照ください。
6.1 プラグインデータセットの作成
API Gateway コンソールにログインし、リージョンを選択し、左側のナビゲーションウィンドウで を選択します。
[プラグインリスト] ページで、[プラグインデータセット] タブをクリックします。ページの右上隅にある [データセットの作成] をクリックします。[データセットの作成] ダイアログボックスで、データセットの [名前] を入力し、[タイプ] パラメーターに IP_WHITELIST_CIDR を選択します。

ターゲットデータセットの ID をクリックします。データセットページで、[データセットエントリの作成] をクリックします。[データセットエントリの作成] ダイアログボックスで、[データ値] (IP アドレスまたは CIDR ブロック) と [有効期間] (データセット内のデータエントリは有効期間が終了すると自動的に期限切れになります) を指定します。

プラグインデータセットは専用型インスタンスでのみ有効です。プラグインがバインドされている API が専用型インスタンスにデプロイされていない場合、プラグイン用に構成されたデータセットは有効になりません。
6.2 IP アドレスベースのアクセス制御プラグインのデータセットを構成する
IP アドレスベースのアクセス制御プラグインのデータセットを構成するには、既存の構成に基づいて items コレクション要素に blocksDatasetId フィールドを追加する必要があります。このフィールドの値は、上記で作成した IP_ACCESS_CIDR タイプのデータセットの ID です。blocksDatasetId フィールドと blocks フィールドは互いに互換性があります。各 item は、blocksDatasetId と blocks の両方、またはいずれか一方のみで構成できます。
---
type: ALLOW
items:
- blocksDatasetId: 87b65008e92541938537b1a4a236eda5
appId: 219810
- blocksDatasetId: 87b65008e92541938537b1a4a236eda3
blocks:
- 127.0.XX.XX
- 192.168.XX.XX/24