web-dev-qa-db-ja.com

gsutil ServiceException:401 gcloudにログインしていても、匿名の呼び出し元にはバケットへのstorage.objects.listアクセス権がありません

Googleクラウドにファイルをアップロードするための内部アプリを作成しようとしています。サービスアカウントを使用しているので、個々のユーザーまたはこのアプリにログインすることは望ましくありません。私はサービスアカウントにログインし、すべては大丈夫ですが、アップロードしようとするとこのエラーが表示されます:ServiceException:401 Anonymous caller has not storage.objects.list access to bucket

This is the error that I get

あなたが見ることができるように、私はサービスアカウントと私のアカウントでログインしており、(サービスまたは個人のどちらでも)動作します

9
Daniel Tranca

私は同様の問題を抱えていましたが、いつものように、2時間かかりましたが、どこかに書かれていれば解決策は簡単でした...私はgsutilにログインする必要があります= gcloudの承認に加えて。私はそれらがリンクされているか何かと思ったが、そうではない。実行した後gsutil configおよび提供されたリンク(およびコンソールに貼り付けたコード)を介して承認され、動作し始めました。

また、プロジェクトにリンクされたサービスアカウントを介してgcloudにログインし、サービスアカウント。jsonキーをローカルに保存していることに注意してください(gcloud auth activate-service-account --help)。これがこれで苦労している人を助けることを望みます!

9
Petr Krýže

このエラーが表示される可能性があるいくつかのことしか考えられません。

  1. Gsutilのスタンドアロンインストール(gcloudと資格情報を共有しない)にセットアップされたエイリアスがあるかもしれません。
    編集:間違ったgsutilエントリポイントを呼び出している可能性もあります-_<path-to-cloud-sdk>/google-cloud-sdk/bin/gsutil_ではなく_<path-to-cloud-sdk>/google-cloud-sdk/platform/gsutil/gsutil_を使用していることを確認してください。 platformパスは、設定されたgcloud authオプションを自動的に認識しません。
  2. サービスアカウントの認証情報が移動したか、無効になった可能性がありますか? botoファイルがキーファイルパスを参照しており、キーファイルが移動された場合、これが発生する可能性があります。
  3. 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_。

5
mhouglum

サービスアカウントに実際に必要な permission がありますか?この許可を与える role(s) はroles/storage.objectViewer/roles/storage.objectAdmin/roles/storage.adminです。

サービスアカウントにCloud Consoleで実際に権限が付与されていることを確認してください。これで機能するはずです。

---更新---

アカウントに正しい権限があるため、gsutilコマンドで正しいアカウントが使用されなかった可能性があります。これは、gsutilツールを複数インストールしている場合に発生する可能性があります。gsutilが.BOTOファイルへの正しいパスポイントを持っていることを確認してください。 github repo で同様の問題が報告されています。そのソリューションが機能するかどうかを確認できます。

最終的に、新しいマシン/ vmを新規インストールで使用して、テストして動作するかどうかを確認できます。これは、クラウドコンソールに移動して Cloud Shell を使用することで簡単に行えます。実際のインストールは不要です。テストは非常に簡単です。

これは機能するはずであり、元のマシンの問題を(複数インストールの問題に)基本的に切り分けます。その後、基本的にクリーンインストールを実行するだけで修正できます。

2
Ying Li

gcloud initの実行中に初期化が不完全だったので、私に起こりました。 gcloud initコマンドを使用して構成を再初期化し、正常に機能しました。

2
Jainam Jhaveri

個人的には、適切な権限が登録されたアカウントがありましたが、「Sudo gcloud init」を使用してアカウントが実行されていることを確認したにもかかわらず、そのエラーが発生しました

私にとってそれを解決したのは、〜/ .gutilディレクトリに移動し、次のように書くことでした

Sudo chown jovyan:jovyan * 

これにより、ルートからではなくデフォルトのjovyanからJupyterLabターミナルを実行できます。その後、匿名の発信者ではなく、私のアカウントを使用しました

0

python(gcloud SDKなし))を使用してgsutilをインストールした場合、gsutil configおよび初期化の完全なステップ。