送信元 IP 制限している IAM ユーザ で API Gateway の相互 TLS 認証登録の際に「Unable to access truststore URI ~~」が発生する場合の対応方法

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

困っていた内容

マネージメントコンソールにて API Gateway のカスタムドメインの相互 TLS 設定を登録する際に、トラストストア URI の入力箇所にアップロードした pem ファイル(S3 URI)を指定後、保存をすると以下のエラーメッセージが出力されました。

Unable to access truststore URI s3://{S3 バケット名}/******.pem version N/A.

なお、登録の際に利用する IAM ユーザには、AdministratorAccess の IAM ポリシーと、特定の IP アドレスからのアクセスを拒否するための IAM ポリシーを付与しています。

事象解消について、どのように対応すればよいでしょうか?

どう対応すればいいの?

操作を行っている IAM ユーザーのポリシーに IP アドレスによる Deny が含まれていることが原因です。

以下の様な IAM ポリシーをアタッチしている IAM ユーザーで操作を行った場合、AdministratorAccess 権限が付与されていても "Unable to access truststore URI ~~" のエラーが発生します。

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Deny",
        "Action": "*",
        "Resource": "*",
        "Condition": {
            "NotIpAddress": {
                "aws:SourceIp": [
                    "<アクセス元の IP アドレス>"
                ]
            }
        }
    }
}

これは API Gateway サービスがユーザーに変わって操作を行うために拒否されている動作となります。
そのため、IP アドレス制限の記述をなくすか、以下のように ViaAWSService キーを使用することによってもカスタムドメインの作成が成功します。

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Deny",
        "Action": "*",
        "Resource": "*",
        "Condition": {
            "NotIpAddress": {
                "aws:SourceIp": [
                    "<アクセス元の IP アドレス>"
                ]
            },
            "Bool": {
                "aws:ViaAWSService": "false"
            }
        }
    }
}

参考資料