LoginSignup
15
16

More than 3 years have passed since last update.

S3でパブリックアクセス可能なファイルを投稿する

Posted at

はじめに

久しぶりに 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つをオフにする。

スクリーンショット 2019-07-07 11.45.32.png

あとは、ファイルアップロード時に acl でパブリックアクセスにすればOK。

aws s3 cp [任意のファイル] s3://s3-public-access-test/ --acl public-read

バケットポリシーで許可

下記のポリシーで、s3-public-access-test バケットの public フォルダ以下についてパブリックアクセスを許可している。

パブリックアクセス設定

下記の 2つを許可しておく。

  • 新しいパブリックバケットポリシーを介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする
  • 任意のパブリックバケットポリシーを介して、バケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする

スクリーンショット 2019-07-07 12.08.06.png

ポリシー

下記のポリシーを「アクセス権限」タブ内のバケットポリシーで設定する。
スクリーンショット 2019-07-07 12.13.36.png

{
  "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

タグの追加

バケット内の「プロパティ」タブから、タグを追加

key: public-object
value: yes
スクリーンショット 2019-07-07 12.42.38.png

パブリックアクセス設定

[バケットポリシーで許可]と同じ。

ポリシー

設定方法は[バケットポリシーで許可]と同じ。

{
    "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ブログを書くなら数ヶ月前の自分に向けて書くと良いとどこかで読んだが、マジで自分に届け。

15
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16