Skip to main content

OpenID Connect

OpenID Connect ermöglicht es deinen Workflows, kurzlebige Token direkt mit deinem Cloudanbieter auszutauschen.

Übersicht über OpenID Connect (OIDC)

GitHub Actions-Workflows sind häufig für den Zugriff auf einen Cloudanbieter (z. B. AWS, Azure, GCP, HashiCorp Vault und andere) ausgelegt, um Software bereitzustellen oder die Dienste der jeweiligen Cloud zu verwenden. Bevor der Workflow auf diese Ressourcen zugreifen kann, werden dem Cloudanbieter Anmeldeinformationen, z. B. ein Kennwort oder ein Token, bereitgestellt. Diese Anmeldeinformationen werden in der Regel als Geheimnis in GitHub gespeichert, und der Workflow stellt dieses Geheimnis bei jeder Ausführung für den Cloudanbieter bereit.

Die Verwendung von hart codierten Geheimnissen erfordert jedoch, dass du Anmeldeinformationen im Cloudanbieter erstellst und dann als Geheimnis in GitHub duplizierst.

Nachdem du eine vertrauenswürdige Verbindung mit einem Cloudanbieter hergestellt hast, der OIDC unterstützt, kannst du deinen Workflow so konfigurieren, dass ein kurzlebiges Zugriffstoken direkt vom Cloudanbieter angefordert wird.

Vorteile der Verwendung von OIDC

Wenn du deine Workflows für die Verwendung von OIDC-Token aktualisierst, kannst du die folgenden bewährten Sicherheitspraktiken übernehmen:

  • Keine Cloudgeheimnisse: Du musst deine Cloudanmeldeinformationen nicht als langlebige GitHub-Geheimnisse duplizieren. Stattdessen kannst du die OIDC-Vertrauensstellung auf deinem Cloudanbieter konfigurieren und dann deine Workflows aktualisieren, um ein kurzlebiges Zugriffstoken vom Cloudanbieter über OIDC anzufordern.
  • Authentifizierungs- und Autorisierungsverwaltung: Du hast genauere Kontrolle darüber, wie Workflows Anmeldeinformationen verwenden können, indem du die Authentifizierungs- (authN) und Autorisierungstools (authZ) deines Cloudanbieters verwendest, um den Zugriff auf Cloudressourcen zu steuern.
  • Rotierende Anmeldeinformationen: Mit OIDC stellt dein Cloudanbieter ein kurzlebiges Zugriffstoken aus, das nur für einen einzelnen Auftrag gültig ist und dann automatisch abläuft.

Übersicht über die Integration von OIDC mit GitHub Actions

Im folgenden Diagramm siehst du, wie der OIDC-Anbieter von GitHub mit deinen Workflows und dem Cloudanbieter integriert ist:

Diagramm der Integration eines Cloudanbieters mit GitHub Actions über Zugriffstoken und JSON-Webtoken-Cloudrollen-IDs.

  1. Du erstellst in deinem Cloudanbieter eine OIDC-Vertrauensstellung, die es bestimmten GitHub-Workflows ermöglicht, Cloudzugriffstoken im Auftrag einer definierten Cloudrolle anzufordern.
  2. Jedes Mal, wenn dein Auftrag ausgeführt wird, generiert der OIDC-Anbieter von GitHub automatisch ein OIDC-Token. Dieses Token enthält mehrere Ansprüche zum Einrichten einer sicherheitsfesten und überprüften Identität über den spezifischen Workflow, der versucht, sich zu authentifizieren.
  3. Ein Schritt oder eine Aktion innerhalb des Workflowauftrags kann vom OIDC-Anbieter von GitHub ein Token anfordern, das anschließend dem Cloudanbieter als Nachweis für die Workflowidentität übermittelt werden kann.
  4. Nachdem der Cloudanbieter die im Token dargestellten Ansprüche erfolgreich überprüft hat, stellt er ein kurzlebiges Cloudzugriffstoken bereit, das nur für die Dauer des Auftrags verfügbar ist.

Grundlegendes zum OIDC-Token

Jeder Auftrag fordert ein OIDC-Token vom OIDC-Anbieter von GitHub an, der mit einem automatisch generierten JSON-Webtoken (JWT) reagiert, das für jeden Workflowauftrag, in dem es generiert wird, eindeutig ist. Wenn der Auftrag ausgeführt wird, wird das OIDC-Token für den Cloudanbieter bereitgestellt. Zur Überprüfung des Tokens ermittelt der Cloudanbieter, ob der Antragsteller des OIDC-Tokens und andere Ansprüche mit den Bedingungen übereinstimmen, die für die OIDC-Vertrauensdefinition der Cloudrolle vorkonfiguriert wurden.

Im folgenden Beispiel verwendet das OIDC-Token einen Antragsteller (sub), der auf eine Auftragsumgebung namens prod im Repository octo-org/octo-repo verweist.

{
  "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://github.com/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://token.actions.githubusercontent.com",
  "nbf": 1632492967,
  "exp": 1632493867,
  "iat": 1632493567
}

Herstellen einer OIDC-Vertrauensstellung mit dem Cloudanbieter

Um OIDC in deinen Workflows verwenden zu können, musst du eine Vertrauensstellung zwischen GitHub und deinem Cloudanbieter herstellen. Damit stellst du sicher, dass nur autorisierte Workflows Zugriffstoken für deine Cloudressourcen anfordern können.

Bevor dein Cloudanbieter ein Zugriffstoken erteilt, überprüft er, ob die subject und andere Ansprüche, die zum Festlegen von Bedingungen in seinen Vertrauenseinstellungen verwendet werden, mit denen im JSON-Webtoken (JWT) der Anforderung übereinstimmen. Stimmt die Vertrauenskonfiguration überein, gibt dein Cloudanbieter ein temporäres Zugriffstoken für den Workflow aus.

Weitere Informationen zu Vorgehensweise und Syntax bei der Konfiguration einer OIDC-Vertrauensstellung und dem Festlegen von Bedingungen für Cloudanbieter findest du unter OpenID Connect-Referenz.

Konfigurieren von OIDC auf GHE.com

Wenn du einem Unternehmen angehörst, das GitHub Enterprise-Cloud mit Datenresidenz nutzt, und du möchtest OIDC auf GHE.com einrichten, musst du während der Konfiguration von OIDC bestimmte Werte ersetzen.

Weitere Informationen finden Sie unter OpenID Connect-Referenz.

Authentifizieren benutzerdefinierter Aktionen mit OIDC

Benutzerdefinierte Aktionen verwenden für die Authentifizierung mit OIDC die getIDToken()-Methode aus dem Toolkit für Aktionen oder einen curl-Befehl.

Weitere Informationen finden Sie unter OpenID Connect-Referenz.

Aktualisieren deiner Workflows für OIDC

GitHub Actions-Workflows können zur Authentifizierung bei Cloudanbietern OIDC-Token anstelle von Geheimnissen verwenden. Viele beliebte Cloudanbieter bieten offizielle Anmeldeaktionen, die den Verwendungsprozess von OIDC in Workflows vereinfachen. Weitere Informationen zum Aktualisieren deiner Workflows bei bestimmten Cloudanbietern findest du unter Sicherheitshärtung deiner Bereitstellungen.

Nächste Schritte

Weitere Informationen zum Konfigurieren von OIDC findest du unter Sicherheitshärtung deiner Bereitstellungen.

Referenzinformationen zu OIDC findest du unter OpenID Connect-Referenz.