アクセス権限セットでIPアドレス制限を行うと一部操作がエラーになるときの対処方法

2022.01.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

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.