GCP service account とは?GCP の非人間アイデンティティ
GCP service account は人ではなくソフトウェアのためのアイデンティティです。アプリケーション、VM、パイプラインは service account として認証し、Google Cloud API を呼び出します。
コードが Google Cloud と通信する必要があるとき、それは service account として行います。人間に紐づくユーザーアカウントと違い、service account は workload に属し、必要なリソースへの IAM role を付与されます。service account を理解することは、CI から GCP へ安全にデプロイする鍵です。
service account とは何か
service account は、メールアドレスで識別される IAM principal です。project やリソースに role(Cloud Run Admin など)を付与すると、それとして振る舞う workload はその権限を継承します。workload 向けの、AWS IAM role の GCP における相当物です。
workload はどう使うか
- VM や Cloud Run サービスにアタッチし、コードが自動的にそれとして実行される。
- その権限を持つ別のアイデンティティによって impersonate される。
- GCP の外から Workload Identity Federation で federate される。
鍵の問題
service account はダウンロード可能な JSON 鍵を持てますが、それらは漏洩しやすく、ほとんどローテーションされない長寿命の secret です。Google は現在これを推奨していません。推奨されるパターンは鍵なしです。account を workload にアタッチするか、federation を使います。
最小権限
service account には、それが触れるリソースに対して、必要な role だけを付与します。1 つの Cloud Run サービスを更新できるだけのデプロイ用 account は、owner レベルの account よりはるかに安全で、万一侵害された場合の被害を限定します。
CI/CD での役割
パイプラインは service account として振る舞い、イメージをプッシュしてデプロイします。GitHub Actions からの現代的で鍵なしの方法は Workload Identity Federation です。workflow が GitHub トークンを提示すると、GCP がそれを service account 向けの短命な認証情報と交換し、JSON 鍵は一切保存されません。
重要なポイント
- service account は workload やパイプラインのための非人間の GCP アイデンティティです。
- 長寿命の JSON 鍵は推奨されません。鍵なしのアタッチや federation を優先します。
- パイプラインは federation を介して最小権限の service account として振る舞い、デプロイします。