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アクセスがありません。
では、なぜこのコンテキストでは、選択した役割では不十分なのでしょうか?
問題は、おそらく以前の構成試行の結果として、サービスアカウントが関連付けられているロールが多すぎることであるようでした。
次の手順で問題を解決しました。
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_sa
はStorage
/Browser
/my_bucket
/Edit bucket permissions
の下にメンバーとして表示されます