Open3
GitHub Actions から Google Cloud Platform へアクセスを OIDC で認証する
Google Cloud Platform は 2021/04/21 にサービス アカウント キーを必要としない Workload Identity を使ったサービス連携を発表し、GitHub は 2021/10/27 に GitHub Actions 上でのクラウドへの認証に OIDC をサポートしたことを発表した。これらを踏まえて、実際に Workload Identity を使った GitHub Actions との連携についての解説記事が 2021/12/21 に公開されている。
クラウド環境への継続的なデプロイを実現するために、GitHub Actions のような CI 環境から GCP へのアクセス権限が必要になる。これまでは、GCP で作成したクリデンシャルを GitHub Actions の環境変数などへ保存し CI プロセス時に参照することでアクセスを実現してきた。しかしこれには、事あるごとに増えるクリデンシャルを中長期的に管理するコストや、クリデンシャルが漏洩する潜在的なリスクが伴っている。
これに対して、OIDC によるアクセスが実現されることで、クリデンシャルをやり取りする必要がなくなる。
OIDC に関する理解
@vvakame さんの解説および IDトークンが分かれば OpenID Connect が分かる を参照して得た私の理解が、
- OIDC は IDToken を発行する仕組みである
- IDToken は JWS であり、base64 でエンコードした文字列で構成される。また、OIDC プロバイダによって署名されている
- IDToken の発行者は JWS ペイロードの
iss
に、URL で表現されている -
iss
の URL 配下の/.well-known/openid-configuration
から OIDC のやりとりに必要なメタデータの JSON が返却される
登場人物とその役割
- GitHub が OIDC プロバイダとして、GitHub Actions が実行される際に IDToken を払い出す
- GCP の Workload Identity が、コンソールで事前に入力されたイシュアやリポジトリの情報と渡された IDToken に含まれる情報を確認する
- GCP の Workload Identity が GitHub Actions に、指定される GCP のサービスアカウントのアクセストークンを払い出す
- GitHub Actions が払い出されたアクセストークンを使って、権限が付与されたサービスアカウントを通じて GCP のプロジェクトを操作する