Amazon S3のバケットについて、誰でも読み取りできるようにするためのバケットポリシーについてのメモ書き。jQueryなんかgetしたりなんだりするための設定も併せて。
S3の権限
S3において、特に設定を変更せずにバケットを作成すると、非公開のバケットが作成される。普通はそれでよいのだが、公開用のバケットを作成したい時もある。
誰でも読み取りできるようなバケットにするには、コンソールでS3→バケットを選択し、「アクセス権限」タブより「バケットポリシー」で下記のようなjsonを記述する。

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ReadThisBacketImg",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::{バケット名}/*"
}
]
}
これでバケットがパブリックになる。
CORSの設定
こういう設定をするバケットは、JavaScriptやらでGETしたい時もある。そういう時は、CORS(Cross-Origin Resource Sharing)の設定を行う。先と同様の手順で、「バケットポリシー」ではなく「CORSの設定」より、以下のxmlを記述する。
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
このあたりの詳細については「AWS S3上のjsonファイルをgetJSONしたらNo ‘Access-Control-Allow-Origin’ header is present on the requested resourceと怒られた時の対応 – 或る阿呆の記」を参照。
以上。
関連記事
aws の記事
- [2018年8月8日] S3にGETやらPUTやらしたい時の設定
- [2018年8月3日] AWSのLambdaでcronみたいな感じで定期実行する
- [2018年7月31日] LambdaでS3をトリガーにした時にConfigurations overlap. Configurations on the same bucket cannot share a common event type.と怒られる
- [2018年7月31日] Lambdaで、S3に画像がアップロードされたら、別のバケットにコピーする(python3)
- [2018年7月27日] 既存システムにAWSのLambdaで作ったREST APIの認可で手こずる
- ---本記事---
- [2018年7月20日] simpleMicroServiceRoleでDynamoDBをqueryする権限を与える
- [2018年7月12日] AWS Lambda + API Gateway で/hoge/{group}/{user}のように階層構造のREST APIでパスパラメータの受け渡し
- [2018年7月9日] AWS Lambda + API Gateway でREST APIを作成し、値を渡してDynamoDBに書き込んでついでに返り値を得るサンプル
- [2018年6月28日] AWS S3上のjsonファイルをgetJSONしたらNo ‘Access-Control-Allow-Origin’ header is present on the requested resourceと怒られた時の対応
- [2018年6月19日] AWSのELBでセッション維持の設定(スティッキーセッション)
スポンサーリンク