LoginSignup
42
43

More than 5 years have passed since last update.

AWS CLIを使ってS3のバケット内オブジェクトのpermission(ACL)を一括変更する

Last updated at Posted at 2015-06-09

背景

s3バケット内のオブジェクトのパーミッションでeveryoneにリード権限がないので、サイトが公開できない...(なぜ、、wordpressとか使っているとたまにある...)

↓↓↓↓↓

_人人人人人人人人人人人人人人人人人人人人人人人人人人人人_
バケット内のオブジェクトに一括でpublic-readの権限を与えたい
 ̄YYYYYYYYYYYYYYYYYYYYYYYYYYYY ̄

↓↓↓↓↓

なんかブラウザのコンソール画面からバケットに権限与えても各オブジェクトのpermissionは変わらないしどうしようと思ってググったところ

下記で公開されているようなsdkを使ってパーミッションを変更するもの等ありました。

、、、がsdk入れるのめんどくさい。。。
AmazonLinuxAMIだからaws-cliは入ってる。これでいけるだろ、いけるに決まってる。
と思い書いてみました。

AWS CLIを使ってS3のバケット内オブジェクトのpermission(ACL)を一括変更する

  • 対象のs3バケットに権限のあるアクセスキーを登録
$ aws configure
AWS Access Key ID []:
AWS Secret Access Key []:
Default region name [ap-northeast-1]:
Default output format [json]:

もしくは

$ export AWS_ACCESS_KEY_ID=xxxxxxxxxx
$ export AWS_SECRET_ACCESS_KEY=xxxxxxxxxx
$ export AWS_DEFAULT_REGION=ap-northeast-1
$ export AWS_DEFAULT_OUTPUT=json

参考:【AWS】CLIの初期設定について(認証情報とコマンド補完)

  • スクリプト
[直列で実行]
aws s3 ls --recursive s3://{{ bucketName }}/ | awk '{print $4}' | xargs -I{} aws s3api put-object-acl --acl public-read --bucket {{ bucketName }} --key "{}"

[並列で実行]
aws s3 ls --recursive s3://{{ bucketName }}/ | awk '{print $4}' | xargs -P4 -I{} aws s3api put-object-acl --acl public-read --bucket {{ bucketName }} --key "{}"

※ 並列実行は試していないが、直列だと結構時間かかったので...(-P 並列実行数 のオプションをつけて)

  • あるフォルダのみ対象にする
aws s3 ls --recursive s3://{{ bucketName }}/path/ | awk '{print $4}' | xargs -P4 -I{} aws s3api put-object-acl --acl public-read --bucket {{ bucketName }} --key "{}"

こんな感じでできる。
lsの値にpath指定をしてあげればOK!

もっと良い方法ありそうだが、なかなかでてこなかったのでひとまずこれで乗り切りました。
もし良い方法あれば教えてください。

[追記]
s3cmdを入れる方がだいぶ楽だったようです..笑

s3cmd setacl -r --acl-public s3://{{ bucketName }}
42
43
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
42
43