Blog

Einrichtung der schlüssellosen Authentifizierung bei Google Cloud für GitHub-Aktionen mit Terraform

Niels van Doorn

Aktualisiert Oktober 16, 2025
3 Minuten

Wenn ein GitHub Actions-Workflow Ressourcen auf Google Cloud lesen oder ändern muss, muss er sich zunächst bei der Plattform authentifizieren. Traditionell wird dazu ein langlebiger JSON-Schlüssel für das Servicekonto in den Geheimnissen des GitHub-Repositorys gespeichert. Dies stellt nicht nur ein Sicherheitsrisiko dar, da dieser Schlüssel durchsickern könnte, sondern es kann auch sein, dass die Erstellung dieses Schlüssels durch die Richtlinien Ihres Unternehmens blockiert wird.

Mit Terraform können wir einen Workload-Identitätspool erstellen, den GitHub zur Authentifizierung von Workflows verwenden kann. Das folgende Beispiel funktioniert nur, wenn Sie bereits eine Möglichkeit haben, sich bei Ihrem Google Cloud-Projekt zu authentifizieren, wenn Sie Terraform ausführen. Wenn GitHub Actions für die Erstellung Ihrer Terraform-Ressourcen verantwortlich ist, empfehle ich Ihnen, ein temporäres Service-Konto zu erstellen und den JSON-Schlüssel zu nehmen, um ihn in Ihre Action einzufügen. Sobald der Workload-Identitätspool erstellt wurde, können Sie zur Verwendung der Workload-Identitätsföderation anstelle des JSON-Schlüssels wechseln. Vergessen Sie nicht, den Schlüssel des Servicekontos nach der Umstellung zu löschen.

Dieser erste Block erstellt den Workload-Identitätspool und den Provider. Vergessen Sie nicht, Ihre project_id und repo in den Locals zu ändern.

locals {
  project_id   = "my-google-project"
  organization = "my-github-organization"
  repo         = "my-github-repository" 
}

resource "google_iam_workload_identity_pool" "github_pool" {
  project                   = local.project_id
  workload_identity_pool_id = "github-pool"
  display_name              = "GitHub pool"
  description               = "Identity pool for GitHub deployments"
}

resource "google_iam_workload_identity_pool_provider" "github" {
  project                            = local.project_id
  workload_identity_pool_id          = google_iam_workload_identity_pool.github_pool.workload_identity_pool_id
  workload_identity_pool_provider_id = "github-provider"

  attribute_mapping = {
    "google.subject"       = "assertion.sub"
    "attribute.actor"      = "assertion.actor"
    "attribute.aud"        = "assertion.aud"
    "attribute.repository" = "assertion.repository"
  }

  attribute_condition = "assertion.repository_owner=="${local.organization}""

  oidc {
    issuer_uri = "https://token.actions.githubusercontent.com"
  }
}

Der zweite Abschnitt erstellt das Servicekonto, das von GitHub Actions Workflows verwendet wird, und gewährt dem Workload-Identitätspool Zugriff auf die Verwendung des Servicekontos:

resource "google_service_account" "github_actions" {
  project      = local.project_id
  account_id   = "github-actions"
  display_name = "Service Account used for GitHub Actions"
}

resource "google_service_account_iam_member" "workload_identity_user" {
  service_account_id = google_service_account.github_actions.name
  role               = "roles/iam.workloadIdentityUser"
  member             = "principalSet://iam.googleapis.com/${google_iam_workload_identity_pool.github_pool.name}/attribute.repository/${local.organization}/${local.repo}"
}

Die folgenden zwei Ausgaben können in Ihrer GitHub Actions Workflow-Datei verwendet werden:

output "workload_identity_provider" {
  value = "${google_iam_workload_identity_pool.github_pool.name}/providers/${google_iam_workload_identity_pool_provider.github.workload_identity_pool_provider_id}"
}

output "service_account" {
  value = google_service_account.github_actions.email
}

Wenn Sie eine terraform apply ausführen, können Sie diese Ausgaben in Ihrer GitHub Actions Workflow-Datei verwenden. Vergessen Sie nicht, dem neu erstellten Dienstkonto (google_service_account.github_actions) alle gewünschten Rollen zuzuweisen.

name: GitHub Actions Workload Identity Demo
on: [push]
jobs:
  List-Buckets:
    permissions:
      contents: "read"
      id-token: "write"
    runs-on: ubuntu-latest
    steps:
      - uses: "actions/checkout@v3"

      - id: "auth"
        name: "Authenticate to Google Cloud"
        uses: "google-github-actions/auth@v0"
        with:
          workload_identity_provider: <workload_identity_provider>
          service_account: <service_account>

      - name: "Set up Cloud SDK"
        uses: "google-github-actions/setup-gcloud@v0"

      - name: "List buckets"
        run: "gcloud storage ls"

Fazit

Sie haben gelernt, wie Sie den Workload-Identitätsverbund für GitHub-Aktionen einrichten können. Jetzt können Sie Ihre GitHub-Aktionen sicher bei Ihren Google Cloud-Projekten authentifizieren, ohne dass Sie sich mit Dienstkontenschlüsseln beschäftigen müssen.

Verfasst von

Niels van Doorn

Contact

Let’s discuss how we can support your journey.