SSH 経由で GCE インスタンスにログインしています。そこからサービス アカウントを使用してストレージにアクセスしたいと思います。
GCE> gcloud auth list
Credentialed accounts:
- [email protected] (active)
まず、このサービス アカウントが、自分が作業しているプロジェクトの権限で「編集可能」のフラグが付けられていることを確認しました。また、ファイルをコピーするバケットに対する書き込み ACL を付与していることも確認しました。
local> gsutil acl ch -u [email protected]:W gs://mybucket
しかし、次のコマンドは失敗します。
GCE> gsutil cp test.txt gs://mybucket/logs
(「mybucket」の下に「logs」が作成されていることも確認しました)。
表示されるエラーメッセージは次のとおりです:
Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission 0 B
何が足りないのでしょうか?
ベストアンサー1
他に注意すべき点は、GCE VM を作成するときに適切なスコープを設定することです。VM にサービス アカウントがアタッチされている場合でも、GCS にアクセスするには devstorage スコープを割り当てる必要があります。
たとえば、devstorage.read_only
スコープ付きで VM を作成した場合、サービス アカウントにバケットへの書き込み権限があっても、バケットへの書き込みは失敗します。devstorage.full_control
または が必要になりますdevstorage.read_write
。
のセクションを参照してくださいサービス アカウントを使用するインスタンスの準備詳細については。
注: デフォルトのコンピューティング サービス アカウントのスコープは非常に制限されています (GCS への読み取り専用を含む)。これは、デフォルトのサービス アカウントにプロジェクト エディターの IAM 権限があるためです。任意のユーザー サービス アカウントを使用する場合、ユーザーが作成したサービス アカウントはデフォルトですべてのスコープ アクセスを取得するため、これは通常問題にはなりません。
VMに必要なスコープを追加した後も、gsutil
新しいスコープを持たないキャッシュされた認証情報がまだ使用されている可能性があります。gsutil~/.gsutil
コマンドを再度実行する前に削除してください。(フォローコメントでこの点を指摘していただきありがとうございます。