GCEから「AccessDeniedException:403 Insufficient Permission」を返すgsutil copy


90

SSH経由でGCEインスタンスにログインしています。そこから、サービスアカウントを使用してストレージにアクセスしたいと思います。

GCE> gcloud auth list
Credentialed accounts:
 - 1234567890-compute@developer.gserviceaccount.com (active)

最初に、このサービスアカウントに、作業中のプロジェクトの権限で「編集可能」のフラグが付けられていることを確認しました。また、ファイルをコピーしてほしいバケットに書き込みACLを付与するようにしました。

local> gsutil acl ch -u 1234567890-compute@developer.gserviceaccount.com:W gs://mybucket

ただし、次のコマンドは失敗します。

GCE> gsutil cp test.txt gs://mybucket/logs

(「ログ」が「mybucket」の下に作成されることも確認しました)。

私が得るエラーメッセージは:

Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission               0 B  

何が欠けていますか?


7
GCE VMはフルコントロールまたは読み取り/書き込みGCSスコープで作成されましたか?
jterrace 14

1
指摘いただきありがとうございます。私は実際にそのオプションを知りませんでした。オプションを有効にしてインスタンスを再作成し、それが機能しました。答えとしてフラグをオンにすることを提案できれば、喜んでフラグを立てます。
クリストフ

回答:


131

GCE VMを作成するときに、適切なスコープを設定するようにしてください。VMにサービスアカウントがアタッチされている場合でも、GCSにアクセスするには、VMにdevstorageスコープを割り当てる必要があります。

たとえば、devstorage.read_onlyスコープを指定してVMを作成した場合、サービスアカウントにバケットへの書き込み権限があっても、バケットへの書き込みは失敗します。devstorage.full_controlまたはが必要devstorage.read_writeです。

詳細については、サービスアカウントを使用するためのインスタンスの準備に関するセクションをご覧ください。

注:デフォルトのコンピューティングサービスアカウントのスコープは非常に限定されています(GCSに対して読み取り専用にすることを含む)。これは、デフォルトのサービスアカウントにプロジェクト編集者のIAM権限があるためです。ユーザーサービスアカウントを使用する場合、ユーザーが作成したサービスアカウントはデフォルトですべてのスコープアクセスを取得するため、これは通常問題にはなりません。

VMに必要なスコープを追加した後gsutilも、新しいスコープを持たないキャッシュされた認証情報を使用している可能性があります。~/.gsutilgsutilコマンドを再試行する前に削除してください。(コメントでこれを指摘してくれた@mndrixに感謝します。)


1
権限を使用してインスタンスを再作成しましたが、すべて正常に機能します。ありがとう
Syclone

33
現在、スコープを編集できます。マシンを停止し、編集してから、Cloud APIアクセススコープを変更します。これは現在約1か月間しか利用できないと思います。
ウォーレン

143
VMに必要なスコープを追加した後gsutilも、新しいスコープを持たないキャッシュされた認証情報を使用している可能性があります。gsutilコマンドを再試行する前に〜/ .gsutilを削除してください。
mndrix 2016

2
どうもありがとうmndrix!
ギジェルモ2017

2
@mndrixは一日節約
ベン・ギルド

50

そのプロジェクトに必要な権限を持つアカウントでログインする必要があります。

gcloud auth login

1
gcloud auth revoke <email-account>完了したら発行することを忘れないでください。
ssasa

50

gsutil config -b

次に、それが提供するURLにアクセスします。 [クリック許可]

次に、確認コードをコピーしてターミナルに貼り付けます。


gsutilから実行する場合、これは機能しないことに注意してくださいssh
bfontaine 16

3
ブラウザを開かない限り、「動作しません」。代わりに、手動でコピーして貼り付けるためのURLを提供します。
BuvinJ

6
これを落とすと、-bこれは他のすべての人にもうまく機能します。これはブラウザを開きませんが、シェルの外で開くことができるURLを吐き出します。
オリゴフレン2018年

8

私はコメントを投稿できないので、この質問への回答を書きました:

このエラーはgsutilsudoプレフィックスを付けてコマンドを実行している場合にも発生することがあります。


3
これは実際にはコメントであり、回答ではありません。もう少し担当者がいると、コメントを投稿できるようになります
レセ

1
@TheLoneDerangerの評判が「コメントの投稿」特権に近づくように、私は答え(+1)を与えました。
Rann Lifshitz

8
  1. VMを停止
  2. 取得した-> VMインスタンスの詳細。
  3. [クラウドAPIアクセススコープ]で[すべてのクラウドAPIへのフルアクセスを許可する]を選択し、[保存]をクリックします。
  4. VMを再起動して〜/ .gsutilを削除します。



2

そこで、GCSバケットからVMにコピーしようとすることをたくさん試しました。この投稿が誰かのお役に立てば幸いです。

SSH接続経由: ここに画像の説明を入力してください

このスクリプトに従ってください:

sudo gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION_IN_LOCAL]

このエラーが発生しました:

AccessDeniedException:403アクセスが構成されていません。プロジェクトのGoogle Cloud Platform Console(https://cloud.google.com/console#/project)に移動し、APIと認証を選択して、Google Cloud Storage JSON APIを有効にしてください。

これを修正したのは、このリンク-https://cloud.google.com/storage/docs/json_api/に記載されている「APIのアクティブ化」セクションに従っていました

ここに画像の説明を入力してください

APIをアクティブにしたら、SSHされたウィンドウで自分自身を認証しました

gcloud auth login

認証手順に従って、最終的にGoogle Storage Bucketから私のVMにダウンロードすることができました。

PS

私は次のことを確認しました:

  1. VMインスタンスにgsutilsがインストールされていることを確認します。
  2. バケットに移動し、[権限]タブに移動して、目的のサービスアカウントを追加し、ストレージ管理者の権限/役割を設定します。 ここに画像の説明を入力してください

    3. VMに適切なCloud APIアクセススコープがあることを確認します。 ここに画像の説明を入力してください

ここに画像の説明を入力してください


1

ドキュメントから:https : //cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes

最初にインスタンスを停止する必要があります-> [編集ページに移動]-> [クラウドAPIアクセススコープ]に移動し、[ストレージへのフルアクセスまたは読み取り/書き込みまたは必要なものすべて]を選択します

インスタンスのサービスアカウントとアクセススコープの変更VMを別のIDとして実行する場合、またはインスタンスが必要なAPIを呼び出すために別のスコープのセットを必要とする場合は、サービスアカウントとアクセススコープを変更できます。既存のインスタンスの。たとえば、アクセススコープを変更して新しいAPIへのアクセスを許可したり、インスタンスを変更して、Compute Engineのデフォルトのサービスアカウントではなく、作成したサービスアカウントとして実行することができます。

インスタンスのサービスアカウントとアクセススコープを変更するには、インスタンスを一時的に停止する必要があります。インスタンスを停止するには、インスタンスの停止に関するドキュメントをご覧ください。サービスアカウントまたはアクセススコープを変更したら、必ずインスタンスを再起動してください。停止したインスタンスのサービスアカウントまたはアクセススコープを変更するには、次のいずれかの方法を使用します。


0

バケットの権限を変更します。

「すべてのユーザー」のユーザーを追加し、「ストレージ管理者」にアクセス権を付与します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.