web-dev-qa-db-ja.com

S3:パブリックフォルダーを再びプライベートにしますか?

AWS S3パブリックフォルダーを再びプライベートにするにはどうすればよいですか?

ステージングデータをテストしていたので、フォルダー全体をバケット内で公開しました。アクセスを再度制限したいです。では、フォルダを再びプライベートにするにはどうすればよいですか?

55
GoodGets

私が理解していることから、管理コンソールの「パブリックにする」オプションは、ディレクトリ内のすべてのオブジェクトにパブリック許可を再帰的に追加します。これを確認するには、1つのファイルを右クリックして、[プロパティ]をクリックします。次に、「Permissions」をクリックする必要があります。行が必要です。

 Grantee:  Everyone  [x] open/download  [] view permissions   [] edit permission.

このディレクトリ内に新しいファイルをアップロードすると、このパブリックアクセスが設定されないため、プライベートになります。

いくつかのキーしかない場合は手動で、またはスクリプトを使用して、パブリック読み取り許可を1つずつ削除する必要があります。

S3フォルダー内のすべてのキーの 'public read'属性を再帰的に削除する 'boto'モジュールを使用して、Pythonで小さなスクリプトを作成しました。

#!/usr/bin/env python
#remove public read right for all keys within a directory

#usage: remove_public.py bucketName folderName

import sys
import boto

bucketname = sys.argv[1]
dirname = sys.argv[2]
s3 = boto.connect_s3()
bucket = s3.get_bucket(bucketname)

keys = bucket.list(dirname)

for k in keys:
    new_grants = []
    acl = k.get_acl()
    for g in acl.acl.grants:
        if g.uri != "http://acs.amazonaws.com/groups/global/AllUsers":
            new_grants.append(g)
    acl.acl.grants = new_grants
    k.set_acl(acl)

2つのオブジェクト(のみ)を含むフォルダーでテストし、動作しました。 lotsのキーがある場合、完了するまでに時間がかかる場合があり、並列アプローチが必要になる場合があります。

37
ascobol

受け入れられた答えはうまく機能します-与えられたs3パスにもACLを再帰的に設定しているようです。ただし、これは s3cmd と呼ばれるサードパーティのツールによっても簡単に実行できます-私たちは会社で頻繁に使用しており、AWSコミュニティでかなり人気があるようです。

たとえば、この種のs3バケットとディレクトリ構造s3://mybucket.com/topleveldir/scripts/bootstrap/tmp/があるとします。ここで、Amazon S3コンソールを使用して、scripts "ディレクトリ"全体をパブリックとしてマークしたとします。

scripts "ディレクトリツリー"全体を再帰的に(つまり、サブディレクトリとそのファイルを含む)再びプライベートにするには:

s3cmd setacl --acl-private --recursive s3://mybucket.com/topleveldir/scripts/

必要に応じて、scripts "ディレクトリツリー"を再帰的に再びパブリックにすることも簡単です。

s3cmd setacl --acl-public --recursive s3://mybucket.com/topleveldir/scripts/

また、上記のコマンドで--recursiveを省略するだけで、特定のs3 "ディレクトリ"(つまり、非再帰的)にのみアクセス許可/ ACLを設定することもできます。

s3cmdが機能するには、まずs3cmd --configureを介してs3cmdにAWSアクセスキーと秘密キーを提供する必要があります(詳細については http://s3tools.org/s3cmd を参照してください) 。

54
nonbeing

AWS CLIの場合、これはかなり簡単です。

オブジェクトが次の場合:s3://<bucket-name>/file.txt

単一オブジェクトの場合:

aws s3api put-object-acl --acl private --bucket <bucket-name> --key file.txt

バケット内のすべてのオブジェクト(bash one-liner):

aws s3 ls --recursive s3://<bucket-name> | cut -d' ' -f5- | awk '{print $NF}' | while read line; do
    echo "$line"
    aws s3api put-object-acl --acl private --bucket <bucket-name> --key "$line"
done
11
Varun Chandak

AWS S3バケットリスト(AWS S3 UI)から、individualファイルのアクセス許可を変更できますeitherone file public またはフォルダー全体のコンテンツを公開することにより(明確にするために、バケット内のフォルダーを参照しています)。パブリック属性をプライベートに戻すには、ファイルをクリックしてからアクセス許可に移動し、「EVERYONE」見出しの下にある放射状ボタンをクリックします。 * read object "属性のチェックを外すことができる2番目のフローティングウィンドウが表示されます。変更を保存することを忘れないでください。リンクにアクセスしようとすると、通常の" Access Denied "メッセージが表示されます。ファイルをクリックして前述の手順を実行すると、4つのステップを示す2番目のスクリーンショットが表示されます。複数のファイルを変更するには、以前の投稿で提案したスクリプトを使用する必要があります。 -Kf

First: Bucket listing in AWS-S3


Second:steps to change access permission

9
K F

このガイドに従って実際にAmazonのUIを使用しました http://aws.Amazon.com/articles/5050/

although it looks somewhat different than that guide

8
comandante N

現時点では、 boto docs に従って、この方法でそれを行うことができます

#!/usr/bin/env python
#remove public read right for all keys within a directory

#usage: remove_public.py bucketName folderName

import sys
import boto

bucketname = sys.argv[1]
dirname = sys.argv[2]
s3 = boto.connect_s3()
bucket = s3.get_bucket(bucketname)

keys = bucket.list(dirname)

for k in keys:
    # options are 'private', 'public-read'
    # 'public-read-write', 'authenticated-read'
    k.set_acl('private') 

また、s3バケットの[権限]タブでバケットポリシーを削除することも検討できます。

3
Levon

@kintuparantuの答えはうまく機能しますが、awk部分のために、スクリプトはlsの結果の最後の部分のみを説明することに言及する価値があります。ファイル名にスペースが含まれている場合、awkは、ファイル名全体ではなく、スペースで分割されたファイル名の最後のセグメントのみを取得します。

例:folder1/subfolder1/this is my file.txtのようなパスを持つファイルは、単にfile.txtと呼ばれるエントリになります。

スクリプトを使用している間にそれを防ぐには、$NFawk {print $NF}を、「スペースで分割」操作が行うセグメントの数を考慮した一連の可変プレースホルダーで置き換える必要があります。ファイル名の名前には非常に多くのスペースが含まれている可能性があるため、誇張しましたが、正直なところ、これらのケースに対処するには完全に新しいアプローチの方が良いと思います。更新されたコードは次のとおりです。

#!/bin/sh
aws s3 ls --recursive s3://plusplus-staging | awk '{print $4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25}' | while read line; do
    echo "$line"
    aws s3api put-object-acl --acl private --bucket plusplus-staging --key "$line"
done

cutを使用しても結果が得られなかったため、削除しました。彼がスクリプトを作成したので、クレジットはまだ@kintuparantuに送られます。

2
Luca Bezerra

これは現在Amazonによって対処されているようです。

次のチェックボックスを選択すると、バケットとそのコンテンツが再びプライベートになります。

バケットにパブリックポリシーがある場合、パブリックおよびクロスアカウントアクセスをブロックする

https://aws.Amazon.com/blogs/aws/Amazon-s3-block-public-access-another-layer-of-protection-for-your-accounts-and-buckets/

enter image description here

1
Spiff

今日これをやった。私の状況では、ファイルを非公開にする必要がある特定のトップレベルディレクトリがありました。公開する必要があるフォルダがいくつかありました。

私は、他の多くの人がすでに示したように、s3cmdを使用することにしました。しかし、膨大な数のファイルがあるため、各ディレクトリに対して並列s3cmdジョブを実行したかったのです。そして、1日かそこらかかるので、EC2マシンでバックグラウンドプロセスとして実行したかったのです。

t2.xlargeタイプを使用してUbuntuマシンをセットアップしました。マイクロインスタンスでメモリ不足のメッセージでs3cmdが失敗した後、xlargeを選択しました。 xlargeはおそらく過剰ですが、このサーバーは1日だけ稼働します。

サーバーにログインした後、s3cmdをインストールして構成しました。

Sudo apt-get install python-setuptools wget https://sourceforge.net/projects/s3tools/files/s3cmd/2.0.2/s3cmd-2.0.2.tar.gz/download mv download s3cmd.tar.gz tar xvfz s3cmd.tar.gz cd s3cmd-2.0.2/ python setup.py install Sudo python setup.py install cd ~ s3cmd --configure

私はもともとscreenを使用しようとしましたが、いくつかの問題がありました。主にscreen -rのような適切な画面コマンドを実行しているにもかかわらず、プロセスはscreen -S directory_1 -d -m s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_1から落ちていました。そこで、いくつかの検索を行って、Nohupコマンドを見つけました。ここに私が終わったものがあります:

Nohup s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_1 > directory_1.out & Nohup s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_2 > directory_2.out & Nohup s3cmd setacl --acl-private --recursive --verbose s3://my_bucket/directory_3 > directory_3.out &

マルチカーソルエラーの場合、これは非常に簡単になります(ディレクトリのリストにaws s3 ls s3//my_bucketを使用しました)。

そうすることで、logoutを好きなように設定し、再度ログインしてログを追跡することができます。次のような複数のファイルを末尾に追加できます:tail -f directory_1.out -f directory_2.out -f directory_3.out

したがって、s3cmdを設定し、Nohupを使用しました。楽しむ!

1
Steve Potter

enter image description here

S3ブラウザーを使用している場合は、パブリックまたはプライベートにするオプションがあります。

0
Avinash Clinton