IAMと
サービスアカウント
「誰が」と「何ができる」を分け、長期キーを持ち歩かない認証設計へ。
TL;DR
- Principal は操作主体、Role は権限セット。
- 人とアプリは別のアカウントを使う。
- JSONキーより短期の権限借用を選ぶ。
01 IAMの文法
プリンシパル(誰が)にロール(何ができる)を結び、リソース上のポリシーとして設定する。

{ "role": "roles/viewer", "members": ["user:alice@example.com"] }02 人とワークロードは別
開発者の操作はGoogleアカウント、Cloud Runなどの実行主体はサービスアカウントにする。ワークロードごとに分ければ、権限・監査・ネットワークターゲットを追いやすい。

03 JSONキーを避ける
JSONキーは保管と漏えい対応が必要な長期秘密になる。Cloud上のワークロードにはサービスアカウントを直接割り当て、ローカル作業は権限借用を優先する。

最小権限: Owner / Editor のような広いロールを常用せず、必要な事前定義ロールから始める。
結論
- 主体と権限セットを分ける。
- 一つのワークロードに一つのサービスアカウント。
- 長期JSONキーを置かない。