API Gateway リソースポリシーにIPホワイトリスト

8月 11, 2020APIGateway,AWS

概要

  • API Gatewayでは、S3のバケットポリシーの様にリソースポリシーを定義することが可能です。今回は、API Gateway のリソースポリシーを使い、アクセス元IPアドレスのホワイトリストを作成する方法をご紹介します。

 

リソースポリシーの書き方

  • リソースポリシーには、許可(Allow)、拒否(Deny)のどちらでも記載が可能です。以下サンプルは、許可(Allow)のパターンとなります。
  • Conditionには、「SourceIp」だけでなく、「SourceVpc」を指定することも可能です。詳細は、下記ドキュメントを参照ください。

 

  • API Gatewayコンソールに接続し、対象となるAPIを選択します。左側の展開されたメニューより、「リソースポリシー」を選びます。
  • 下記の通り、リソースポリシーをJSONで記載します。「保存」を押します。

 

  • 以下、ポリシーのサンプルです。

 


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
               "arn:aws:execute-api:ap-northeast-1:123456789012:abcdefg456/*"
            ],
            "Condition" : {
                "IpAddress": {
                    "aws:SourceIp": [ "162.XXX.XXX.XXX/30", "204.XXX.XXX.XXX/32" ]
                }
            }
        }
    ]
}

 

ポリシー変更後に行う大切なこと

  • リソースポリシーを更新後に行う大切なこととして、再度APIのデプロイを行う必要があります。再デプロイを忘れると、エラーメッセージに記載の403 Forbiddenが返ります。ご注意ください。

 

エラーメッセージ

  • IPホワイトリストに許可されていないIPアドレスからアクセスを行った場合、403 Forbiddenが返ります。前述の手順通り、IPアドレスをホワイトリストに登録しましょう。

{"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:ap-northeast-1:********9012:abcdefg456/prod/test"}

 

リソースポリシーの注意事項

ポリシーにサイズの上限あり

  • リソースポリシーを書く際に、サイズの上限があります。(8192 byteまで)
  • IPアドレスを多数記載する必要がある場合は、上限に納まるように注意ください。

 

Lambda オーソライザー (以前のカスタムオーソライザー)使用時の落とし穴

  • API GatewayでLambda オーソライザー(以前のカスタムオーソライザー)を使用する構成では、Lambda オーソライザーによる許可があるため、明示的にdeny設定を入れた後にallowするIPを設定する必要があります。
  • 以下のドキュメントサンプルを参考に、明示的な Deny を追加してください。