概要
Workload Identity Federation(WIF)は、GitHub Actions やクラウド環境などの外部ワークロードが、アクセストークンのような長期間有効な秘密情報を保管することなく CRISIS のサービスアカウントとして認証できる仕組みです。
アクセストークン方式の課題
アクセストークン方式には、次の課題があります。
- トークンという秘密情報を接続元システムに保管する必要があり、漏えいのリスクがある
- 有効期限の管理とローテーション作業が発生する
- リポジトリや設定ファイルへの誤コミットなど、事故の経路が多い
WIF では、外部環境(OpenID Connect の ID プロバイダー)が発行する短命の ID トークンを CRISIS が直接検証するため、CRISIS 用の秘密情報を配布・保管する必要がありません。
仕組み
- 外部ワークロード(例: GitHub Actions のジョブ)が、自身の環境の OIDC プロバイダーから ID トークンを取得します。
- ワークロードはその ID トークンを CRISIS に提示します。
- CRISIS は、サービスアカウントに登録された フェデレーション資格情報 の条件(発行者、サブジェクト、オーディエンスなど)と照合します。
- 条件を満たせば、そのワークロードはサービスアカウントとして認証され、割り当てられたロールの範囲で API を利用できます。
フェデレーション資格情報は、信頼する外部環境とワークロードの定義です。
| 設定項目 | 意味 | 例(GitHub Actions の場合) |
|---|---|---|
| 発行者 URL(Issuer) | 信頼する OIDC プロバイダー | https://token.actions.githubusercontent.com |
| サブジェクトフィルタ | 信頼するワークロードの識別子 | 特定リポジトリ・ブランチのみ許可 |
| オーディエンス | トークンの宛先検証 | 環境に応じて設定 |
| 属性条件 | 追加の絞り込み条件 | トークン内クレームによる条件 |
サブジェクトの絞り込みが重要
発行者 URL だけで信頼すると、同じプロバイダーを使う無関係のワークロードまで信頼してしまう可能性があります(例: GitHub Actions の発行者はすべてのGitHubユーザーに共通です)。サブジェクトフィルタや属性条件で、自組織の特定リポジトリ・環境に必ず限定してください。
使い分けの目安
接続元が OIDC トークンを発行できる環境(GitHub Actions、Google Cloud、AWS、Kubernetes クラスタなど)なら WIF を第一候補に、それ以外の環境ではアクセストークンを使用してください。
設定手順はフェデレーション資格情報を設定するを参照してください。