S3 バケットに対して特定IP からのみ接続を許可する

バケットに接続できる IP を絞りたいことがある。バケットポリシーを記載することで制御可能なので方法を紹介。

ブロックパブリックアクセス (バケット設定)

ブロックパブリックアクセスはすべてオフにする

バケットポリシー

バケットポリシーの設定は以下の通り

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::tsukada-hoge-js",
                "arn:aws:s3:::tsukada-hoge-js/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "1.1.1.111/32",
                        "2.2.2.222/32"
                    ]
                }
            }
        }
    ]
}

ポイントとして、

Resource にバケット自体を宣言するのとは別にバケット配下を /* でワイルドカードで指定する必要があるという点だ。