概要

Workload Identity Federation(WIF)は、GitHub Actions やクラウド環境などの外部ワークロードが、アクセストークンのような長期間有効な秘密情報を保管することなく CRISIS のサービスアカウントとして認証できる仕組みです。

アクセストークン方式の課題

アクセストークン方式には、次の課題があります。

  • トークンという秘密情報を接続元システムに保管する必要があり、漏えいのリスクがある
  • 有効期限の管理とローテーション作業が発生する
  • リポジトリや設定ファイルへの誤コミットなど、事故の経路が多い

WIF では、外部環境(OpenID Connect の ID プロバイダー)が発行する短命の ID トークンを CRISIS が直接検証するため、CRISIS 用の秘密情報を配布・保管する必要がありません。

仕組み

  1. 外部ワークロード(例: GitHub Actions のジョブ)が、自身の環境の OIDC プロバイダーから ID トークンを取得します。
  2. ワークロードはその ID トークンを CRISIS に提示します。
  3. CRISIS は、サービスアカウントに登録された フェデレーション資格情報 の条件(発行者、サブジェクト、オーディエンスなど)と照合します。
  4. 条件を満たせば、そのワークロードはサービスアカウントとして認証され、割り当てられたロールの範囲で API を利用できます。

フェデレーション資格情報は、信頼する外部環境とワークロードの定義です。

設定項目 意味 例(GitHub Actions の場合)
発行者 URL(Issuer) 信頼する OIDC プロバイダー https://token.actions.githubusercontent.com
サブジェクトフィルタ 信頼するワークロードの識別子 特定リポジトリ・ブランチのみ許可
オーディエンス トークンの宛先検証 環境に応じて設定
属性条件 追加の絞り込み条件 トークン内クレームによる条件
サブジェクトの絞り込みが重要

発行者 URL だけで信頼すると、同じプロバイダーを使う無関係のワークロードまで信頼してしまう可能性があります(例: GitHub Actions の発行者はすべてのGitHubユーザーに共通です)。サブジェクトフィルタや属性条件で、自組織の特定リポジトリ・環境に必ず限定してください。

使い分けの目安

接続元が OIDC トークンを発行できる環境(GitHub Actions、Google Cloud、AWS、Kubernetes クラスタなど)なら WIF を第一候補に、それ以外の環境ではアクセストークンを使用してください。

設定手順はフェデレーション資格情報を設定するを参照してください。