web-dev-qa-db-ja.com

GCEから「AccessDeniedException:403 Insufficient Permission」を返すgsutilコピー

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

GCE> gcloud auth list
Credentialed accounts:
 - [email protected] (active)

私はまず、このサービスアカウントに、作業中のプロジェクトの権限で「編集可能」というフラグが設定されていることを確認しました。

local> gsutil acl ch -u [email protected]: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  

私は何が欠けていますか?

71
Christophe

探すべきもう1つのことは、GCE VMを作成するときに適切なスコープを設定することです。 VMにサービスアカウントが関連付けられている場合でも、GCSにアクセスするにはdevstorageスコープを割り当てる必要があります。

たとえば、VMをdevstorage.read_onlyスコープで作成した場合、バケットへの書き込みを許可しようとしても、バケットへの書き込みは失敗します。 devstorage.full_controlまたはdevstorage.read_writeが必要です。

サービスアカウントを使用するためのインスタンスの準備 のセクションを参照してください。

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

94
jterrace

gsutil config -b

次に、提供されているURLにアクセスします[CLICK Allow]

次に、確認コードをコピーして端末に貼り付けます。

41
Dr. Tyrell

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

gcloud auth login
36

コメントを投稿できないため、この質問に対する回答を書きました:

このエラーは、場合によっては、gsutilプレフィックスを使用してSudoコマンドを実行している場合にも発生する可能性があります。

8
TheLoneDeranger
  1. バケットを作成したら、権限タブに移動してメールを追加し、Storage Admin権限を設定します。

screenshot

  1. SSH経由でVMインスタンスにアクセス>>コマンドを実行:gcloud auth loginし、手順に従います。

参照: https://groups.google.com/d/msg/gce-discussion/0L6sLRjX8kg/kP47FklzBgAJ

2
Văn Quyết

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

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

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

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

1
Adelin