すべてのプロダクト
Search
ドキュメントセンター

API Gateway:IPアドレスベースのアクセス制御プラグイン

最終更新日:Nov 19, 2024

API Gatewayは、IPアドレスベースのアクセス制御プラグインを提供し、APIのセキュリティを強化します。 これらのプラグインは、APIリクエストを送信できるIPアドレスまたはCIDRブロックを指定するために使用されます。 APIのホワイトリストまたはブラックリストにIPアドレスを追加して、そのIPアドレスからのAPIリクエストを許可または拒否できます。

1. 概要

IPアドレスベースのアクセス制御プラグインを設定する場合、2つの制御モードを使用できます。

  • 許可: 許可モードでは、指定したIPアドレスからのリクエストを許可するようにホワイトリストを設定できます。 次のタイプのホワイトリストがサポートされています。

    • 許可されたIPアドレスのみを含むホワイトリストを設定できます。 この場合、ホワイトリスト内のIPアドレスからのAPIリクエストのみが許可されます。

    • アプリケーションとそのIPアドレスを指定するホワイトリストを設定できます。 この場合、各アプリケーションは、ホワイトリスト内のIPアドレスからのみAPIリクエストを送信できます。

  • 拒否: 拒否モードでは、IPアドレスブラックリストを設定できます。 API Gatewayは、ブラックリスト内のIPアドレスからのすべてのAPIリクエストを拒否します。

重要

IPアドレスベースのアクセス制御プラグインは、IPv4アドレスのみをサポートします。

2. 設定

IPアドレスベースのアクセス制御プラグインをJSONまたはYAML形式で設定できます。 2つの形式は同じスキーマを持ち、変換ツールを使用して互いに変換できます。 次のコードでは、YAML形式のプラグイン構成テンプレートについて説明し

---
type: ALLOW           # The control mode. You can set this parameter to ALLOW to apply a whitelist or REFUSE to apply a blacklist.
resource: "XFF:-1"   # Optional. If this field is set, an IP address in the X-Forwarded-For header is used as the source IP address. In this example, the last IP address in the X-Forwarded-For header is used as the source IP address. 
items: 
- blocks:         # A CIDR block from which API requests are allowed.
  - 61.3.XX.XX/24   # Specify a CIDR block.
  appId: 219810   # Optional. If you specify appId, the CIDR block applies only to the application indicated by appId.
- blocks:         # An IP address from which API requests are allowed.
  - 79.11.XX.XX    # Specify an IP address.
- blocks:         # The CIDR block of a VPC from which API requests are allowed.
  - 192.168.XX.XX/32    # Specify the CIDR block of a VPC. This item applies only to dedicated instances. When an API request is sent from a VPC to a dedicated instance, the source IP address of the API request is in the specified CIDR block.

最後のコメントに特に注意してください。 専用インスタンスを使用する場合、API GatewayはVPCからのAPIリクエストを許可し、ソースVPCのIPアドレス (192.168.XX.XXなど) を直接読み取ることができます。 ブラックリストまたはホワイトリストでVPCのIPアドレスを直接設定できます。

3. WAFが使用されている場合

Web Application Firewall (WAF) などのミドルウェアサービスが使用されるシナリオで、特定のAPIのブラックリストまたはホワイトリストを構成する場合は、リソースフィールドを指定する必要があります。 リソースフィールドを指定しないままにすると、WAFが提供するIPアドレスが送信元IPアドレスと見なされます。 このフィールドを指定すると、X-Forwarded-Forヘッダーの値が送信元IPアドレスとして使用されます。

説明

WAFは、受信したリクエストの送信元IPアドレスをX-Forwarded-Forヘッダーの末尾に追加し、そのIPアドレスをAPI Gatewayに送信します。 API Gatewayは、X-Forwarded-Forヘッダーの値を送信元IPアドレスと見なします。 この場合、XFF:-1 for API Gatewayを使用して、WAFによって追加されたIPアドレスをソースIPアドレスとして使用することを推奨します。

リソースフィールドの値形式は「XFF:index」です。 indexの値は、X-Forwarded-Forヘッダ内のIPアドレスのシーケンス番号であり、0から始まり、負の数を許可します。 例えば、X-Forwarded-ForにIP1、IP2、IP3の3つのIPアドレスが連続している場合、XFF:0はIP1を示し、XFF:-1は最後のIPアドレスであるIP3を示す。

4. クロスVPCアクセス

APIリクエストがVPCから別のVPCの専用インスタンスに送信された場合、API GatewayはリクエストからソースVPCのIPアドレスを直接読み取ることができます。 VPCでIPアドレス用のプラグインを準備するときに安心できます。 API Gatewayは、ソースVPCのIDを読み取ることもできます。 指定されたVPCのみがAPIにアクセスできるように、パラメーターベースのアクセス制御プラグインを設定できます。

5. WAFが使用されている場合のクロスVPCアクセス

特定のシナリオでは、APIはパブリックと内部の呼び出し元に同時にサービスを提供し、WAFはパブリック呼び出し元に設定されます。 この場合、API Gatewayを使用して、内部IPアドレスとWAFに先行するパブリックIPアドレスの両方を制御する必要があります。 API Gatewayは、リソースフィールドとallowResourceMissingフィールドを組み合わせて使用するというシナリオに適したソリューションを提供します。 リソースフィールドは、WAFに先行するパブリックIPアドレスを制御するためにX-Forwarded-Forヘッダーで使用されます。 allowResourceMissingフィールドは、X-Forwarded-Forヘッダーが渡されない場合に内部IPアドレスを制御するために使用されます。この場合、クライアントIPアドレスはソースIPアドレスと見なされます。 例:

---
type: ALLOW           # The control mode. You can set this parameter to ALLOW to apply a whitelist or REFUSE to apply a blacklist.
resource: "XFF:-1"   # Optional. If this field is set, an IP address in the X-Forwarded-For header is used as the source IP address. In this example, the last IP address in the X-Forwarded-For header is used as the source IP address.
allowResourceMissing: "true"  # Uses the IP address directly preceding API Gateway as the source IP address when the resource field is left empty.
items: 
- blocks:         # A CIDR block from which API requests are allowed.
  - 61.3.XX.XX/24   # Specify a CIDR block.
  appId: 219810   # Optional. If you specify this parameter, this IP address-based access control policy applies only to the app specified by this parameter.
- blocks:         # An IP address from which API requests are allowed.
  - 79.11.XX.XX    # Specify an IP address.
- blocks:         # The CIDR block of a VPC from which API requests are allowed.
  - 192.168.XX.XX/32    # Specify the CIDR block of a VPC. This item applies only to dedicated instances. When an API request is sent from a VPC to a dedicated instance, the source IP address of the API request is in the specified CIDR block.

6. プラグインでのプラグインデータセットの使用

IPアドレスベースのアクセス制御プラグインを設定する方法の詳細については、「IPアドレスベースのアクセス制御プラグイン」をご参照ください。

6.1 プラグインデータセットの作成

  1. API Gatewayコンソールにログインします。 左側のナビゲーションウィンドウで、[APIの管理] > [プラグイン] を選択します。

  2. [プラグインリスト] ページで、[カスタムデータセット] タブをクリックします。 タブの右上隅にある [データセットの作成] をクリックします。 [データセットの作成] ダイアログボックスで、データセットの [名前] を入力し、[タイプ] パラメーターに [IP_WHITELIST_CIDR] を選択します。

    image..png

  3. 作成したデータセットのIDをクリックします。 データセットの詳細ページで、[データセットエントリの作成] をクリックします。 [データセットエントリの作成] ダイアログボックスで、[データ値] (IPアドレスまたはCIDRブロック) と [有効期間] を指定します。 有効期間が経過すると、データセット内のデータエントリは無効になります。

    image..png

重要

プラグインデータセットは、専用インスタンスに対してのみ有効です。 プラグインがバインドされているAPIが専用インスタンスにデプロイされていない場合、プラグイン用に設定されたデータセットは有効になりません。

6.2 IPアドレスベースのアクセス制御プラグインのデータセットの構成

IPアドレスベースのアクセス制御プラグインのデータセットを構成するには、プラグイン構成のitemsセクションにblocksDatasetIdフィールドを追加する必要があります。 このフィールドの値は、作成されたIP_ACCESS_CIDRデータセットのIDです。 blocksDatasetIdフィールドとblocksフィールドは互いに互換性があります。 itemsセクションで指定したアイテムごとに、blocksDatasetIdまたはblocks、またはその両方を指定できます。

---
type: ALLOW 
items: 
- blocksDatasetId: 87b65008e92541938537b1a4a236eda5
  appId: 219810
- blocksDatasetId: 87b65008e92541938537b1a4a236eda3
  blocks:
  - 127.0.XX.XX
  - 192.168.XX.XX/24