はじめに

AWS S3 Bucket 内のオブジェクトの ACL(アクセス権限) を一括で変更する方法を調べた。

S3のパーミッションの設定を一括変更する | ハックノート の通り

TL;DR

  • 事前に aws コマンド(AWS CLI) を設定
  • aws s3 ls --recursive s3://my-bucket/ でバケット内のオブジェクトを再帰的に取得
  • aws s3api put-object-acl --acl private でパブリックアクセス不可に設定
  • awk, xargs と組み合わせて、1件ずつ処理を行う

目次

  1. はじめに
  2. TL;DR
  3. 環境・条件
  4. 詳細
    1. パブリック→プライベート
      1. 実行時間(参考)
    2. プライベート→パブリック
  5. まとめ
  6. 参考文献

環境・条件

1
2
3
4
5
6
7
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.1
BuildVersion: 19B88

$ aws --version
aws-cli/1.16.215 Python/3.6.2 Darwin/19.0.0 botocore/1.12.205

詳細

S3のパーミッションの設定を一括変更する | ハックノート の通り

パブリック→プライベート

--profile {profile} は削った。(※aws configure でセットアップ済み)

--acl private でプライベートに設定。

1
2
3
$ aws s3 ls --recursive s3://my-bucket/ \
| awk '{print $4}' \
| xargs -I{} aws s3api put-object-acl --acl private --bucket my-bucket --key "{}"

実行時間(参考)

19057 件分の変更で 5時間 39分(開始 21:25、終了 03:04)かかった。

1
2
3
$ aws s3 ls --recursive s3://my-bucket/ > items.txt
$ wc -l items.txt
19057 items.txt

プライベート→パブリック

--acl public-read でパブリックに設定。
※試してない

1
2
3
$ aws s3 ls --recursive s3://my-bucket/ \
| awk '{print $4}' \
| xargs -I{} aws s3api put-object-acl --acl public-read --bucket my-bucket --key "{}"

まとめ

  • 事前に aws コマンド(AWS CLI) を設定
  • aws s3 ls --recursive s3://my-bucket/ でバケット内のオブジェクトを再帰的に取得
  • aws s3api put-object-acl --acl private でパブリックアクセス不可に設定
  • awk, xargs と組み合わせて、1件ずつ処理を行う

参考文献

関連記事