Blog
So konfigurieren Sie Google Cloud Workload Identity Federation für Azure DevOps

Für die Bereitstellung von Google Cloud (GCP)-Ressourcen über Azure Pipelines waren früher Schlüssel für Servicekonten erforderlich. Heute jedoch können Azure DevOps OIDC-Tokens mit Hilfe von Google Cloud Workload Identity Federation in Google-Anmeldeinformationen umgewandelt werden.
Google Cloud Workload Identitätsverbund
Externe Workloads können mithilfe der Workload-Identitätsföderation auf Google Cloud-Ressourcen zugreifen, ohne einen Service-Kontoschlüssel zu verwenden. Die Workload-Identitätsföderation folgt der OAuth 2.0 Spezifikation für den Token-Austausch. Sie übermitteln die Anmeldedaten des Workloads von Ihrem IdP an den Google Security Token Service, der die Identität der Anmeldedaten überprüft und im Gegenzug ein Token für den Verbund zurückgibt.
Azure DevOps Token
Azure Pipelines verwenden Service-Verbindungen für den Zugriff auf externe Ressourcen. Daher stellt Azure DevOps OIDC-Tokens aus, um zu beweisen, dass Sie auf eine externe Ressource zugreifen dürfen:
{
..
"sub": "sc://devops-organization/devops-project/service-connection-name",
"aud": "api://AzureADTokenExchange",
"iss": "https://vstoken.dev.azure.com/devops-organization-id",
..
}
Diese Token werden von Ihrer Azure DevOps-Organisation (Konto) für einen bestimmten Zweck ausgegeben, der an die Serviceverbindung gebunden ist. Das Token ist vertrauenswürdig, da einer Azure-Pipeline der Zugriff auf die Service-Verbindung gewährt werden muss.
Tipp! Finden Sie Ihre Azure DevOps-Organisations-ID mit Hilfe der Konten-API. Sehen Sie sich dieses Beispiel an.
Azure DevOps Token zusammenführen
Der Workload Identity Pool Provider ordnet die Azure DevOps-Tokens den Google-Anmeldedaten zu:
resource "google_iam_workload_identity_pool_provider" "azure_devops_organization" {
workload_identity_pool_id = google_iam_workload_identity_pool.example.workload_identity_pool_id
workload_identity_pool_provider_id = "ado-org"
display_name = "ado/org"
disabled = false
attribute_mapping = {
"google.subject" = "assertion.sub"
}
oidc {
issuer_uri = "https://vstoken.dev.azure.com/00000000-0000-0000-0000-000000000000"
allowed_audiences = [
"api://AzureADTokenExchange"
]
}
}
Das vollständige Beispiel finden Sie auf GitHub.
Damit können Sie eine Google-Anmeldung erhalten:
POST https://sts.googleapis.com/v1/token
{
"audience": "//iam.googleapis.com/projects/0000/locations/global/workloadIdentityPools/example/providers/ado-org`,
"grantType": "urn:ietf:params:oauth:grant-type:token-exchange",
"requestedTokenType": "urn:ietf:params:oauth:token-type:access_token",
"scope": "https://www.googleapis.com/auth/cloud-platform",
"subjectTokenType": "urn:ietf:params:oauth:token-type:jwt",
"subjectToken": "eyJ0eXAiOiJKV1Q..."
}
Sich als Dienstkonto ausgeben
Schließlich kann der Google-Berechtigungsnachweis verwendet werden, um sich als ein bestimmtes Dienstkonto auszugeben:
resource "google_service_account_iam_member" "azure_devops_workload_identity_user" {
service_account_id = google_service_account.azure_devops_project.name
role = "roles/iam.workloadIdentityUser"
member = "principal://iam.googleapis.com/${google_iam_workload_identity_pool.azure_devops_organization.name}/subject/sc://my-organization/my-project/my-connection"
}
POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/sa@project.iam.gserviceaccount.com:generateAccessToken
Authorization: "Bearer ..."
{
"scope": "https://www.googleapis.com/auth/cloud-platform"
}
Fazit
Verwenden Sie keine Service-Kontoschlüssel mehr. Föderieren Sie Google-Anmeldeinformationen auf der Grundlage von Azure DevOps OIDC-Tokens, die Service-Verbindungen darstellen.
Bild von jacqueline macou aus Pixabay
Verfasst von
Laurens Knoll
As a cloud consultant I enjoy improving what your company does best. I enable your business using cloud technology and enable your engineers by applying software engineering practices to your infrastructure domain.
Unsere Ideen
Weitere Blogs
Contact



