[備忘録] Google Cloudサービスアカウントの種類と見分け方
Google Cloudの利用に際してほぼ必須となる、サービスアカウントについての初心者向けの記事です。
(2021年9月現在の記事です)
はじめに
Google Cloudのサービスアカウントとは、アプリケーションからGoogle Cloudにアクセスする際に用いられるアカウントで、その認証情報(メール[1]と鍵)を利用して各種Google CloudサービスのAPIが実行されます。
具体的には、VM上やCloud Functionsから、そしてGitHub ActionsなどCI/CDを利用する際にも必要となります。
ユーザーアカウントと同様に、Google Cloudコンソール上ではIAMと管理の項目からサービスアカウントを選択し、一覧表示できます。
また、サービスアカウントを一意に特定するために「メール」と呼ばれるアットマークを含んだ文字列が使われています。このメールの命名規則はやや複雑なのですが、ポイントを押さえるとある程度は「どの種類のサービスアカウントか」という推測が可能ではないかと思われます。
ここでは各種サービスアカウントとそのメールについて、自分の理解を整理するために簡単にまとめました。
ユーザー管理のサービスアカウント
- ユーザー自身の責任で管理するアカウントです。
- コンソールやgcloudコマンド(CLI)を利用して、最大100個まで作成できます。
▼ (e.g.) Cloud FunctionsのHelloWorld関数で使用する想定のサービスアカウント
hello-world@{project-id}.iam.gserviceaccount.com
デフォルトサービスアカウント
- GCE/GAE、またはそれらを利用するサービスを有効化する際に自動作成されるユーザーアカウントです。
- 自動で作成されますが、管理はユーザー自身になります。
- デフォルトサービスアカウントには、プロジェクトに対して編集者権限が付与されており、セキュリティの観点からエンタープライズでは推奨されないようです。
▼ (e.g.) GAEデフォルトサービスアカウント
{project-id}@appspot.gserviceaccount.com
▼ (e.g.) GCEデフォルトサービスアカウント
{project-number}-compute@developer.gserviceaccount.com
サービスエージェント
- 旧 Google管理サービスアカウント
- Google Cloudのサービス間で用いられるアカウントです。次のように、さらにいくつか種類があります。
Google APIサービスエージェント
- Google内部の関連プロセスを実行します。
- プロジェクトに対する編集者ロール(roles/editor)が自動的に付与されています。
- こちらは編集権限を削除しないよう、取り扱いに注意が必要です。
{project-number}@cloudservices.gserviceaccount.com
サービスエージェントのロールマネージャー
- 他のサービスエージェントのロールを管理するものです。
- 例えば、新しいAPIを利用した際にGoogle APIサービスエージェントにロールを付与するために用いられます。
service-agent-manager@system.gserviceaccount.com
その他のサービスエージェント
- 個々のサービスの代理として機能します。
- これらのサービスエージェントのロールも削除しないよう注意する必要があります。
- こちらのページにサービスエージェントのリストがあります。
hoge@gcp-sa-{service_name}.iam.gserviceaccount.com
Google 管理のサービスアカウント
- 多くのGoogle Cloudサービスで使う、ユーザーに代わって処理をするときのロールです。
- IAMのページでは「ロール」のカラムに「Cloud Build サービス アカウント」のように記載されておりわかりやすいです。
▼ (e.g.) Cloud Buildサービスアカウント
{project-number}@cloudbuild.gserviceaccount.com
まとめ
独断的な主観ですが、それぞれのメールに注目してみると次のような順序で識別できそうです。
1. 象徴的な文字列がある(判断しやすい)サービスアカウント
{project-num}-compute@developer.gserviceaccount.com → GCEデフォルトサービスアカウント
service-agent-manager@system.gserviceaccount.com → ロールマネージャー
2. メールの"サブドメイン"で識別すべきサービスアカウント
{project-id}@appspot.gserviceaccount.com → GAEデフォルトサービスアカウント
hoge@{project-id}.iam.gserviceaccount.com → ユーザー管理のサービスアカウント
hoge@gcp-sa-{service-name}.iam.gserviceaccount.com → その他のサービスエージェント
{project-num}@cloudservices.gserviceaccount.com → Google APIサービスエージェント
3. 上記以外の(判断する難易度が高い)サービスアカウント
{project-num}@{service-name}.gserviceaccount.com → Google管理のサービスアカウント
おわりに
一般的には、最小権限の原則に基づきユーザー管理のサービスアカウントを使用する場面が多いと思いますが、IAMの棚卸しやログの分析時などに知っておくと役立つかもしれません。
もし何か認識違い等あれば、また最新の仕様と異なる点があればご指摘下さい。🙇♂
最後まで読んでいただき、ありがとうございました。
参考文献
Discussion