#はじめに
メンテナンス性も考慮した
、API Gatewayの一部のリソースのみIP制限する方法についてまとめました。
#前提条件
例として、hoge1
,hoge2
,fuga1
,fuga2
の4つのリソースを作成するとします。
作成する際、IP制限あり
のhoge1
,hoge2
の手前にrestriction
をつけます。
対して、IP制限なし
のfuga1
,fuga2
の手前にはfree
をつけます。
実際にIP制限する際に楽になりますので、説明した通りに作成しましょう。
###4つのURL
IP制限あり
https://~/prod/restriction/hoge1
https://~/prod/restriction/hoge2
IP制限なし
https://~/prod/restriction/fuga1
https://~/prod/restriction/fuga2
#リソースポリシーで、一部のみIP制限する
左のリソースポリシー
をクリックしましょう。
以下をコピペします。
ステージ
は、prod
とします。
<account-id>
は、文字通りAWSアカウントIDです。
<api-id>
は、apigatewayのIDになります。(下記画像の赤線箇所です。)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-northeast-1:<account-id>:<api-id>/prod/*/*/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-northeast-1:<account-id>:<api-id>/prod/*/restriction/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": ["111.111.11.11/32", "222.222.22.22/32"]
}
}
}
]
}
#リソースポリシーの解説
上のAllow
では、全てのapiを許可しています。
下のDeny
では、/prod/*/restriction/*
としており、restriction
配下のリソースであるhoge1
とhoge2
のみIP制限できます。
手前にrestriction
をつけることで、
今後、IP制限したいリソースやIP制限しなくないリソースが出た際に、
リソースポリシーを修正する必要はなく、メンテが楽なため、 最初に、restriction
とfree
をつけるとよいと思います。
ちなみに、restriction
配下のGETメソッドのみIP制限したい場合、以下のようにGETをつけるとよいです。
↓
/prod/GET/restriction/
その他、リソースポリシーの一般的なユースケースはこちらが参考になります。
#すべてのリソースをIP制限する場合
ちなみにすべてのリソースをIP制限する場合は、以下のとおりです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-northeast-1:<account-id>:<api-id>/prod/*/*/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-northeast-1:<account-id>:<api-id>/prod/*/*/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": ["111.111.11.11/32", "222.222.22.22/32"]
}
}
}
]
}