2026/10/11
GitLab CI/CDからGoogle CloudのWorkload Identity FederationでFirebase Hostingその1

Firebase CLIつまりfirebase-toolsが警告を出してたのね。--tokenは危ないからそろそろ止めよう?って。

Authenticating with `--token` is deprecated and will be removed in a future major version of `firebase-tools`. Instead, use a service account key with `GOOGLE_APPLICATION_CREDENTIALS`: https://cloud.google.com/docs/authentication/getting-started

この--tokenで使われるトークンはfirebase login:ciで生成されるもので、Firebase CLIでできることは全部できるはず、たぶん。CIのシークレットなんかに置いて使うとはいえ、権限が強くて持ち運べるものはやっぱり危ない。

環境変数GOOGLE_APPLICATION_CREDENTIALSの場合、そこで使える値には何種類かあって、上記の警告ではservice account keyが推奨されている。これだと実際に使う機能の権限だけをサービスアカウントに付与する運用ができて、危険度が下がる。機能(プロダクト)毎にread/writeやらread-onlyやらadminやら、ずらーっと権限(role)が並んでいるのを眺めると(Firebase product-level predefined roles)、これが丸っと与えられているトークン使うのは怖いね、という気持ちになってくる。(ただし、おそらくここにはFirebase CLIおよび専用のトークンからは利用できない機能も含まれてる。)

でも、service account keyは秘密鍵を含んでいて、なんか嫌だ。そんなあなたにWorkload Identity Federationというのがありまして、実行環境がOIDCのプロバイダ(IdP)も兼ねていると、実行時にID tokenを発行して身元を示せるから、Goole Cloud側は「ああ、◯◯さんところの△△さんね」と身元に応じた鍵をその場で探して渡すことができる。しかも、「このレポジトリのstagingブランチからdeveloper権限で依頼が来たら」みたいな柔軟な条件でIAM roleを設定することができる。OIDCが無ければ「そこまでやらなくても……」とプラットフォーム側も利用者側も考えそうなやつが実現されていて、なんか感動する。(なんでだろうね。経験に裏打ちされた真っ当でオープンな仕様が、真っ当な実装の複雑さを軽減してるから?)

GOOGLE_APPLICATION_CREDENTIALSの話に戻ると、「◯◯というIdPのほうから来ました!!詳しいことはID tokenに書いてます」という紹介状もこの環境変数に入れることができるのだ。PKIおよびOIDCに守られた確かな紹介状と、事前に登録しておいたIdP等々の情報を元に、Google Cloud側は然るべき権限を持ったトークンを返すことができる。CIの設定を持つレポジトリにはこの紹介状の発行依頼を置くだけだから、これが漏れても他の実行環境で紹介状は発行されない(からGoogleに認証もされない)し、詳しい自己紹介(組織、レポジトリ、ブランチ、CI実行したアカウントの権限など)は実行時に実行環境=IdPが書いてくれる。美しい。

さて、今このサイトはこの仕組みでデプロイされています。次回はそこに至るまでの数々の罠について……。

日付
タイトル

2026/10/11
GitLab CI/CDからGoogle CloudのWorkload Identity FederationでFirebase Hostingその1
2026/09/29
読んだ本〜2026夏
2026/06/11
読んだ本〜2026春
2026/03/14
読んだ本〜2026冬
2026/03/05
聴いてるポッドキャスト
2026/01/30
レンダリング?
2026/01/27
Live
2026/01/26
レンダリング!
2026/01/13
2025年まとめ
2025/09/23
読んだ本〜2025夏
2024/07/24
健康er
2024/02/10
健康
2023/05/19
喪/2
2023/04/24
コンサル
2023/02/01
それはそう
2022/12/17
喪
2022/06/11
動かないもの
2022/06/05
スタイル
2022/04/23
JSX as data
2022/04/08
数学
2021/12/18
Activeな話
2021/09/05
Goのmultiple ABI
2021/07/31
『Goならわかるシステムプログラミング』
2021/07/28
ここにはタイトルが入ります
2021/01/25
これは日記ではない
2021/01/24
修行
2021/01/23
Considered Harmful
2021/01/22
雑感オブSwing
2021/01/21
雑感オブAndroid
2021/01/20
雑感オブiOS
2021/01/19
プログラミング言語その9【Groovy】
2021/01/18
1回休み
2021/01/17
会社を作る
2021/01/16
外国語
2021/01/15
プログラミング言語その8【C】
2021/01/14
プログラミング言語その7【OCaml】
2021/01/13
to be continued
2021/01/12
プログラミング言語その6【Kotlin】
2021/01/11
プログラミング言語その5【Swift】
2021/01/10
プログラミング言語その4【TypeScript】
2021/01/09
プログラミング言語その3【JavaScript】
2021/01/08
Comme d'habitude
2021/01/07
プログラミング言語その2【Java】
2021/01/06
プログラミング以前【Lisp】
2021/01/05
プログラミング言語その1【Objective-C】
2021/01/04
言語処理系入門
2021/01/03
ブログのようなもの
2021/01/02
Next.jsとPHPと私
2021/01/01
新年