特定の IP アドレスのみが API Gateway REST API にアクセスすることを許可するにはどうすればよいですか?

最終更新日: 2021 年 9 月 20 日

特定の IP アドレスのみが自分の Amazon API Gateway REST API にアクセスすることを許可したいと考えています。API Gateway REST API へのアクセスを制限するにはどうすればよいですか?

簡単な説明

特別に許可されていない IP アドレスへのアクセスを拒否する REST API 用リソースポリシーを作成します。

リソースポリシーが REST API にアタッチされると、指定された IP アドレスから API を呼び出すユーザー (許可されたユーザー) は API にアクセスできます。他の IP アドレスからの呼び出しはアクセスを拒否され、HTTP 403 Forbidden エラーが表示されます。

注: 特定の IP アドレスをブロックし、他のすべてのアクセスを許可するには、例: 送信元の IP アドレスまたは IP アドレスの範囲に基づき、API トラフィックを拒否するを参照してください。

解決方法

注: 以下の手順では、既存の API Gateway REST API を使用するか、テストのために REST API の例を作成できます。サンプル API (PetStore) を使用する場合は、2 つ目の 特定の IP アドレスのみが API Gateway REST API にアクセスすることを許可するリソースポリシーを作成およびアタッチするのセクションに進んでください。

API メソッドを設定する

1.    API Gateway Console にログインします。

2.    REST API を選択します。

3.    [Resources] (リソース) パネルで [Actions] (アクション) を選択します。その後、[Create Method] (メソッドの作成) を選択します。

4.    /resource ノードの下のドロップダウンリストで、[ANY] (指定なし) を選択します。その後、チェックマークアイコンを選択します。

5.    [/ - ANY - Setup] (/ - ANY - セットアップ) ペインの [Integration type] (統合タイプ) で、[Mock] (モック) を選択します。

6.    [Save] (保存) を選択します。

注: モック統合はそれに到達したすべてのリクエストに応答しますが、これは後でテストのときに役立ちます。

特定の IP アドレスのみが API Gateway REST API にアクセスすることを許可するリソースポリシーを作成およびアタッチする

1.    API Gateway Console にログインします。

2.    左側のナビゲーションペインで、[Resource Policy] (リソースポリシー) を選択します。

3.    [Resource Policy] (リソースポリシー) のテキストボックスに、次のリソースポリシーの例を貼り付けます。

リソースポリシーの例

{
  "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"]
        }
      }
    }
  ]
}

3.    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 エンドポイントを介してのみ呼び出すことができることに留意してください。詳細については、aws:VpcSourceIp を参照してください。

4.    [Save] (保存) を選択します。

注: Amazon CloudWatch Logs$context.identity.sourceIp 変数は、REST API を呼び出すプライベート IP アドレスを一覧表示します。詳細については、データモデル、オーソライザー、マッピングテンプレート、および CloudWatch アクセスログ記録用の $context 変数を参照してください。

API をデプロイする

1.    REST API の [Resources] (リソース) ペインで、[Actions] (アクション) を選択します。

2.    [Deploy API] (API をデプロイ) を選択します。

3.    [Deployment stage] (デプロイされるステージ) で、[New Stage] (新規ステージ) を選択します。

4.    [Stage name] (ステージ名) に名前を入力します。例えば、v1 や demo です。

5.    [Deploy] (デプロイ) を選択します。

重要: リソースポリシーを変更するたびに REST API を再デプロイする必要があります。

リソースポリシーのテスト

curl または Postman アプリケーションを使用して API の呼び出し URL をテストして、REST API が許可された IP アドレスに対して HTTP 200 OK レスポンスを返すことを確認します。その後、許可された IP アドレスのない環境から別のテストを実行し、REST API が HTTP 403 Forbidden エラーを返すことを確認します。

注: テストのために複数の環境にアクセスできない場合は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを設定できます。Amazon EC2 インスタンスをテストに使用する場合は、まずインスタンスの IP アドレスを API のリソースポリシーに追加してください。その後、API を再デプロイします。

curl を使用して HTTP 200 OK レスポンスまたは HTTP 403 エラーについて REST API をテストするには

オペレーティングシステムに基づいて、次のコマンドを実行します。

重要: https://yourInvokeUrl/ を REST API の呼び出し URL に置き換えます。

Linux、Unix、および macOS 環境の場合は、次のコマンドを実行します。

curl -IX GET https://yourInvokeUrl/

Windows PowerShell の場合は、次のコマンドを実行します。

curl https://yourInvokeUrl/

リソースポリシーが正しく設定されている場合、許可された環境は HTTP 200 OK レスポンスを受け取ります。拒否された環境では、HTTP 403 Forbidden エラーが表示されます。