web-dev-qa-db-ja.com

S3:別のユーザーが作成した場合、ユーザーは自分のs3バケット内のオブジェクトにアクセスできません

外部ユーザーは、バケットポリシーで次のアクションを使用して、s3バケットにアクセスできます。

"Action": [
            "s3:GetObjectAcl",
            "s3:GetObject",
            "s3:PutObjectAcl",
            "s3:ListMultipartUploadParts",
            "s3:PutObject"
        ]

そのユーザーが生成した 一時的な認証情報 は、バケットにファイルをアップロードするために使用されました。

現在、ファイルにアクセスできません。 s3 UIでファイルをダウンロードしようとすると、403が表示されます。そのオブジェクトの権限を変更しようとすると、「申し訳ありません。このバケットを表示する権限がありません。」というメッセージが表示されます。一時的な認証情報でファイルをアップロードするときに、外部ユーザーが適切なヘッダー(x-amz-acl bucket-owner-full-control)を設定すると、通常どおりファイルにアクセスできます。自分がバケットを所有していても、アクセスできないファイルを外部ユーザーがそこに入れる可能性があるのは不思議に思えます。

ファイルにアクセスできるように、またはに追加できる任意のファイルにアクセスできるように設定できるポリシーがある可能性はありますか? 方法に関係なく、私のバケットは追加されますか?ありがとう!

17
eric

オブジェクト所有者にACLを更新するか、バケット所有者のフルコントロールを指定してオブジェクトを書き直す必要があると思います。これを試す最も簡単な方法は、CLIを使用することです。

aws s3api put-object-acl --acl bucket-owner-full-control --bucket some-bucket --key path/to/unreadable.txt

ええ、私はあなたがオブジェクトごとに一度行う必要があると思います、私は再帰的なオプションはないと思います。

AWSは サンプルバケットポリシー を発行して、バケット所有者に完全な制御権を与えることなく、オブジェクトをバケットに追加できないpreventとします。しかし、それはすでにバケットにあるオブジェクトの所有権には対応しません。

私は自動的に所有権をバケット所有者に移すポリシーは知りません。

22
James

実際にコピーと再帰的なオプションを使用してすべてのオブジェクトをバケットにコピーし、次の構文を使用してacl bucket-owner-full-controlを設定できます。

aws s3 cp s3://myBucket s3://myBucket --recursive --acl bucket-owner-full-control --storage-class STANDARD
14
user307297