GitHub Actionsが短命のOIDCトークンで自分の実行元を証明し、AWSが条件一致したIAMロールだけを一時的に貸し出す仕組みです。
GitHubとAWSが、鍵の保管ではなく署名付きトークンで接続する。

ジョブはGitHubのOIDC Providerからトークンを受け取り、AWS STSのAssumeRoleWithWebIdentityを呼ぶ。AWSはトークンと信頼ポリシーを照合し、一時認証情報を返す。
| 段階 | 実行者 | 内容 |
|---|---|---|
| トークン取得 | GitHub Actions | 実行元を示すOIDCトークンを取得 |
| ロール引受 | AWS STS | AssumeRoleWithWebIdentityを呼ぶ |
| 検証・発行 | AWS IAM | 信頼条件一致時だけ一時認証情報を返す |
OIDCはGitHubがAWSへ恒久的にログインする仕組みではなく、条件つきで短命の認証情報を受け取る仕組み。
漏れると長く使える合鍵ではなく、都度発行される期限付きの入館証へ替える。

OIDCトークンはジョブ実行時に取得し、AWS認証情報も一時的である。静的なAWS_ACCESS_KEYをSecretsへ置く方式より、保管・ローテーション・誤公開の攻撃面を減らせる。
| 観点 | 静的アクセスキー | OIDC |
|---|---|---|
| 保管 | GitHub Secretsに長期保存 | 原則不要 |
| 有効期間 | ローテーションまで継続 | ジョブ向けの一時情報 |
| 制約 | 鍵の管理範囲に依存 | 信頼ポリシーで実行元を限定 |
Secretsに入れないことだけで満足せず、IAMロールの信頼条件もリポジトリ・ブランチ単位で絞る。
トークンを発行する権限と、AWSで何を操作できるかは別の設定。

GitHub Actionsにはid-token: writeと必要なcontents権限を明示する。AWSの信頼ポリシーではリポジトリ・ブランチ等の条件を絞り、IAMポリシーではECR、SSM、ECSなど必要な操作だけを許可する。
| 設定箇所 | 限定するもの | 例 |
|---|---|---|
| GitHub permissions | トークン発行 | id-token: write |
| IAM信頼ポリシー | 誰がロールを引受けるか | repo・branch・environment |
| IAMポリシー | AWSで何を操作できるか | ECR・SSM・ECSの必要操作のみ |
GitHub側でトークンを発行できても、AWS側のIAMポリシーが許さない操作は実行できない。