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

  • 30
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

背景

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 }}