調べたらすぐ出てくるのだが、結構古い内容も多くなかなか正解にたどり着けなかった。 S3はAWS re:Inventなどでちょこちょこ機能追加されてコンソールで設定できる内容が多くなっており、その影響を受けてバケットポリシーを追加するだけではIP制限をかけることができなくなっている。
よって2020/02/14時点の内容をメモしておく。たぶん1年後にはまた操作が変わっていると思われる…
バケットポリシーでホワイトリスト形式でIPアドレス制限を行う。
ポイントはリソースで “バケット名"と"バケット名/*“を許可して上げること。 全てDenyにしなくともAllowエフェクトがある場合には許可されているIP以外は拒否されるようだ。
{
"Version": "2012-10-17",
"Id": "PolicyId2",
"Statement": [
{
"Sid": "AllowIPmix",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::your-bucket-name/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"AllowedIPaddress1",
"AllowedIPaddress2"
]
}
}
},
{
"Sid": "AllowIPmix",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::your-bucket-name",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"AllowedIPaddress1",
"AllowedIPaddress2"
]
}
}
}
]
}
次にコンソールから以下のパブリックアクセスを許可するようポチッとする。
アクセス権限タブ内:ブロックパブリックアクセスの「編集」をクリックし、すべてオフにする
アクセスコントロールリスト内のパブリックアクセスのEveryoneのオブジェクトの一覧を許可にする
上記の設定でアクセス権限タブに黄色で「パブリック」というマークが付与されるはず。
上記の設定でIP制限のかかったバケットが出来上がったはず。 バケット直下に適当な画像などを置いて、許可されているIPと許可されていないIPからそれぞれアクセスしてみると制限がかかっていることが確認できると思う。