リソースポリシーを使用して、適切な IP アドレスによる API Gateway API へのアクセスを許可する方法を教えてください。

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

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

簡単な説明

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

解決方法

以下の手順のテストには、既存の API Gateway API を使用するか、サンプル API を作成してください。セットアップにサンプル API(PetStore)を使用する場合は、以下の「リソースポリシーの作成とアタッチ」にスキップしてください。

API メソッドを設定する

1.    API Gateway コンソールを開き、API を選択します。

2.    [リソース] ペインで、[アクション]、[メソッドの作成] の順にクリックします。

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

4.    [/ - ANY - Setup] ペインで、[統合タイプ] に [Mock]を選択した上で、[保存] をクリックします。

注: Mock 統合は、到達したすべてのリクエストに応答するので、後に行うテストで役立ちます。

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

1.    API Gateway コンソールの左のナビゲーションペインで、[Resource Policy] を選択します。

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.    [Stage name] には名前を入力します。たとえば、v1demo です。

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/ を API の呼び出し URL で置き換えます。

Linux/Unix/macOS 環境:

curl -IX GET https://yourInvokeUrl/

Windows PowerShell:

curl https://yourInvokeUrl/

許可された環境は HTTP 200 応答を受け取り、拒否された環境は HTTP 403 Forbidden エラーを受け取ります。