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
私は何が欠けていますか?
探すべきもう1つのことは、GCE VMを作成するときに適切なスコープを設定することです。 VMにサービスアカウントが関連付けられている場合でも、GCSにアクセスするにはdevstorageスコープを割り当てる必要があります。
たとえば、VMをdevstorage.read_only
スコープで作成した場合、バケットへの書き込みを許可しようとしても、バケットへの書き込みは失敗します。 devstorage.full_control
またはdevstorage.read_write
が必要です。
サービスアカウントを使用するためのインスタンスの準備 のセクションを参照してください。
注:デフォルトのコンピューティングサービスアカウントのスコープは非常に限られています(GCSに対する読み取り専用のアカウントを含む)。これは、デフォルトのサービスアカウントにプロジェクトエディターのIAMアクセス許可があるためです。ユーザーサービスアカウントを使用する場合、ユーザーが作成したサービスアカウントはデフォルトですべてのスコープアクセスを取得するため、これは通常問題になりません。
gsutil config -b
次に、提供されているURLにアクセスします[CLICK Allow]
次に、確認コードをコピーして端末に貼り付けます。
そのプロジェクトに必要な権限を持つアカウントでログインする必要があります。
gcloud auth login
コメントを投稿できないため、この質問に対する回答を書きました:
このエラーは、場合によっては、gsutil
プレフィックスを使用してSudo
コマンドを実行している場合にも発生する可能性があります。
gcloud auth login
し、手順に従います。参照: https://groups.google.com/d/msg/gce-discussion/0L6sLRjX8kg/kP47FklzBgAJ
最初にインスタンスを停止する必要があります->編集ページに移動->「クラウドAPIアクセススコープ」に移動し、「ストレージフルアクセスまたは読み取り/書き込み、または必要なもの」を選択します
インスタンスのサービスアカウントとアクセススコープの変更VMを別のIDとして実行する場合、またはインスタンスが必要なAPIを呼び出すために別のスコープセットを必要とする場合、変更することができますサービスアカウントと既存のインスタンスのアクセススコープ。たとえば、アクセススコープを変更して新しいAPIへのアクセスを許可したり、インスタンスを変更して、Compute Engineのデフォルトサービスアカウントではなく、作成したサービスアカウントとして実行したりできます。
インスタンスのサービスアカウントとアクセススコープを変更するには、インスタンスを一時的に停止する必要があります。インスタンスを停止するには、インスタンスの停止のドキュメントを参照してください。サービスアカウントまたはアクセススコープを変更したら、忘れずにインスタンスを再起動してください。次のいずれかの方法を使用して、停止したインスタンスのサービスアカウントまたはアクセススコープを変更します。