Googleクラウドにファイルをアップロードするための内部アプリを作成しようとしています。サービスアカウントを使用しているので、個々のユーザーまたはこのアプリにログインすることは望ましくありません。私はサービスアカウントにログインし、すべては大丈夫ですが、アップロードしようとするとこのエラーが表示されます:ServiceException:401 Anonymous caller has not storage.objects.list access to bucket
あなたが見ることができるように、私はサービスアカウントと私のアカウントでログインしており、(サービスまたは個人のどちらでも)動作します
私は同様の問題を抱えていましたが、いつものように、2時間かかりましたが、どこかに書かれていれば解決策は簡単でした...私はgsutilにログインする必要があります= gcloudの承認に加えて。私はそれらがリンクされているか何かと思ったが、そうではない。実行した後gsutil config
および提供されたリンク(およびコンソールに貼り付けたコード)を介して承認され、動作し始めました。
また、プロジェクトにリンクされたサービスアカウントを介してgcloudにログインし、サービスアカウント。jsonキーをローカルに保存していることに注意してください(gcloud auth activate-service-account --help
)。これがこれで苦労している人を助けることを望みます!
このエラーが表示される可能性があるいくつかのことしか考えられません。
<path-to-cloud-sdk>/google-cloud-sdk/bin/gsutil
_ではなく_<path-to-cloud-sdk>/google-cloud-sdk/platform/gsutil/gsutil
_を使用していることを確認してください。 platform
パスは、設定されたgcloud authオプションを自動的に認識しません。Gcloud botoファイル(_gcloud auth login
_を実行したときにgsutilで使用するために作成されたgcloud)が削除された可能性があります。 _gsutil version -l
_を実行して、構成パスに表示されているかどうかを確認できます。 gcloudのbotoファイルが存在する場合、次のような行が表示されます。
構成パス:/Users/Daniel/.config/gcloud/legacy_credentials/[email protected]/.boto
_gsutil version -l
_を実行して、もう少し情報を取得し、上記の可能性を調べることができます。特に、出力からのこれらの属性がおそらく最も役立つでしょう:_using cloud sdk
_、_pass cloud sdk credentials to gsutil
_、config path(s)
、および_gsutil path
_。
サービスアカウントに実際に必要な permission がありますか?この許可を与える role(s) はroles/storage.objectViewer/roles/storage.objectAdmin/roles/storage.adminです。
サービスアカウントにCloud Consoleで実際に権限が付与されていることを確認してください。これで機能するはずです。
---更新---
アカウントに正しい権限があるため、gsutilコマンドで正しいアカウントが使用されなかった可能性があります。これは、gsutilツールを複数インストールしている場合に発生する可能性があります。gsutilが.BOTOファイルへの正しいパスポイントを持っていることを確認してください。 github repo で同様の問題が報告されています。そのソリューションが機能するかどうかを確認できます。
最終的に、新しいマシン/ vmを新規インストールで使用して、テストして動作するかどうかを確認できます。これは、クラウドコンソールに移動して Cloud Shell を使用することで簡単に行えます。実際のインストールは不要です。テストは非常に簡単です。
これは機能するはずであり、元のマシンの問題を(複数インストールの問題に)基本的に切り分けます。その後、基本的にクリーンインストールを実行するだけで修正できます。
gcloud init
の実行中に初期化が不完全だったので、私に起こりました。 gcloud init
コマンドを使用して構成を再初期化し、正常に機能しました。
個人的には、適切な権限が登録されたアカウントがありましたが、「Sudo gcloud init」を使用してアカウントが実行されていることを確認したにもかかわらず、そのエラーが発生しました
私にとってそれを解決したのは、〜/ .gutilディレクトリに移動し、次のように書くことでした
Sudo chown jovyan:jovyan *
これにより、ルートからではなくデフォルトのjovyanからJupyterLabターミナルを実行できます。その後、匿名の発信者ではなく、私のアカウントを使用しました
python(gcloud SDKなし))を使用してgsutilをインストールした場合、gsutil config
および初期化の完全なステップ。