Hinweis
Auf GitHub gehostete Runner werden aktuell nicht auf GitHub Enterprise Server unterstützt.
Übersicht
OpenID Connect (OIDC) ermöglicht deinen GitHub Actions-Workflows den Zugriff auf Ressourcen in Google Cloud Platform (GCP), ohne dass die GCP-Anmeldeinformationen als langlebige GitHub-Geheimnisse gespeichert werden müssen.
Dieser Leitfaden gibt einen Überblick über die Konfiguration von GCP, um von GitHub als Verbundidentität zu vertrauen, und enthält ein Workflowbeispiel für die google-github-actions/auth
-Aktion, die Token zur Authentifizierung bei GCP und zum Zugriff auf Ressourcen verwendet.
Voraussetzungen
-
Informationen zu den grundlegenden Konzepten, nach denen GitHub OpenID Connect (OIDC) sowie die Architektur und Vorteile des Protokolls verwendet, findest du unter OpenID Connect.
-
Bevor du fortfährst, musst du deine Sicherheitsstrategie planen, um sicherzustellen, dass Zugriffs-Token nur auf vorhersehbare Weise zugewiesen werden. Zur Steuerung, wie dein Cloud-Anbieter Zugriffs-Token ausgibt, musst du mindestens eine Bedingung definieren, damit nicht vertrauenswürdige Repositorys keine Zugriffs-Token für deine Cloud-Ressourcen anfordern können. Weitere Informationen finden Sie unter OpenID Connect.
-
Sie müssen sicherstellen, dass auf die folgenden OIDC-Endpunkte von Ihrem Cloudanbieter zugegriffen werden kann:
https://HOSTNAME/_services/token/.well-known/openid-configuration
https://HOSTNAME/_services/token/.well-known/jwks
Hinweis
Google Cloud Platform verfügt nicht über feste IP-Bereiche, die für diese Endpunkte definiert sind.
-
Stellen Sie sicher, dass der Wert des Ausstelleranspruchs, der im JSON Web Token (JWT) enthalten ist, auf eine öffentlich routingfähige URL festgelegt ist. Weitere Informationen finden Sie unter OpenID Connect.
Hinzufügen eines Google Cloud-Workloadidentitätsanbieters
Um den OIDC-Identitätsanbieter in GCP zu konfigurieren, musst du die folgende Konfiguration ausführen. Anweisungen zum Vornehmen dieser Änderungen findest du in der GCP-Dokumentation.
- Erstelle einen neuen Identitätspool.
- Konfiguriere die Zuordnung, und füge Bedingungen hinzu.
- Verbinde den neuen Pool mit einem Dienstkonto.
Weitere Anleitungen zum Konfigurieren des Identitätsanbieters:
- Stelle sicher, dass du Konfigurieren der OIDC-Vertrauensstellung mit der Cloud gelesen hast, um die Sicherheit zu verstärken. Ein Beispiel findest du unter Konfigurieren des Antragstellers in deinem Cloudanbieter.
- Damit das Dienstkonto für die Konfiguration verfügbar ist, muss es der Rolle
roles/iam.workloadIdentityUser
zugewiesen werden. Weitere Informationen findest du in der GCP-Dokumentation. - Die zu verwendende Aussteller-URL:
https://HOSTNAME/_services/token
Aktualisieren deines GitHub Actions-Workflows
Um deine Workflows für OIDC zu aktualisieren, musst du zwei Änderungen an deinen YAML-Daten vornehmen:
- Füge Berechtigungseinstellungen für das Token hinzu.
- Tausche das OIDC-Token (JWT) mithilfe der Aktion
google-github-actions/auth
gegen ein Cloudzugriffstoken aus.
Hinweis
Wenn Umgebungen in Workflows oder in OIDC-Richtlinien verwendet werden, wird empfohlen, der Umgebung Schutzregeln für zusätzliche Sicherheit hinzuzufügen. Du kannst z. B. Bereitstellungsregeln für eine Umgebung konfigurieren, um einzuschränken, welche Verzweigungen und Tags in der Umgebung oder in geheimen Umgebungsschlüsseln bereitgestellt werden können. Weitere Informationen finden Sie unter Verwalten von Umgebungen für die Bereitstellung.
Hinzufügen von Berechtigungseinstellungen
Für die Auftrags- oder Workflowausführung ist eine permissions
-Einstellung mit id-token: write
erforderlich, damit der OIDC-Anbieter von GitHub für jede Ausführung eine JSON Web Token-Instanz erstellen kann.
Hinweis
Wenn du id-token: write
in den Berechtigungen des Workflows festlegst, erhält der Workflow keine Berechtigung zum Ändern oder Schreiben in Ressourcen. Stattdessen kann der Workflow ausschließlich ein OIDC-Token für eine Aktion oder einen Schritt anfordern (abrufen) und verwenden (festlegen). Dieses Token wird anschließend zur Authentifizierung bei externen Diensten mithilfe eines kurzlebigen Zugriffstokens verwendet.
Ausführliche Informationen zu erforderlichen Berechtigungen, Konfigurationsbeispielen und erweiterten Szenarios findest du unter OpenID Connect-Referenz.
Anfordern des Zugriffstokens
Die google-github-actions/auth
Aktion empfängt ein JWT vom GitHub-OIDC-Anbieter und fordert dann ein Zugriffstoken von GCP an. Weitere Informationen findest du in der GCP-Dokumentation.
In diesem Beispiel ist ein Auftrag namens Get_OIDC_ID_token
vorhanden, der Aktionen verwendet, um eine Liste der Dienste von GCP anzufordern.
WORKLOAD-IDENTITY-PROVIDER
: Ersetze diese Angabe durch den Pfad zu deinem Identitätsanbieter in GCP. Beispiel:projects/example-project-id/locations/global/workloadIdentityPools/name-of-pool/providers/name-of-provider
SERVICE-ACCOUNT
: Ersetze diese Angabe durch den Namen deines Dienstkontos in GCP.
Diese Aktion tauscht ein GitHub-OIDC-Token gegen ein Google Cloud-Zugangstoken unter Verwendung von Workloadidentitätsverbund.
name: List services in GCP on: pull_request: branches: - main permissions: id-token: write jobs: Get_OIDC_ID_token: runs-on: ubuntu-latest steps: - id: 'auth' name: 'Authenticate to GCP' uses: 'google-github-actions/auth@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0' with: create_credentials_file: 'true' workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER' service_account: 'SERVICE-ACCOUNT' - id: 'gcloud' name: 'gcloud' run: |- gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}" gcloud services list
name: List services in GCP
on:
pull_request:
branches:
- main
permissions:
id-token: write
jobs:
Get_OIDC_ID_token:
runs-on: ubuntu-latest
steps:
- id: 'auth'
name: 'Authenticate to GCP'
uses: 'google-github-actions/auth@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0'
with:
create_credentials_file: 'true'
workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER'
service_account: 'SERVICE-ACCOUNT'
- id: 'gcloud'
name: 'gcloud'
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud services list