今回は、S3バケット内に保存したオブジェクトをダウンロードしたい時の記事になります。
■ はじめに
社内で作業しているときに、「S3バケットを仮ファイルサーバとして使いたい」ということがありました。(2分ぐらい。。。)
アクセス元となるグローバルIPアドレスは固定化されているため、一時的には良いだろうというところから、S3バケットの設定することにしました。
ただ、あまりS3バケットに対してパブリックアクセスを許可する機会がなく、「あれ?」と思うところもあったため、その手順を調査した結果を記載しております。
■ 設定箇所(概要)
・S3バケットの「ブロックパブリックアクセス」を「オフ」
・S3バケットの「バケットポリシー」を設定
※以降、詳細な手順を記載しております。 当方の環境で期待通りの挙動となることは確認しておりますが、万が一期待通りの設定となっていない場合に発生した如何なる損害についても一切責任は負えないため、あくまで自己責任で設定ください。
■ 設定箇所(詳細)
S3バケットの「ブロックパブリックアクセス」を「オフ」
1.対象のS3バケットの「アクセス許可」タブをクリックし、下記画像箇所の「編集」をクリックします。
2.「パブリックアクセスをすべてブロック」のチェックを外し、「変更の保存」をクリックします。
3.確認画面にてフィールドに「確認」と入力し、「確認」ボタンをクリックします。
※画像では「確認」ボタンがグレーアウトされていますが、フィールドに「確認」を入力すると押せるようになります。
4.以下画像のとおりになっていることを確認します。
S3バケットの「バケットポリシー」を設定
1.「バケットポリシー」の「編集」をクリックします。
2.以下のJsonにて、S3バケットARNと送信元となるIPアドレス部分(AAA.BBB.CCC.DDD/32)部分を各自の環境の応じて書き換え、保存します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicOpen",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"S3バケットARN",
"S3バケットARN/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "AAA.BBB.CCC.DDD/32"
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "S3バケットARN/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "AAA.BBB.CCC.DDD/32"
}
}
}
]
}
3.アクセスしたいオブジェクトをクリックし、「プロパティ」タブ内の"オブジェクトURL"にアクセスをします。
この際、指定したIPアドレスからはアクセスできること、指定していないIPアドレスからはアクセスできないことを確認してください。
以上です。