#はじめに
久しぶりに AWS で新規アプリケーション開発したらハマった。
2018/11 から S3 のパブリックアクセス機能がリリースされ、一工夫必要になったらしい。
https://aws.amazon.com/jp/blogs/news/amazon-s3-block-public-access-another-layer-of-protection-for-your-accounts-and-buckets/
ではどうすればいいのかという話。
パブリックアクセス機能についてはこちらを参照。
https://dev.classmethod.jp/cloud/aws/s3-block-public-access/
設定手順
下記の3つのいずれかの設定でパブリックアクセス可能なオブジェクトにできる。
公開権限を委任しアップロード時にパブリックアクセスを許可する
権限の委任以外は従来と同じ。
パブリックアクセス設定
- 新しいアクセスコントロールリスト (ACL) を介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする
- 任意のアクセスコントロールリスト (ACL) を介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする
の 2つをオフにする。
あとは、ファイルアップロード時に acl でパブリックアクセスにすればOK。
aws s3 cp [任意のファイル] s3://s3-public-access-test/ --acl public-read
バケットポリシーで許可
下記のポリシーで、s3-public-access-test バケットの public フォルダ以下についてパブリックアクセスを許可している。
パブリックアクセス設定
下記の 2つを許可しておく。
- 新しいパブリックバケットポリシーを介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする
- 任意のパブリックバケットポリシーを介して、バケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする
ポリシー
下記のポリシーを「アクセス権限」タブ内のバケットポリシーで設定する。
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::s3-public-access-test/public/*"]
}
]
}
public ディレクトリ以下にアップロードされたファイルは常にパブリックアクセス許可された状態になる。
aws s3 cp [任意のファイル] s3://s3-public-access-test/public/
バケットポリシー & タグで制御
特定のタグが付与されたオブジェクトについて、パブリックアクセス許可のポリシーを適用する方法。
一括で権限を変更できるので一番スマートかもしれない。
タグの利用には別途料金がかかる。
https://aws.amazon.com/jp/s3/pricing/#S3_Storage_Management_pricing
タグの追加
バケット内の「プロパティ」タブから、タグを追加
パブリックアクセス設定
[バケットポリシーで許可]と同じ。
ポリシー
設定方法は[バケットポリシーで許可]と同じ。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::s3-public-access-test/*",
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/public-object": "yes"
}
}
}
]
}
コマンド
cp 時に付与できないようでちょっと面倒。プログラムでアップロードするなら関係ないかも。
# ファイルアップロード
aws s3 cp ~/Downloads/5c886538.jpg s3://s3-public-access-test/public/ --profile=kol
# タグを付与
aws s3api put-object-tagging --bucket s3-public-access-test --key "public/[任意のファイル]" --tagging 'TagSet={Key=public-object,Value=yes}'
#終わりに
AWS S3 でパブリックアクセス可能なファイルを投稿するための設定方法を記述した。
Techブログを書くなら数ヶ月前の自分に向けて書くと良いとどこかで読んだが、マジで自分に届け。