API Gateway REST API へのアクセスのために、リソースポリシーを使って特定の IP アドレスを許可するにはどうすればよいですか?

最終更新日: 2020 年 12 月 8 日

特定の IP アドレスについて Amazon API Gateway REST API へのアクセスを許可し、それ以外のすべてのユーザーについてはアクセスを制限したいです。どうすればそれができますか?

簡単な説明

特別に許可されていない IP アドレスへのアクセスを拒否する REST API 用リソースポリシーを作成します。指定された IP アドレスから REST API を呼び出すユーザー (許可されたユーザー) が REST API にアクセスできます。他の IP アドレスからの呼び出しはアクセスを拒否され、HTTP 403 Forbidden エラーが発生します。

解決方法

注: 以下の手順では、既存の API Gateway REST API を使用するか、テスト用の REST API の例を作成します。この設定にサンプル API (PetStore) を使用する場合は、「リソースポリシーの作成と添付」から開始してください。

API メソッドを設定する

  1. API Gateway コンソールを開き、REST API を選択します。
  2. [リソース] ペインで、[アクション]、[メソッドの作成] の順にクリックします。
  3. / resource ノードの下のドロップダウンリストで、[ANY] を選択し、チェックマークアイコンをクリックします。
  4. [/ - ANY - セットアップ] ペインの [統合タイプ] で [Mock] を選択してから [保存] をクリックします。

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

リソースポリシーの作成とアタッチ

  1. API Gateway コンソールの左のナビゲーションペインで [リソースポリシー] を選択します。
  2. この例のリソースポリシーをコピーして、[リソースポリシー] テキストボックスに貼り付けます。

リソースポリシーの例

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

注: 特定の IP アドレスへのアクセスをブロックし、それ以外のすべてのユーザーのアクセスを許可するには、「例: 送信元の IP アドレスまたは IP アドレスの範囲に基づき、API トラフィックを拒否する」のリソースポリシーを参照してください。

3.    aws:SourceIp において、sourceIpOrCIDRBlock の部分を、許可を与える特定の IP アドレスに置き換えます。あるいは、CIDR 表記を使用して、IP アドレスの範囲を指定することもできます。例:

["10.0.0.0/8", "192.168.0.0/16", "172.16.0.1/32"]

: aws:SourceIp はパブリック IP アドレス範囲でのみ機能します。プライベート IP 範囲へのアクセスを許可するには、aws:VpcSourceIp を使用します。この設定は、プライベート API を使用する場合に効果的です。詳細については、aws:VpcSourceIpをご参照ください。

4.    [Save] をクリックします。

API のデプロイ

  1. API Gateway コンソールの [リソース] ペインで、[アクション]、[API のデプロイ] の順にクリックします。
  2. [デプロイされるステージ] で、[新規ステージ] を選択します。
  3. [ステージ名] には名前を入力します。例えば、v1 や demo です。
  4. [デプロイ] を選択します。

注: この後にリソースポリシーを変更した場合は、必ず API の再デプロイを行ってください。

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

  1. API Gateway コンソールの [ステージ] ペインで、呼び出す URL をコピーします。
  2. 許可された IP アドレスを持つ環境と許可された IP アドレスを持たない環境の両方から、HTTP 200 応答をテストします。コマンドラインインターフェイスから curl を使用するか、Postman アプリを使用します。curl の詳細については、curl プロジェクトのウェブサイトを参照してください。

注: テストのために複数の環境にアクセスできない場合は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを設定できます。API のリソースポリシーでアクセスを許可するインスタンスの IP アドレスを必ず指定してください。次に、API をもう一度デプロイします。

curl を使用するには、次のいずれかのコマンドを実行して、https://yourInvokeUrl/ を REST API の呼び出し URL で置き換えます。

Linux/Unix/macOS 環境:

curl -IX GET https://yourInvokeUrl/

Windows PowerShell:

curl https://yourInvokeUrl/

許可された環境では、HTTP 200 応答を受信します。拒否された環境では、HTTP 403 Forbidden エラーが表示されます。