web-dev-qa-db-ja.com

AccessDeniedException:403所有者アカウントを使用するGCSでは禁止

バケット内のファイルにアクセスしようとしましたが、ファイルへのアクセスが拒否され続けています。 GCSコンソールでそれらを見ることができますが、それを介してそれらにアクセスでき、以下のコマンドを実行してgsutilを介してそれらにアクセスすることはできません。

gsutil cp gs://my-bucket/folder-a/folder-b/mypdf.pdf files/

しかし、このリターンはすべてAccessDeniedException: 403 Forbidden

すべてのファイルなどを一覧表示できますが、実際にはアクセスできません。ユーザーをACLに追加しようとしましたが、それでも効果がありませんでした。すべてのファイルは、VMからFuseマウントを介してアップロードされました。これは完全に機能し、すべてのアクセスが失われました。

私はこれらの投稿をチェックしましたが、私を助けた解決策を持っている人はいないようです

私が所有者であるにもかかわらず、OWNERとしてリソースにアクセスできません

gsutilコピーがGCEから「AccessDeniedException:403 InsufficientPermission」を返します

gsutil corssetコマンドは403AccessDeniedExceptionを返します

14
MobliMic

これはかなり可能です。バケットを所有すると、そのバケットにFULL_CONTROL権限が付与されます。これには、そのバケット内のオブジェクトを一覧表示する機能が含まれます。ただし、バケットのアクセス許可は、オブジェクトのアクセス許可を自動的に意味するわけではありません。つまり、他のアカウントがオブジェクトをアップロードしていて、ACLを「プライベート」のようなものに設定している場合、バケットの所有者はそのアクセス権にアクセスできません(ただし、オブジェクトの削除はバケットの権限であるため、バケットの所有者は、オブジェクトを読み取ることができなくても、オブジェクトを削除できます)。

デフォルトのFuse設定についてはよくわかりませんが、推測しなければならない場合は、プロジェクトのシステムアカウントを使用してオブジェクトをアップロードしており、オブジェクトはプライベートに設定されています。それはいいです。これをテストする最も簡単な方法は、GCEホストからgsutilを実行することです。ここで、デフォルトの資格情報はシステムアカウントになります。それが機能する場合は、gsutilを使用して、ACLを「project-private」などのより寛容なものに切り替えることができます。

そのためのコマンドは次のようになります。

gsutil acl set -R project-private gs://muBucketName/
6

しかし、かなり古い質問です。しかし、私は最近同様の問題を抱えていました。ここで提案されている多くのオプションを試しても成功しなかった後、スクリプトを注意深く再検討したところ、バケットアドレス「gs:// my-bucket」の間違いの結果としてエラーが発生していることがわかりました。私はそれを修正しました、そしてそれは完全に働きました!

3
Shina