Ü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 Informationen zur Sicherheitshärtung mit 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 findest du unter Informationen zur Sicherheitshärtung mit 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 für die Sicherheitshärtung sicher, dass du Informationen zur Sicherheitshärtung mit OpenID Connect gelesen hast. Ein Beispiel findest du unter Informationen zur Sicherheitshärtung mit OpenID Connect.
- 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://token.actions.githubusercontent.com
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 mit der
google-github-actions/auth
-Aktion das OIDC-Token (JWT) gegen ein Cloudzugriffstoken aus.
Hinzufügen von Berechtigungseinstellungen
Der Auftrag oder die Workflowausführung erfordert eine Einstellung permissions
mit id-token: write
. Du kannst das OIDC JWT-ID-Token nicht anfordern, wenn die Einstellung permissions
für id-token
auf read
oder none
festgelegt ist.
Mit der Einstellung id-token: write
kann der JWT von GitHub-OIDC-Anbieter mit einer der folgenden Ansätze angefordert werden:
- Verwenden von Umgebungsvariablen auf dem Runner (
ACTIONS_ID_TOKEN_REQUEST_URL
undACTIONS_ID_TOKEN_REQUEST_TOKEN
). - Verwenden von
getIDToken()
aus dem Actions-Toolkit.
Wenn du ein OIDC-Token für einen Workflow abrufen musst, können die Berechtigungen auf Workflowebene festgelegt werden. Beispiel:
permissions:
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout
Wenn Du nur ein OIDC-Token für einen einzelnen Auftrag abrufen musst, kann diese Berechtigung innerhalb dieses Auftrags festgelegt werden. Beispiel:
permissions:
id-token: write # This is required for requesting the JWT
Möglicherweise musst Du hier zusätzliche Berechtigungen angeben, abhängig von den Anforderungen Deines Workflows.
Für wiederverwendbare Workflows sollte die permissions
-Einstellung für id-token
auf Aufruferworkflowebene oder in dem bestimmten Auftrag auf write
festgelegt werden, der den wiederverwendbaren Workflow aufruft. Weitere Informationen findest du unter Wiederverwenden von Workflows.
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.
<example-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>
<example-service-account>
: Ersetze diese Angabe durch den Namen deines Dienstkontos in GCP.<project-id>
: Ersetze diese Angabe durch die ID deines GCP-Projekts.
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@v0.3.1'
with:
create_credentials_file: 'true'
workload_identity_provider: '<example-workload-identity-provider>'
service_account: '<example-service-account>'
- id: 'gcloud'
name: 'gcloud'
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud services list