web-dev-qa-db-ja.com

サービスアカウントには、Google Cloud Storageのstorage.objects.getアクセス権がありません

Google Cloud Consoleでサービスアカウントを作成し、ロールStorage/Storage Admin(GCSリソースのフルコントロール)を選択しました。

gcloud projects get-iam-policy my_projectは、ロールが実際に選択されたことを 示す のようです。

- members:
  - serviceAccount:my_sa@my_project.iam.gserviceaccount.com
  role: roles/storage.admin
- members:
  - serviceAccount:my_sa@my_project.iam.gserviceaccount.com
  role: roles/storage.objectAdmin
- members:
  - serviceAccount:my_sa@my_project.iam.gserviceaccount.com
  role: roles/storage.objectCreator

そして documentation は、ロールroles/storage.adminがパーミッションstorage.objects.*(およびstorage.buckets.*)を含むことを明確に示します。

しかし、Python用Google Cloud Storageクライアントライブラリと組み合わせてそのサービスアカウントを使用しようとすると、次のエラーメッセージが表示されます。

my_sa@my_project.iam.gserviceaccount.comには、my_project/my_bucketへのstorage.objects.getアクセスがありません。

では、なぜこのコンテキストでは、選択した役割では不十分なのでしょうか?

6
Drux

問題は、おそらく以前の構成試行の結果として、サービスアカウントが関連付けられているロールが多すぎることであるようでした。

次の手順で問題を解決しました。

  • 問題のあるサービスアカウント(メンバー)のすべての(3つの)役割を削除しましたmy_saの下のIAM & Admin/IAM
  • my_saの下のIAM & Adminを削除しました/ Service accounts
  • my_saを再作成しました(ロールStorage/Storage Adminを使用)

効果は次のとおりです。

  • my_saは、Storage Admin/IAMの下に1つのロール(IAM & Admin)で表示されます
  • my_saStorage/Browser/my_bucket/Edit bucket permissionsの下にメンバーとして表示されます
1
Drux