はじめに
こんにちは!アプリケーションサービス部エデュケーショナルサービス課(以下ES課)の 三角(みすみ)です。
今回は送信元 IPでAWSアクセスを制限する際のIAMポリシーの注意点を実例を交えて紹介します!
送信元 IPでAWSアクセスを制限する際のIAMポリシーを作成する
「AWS IP制限 IAM」のような検索ワードでトップに出てくる下記の記事を元にIAMポリシーを作成します。
IAMポリシーの例
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"192.0.2.0/24",
"203.0.113.0/24"
]
}
}
}
}
実際の挙動を確認する
作成したIAMポリシーを適当なIAMユーザにアタッチします。
また、挙動を確認する為に「AdministratorAccess」もアタッチします。
この状態で「Systems Manager」→「フリートマネージャー」→「適当なEC2インスタンス」→「EBS ボリューム」にアクセスした場合、以下のエラーが発生しました。

原因
AWSサポートにも確認したところ、下記の挙動が原因でした。
- SystemsManagerからフリートマネージャでEBSボリュームなどを取得する際にRunCommandが実行される。
- RunCommandの実行時、AWS内部のIPアドレスでIAMユーザーの認証情報を使用してEBSボリュームの取得を実行する。
- AWS内部のIPアドレスはAWSアクセスを制限したIPの範囲外である為、AccessDenied によりEBSボリュームの取得が失敗する。
対策
この対策を実施するにはAWSアクセスを制限したIPの範囲外かつ、aws:ViaAWSServiceがfalse の場合にのみ Deny を行うポリシーに変更する必要があります。
これで問題なくアクセス可能となりました。
aws:ViaAWSServiceの説明は公式に下記の通り記載されています。
docs.aws.amazon.com
IAMポリシーの修正
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"192.0.2.0/24",
"203.0.113.0/24"
]
},
"Bool": {
"aws:ViaAWSService": "false"
}
}
}
}
送信元 IPでAWSアクセスを制限する際のIAMポリシーの注意点
最後に送信元IPでAWSアクセスを制限する際のIAMポリシーの注意点を纏めます
この記事が困っている方に届けばとてもうれしいです!
- IAMポリシーで、送信元 IPでAWSアクセスを制限した際、AWS内部のIPアドレスで処理を実施するAWSサービスはエラーが発生する。
- aws:SourceIp 条件キーと aws:ViaAWSService 条件キーの組み合わせでIAMポリシーを修正することで対応可能