Skip to content
Latchkey

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 として振る舞い、デプロイします。

関連ガイド