Skip to main content

Enterprise Server 3.20 は、現在リリース候補として使用できます。

OpenID Connect

OpenID Connect を使用すると、ワークフローによって、有効期間の短いトークンをクラウド プロバイダーから直接交換できます。

OpenID Connect (OIDC) の概要

GitHub Actions ワークフローは、多くの場合、ソフトウェアをデプロイしたり、クラウドのサービスを使用したりするために、クラウド プロバイダー (AWS、Azure、GCP、HashiCorp Vault など) にアクセスするように設計されています。 ワークフローは、このようなリソースにアクセスできるように、パスワードやトークンなどの資格情報をクラウド プロバイダーに事前に提供します。 通常、このような資格情報は GitHub にシークレットとして格納されており、ワークフローは、実行時に毎回このシークレットをクラウド プロバイダーに提示します。

ただし、ハードコーディングされたシークレットを使うには、クラウド プロバイダーで資格情報を作成し、それをシークレットとして GitHub に複製する必要があります。

OIDC をサポートするクラウド プロバイダーとの信頼できる接続を確立した後に、有効期間の短いアクセス トークンをクラウド プロバイダーに直接要求するようワークフローを構成できます。

OIDC を使う利点

OIDC トークンを使うようにワークフローを更新することで、次のような優れたセキュリティ プラクティスを採用できます。

  •         **クラウド シークレットなし:** 有効期間が長い GitHub シークレットとしてクラウドの資格情報を複製する必要はありません。 代わりに、クラウド プロバイダー上で OIDC 信頼を構成し、OIDC を介して有効期間が短いアクセス トークンをクラウド プロバイダーに要求するようにワークフローを更新することができます。
    
  •         **認証と認可の管理:** クラウド プロバイダーの認証 (authN) および認可 (authZ) ツールを使ってクラウド リソースへのアクセスを制御することで、ワークフローから資格情報を使用する方法をより細かく制御できます。
    
  •         **資格情報のローテーション:** OIDC を使う場合、1 つのジョブに対してのみ有効であり、自動的に失効する有効期間が短いアクセス トークンがクラウド プロバイダーから発行されます。
    

OIDC と GitHub Actions が連携する仕組み

次の図は、GitHub の OIDC プロバイダーがワークフローやクラウド プロバイダーとどのように連携しているかの概要を示しています。

クラウド プロバイダーがアクセス トークンと JSON Web トークン クラウド ロール ID を介して GitHub Actions と統合する方法の図。

  1. クラウド プロバイダーで OIDC との信頼関係を確立し、定義されたクラウド ロールの代わりに特定の GitHub ワークフローがクラウド アクセス トークンを要求できるようにします。
  2. ジョブを実行するたびに、GitHub の OIDC プロバイダーによって OIDC トークンが自動生成されます。 このトークンには、認証対象の特定のワークフローに関する、セキュリティが強化された検証可能な ID を確立するための複数の要求が含まれています。
  3. ワークフロー ジョブのステップまたはアクションは、GitHub の OIDC プロバイダーにトークンを要求できます。その後、このトークンを、ワークフローの ID の証明としてクラウド プロバイダーに提示できます。
  4. クラウド プロバイダーは、トークンで提示した要求の検証を完了した後に、ジョブの期間中にのみ使用できる有効期間の短いクラウド アクセス トークンを提供します。

OIDC トークンの概要

各ジョブは GitHub の OIDC プロバイダーに OIDC トークンを要求し、その応答として、自動的に生成された JSON Web トークン (JWT) が返されます。これは生成されたワークフロー ジョブごとに一意です。 このジョブを実行すると、OIDC トークンがクラウド プロバイダーに提示されます。 クラウド プロバイダーは、トークンを検証するために、OIDC トークンの subject とその他の要求がクラウド ロールの OIDC 信頼定義に事前に構成されている条件と一致するかどうかを確認します。

次の OIDC トークン例では、sub リポジトリ内の prod というジョブ環境を参照する subject (octo-org/octo-repo) を使っています。

{
  "typ": "JWT",
  "alg": "RS256",
  "x5t": "example-thumbprint",
  "kid": "example-key-id"
}
{
  "jti": "example-id",
  "sub": "repo:octo-org/octo-repo:environment:prod",
  "environment": "prod",
  "aud": "https://HOSTNAME/octo-org",
  "ref": "refs/heads/main",
  "sha": "example-sha",
  "repository": "octo-org/octo-repo",
  "repository_owner": "octo-org",
  "actor_id": "12",
  "repository_visibility": "private",
  "repository_id": "74",
  "repository_owner_id": "65",
  "run_id": "example-run-id",
  "run_number": "10",
  "run_attempt": "2",
  "runner_environment": "github-hosted",
  "actor": "octocat",
  "workflow": "example-workflow",
  "head_ref": "",
  "base_ref": "",
  "event_name": "workflow_dispatch",
  "enterprise": "avocado-corp",
  "enterprise_id": "2",
  "ref_type": "branch",
  "job_workflow_ref": "octo-org/octo-automation/.github/workflows/oidc.yml@refs/heads/main",
  "iss": "https://HOSTNAME/_services/token",
  "nbf": 1632492967,
  "exp": 1632493867,
  "iat": 1632493567
}

これらのステップを実行してください:

OIDC を使用するカスタム アクションの認証

カスタム アクションは、Actions ツールキットの getIDToken() メソッド、または curl コマンドを使用して、OIDC を使用した認証を行います。

詳しくは、「OpenID Connect リファレンス」をご覧ください。

OIDC 向けのワークフローの更新

GitHub Actions ワークフローは、クラウド プロバイダーで認証するためにシークレットの代わりに OIDC トークンを使用できます。 多くの一般的なクラウド プロバイダーは、ワークフローで OIDC を使用するプロセスを簡略化する公式ログイン アクションを提供しています。 特定のクラウド プロバイダーに関してワークフローを更新する方法の詳細については、「デプロイのセキュリティ強化」を参照してください。

Dependabot の OIDC サポート

Dependabot では、OIDC を使用してプライベート レジストリで認証できるため、有効期間の長い資格情報をリポジトリ シークレットとして格納する必要がなくなります。 OIDC ベースの認証を使用すると、Dependabot の更新ジョブは、クラウド ID プロバイダーから短期間有効な資格情報を動的に取得することができます。

Dependabot は、レジストリが AWS CodeArtifact、Azure DevOps Artifacts、または JFrog Artifactory でホストされている場合、username および password 認証を使用する任意のレジストリの種類に対する OIDC 認証をサポートします。

Dependabot の OIDC 認証には次の利点があります。

  •         **セキュリティ強化:** リポジトリから、有効期間の長い静的な資格情報を削除します。
    
  •         **管理が簡単:** プライベート レジストリへのセキュリティで保護されたポリシー準拠のアクセスを有効にします。
    
  •         **レート制限を回避する:** 動的な資格情報は、静的トークンに関連付けられているレート制限に達しないようにするのに役立ちます。
    

詳しくは、「Dependabot のプライベート レジストリへのアクセスの構成」をご覧ください。

次のステップ

OIDC の構成について詳しくは、「デプロイのセキュリティ強化」を参照してください。

OIDC のリファレンス情報については、「OpenID Connect リファレンス」を参照してください。