🍇

S3 デフォルトの設定+バケットポリシー書くだけでIP制限できる話

2024/07/27に公開

S3にindex.htmlおいてIP制限をかけた状態で配信というパターンで一番王道なのは、CloudFrontで配信しつつ、WAFをアタッチするというものかなと思います。
ただ、ちょっとした確認だけをしたいときにCloudFrontをおいてIPSetを作ってWAFを設定するのは面倒なときがあります。

今回はS3だけを使ってIP制限をかけた状態で配信をする方法を書きます。
用途としては、一時的な社内向けだとか自分専用だとか、http通信でもあんまり困らない場面を想定してます。

考え方は以下のような感じです。
S3はデフォルトの時点でパブリックアクセスが全てブロックされている。
特定のIPだけアクセスできるようにバケットポリシーだけ設定して穴をあけてあげる。

まずは、静的Webサイトホスティングを設定します。

この時点では、パブリックアクセスはもちろんできません。

バケットポリシーに以下を追記します。
内容は皆さんの環境に応じて適宜変更してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "許可したいバケットのARN/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
					    "許可したいIPアドレス/32"
					]
                }
            }
        }
    ]
}

バケットポリシーを更新してから実際に反映されるまでに若干の時間を要しますが、これで特定のIPからのアクセスが可能になります!

まあでも正直なところS3+CloudFrontの構成をIaaC化してしまって環境構築してしまう方が良いと思いますね。

Discussion