API Gateway リソースポリシーにIPホワイトリスト
Contents
概要
- 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 を追加してください。