Lesstep
GitHub Actions・AWS・2026年11月3日に確認

GitHub Actions の OIDC で AWS に入れない:「Not authorized to perform sts:AssumeRoleWithWebIdentity」

GitHub はジョブにトークンを渡し、AWS はそれをロールの信頼ポリシーと照らし合わせました。条件のどれかが一致せず、ほとんどの場合は sub の条件です。どの条件で落ちたかは AWS が教えてくれないので、トークンの中身とポリシーが期待するものを見比べるのが近道です。

見え方

Assuming role with OIDC
Retry AssumeRole: attempt 1 of 12 failed: Could not assume role with OIDC: Not authorized to perform sts:AssumeRoleWithWebIdentity. Retrying after 32ms.
...
Error: Could not assume role with OIDC: Not authorized to perform sts:AssumeRoleWithWebIdentity

aws-actions/configure-aws-credentials のメッセージです。再試行しますが、一致しないポリシーは何回試しても通りません。

1. 2026年7月15日より後に作ったリポジトリ:sub に ID が入る

GitHub の2026年4月23日の変更履歴によると、2026年7月15日より後に作られたリポジトリは自動で新しい不変の形式になり、7月15日より後の名前の変更と移管も新しい形式に移ります。名前のあとにオーナーの ID とリポジトリの ID が付きます:

repo:octo-org/octo-repo:ref:refs/heads/main               これまで
repo:octo-org@123456/octo-repo@456789:ref:refs/heads/main  不変の形式

これまでの形で書いた信頼ポリシーは、そういうリポジトリのトークンにはどれにも一致しません。2026年10月の報告には、10月8日に作ったリポジトリ(gha-runner #89)、environment を通すデプロイ(smart-farm-monitoring #87)、plan と apply のロール一式(Openflows-Infra #54)があります。自分のリポジトリの接頭辞を読みます:

gh api repos/OWNER/REPO/actions/oidc/customization/sub

答えには use_immutable_subject と sub_claim_prefix があり、たとえば repo:octo-org@123456/octo-repo@456789 です。その接頭辞をポリシーに書きます:

"Condition": {
  "StringEquals": {
    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
    "token.actions.githubusercontent.com:sub": "repo:octo-org@123456/octo-repo@456789:ref:refs/heads/main"
  }
}

2. リポジトリのあとの部分

3. StringEquals の中のワイルドカード

repo:octo-org@123456/octo-repo@456789:* がすべてのブランチに当たるのは StringLike の中だけです。StringEquals の中では * はただの文字で、何にも当たりません。configure-aws-credentials の README は、Allow の中の ForAllValues: も、クレームが無いときや綴りが違うときに真になるので避けるよう書いています。

4. ジョブがトークンを頼んでいない

id-token: write が無いとトークンが無く、メッセージも違います。アクションは「It looks like you might be trying to authenticate with OIDC. Did you mean to set the id-token permission?」と記録し、「Credentials could not be loaded, please check your action inputs: Could not load credentials from any providers」で失敗します。

permissions:
  id-token: write
  contents: read

ジョブに permissions: を書くと、そのジョブではワークフローの分が置き換わるので、そこにも id-token: write が要ります。企業や組織の外の再利用ワークフローには、呼び出し側で設定するようドキュメントに書かれています。

トークンの中身を見る

README は github/actions-oidc-debugger を挙げています。デコードしたクレームを表示するので、プライベートのリポジトリでだけ走らせます。sub と aud を、信頼ポリシーと1文字ずつ見比べます。

見分け方

失敗したジョブを IntelliJ IDEA から見るなら

Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。

GitHub と GitHub Actions は GitHub, Inc. の商標、AWS は Amazon.com, Inc. またはその関連会社の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Amazon・JetBrains のいずれとも提携しておらず、承認も受けていません。

ほかに:「Resource not accessible by integration」 · 「Waiting」でレビューを待つ実行の承認 · Bitbucket Pipelines の OIDC で AWS に入れない · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English