0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

認証方式について整理してみた シークレットベース/OIDC&フェデレーション

Posted at

データエンジニアとして CI/CD・IaC・CloudRun・Composer を組み合わせたデータ基盤を構築していると、認証方式の理解は避けて通れません。整理して「どのような順番で理解すればよいか」までを整理してみました。

個人的なメモです。

1. 基本的な認証の大きな2つの流派

(A) シークレットベース認証

  • : クライアントID/クライアントシークレット、APIキー、アクセスキー/シークレットキー (AWS IAM のペア)

  • 特徴

    • 固定文字列(パスワードのようなもの)を相手に渡して認証する。
    • 長期間有効にできるが、漏洩リスクが高い。
    • CI/CD の GitHub Actions で「シークレットに埋め込む」形でよく使われる。
  • GCPの場合

    • サービスアカウント(SA)の 鍵ファイル(JSON) を渡して認証するやり方がこの方式に近い。

(B) OIDC (OpenID Connect) & フェデレーション認証

  • : GitHub Actions → GCP Workload Identity Federation (WIF)、Auth0 → GCP / AWS / Azure

  • 特徴

    • トークンベースで「短命な認証情報」を発行する。
    • GitHub が「自分は GitHub Actions 上で走っているよ」という OIDC トークンを発行 → GCP 側の WIF が検証 → 一時的な SA 権限を付与。
    • シークレット管理が不要(鍵ファイルを置かない)。
  • GCPの場合

    • Workload Identity Federation (WIF) を使うと、GitHub と GCP を直接 OIDC 連携できる。
    • 結果として 短命 SA 権限を払い出す

2. 関連ワードの整理

  • サービスアカウント (SA)

    • GCPリソースにアクセスする「仮想ユーザー」。
    • 実体は IAM Identity。
    • 認証方式は「鍵ファイルを発行して使う」か「WIF/OIDC経由で一時的に使う」。
  • Auth0

    • ID プロバイダ(IdP)の一つ。OIDC や OAuth2.0 の仕組みで外部サービスとつなぐ。
  • リフレッシュトークン

    • アクセストークンが短命(数分〜数時間)なので、長期的なセッションを維持するために再発行できるトークン。
    • Webアプリやユーザー認証でよく使う。
    • CI/CD のマシン間認証ではあまり使わない(短命トークンの再発行は OIDC/WIF に任せる)。
  • シークレットID / クライアントID・シークレット

    • OAuth2.0 のクライアント認証に使う固定キー。
    • GitHub Actions の secrets.GCP_SA_KEY に JSON を突っ込むのがこのやり方。

3. GitHub × Terraform × CloudRun × Composer での位置づけ

  • 昔のやり方(シークレット方式)

    • GitHub Secrets に GCP サービスアカウント鍵(JSON)を保存
    • Actions で gcloud auth activate-service-account してデプロイ
    • 問題: 鍵が漏れると権限悪用される、管理が大変
  • 今の推奨(OIDC + WIF)

    • GitHub → OIDC トークンを発行
    • GCP Workload Identity Federation が受け取って SA に一時認証
    • 鍵管理が不要、セキュリティが高い
  • CloudRun / Composer 側

    • 実行環境に「どの SA で動くか」を設定する。
    • その SA に最低限の IAM 権限をアタッチしておく。
    • (ここで使う SA は「アプリ用」なので、CI/CD 用 SA とは分けるのがベストプラクティス)

4. 学習の順序(おすすめの段取り)

  1. サービスアカウント (SA) の概念を理解

    • 人間ユーザーと違う「マシン用アカウント」。
    • どの GCP リソースでも「この SA として動く」が基本。
  2. シークレット方式(SA鍵ファイル)の仕組みを理解

    • GitHub Secrets に JSON を保存して使う方法を試す。
    • 「なぜこれが危険なのか」を体感。
  3. OIDC & WIF を理解・導入

    • GitHub Actions → GCP にシークレットなしでデプロイできるように設定する。
    • GCP 側の workload_identity_poolworkload_identity_provider を Terraform で作る。
  4. リフレッシュトークン・Auth0 などのユーザー認証シナリオを理解

    • データエンジニア的には BtoC アプリ連携や SaaS API 利用で出てくる。
    • 基盤設計では SA & WIF が中心。

5. 要約(質問に対する回答)

  • OIDC と シークレットアクセスキーは、大きく2種類の認証方式として整理してOK。
  • サービスアカウントは「権限を持つ主体」であり、認証方式は鍵ファイル方式(シークレット)か OIDC/WIF(フェデレーション)。
  • CI/CD(GitHub Actions → GCP)の場合、推奨は OIDC + WIF
  • CloudRun や Composer は「どの SA で動くか」を指定する。
  • 段取りとしては SA理解 → 鍵方式 → OIDC/WIF → ユーザー系認証(Auth0, リフレッシュトークン) の順で学ぶのがベスト。

シーケンス図

「GitHub Actions → GCP OIDC/WIF 認証」

GitHub Actions → GCP(シークレット/SA鍵ファイル方式)

要点

  • 固定の秘密(SA鍵JSON) を GitHub Secrets に格納し、ワークフロー実行時に取り出して認証。
  • 秘密管理・ローテーション・失効のオペレーション負荷/漏洩リスクがある。
  • OIDC/WIF と違い、GCP側で“信頼できる外部発行者”の検証はなく、鍵の所持=権限行使が可能。

OIDC/WIF vs シークレット(SA鍵)— 実務観点の比較

観点 OIDC/WIF(推奨) シークレット(SA鍵JSON)
認証情報の形 短命のIDトークン→一時クレデンシャル 長期の秘密鍵(JSON)
秘密の保管 不要(鍵レス) 必要(GitHub Secrets等に保存)
漏洩時の影響 影響限定(短命+発行元検証・属性制約) 影響大(失効まで恒常的に悪用可能)
スコープ制御 attribute.repository/workflow/ref 等で厳格に制約 IAM/ロールのみ。発行先の絞り込みは困難
監査性 “どのリポ/ワークフローから来たか”を属性で判断しやすい 秘密鍵の使用主体特定が難しい
運用負荷 低い(鍵ローテ不要) 高い(鍵発行・配布・ローテ・失効)
初期設定 若干手間(Pool/Provider/IAM条件) シンプル(鍵を作って置く)
ベストプラクティス こちら レガシー互換/やむを得ない時のみ

まとめ(設計判断の指針)

  • 原則:CI/CD は OIDC/WIF(鍵レス) を第一候補。
  • 例外:一部ツールや外部環境の制約で WIF が使えない時のみ、短命・限定用途のSA鍵を採用し、速やかな移行計画を持つ。
  • ランタイム(Cloud Run/Composer)は、実行SACI用SA を分離し、最小権限監査しやすい命名とロールで統制。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?