AWS

【API Gateway】で特定IPアドレスからのアクセスのみを許可する方法

APIのセキュリティを強化するために、アクセス制御は重要な要素です。
本記事では、AWS API Gateway を使用して特定のIPアドレスからのみアクセスを許可する方法を解説します。

背景

あるセキュリティ要件として、「APIへのアクセスを特定のIPアドレスのみに制限する」必要がありました。
この要件を満たすため、AWS API Gatewayのリソースポリシーを活用しました。
本記事では、その具体的な設定方法を紹介します。

方法

リソースポリシーの設定方法

API Gatewayでリソースポリシーを以下のように設定します。環境に応じて、Resource aws:SourceIp の値を適宜変更してください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:${REGION}:${ACCOUNT_ID}:${API_ID}/*/GET/${RESOURCE_PATH}",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": "${ALLOWED_IP_ADDRESS}/32"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:${REGION}:${ACCOUNT_ID}:${API_ID}/*/GET/${RESOURCE_PATH}"
    }
  ]
}

設定のポイント

  1. Denyステートメント
    • 指定したIPアドレス以外のアクセスを明示的に拒否します。
    • NotIpAddress 条件を使用して、許可されていないIPからのアクセスをブロックします。
  2. Allowステートメント
    • 指定したリソースへのアクセスを許可します。
    • Denyルールに該当しないトラフィック(つまり、許可されたIPアドレスからのアクセス)のみが通過します。

実装時の注意点

  1. ポリシーの評価順序
    • AWS IAMでは、明示的なDenyが常に優先されます。
    • ポリシー内では、Denyステートメントを先に配置し、次にAllowステートメントを記述してください。
  2. IPアドレスの指定方法
    • IPアドレスはCIDR表記(例: 192.168.1.1/32)を使用します。
    • 単一のIPアドレスの場合は、サフィックス /32 を指定してください。
    • 複数のIPアドレスを許可する場合は、配列形式で指定することが可能です。

まとめ

AWS API Gatewayのリソースポリシーを利用すれば、特定のIPアドレスからのみアクセスを許可する設定を簡単に実現できます。
この方法は以下のようなケースで特に有効です。

  • 社内システム専用のAPIアクセスを制限したい場合
  • 特定のパートナー企業からのアクセスのみを許可したい場合
  • 開発環境でのアクセスを特定IPアドレスに限定したい場合

参考資料