アクセス権限セットでIPアドレス制限を行うと一部操作がエラーになるときの対処方法
困っていた内容
AWS Single Sign-On のアクセス権限セットで、社内のIPアドレス以外からの操作を拒否するポリシーを追加したところ、これまで実行できていた操作がエラーになりました。なぜでしょうか?
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "192.0.2.0/24" ] } } } }
どう対応すればいいの?
Condition
ブロックにaws:ViaAWSService
条件の追加をご検討ください。
※12行目のカンマ忘れにご注意ください
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "192.0.2.0/24" ] }, "Bool": {"aws:ViaAWSService": "false"} } } }
CloudFormation などの一部の AWS サービスはユーザーからの操作に応じて(ユーザーに代わって)リソースの操作等を行います。リソースを操作する際、送信元IPアドレスはユーザーのIPアドレスではなく、AWSサービスのIPアドレスとなるため、NotIpAddress
条件でユーザーが使うIPアドレス以外を拒否した場合、アクセスは拒否されます。
そのため、ユーザーに代わってリソースを操作する AWS サービスを想定して、リクエスト条件の追加をご検討ください。
IAM ポリシーで特定条件のアクセス制限をかけつつ、AWS サービスのアクセスは許可したいときの対処方法 | DevelopersIO
"aws:ViaAWSService" は AWS サービスがユーザーに代わってリクエストを実行したかどうかを判定する条件キーです。CloudFormation などの AWS サービスがアクセスした際は、値が "true" になります。
なお、アクセス権限セットは、 IAM として設定されますので、IAMに関するドキュメント(設定サンプル)も参考にできます。
AWS: 送信元 IP に基づいて AWS へのアクセスを拒否する - AWS Identity and Access Management
参考資料
Permission sets are stored in AWS SSO and provisioned to the AWS account as IAM roles.