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}"
}
]
}
設定のポイント
- Denyステートメント
- 指定したIPアドレス以外のアクセスを明示的に拒否します。
NotIpAddress
条件を使用して、許可されていないIPからのアクセスをブロックします。
- Allowステートメント
- 指定したリソースへのアクセスを許可します。
- Denyルールに該当しないトラフィック(つまり、許可されたIPアドレスからのアクセス)のみが通過します。
実装時の注意点
- ポリシーの評価順序
- AWS IAMでは、明示的なDenyが常に優先されます。
- ポリシー内では、Denyステートメントを先に配置し、次にAllowステートメントを記述してください。
- IPアドレスの指定方法
- IPアドレスはCIDR表記(例:
192.168.1.1/32
)を使用します。 - 単一のIPアドレスの場合は、サフィックス
/32
を指定してください。 - 複数のIPアドレスを許可する場合は、配列形式で指定することが可能です。
- IPアドレスはCIDR表記(例:
まとめ
AWS API Gatewayのリソースポリシーを利用すれば、特定のIPアドレスからのみアクセスを許可する設定を簡単に実現できます。
この方法は以下のようなケースで特に有効です。
- 社内システム専用のAPIアクセスを制限したい場合
- 特定のパートナー企業からのアクセスのみを許可したい場合
- 開発環境でのアクセスを特定IPアドレスに限定したい場合
参考資料
- AWS公式ドキュメント:API Gateway resource policy examples