S3の特定のフォルダからのダウンロードをIP制限したい場合があります。
このような場合、S3のBucket Policyを利用します。

例えば、以下のようなフォルダ内の画像ファイルにアクセスします。

そうすると以下の画像が表示されます。

それでは、この画像が入っているフォルダに対してIP制限を掛けてみます。
まず、Bucket Policy画面を開きます。

ここに以下のように入力します。
※ジェネレータで作成しても構いません。

{
"Version": "2008-10-17",
"Id": "Policy1360868462747",
"Statement": [
{
"Sid": "Stmt1360868457064",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myfirst-bucket/img/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "xxx.xxx.xxx.xxx/32"
}
}
}
]
}

内容としては、全てのAWSアカウントを対象にmyfirst-bucket/img/*に
マッチするファイルへのs3のGetObjectのアクセスに関して
xxx.xxx.xxx.xxx/32以外のIPからの要求を拒否するといった内容としています。
「Save」で設定した後、再度アクセスしてみます。

そうすると、このようにエラーとなり、xxx.xxx.xxx.xxxのIP以外からのアクセスでは画像が表示されなくなりました。
他にもActionを色々変えたり追加することによって、アップロードを制限したり、一覧を制限したりすることが
できます。

こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら