無料で診断
導入判断CI/CD 認証

GitHub ActionsをOIDCへ移行する理由とは?秘密情報を減らす進め方

GitHub Actions の OIDC 移行を検索している人の多くは、「なぜ長期シークレットをやめるべきか」「GitHub Secrets を全部消せるのか」「AWS、Azure、Google Cloud で何が違うのか」「信頼ポリシーはどこまで絞るべきか」「self-hosted runner や reusable workflow では何に気を付けるべきか」を知りたいはずです。GitHub Docs は、OpenID Connect を使う理由として、クラウド資格情報を長期シークレットとして保存しなくてよい点を挙げています。ただし、OIDC へ移行すれば何でも安全になるわけではありません。信頼条件が広すぎる、runner の信頼境界が粗い、旧シークレットが残る、といった運用ミスがあると効果は薄れます。この記事では、GitHub Actions の OIDC 移行を、単なる設定例ではなく、長期シークレット削減、信頼境界の設計、クラウド別の違い、移行後の監査まで含めて整理します。

公開日 2026年4月8日
1

GitHub Actions を OIDC へ移行する最大の目的は、クラウド認証情報を長期シークレットとして GitHub Secrets に置き続けないことです。

2

移行で重要なのは設定例の写経ではなく、どのリポジトリ、どの参照先、どの環境からトークン発行を許すかを先に絞ることです。

3

OIDC は IAM や runner 運用の代替ではないため、旧シークレット削除、ログ確認、公開面確認まで一緒に設計する必要があります。

この記事のポイント

  1. GitHub Actions を OIDC へ移行する最大の目的は、クラウド認証情報を長期シークレットとして GitHub Secrets に置き続けないことです。
  2. 移行で重要なのは設定例の写経ではなく、どのリポジトリ、どの参照先、どの環境からトークン発行を許すかを先に絞ることです。
  3. OIDC は IAM や runner 運用の代替ではないため、旧シークレット削除、ログ確認、公開面確認まで一緒に設計する必要があります。

なぜ GitHub Actions を OIDC へ移行するのか

中央の実行面から複数の信頼境界へ短い弧が伸び、外周の長期秘密情報の散在を押し戻す抽象図

長期シークレットを置き続ける構成そのものが事故面になります

GitHub Actions を OIDC へ移行する理由を一言で言うと、クラウド認証情報を GitHub Secrets に長く置き続ける構成を減らすためです。GitHub Docs の OpenID Connect 解説でも、クラウド側が GitHub から発行されたトークンを直接信頼できるようになるため、長期シークレットを保存しなくてよい点が大きな利点として示されています。

ここでいう長期シークレットとは、アクセスキー、サービスプリンシパルのシークレット、固定鍵ファイルのように、誰かがコピーでき、期限管理も必要で、失効や再発行の運用負荷が高い認証情報です。既存のサービスアカウントのセキュリティでも触れているとおり、認証情報の事故は「漏れたら終わり」というより、長く生きる資格情報が複数の場所に残ることで被害範囲が広がります。

GitHub Actions からクラウドへ接続するジョブは、ビルド、デプロイ、コンテナ公開、インフラ更新など、本番系の権限を持ちやすい領域です。そのため、長期シークレットを GitHub Secrets に置いたまま運用すると、漏えい、誤設定、退職者や委託先の棚卸し漏れ、fork や複製 workflow の扱いといった複数の運用問題が重なります。OIDC 移行は、単なる新しい認証方式ではなく、長期資格情報を減らす運用改善として捉えた方が実務に合います。

ただし、OIDC に変えれば何でも安全になるわけではありません。GitHub 側のトークン発行条件が広すぎたり、クラウド側の信頼条件が雑だったり、旧シークレットを削除しなかったりすると、事故面は残ります。つまり移行の主役は「OIDC を入れたこと」ではなく、何を信頼し、何を信頼しないかを明文化したことにあります。

既存のCI/CD パイプライン攻撃公開リポジトリの情報漏えいを読むと分かるように、開発基盤の事故は認証方式だけで完結しません。GitHub Actions を OIDC へ移行する価値は大きいですが、それは長期シークレットを減らす入口であり、runner、権限、公開面の見直しまでつながって初めて効果が出ます。

移行前に先に決めるべき信頼境界は何か

どの workflow に OIDC トークン発行を許すかを絞る必要があります

GitHub Actions で OIDC を使うには、workflow または job に「id-token: write」権限を与える必要があります。これは GitHub がトークンを発行できるようにする権限であり、設定自体は難しくありません。しかし実務上は、技術的に有効化できることと、どのジョブへ有効化してよいかは別問題です。

たとえば、すべての workflow に一律で OIDC 発行権限を付けると、クラウド接続が不要なジョブまでトークンを要求できる状態になります。これは便利ですが、将来の workflow 追加や reusable workflow の呼び出しが増えたときに、どこまでクラウド認証が必要なのかが曖昧になります。移行前には、ビルド専用、検証専用、本番配備専用のように、ジョブの役割で線を引くところから始めるべきです。

「どのリポジトリ・ブランチ・環境か」を subject 条件で狭めます

GitHub Docs のOpenID Connect referenceでは、クラウド側で確認できる claim として repository、ref、environment、audience などが説明されています。ここで重要なのは、クラウド側の信頼ポリシーや federated identity credential を作るときに、sub claim を広く取りすぎないことです。

実務でよくある失敗は、「この GitHub 組織のリポジトリなら大丈夫だろう」と広く許可してしまうことです。しかし GitHub Actions OIDC の移行で本当に必要なのは、どのリポジトリの、どの参照先の、どの環境からの実行かまで絞ることです。本番 deploy 用ロールと検証環境 deploy 用ロールを分けずに subject 条件を広くすると、短命トークンでも被害面積は広いままです。

GitHub Actions を OIDC へ移行するときは、「シークレットがなくなる」話より先に、信頼する実行条件をどこまで言語化できるかを確認してください。ここが曖昧だと、OIDC の導入後も「誰がどこまで deploy できるか」を説明できません。

runner の信頼モデルは OIDC と別で見直す必要があります

OIDC はクラウド認証の方式を改善しますが、runner 自体の信頼問題を解決するわけではありません。特に self-hosted runner では、同じ runner に複数のリポジトリや環境のジョブを載せていると、ローカルファイル、キャッシュ、既存資格情報、周辺ツールが思わぬ共有面になります。OIDC へ移行しても、runner が広く共有されている状態では十分ではありません。

Azure Login の公式説明でも、public repository の self-hosted runner で managed identity を使うと危険になり得る旨が警告されています。これは Azure 固有の問題というより、実行基盤の信頼境界が粗いままでは、OIDC の利点が薄れることを示しています。したがって移行前には、GitHub-hosted runner で済むジョブか、self-hosted runner が必要でもどのリポジトリまで共有を許すかを分けて考える必要があります。

いま GitHub Secrets に置いているクラウド認証情報を用途別に棚卸しする

どのジョブが何の権限で動いているかが見えないままでは、OIDC へ切り替える対象と残す例外を分けられないためです。

どのリポジトリ、どのブランチ、どの環境からクラウド認証を許すかを先に決める

信頼条件を後から詰める運用にすると、広すぎる subject 条件のまま本番へ出やすくなるためです。

self-hosted runner と reusable workflow の信頼境界を OIDC と別軸で確認する

OIDC へ移行しても、実行基盤や呼び出し元の信頼境界が粗いと事故面は残るためです。

旧シークレットを消す日付とロールバック手順を最初に決める

新旧認証を長く並走させると、切り替え完了後も長期シークレットが残りやすいためです。

監査ログと失敗ログを『誰が見るか』まで決める

OIDC の導入自体は簡単でも、失敗時の調査担当が曖昧だと定着せず、結局シークレット認証へ戻りやすくなるためです。

AWS・Azure・Google Cloud では何が違うのか

クラウド主に作るもの絞り込みの要点見落としやすい点
AWSOIDC provider と IAM ロールaudience と sub 条件を repository / ref / environment 単位で絞る一つのロールで複数環境を兼用しやすい
Azureservice principal か managed identity への federated identity credentialclient-id、tenant-id、subscription-id と environment 単位の分離を揃える認証シークレットは減っても管理用の変数が残る
Google Cloudworkload identity pool / provider と service account impersonationattribute mapping と impersonation 先の権限境界を分けるprovider と service account の責務が混ざりやすい

AWS では IAM ロールを環境ごとに分ける発想が重要です

GitHub Docs のAWS 向け OIDC 設定では、IAM ロールの trust policy で audience と subject を確認する考え方が示されています。ここで重要なのは、GitHub Actions OIDC の導入を「AWS に login できるようにする作業」で終わらせず、本番用ロールと検証用ロールを分ける発想にすることです。

AWS はロールの使い分けが柔軟なぶん、最初に一つのロールへ権限を寄せると後から分解しにくくなります。GitHub Actions を OIDC へ移行するなら、最初から「どの workflow がどのロールを引き受けるか」を固定し、ロールごとに対象の ref や environment を絞った方が運用しやすくなります。

Azure は OIDC を推奨していても、運用上の変数整理が残ります

Microsoft Learn と Azure Login Action の公式説明では、OIDC での認証が推奨されています。Azure 側では federated identity credential を用意し、GitHub 側の workflow に「id-token: write」を与えたうえで、client-id、tenant-id、subscription-id を指定して login します。つまり長期 secret は減らせますが、管理対象の変数が完全に消えるわけではありません

ここでよく起きる誤解は、「OIDC へ移行したので GitHub 側の管理対象はゼロになる」というものです。実際には、接続先の subscription や tenant の整理、cloud 環境ごとの audience、ログの出力制御など、別の運用論点が残ります。したがって Azure では、認証 secret の削減に加えて、環境単位の変数管理とログ設計を同じ変更セットで考える必要があります。

Google Cloud は provider 設計と impersonation の分離が鍵になります

GitHub Docs のGoogle Cloud 向け OIDC 設定では、workload identity federation と service account impersonation を組み合わせる流れが説明されています。Google Cloud では provider 側で属性をどう受け取るか、service account 側で何をさせるかを分けて設計できるため、信頼条件と実行権限を別々に整理しやすいのが特徴です。

その反面、provider、attribute mapping、service account、impersonation の責務が混ざると設計が分かりにくくなります。GitHub Actions の OIDC 移行では、どの repository 条件を provider で受け、どの権限を service account へ与えるかを分けて考えた方が、監査や将来の切り替えも楽になります。

GitHub Actions OIDC 移行の進め方

最初に「いま何が残っているか」を把握しないと移行しにくくなります

GitHub Actions の OIDC 移行は、workflow の書き換えから始めるより、現行の secret 運用の棚卸しから始めた方が成功しやすくなります。どの workflow が AWS、Azure、Google Cloud へ接続しているのか、どのシークレットが deploy 用で、どれがイメージ push 用で、どれが検証用なのかが見えないままでは、切り替え対象と例外を分けられません。

ここで役立つのは「シークレットの一覧」ではなく、ジョブと権限の対応表です。GitHub Secrets 名だけ並べても、どのジョブのどの操作に使われているかが抜けると、OIDC へ移したあとに不要なシークレットが残ります。まずは用途単位で切り分けてください。

並走期間を短くし、削除日を先に決めると戻りにくくなります

OIDC 移行では、新旧の認証方式を少し並走させて比較試験すること自体は有効です。ただし、その並走期間が長いと「まだ動いているから」と旧シークレットが残り続けます。ここで重要なのは、OIDC 化より先に旧シークレットの削除日と例外条件を決めることです。

たとえば本番 deploy は OIDC に切り替え、緊急ロールバックだけは期限付き例外で旧シークレットを残す、といった形なら運用できます。一方で「いったん両方残しておく」は、最も戻りやすい運用です。GitHub Actions を OIDC へ移行するなら、成功条件と同じくらい、消す条件を先に決めておいた方がよいです。

監査ログの読み方まで決めると移行が定着しやすくなります

OIDC の導入自体は数ファイルの変更で終わることもありますが、運用に定着するかどうかは、失敗時に誰が何を追えるかで決まります。GitHub Actions のログだけでは足りず、クラウド側の認証ログ、ロール引き受けログ、service account impersonation の記録まで合わせて見られるかを確認してください。ここが決まっていると、切り替え後に問題が起きても「OIDC が悪い」ではなく、どの条件がずれていたかを特定しやすくなります。

1手順1

現行のシークレット認証を棚卸しし、用途単位で切り分ける

AWS、Azure、Google Cloud ごとに、どのリポジトリのどのジョブがどの資格情報を使っているかを一覧化し、本番、検証、共通基盤を混ぜていないか確認します。

現行認証台帳
2手順2

クラウド側でフェデレーション用の信頼条件を作り、範囲を絞る

AWS なら IAM ロールと信頼ポリシー、Azure なら federated identity credential、Google Cloud なら workload identity pool / provider を作り、リポジトリ、参照先、環境単位で絞り込みます。

信頼条件の定義
3手順3

workflow 側で id-token 権限とログ設計を追加し、旧シークレットを残したまま比較試験する

GitHub Actions 側で OIDC トークン発行を許可し、クラウドログと workflow ログを合わせて観測しながら、成功時と失敗時の挙動を確認します。

比較試験結果
4手順4

切り替え完了を確認してから旧シークレットを削除し、例外運用を台帳化する

並走期間を短く保ち、本番切り替え後に不要な GitHub Secrets を削除します。どうしても残す例外は期限付きで台帳化し、再審査日を決めます。

削除済みシークレット一覧と例外台帳

見落としやすい運用上の落とし穴

fork 由来の workflow と reusable workflow の扱いを曖昧にしない

GitHub Actions の OIDC 移行で見落としやすいのが、fork 由来の workflow と reusable workflow の扱いです。トークン発行条件を repository 名だけで広く取ると、想定していない呼び出し元にもクラウド認証の道を開きやすくなります。OIDC は短命トークンであっても、広い呼び出し条件を許してよい理由にはなりません

とくに reusable workflow を共通化している組織では、呼び出し元の repository と実際にクラウド認証を行う job の関係を説明できる状態が必要です。ここが曖昧なままだと、信頼ポリシーだけ見ても本当に許してよい実行か判断しにくくなります。

OIDC にしても過剰権限のロールは危険なままです

GitHub Actions を OIDC へ移行すると、長期シークレットの漏えいリスクは減ります。しかし deploy ロールや service account の権限自体が広すぎるなら、短命トークンでも被害は大きくなります。つまり OIDC は「安全な資格情報の渡し方」を改善するものであって、過剰権限を正当化する仕組みではありません

そのため、OIDC 移行と同時にロール分離を見直した方が効果が高くなります。本番 deploy、artifact push、state 更新、検証環境の自動反映を一つの権限へまとめているなら、認証方式の変更だけで満足せず、どこまでを同じ job に任せるべきかも見直してください。

旧シークレットを残したままでは「移行済み」に見えても実態は変わりません

現場では「OIDC の workflow は動いているので移行完了」と見なされることがあります。しかし GitHub Secrets に旧アクセスキーや client secret が残っていれば、実態としては長期資格情報の事故面が残ったままです。切り替え後も誰も削除に踏み込めない組織では、新しい認証が増えただけになりやすいです。

そのため、移行完了の定義は「OIDC の job が成功したこと」ではなく、「不要な長期シークレットが削除され、例外が台帳化されたこと」に置いた方が実務でぶれません。ここまでできて初めて、GitHub Actions OIDC 移行の効果を説明できます。

公開面の粗さは OIDC では解決しません

OIDC へ移行すると、クラウド認証の安全性は上がります。しかし、deploy の結果として残る preview 環境、古い管理画面、用途不明のサブドメイン、公開 API ドキュメントのような外部公開面は別問題です。既存のソフトウェアサプライチェーン攻撃サービスアカウントのセキュリティでも分かるように、認証経路を直しても、公開後の接点が見えなければ事故の芽は残ります

GitHub Actions OIDC 移行は重要ですが、それは IAM と deploy 経路の改善です。どのホストが外へ出ているか、どの preview 環境が残っているか、どの API が意図せず公開されているかは、別の確認レーンで見直す必要があります。

GitHub Actions OIDC 移行で ASM診断 PRO を活かすなら

ASM診断 PRO で外部公開資産と優先度を確認している画面

GitHub Actions の OIDC 移行では、クラウド認証情報を長期シークレットで持ち続ける構成を減らせます。しかし、ASM診断 PRO が効くのはその先です。deploy 経路が安全になっても、preview 環境、古い staging、使い終わったホスト、想定外に露出した API、過去の検証画面が外に残っていれば、公開面としての事故リスクは残ります。つまり OIDC 移行は認証経路の改善であり、外から見える接点の整理とは別工程です。

ASM診断 PRO は、GitHub Actions の OIDC 設定や IAM ロールの代替ではありません。ですが、OIDC へ移行したあとに「何が外へ残っているか」を確認する役割とは相性が良いです。たとえば、旧 deploy フローで作られた preview ホストが残っていないか、使い終わったサブドメインが生きていないか、管理画面や認証導線が意図せず公開されていないかを外側から洗い直すと、OIDC 移行の効果を認証情報の削減だけでなく公開面の整理まで広げやすくなります

もし今、GitHub Actions OIDC 移行を進めているなら、切り替え後の完了条件に「不要な長期シークレットを削除したこと」だけでなく、「旧 deploy 由来の公開面を確認したこと」も入れてください。移行後の見直しで外部公開資産を洗い出せれば、認証経路の改善と公開面の改善を一つの変更セットとして締めやすくなります。GitHub Actions の OIDC 移行を、本当に事故面の縮小へつなげるには、最後に外側からの確認を足すことが重要です。

次のアクション

OIDC 移行後の公開面を外から確認する

GitHub Actions の OIDC 移行後は、不要な preview 環境、古い staging、管理画面、公開 API が残っていないかを別レーンで確認してください。ASM診断 PRO なら、外部公開資産を無料で洗い出し、認証経路改善のあとに残る公開面を整理する起点を作れます。

よくある質問(FAQ)

GitHub Actions を OIDC へ移行すると GitHub Secrets は完全になくなりますか

クラウド認証の長期シークレットは大きく減らせますが、環境名や subscription ID のような管理用変数まで完全になくなるとは限りません。まずは認証 secret を減らすことが主目的です。

id-token 権限を付ければ自動的に安全になりますか

なりません。クラウド側の信頼条件が広すぎたり、runner の共有範囲が雑だったり、旧シークレットを残したままだと効果は薄れます。権限付与は出発点に過ぎません。

AWS、Azure、Google Cloud のどれが一番簡単ですか

どれも公式の導線はありますが、簡単さより「いま持っている IAM と運用へどう載せるか」で見た方が失敗しにくくなります。どのクラウドでも環境分離と信頼条件の絞り込みは必要です。

self-hosted runner でも OIDC は使うべきですか

使う価値はありますが、runner 自体の信頼境界を別で見直す必要があります。公開 repository や広い共有 runner では、OIDC だけで安全になったとは言えません。

移行後に最初に確認すべきことは何ですか

旧シークレットが削除されているか、クラウドログで想定した条件だけが使われているか、旧 deploy 由来の preview 環境や公開面が残っていないかの 3 点です。

まとめ

複数の信頼境界を通って細い認証経路へ収束する短命トークン移行の抽象図

GitHub Actions を OIDC へ移行する最大の理由は、クラウド認証情報を長期シークレットとして持ち続ける構成を減らせることです。GitHub Docs が示すように、OpenID Connect を使えば、workflow 実行時に発行されるトークンをクラウド側が直接信頼できるため、固定のアクセスキーや client secret を GitHub Secrets に置く必要を小さくできます。これは認証情報漏えいの可能性を下げるだけでなく、棚卸し、失効、委託先見直しの負荷を減らすうえでも意味があります。

ただし、移行の成否を分けるのは OIDC を有効化したかどうかではありません。どの workflow に id-token 発行を許すか、どのリポジトリ、どのブランチ、どの環境からクラウド認証を許すか、self-hosted runner の共有範囲をどう扱うか、旧シークレットをいつ削除するかまで決めて初めて、信頼境界が締まります。短命トークンへ変えるだけでは、広すぎる権限や粗い runner 運用は残るため、移行は必ず IAM、実行基盤、ログ設計とセットで考える必要があります。

さらに見落としやすいのは、OIDC 移行が認証経路の改善であって、公開面の改善そのものではない点です。GitHub Actions 側の認証が安全になっても、旧 deploy 由来の preview 環境、古い staging、意図しない公開 API、放置されたサブドメインが外に残っていれば事故面は続きます。だから GitHub Actions OIDC 移行は、長期シークレット削減、信頼条件の明文化、旧シークレット削除、そして外側からの公開面確認までを一つの流れにして進めてください。ここまでそろえて初めて、認証方式の変更が実際の事故面縮小へつながります。

次のアクション

読み終えたら、無料でASM診断を開始

外部公開資産の現状を無料で確認し、管理漏れや優先して見るべきリスクを洗い出してください。記事で読んだ内容を、そのまま自社の判断へつなげやすくなります。

参考にした一次ソース

重要論点の根拠として参照した一次ソースだけを掲載しています。