
どーも!
たかぽんです!
S3に配置したファイルをパブリックへ公開する方法について簡単にメモをしておこうと思います...!
やりたかったこと
今回、筆者がポートフォリオサイトを作る際、写真を公開するためのソースを配置する場所としてS3をつかうことにしました。
今回はあくまでポートフォリオ用のファイルで、一般に公開指定も良いので、そういった設定をして、ブラウザ上で該当のオブジェクトのS3URLで閲覧ができるようにしたかったんですね。
途中で一部悩む箇所があったので、改めてしっかりと残しておこうと思います...!
それでわ!やっていきましょう!
S3のバケットの設定からアクセス許可ブロックを解除する
さて、まず最初にAWS ConsoleからAWSのバケットへのブロック設定を解除します。
たとえばphotographs-qaバケットがあった場合、バケットのアクセス許可を見ると以下の様になっています。

まず最初に、ブロックパブリックアクセスをオフにします
ブロックパブリックアクセスの編集を選択すると、以下の様な画面が出てくるので、パブリックアクセスを全てブロックのチェックを外して、変更の保存をクリック。

すると、確認画面が出てくるので確認します。
この時点だと、まだアクセス時にAccessDeniedになるかと思います。

これは、まだポリシーが設定されていないので、アクセスができない状態になっているので、弾かれます。
では次に、最低限のGetObjectのポリシーを設定します。
バケットポリシーを設定する
先ほどのパブリックアクセスの下にバケットポリシーの項目があるので、編集をクリックします。

クリックしたら、以下の内容をコピペして、"photographs-qa"の箇所はバケット名に変換した上で保存します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::photographs-qa/*"
}
]
}
これは、ポリシーといって、jsonで書かれたバケットへの操作等を管理する設定ファイルになります。
今回、Principalがアスタリスク=パブリック(誰でも操作可能)で、操作内容はGetObject、リソースがphotographs-qaバケットの全てのファイルなので...
以下のポリシーを設定すると...
photographs-qaのファイルを誰でもGetObjectすることができる様になる...といった設定になります。
GetObjectはS3の基本的なActionで、ファイルの取得ですね。
さて、設定が完了したら、適当な画像をバケットへアップロードし、以下のオブジェクトの画面の右下にあるオブジェクトURLを用いてブラウザでアクセスするとちゃんと画像が表示されるかと思います。

まとめ
さて、今回はS3でパブリックにアクセスできるバケットを作成してみました...!
今回の設定だと、バケット以下全ファイルの取得が第三者でも可能な点は注意してください。
Dropbox等でやるのも一つ手かなぁ...と思いましたが、使い慣れているAWSである上、後々プログラムで管理する際の利便性も圧倒的に高そうなので、S3を採用してみました。
S3での公開についても色々あるので、どこかのタイミングでガッツリまとめておきたいですね...!
それでわ!