Blog

Workload Identity Federation: Sicherer AWS-Zugang von GCP ohne Anmeldeinformationen

Bild von Dimitar Zafirov
Dimitar Zafirov
DevOps- und Cloud-Ingenieur
14.08.2025
Lesezeit: 4 Minuten.
Zuletzt aktualisiert: 14.08.2025

Inhaltsübersicht

Workload Identity Federation (WIF) ermöglicht es Arbeitslasten, die in der Google Cloud ausgeführt werden (z. B. GKE-Pods), sicher auf AWS-Ressourcen (wie S3) zuzugreifen, ohne statische AWS-Anmeldedaten zu speichern. Anstatt langlebige Zugriffsschlüssel zu verwenden, tauschen GCP-Workloads Google-Identitäts-Tokens für temporäre AWS-Anmeldeinformationen über AWS STS (Security Token Service) aus.

  • Ein Pod, der auf Google Kubernetes Engine (GKE) läuft, muss:
  • S3-Buckets auflisten
  • Herunter-/Hochladen von Dateien auf Amazon S3

  Ohne:

  • Speichern von AWS-Anmeldeinformationen (keine aws_access_key_id oder secret_access_key in der Konfiguration)
  • Aktivieren der Workload Identity Federation in GCP
  • Erstellen Sie einen AWS IAM OIDC Provider, um GCP zu vertrauen
  • Erstellen einer AWS IAM-Rolle für GCP-Arbeitslasten
  • Erstellen eines Workload-Identitätspools in GCP
  • Einen Workload-Identitätsanbieter in GCP erstellen
  • Zuordnung des GCP-Service-Kontos zur AWS IAM-Rolle
  • Test der Authentifizierung von GCP zu AWS
Arbeitsbelastung - Identität - Verbund

Prüfen Sie, ob Workload Identity Federation aktiviert ist:

$ gcloud container clusters describe CLUSTER_NAME \

    --project=YOUR_PROJECT_ID \

    --location=GKE_REGION \

    --format="value(workloadIdentityConfig.workloadPool)"

Beispiel:

$ gcloud container clusters describe mgr-main-sbx \

    --project=mgr-product-sbx \

    --location=europe-west1 \

    --format="value(workloadIdentityConfig.workloadPool)"

Ausgabe:

mgr-product-sbx.svc.id.goog

Wenn er nicht aktiviert ist, führen Sie ihn aus:

$ gcloud container clusters update CLUSTER_NAME \

    --workload-pool=YOUR_PROJECT_ID.svc.id.goog \

    --project=YOUR_PROJECT_ID \

    --location=GKE_REGION

So erstellen Sie den Anbieter:

$ aws iam create-open-id-connect-provider \

    --url https://sts.googleapis.com \

    --client-id-list sts.amazonaws.com \

    --thumbprint-list 08745487ghdud7e7eh1f2a07e452f36f6

Überprüfen Sie, ob der OIDC-Provider erstellt wurde:

$ aws iam list-open-id-connect-providers

Erstellen Sie einen GCP Service Account (poc-gcp-to-aws-sa@mgr-product-sbx.iam.gserviceaccount.com) und erstellen Sie einen Schlüssel für diesen SA:

$ gcloud iam service-accounts create poc-gcp-to-aws-sa --project=YOUR_PROJECT_ID  --display-name="GCP to AWS Service Account"

Beispiel:

$ gcloud iam service-accounts create poc-gcp-to-aws-sa \     --project=mgr-product-sbx \     --display-name="GCP to AWS Service Account"     --role="roles/iam.serviceAccountTokenCreator"


Geben Sie SA die Berechtigung, Token zu erhalten/zu erstellen!

$ gcloud auth activate-service-account --key-file=mgr-product-sbx-24aa6b13e9a7.json

$ TOKEN=$(gcloud auth print-identity-token --impersonate-service-account=poc-gcp-to-aws-sa@mgr-product-sbx.iam.gserviceaccount.com)

$ echo $TOKEN | jq -R 'split(".") | .[1] | @base64d | fromjson'

Datei erstellen poc-trust-policy.json

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Principal": {"Federated": "accounts.google.com"},

            "Action": "sts:AssumeRoleWithWebIdentity",

            "Condition": {

                "StringEquals": {

                    "accounts.google.com:aud": "<azp-value>",

                    "accounts.google.com:oaud": "<aud-value>",

                    "accounts.google.com:sub": "<sub-value>"

                }

            }

        }

    ]

}

Für "aud", "oaud" und "sub" wird die Ausgabe von SA TOKEN verwendet.

accounts.google.com:oaud Bedingungsschlüssel stimmt mit dem Feld aud (AUDIENCE) auf dem Google-ID-Token überein.

accounts.google.com:aud Bedingungsschlüssel stimmt mit dem Feld azp (AUTHORIZED_PARTY) auf dem Google-ID-Token überein.

accounts.google.com:sub Bedingungsschlüssel stimmt mit dem Feld sub (SUBJECT) auf dem Google ID-Token überein.

Erstellen Sie die AWS-Rolle

$ aws iam create-role \

    --role-name GCPWorkloadIAMRole \

    --assume-role-policy-document file://poc-trust-policy.json

Zuweisung der Richtlinie "AmazonS3ReadOnlyAccess" zu dieser Rolle (für den späteren Test).

Konfigurieren der Workload Identity Federation

$ gcloud iam workload-identity-pools create "POOL_NAME" \

    --project=YOUR_PROJECT_ID \

    --location="global" \

    --display-name="AWS Workload Identity Pool"

Beispiel:

$ gcloud iam workload-identity-pools create "poc-aws-pool" --project=mgr-product-sbx --location="global" --display-name="AWS Workload Identity Pool"

Damit wird der Pool mit AWS verbunden.

$ gcloud iam workload-identity-pools providers create-oidc "PROVIDER_NAME" \                      

--project=PROJECT_NAME \    

--location="global" \    

--workload-identity-pool="POOL_NAME" \          

--display-name="AWS OIDC Provider" \    

--issuer-uri="https://sts.amazonaws.com" \    

--allowed-audiences="sts.amazonaws.com" \    

--attribute-mapping="google.subject=assertion.sub,google.groups=assertion.groups"

Beispiel:

$ gcloud iam workload-identity-pools providers create-oidc "aws-provider"

--project=mgr-product-sbx

--location="global"

--workload-identity-pool="poc-aws-pool"

--display-name="AWS OIDC Provider"

--issuer-uri="https://sts.amazonaws.com"

--allowed-audiences="sts.amazonaws.com"

--attribute-mapping="google.subject=assertion.sub,google.groups=assertion.groups"

Die Ausgabe wird sein:

projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/poc-aws-   pool/providers/aws-provider

Workloads erlauben, dieses Servicekonto zu übernehmen

$ gcloud iam service-accounts add-iam-policy-binding \

    poc-gcp-to-aws-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com \

    --role roles/iam.workloadIdentityUser \

    --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_NAME/subject/arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME"

Ein Beispiel:

$ gcloud iam service-accounts add-iam-policy-binding poc-gcp-to-aws-sa@mgr-product-sbx.iam.gserviceaccount.com

--role roles/iam.workloadIdentityUser

--member "principal://iam.googleapis.com/projects/960144414359/locations/global/workloadIdentityPools/poc-aws-pool/subject/arn:aws:iam::211125558983:role/GCPWorkloadIAMRole"
$ gcloud auth activate-service-account --key-file=mgr-product-sbx-e284c02e086c.json

TOKEN=$(gcloud auth print-identity-token --impersonate-service-account=poc-gcp-to-aws-sa@mgr-product-sbx.iam.gserviceaccount.com)

$ echo $TOKEN | jq -R 'split(".") | .[1] | @base64d | fromjson'

$ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::211125558983:role/GCPWorkloadIAMRole" --role-session-name "gcp-session" --web-identity-token "$TOKEN" --query 'Credentials'

Die Ausgabe sollte etwa so aussehen:

export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY"
export AWS_SESSION_TOKEN="YOUR_SESSION_TOKEN"

Test S3 Zugang

$ aws s3 ls

Ausgabe:

2024-11-09 07:19:45 baseline-tfstates-211125558983

2024-11-09 07:37:41 billing-export-211125558983

2024-11-20 13:12:19 gar-credential-provider-test

$ aws iam list-roles

Ausgabe:

An error occurred (AccessDenied) when calling the ListRoles operation: User: arn:aws:sts::211125558983:assumed-role/GCPWorkloadIAMRole/gcp-session is not authorized to perform: iam:ListRoles on resource: arn:aws:iam::211125558983:role/ because no identity-based policy allows the iam:ListRoles action

Dieses Setup ermöglicht GCP Workloads wie GKE-Pods sicher auf AWS zugreifen, ohne jemals langlebige Geheimnisse zu verwalten oder einzubetten. Mit Workload Identity Federation stellen Sie sicher:

  • Starke Cloud-übergreifende Identität
  • Bessere Sicherheitsvorkehrungen
  • Vereinfachter Lebenszyklus von Berechtigungsnachweisen

Mehr Beiträge

Die ITGix AWS Landing Zone wird kontinuierlich weiterentwickelt, wobei ein klares Ziel im Vordergrund steht: Unternehmen sollen in die Lage versetzt werden, sichere, konforme und skalierbare AWS-Umgebungen mit geringerem Betriebsaufwand aufzubauen. In den jüngsten Versionen (v1.2.0...
Lesen
FinTech-Unternehmen sind von Grund auf cloud-nativ konzipiert. Sie führen häufige Bereitstellungen durch, skalieren schnell und stützen sich auf moderne Cloud-Plattformen, um Zahlungsabläufe, digitale Geldbörsen und Finanzdienstleistungen zu unterstützen. Dennoch ist PCI...
Lesen
Kontakt aufnehmen
ITGix bietet Ihnen fachkundige Beratung und maßgeschneiderte DevOps-Services, um Ihr Unternehmenswachstum zu beschleunigen.
Newsletter für
Technik-Experten
Schließen Sie sich 12.000+ Geschäftsführern und Ingenieuren an, die Blogs, e-Books und Fallstudien Fallstudien über neue Technologie erhalten.