Aws-cli: s3同期はバケット間で権限を保持しません

作成日 2014年08月27日  ·  34コメント  ·  ソース: aws/aws-cli

次のコマンドを使用してバケット間で同期する場合:

aws s3 sync s3:// bucket1 s3:// bucket2

バケット2のファイルは「同期」であるため、デフォルトではバケット1のファイルと同じ権限を持っていると思います。

代わりに、デフォルトの権限しかありません。

feature-request s3 s3copy-extra-data s3sync

最も参考になるコメント

パーミッションが同期されていないことを発見するのに少し時間がかかったので、おそらくs3のドキュメントをs3 syncに更新して、パーミッションが同期されていないデータのみが同期されることを言及すると、将来誰か他の人の時間を節約できます。

再度、感謝します

全てのコメント34件

すべてのファイルに同じ権限がありますか? 今のところ、 --aclを指定してsyncコマンドを実行し、権限を設定できるためです。 ただし、現在syncコマンドを他のオプションの引数なしで実行している場合は、アクセス許可を検索せず、オブジェクトが転送されるときに、元のオブジェクトと同じアクセス許可を持っていることを確認します。 追加の引数/機能を追加して、それを処理する必要があります。

いいえ-すべてのファイルに同じ権限がある場合は、-aclフラグを使用できます。

この機能は、特に、異なるアクセス許可を持つ何千ものファイルがあり、ファイルのコピーだけでなくバケット間で真の同期が必要な場合は、同期メカニズムに必須です。

ファイルごとにアクセス許可を取得する別の方法を知っているので、これを簡単にスクリプト化できますか?

助けてくれてありがとう。

ええ、各オブジェクトでaws s3api get-object-aclを実行するとします。 あなたはACLを取得することができます。 コマンドのドキュメントは次のとおりです。
http://docs.aws.amazon.com/cli/latest/reference/s3api/get-object-acl.html

OK-感謝しますが、この機能は同期で大いに評価されます。デフォルトではない場合でも、-preserve-s3-aclフラグで問題ありません。

問題ない。 機能を検討します。 実施されていないのは、運営自体に費用がかかるからだと思います。 s3バケット内のオブジェクトを判別するために、 ListObjectsが呼び出されますが、これは各オブジェクトのACLを返しません。 次に、リストされているすべてのオブジェクトに対してGetObjectAclに戻って実行する必要があります。これは、バケットに数千のアイテムがある場合、しばらく時間がかかる可能性があります。

パーミッションが同期されていないことを発見するのに少し時間がかかったので、おそらくs3のドキュメントをs3 syncに更新して、パーミッションが同期されていないデータのみが同期されることを言及すると、将来誰か他の人の時間を節約できます。

再度、感謝します

これに関する更新はありますか?

数週間前に、これ( copyなどの他のS3からS3への転送)に対処するためにプルリクエスト(#1535)を追加しました。 含めることを検討する可能性はありますか?

こんにちは、私はそれが古いスレッドであることを知っていますが、パーミッションタイプによる1つの同期によってこれを解決しました。 結論:-excludeと--includeを使用して、キー名で同期をフィルタリングできます。また、各同期のACLを指定することもできます...したがって、異なるアクセス許可を設定する必要があるキーのパターンがある場合は、さまざまなACLオプションで何度も必要なsyncコマンド。 理想からは程遠いですが、うまくいきます!

AWSチームからの考えはありますか?

バックアップのためだけにgitリポジトリをS3にプッシュしています。 そして、それらを同期して戻すと、あらゆる種類の権限が変更されました。

私の実行可能なbinファイルはすべて実行可能ではなくなり、gitstatusはそれについて不平を言います。

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+ 1、はい。バケットにピリオドを付けて名前を付けましたが、クラウドフロントを介してhttpsと互換性があるように変更する必要がありました。 正しく名前が付けられた新しいバケットに同期されました。 ファイルにアクセスできません。 権限についてお読みください。 オブジェクトレベルの権限が存在します。 バケット内のすべてのオブジェクトレベルの権限を変更するコマンドはありません。 どのように進めるか疑問に思います。 aws GUIを介したアクセス許可は、実際には両方のバケットから同じように見えますが、CLIを介してアクセス制御リストを検索すると、元のバケットにコピーされなかった追加の被付与者がいたことがわかります。
{{
「助成金」:{
「タイプ」:「グループ」、
"URI": " http://acs.amazonaws.com/groups/global/AllUsers "
}、
「許可」:「読み取り」
}

おはよう!

AWS CLIに関連する機能リクエストのUserVoiceへの移行の一環として、この問題をGitHubでクローズします。

これにより、バグレポートで会話を薄めることなく、最も関心のある機能の検索とサポートの表示が簡単になり、最も重要な機能を取得できるようになります。

簡単なUserVoice入門書として(まだなじみがない場合):アイデアが投稿された後、人々はアイデアに投票することができ、製品チームは最も人気のある提案に直接応答します。

GitHubから既存の機能リクエストをインポートしました-この問題をそこで検索してください!

そして心配しないでください、この問題は後世のためにGitHubにまだ存在します。 元の投稿をUserVoiceにテキストのみでインポートするため、GitHubの問題に関してすでにここに存在するコメントとディスカッションを引き続き念頭に置いておく必要があります。

GitHubは、バグを報告するためのチャネルであり続けます。

繰り返しになりますが、この問題は、 httpsます。

-AWS SDK&Toolsチーム

このエントリは、UserVoiceのhttps://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168325-s3-sync-does-not-preserve-permissions-across-にあります。 bucke

@ ASayre-これはこのディスカッションを行うには間違った場所かもしれませんが、AmazonがAWSCLIでのディスカッションをGitHubとUserVoiceに不自然に分割した理由について詳しく説明していただけますか?

ここGitHubでは、機能のリクエストが適切と思われます。 機能リクエストだけにフィルタリングするのは比較的簡単で、最も人気のあるリクエストで並べ替えることもできます。

screen shot 2018-03-24 at 12 34 47 am

GitHubを使用すると、コードスニペットを簡単に共有したり、他の問題(これに関連する#1060など)を参照したりすることもできます。AWSCLIユーザーベースの大部分は、ここGitHubですでにアクティブになっています。

コミュニティのフィードバックに基づいて、機能リクエストをGitHubの問題に返すことにしました。

誰かがこれを成し遂げるためにまともな解決策を思い付きますか? 多くの必要な機能。

上記の回答は、*を一般に公開することを強制します。 それは許可を保持しません。

進捗状況は? 私もこの問題に遭遇します。 今、私はこの問題を解決するためにsync --include / excludeを使用しています。

誰かがこれに取り組むために私にお金を払いたいですか?

4年経った今でもこの悪夢は続いています。 私は1000万以上のファイルを持っており、すべてコピー中にアクセス許可が失われています。 パーミッションを維持するような単純なことがどうして可能でしょうか?

+1

ここに来る他の人のために、私はこれを使用して、あるバケットを別のバケットにコピーし、ACLを保持することができました: https

また、大幅に高速です。

私の場合、現在s3を使用して作業フォルダーをバックアップしています。 これらにはgitリポジトリが含まれ、すべての権限が変更された後も私のリポジトリはおかしくなり続けます。

私にとっての解決策は、リポジトリごとのアクセス許可だけをリセットする方法を見つけることでした。 AWSがジャンクを修正するまで、これが私にとっての解決策です。

git config --global --add alias.permission-reset '!git diff -p -R --no-color | grep -E "^(diff|(old|new) mode)" --color=never | git apply'

私はここで解決策を見つけました:

https://stackoverflow.com/questions/2517339/how-to-recover-the-file-permissions-to-what-git-thinks-the-file-should-be

やあ、

私は同じ問題に遭遇しました-私はたくさんのオブジェクトを含むバケツを持っていましたが、それらのいくつかは公的にアクセス可能でなければなりません。 ACLを保持しながら、バケット全体を別のバケットにコピーする必要がありました。もちろん、ACLを手動で設定すると、非常に時間がかかります。

この単純なスクリプトをPythonで作成しました。このスクリプトは、オブジェクトを1つのバケットから別のバケットにコピーし、そのACLも設定します。

お気軽にご覧ください:
https://github.com/terminator9999/aws-s3-bucket-copy/

このページは役に立ちましたか?
0 / 5 - 0 評価