はじめに
Google Cloudのサービスアカウントキーを取得するため必要十分なIAMロールを知りたかったので、公式ドキュメントをもとに調査した
結論から言えばがあれば事足りはするが余剰な権限も含まれている。
用語の整理
IAM権限:Permissions。アクセス権における最小単位(例:iam.serviceAccounts.create)
IAMロール:Permissionsの集まり。Google Cloud側で管理される事前定義ロールとユーザー側で管理するカスタムロールの2種類がある。
サービスアカウントに関する権限一覧
Google Cloudのサービスアカウント周りの事前定義ロールには下記のものがある。
roles/iam.serviceAccountAdmin : サービスアカウントの作成・管理
roles/iam.serviceAccountCreator : サービスアカウントの作成
roles/iam.serviceAccountDeleter : サービスアカウントの削除
roles/iam.serviceAccountKeyAdmin : サービスアカウントキーの作成・管理・ローテーション
roles/iam.serviceAccountOpenIdTokenCreator : OIDCトークンの作成
roles/iam.serviceAccountTokenCreator : サービスアカウントを借用する
roles/iam.serviceAccountUser : サービスアカウントとして操作を実行する
roles/iam.serviceAccountViewer : サービスアカウント、キーの読み取りアクセス
roles/iam.workloadIdentityUser : フェデレーションにおけるサービスアカウントの借用
参考:https://cloud.google.com/iam/docs/understanding-roles#iam.serviceAccountAdmin
roles/iam.serviceAccountViewerロールではキーのダウンロード不可!
上記の感じだと、roles/iam.serviceAccountViewerロールで既存のキーの読み取りでキーを取得できるかなと思っていたが、できず。そもそも、キーファイルのダウンロードはキー作成時にしかできないみたい。
なので、キーファイルのダウンロードを行うためには必然的にキーを作成する権限が必要そう。
roles/iam.serviceAccountKeyAdminロールでキーのダウンロード可能
roles/iam.serviceAccountKeyAdminに変更して再度実行してみた。
無事キーの作成とダウンロードができた。
おわりに
開発環境でサービスアカウントキーを取得する必要がある場合などは上記のロール付与で対応できそう。本番環境ではカスタムロールを使用して余剰権限をなくす必要がある。
そもそも、サービスアカウントを使用してのアクセス自体Google Cloudがあまりおすすめしていないので他のアクセス方法についても学びたい。