Jede Google Cloud-Compute-Umgebung mit Zugriff auf den Instanz-Metadatenserver (Cloud Run, Cloud Functions, App Engine, Compute Engine (GCE) und GKE mit Workload Identity) kann ein Google-signiertes Identitätstoken für ihr zugeordnetes Service-Konto anfordern. Der Aussteller des Tokens ist https://accounts.google.com, und Anthropic kann es direkt über die standardmäßige OIDC-Discovery validieren, ohne dass zusätzliche Google Cloud-Konfiguration erforderlich ist.
Diese Anleitung zeigt, wie du den Google-Aussteller bei Anthropic registrierst, ein Google-Service-Konto an ein Anthropic-Service-Konto bindest und deine Workload ihr Identitätstoken gegen ein kurzlebiges Claude API-Zugriffstoken eintauschen lässt.
Google stellt Identitätstoken automatisch für jede Workload mit einem zugeordneten Service-Konto aus. Auf der Google-Seite muss nichts aktiviert werden, außer das richtige Service-Konto zuzuordnen, aber die Schritte unterscheiden sich leicht zwischen Standard-Compute und GKE.
Folge der Einrichtungsanleitung, um einen Föderationsaussteller zu registrieren, ein Anthropic-Service-Konto zu erstellen und eine Föderationsregel in der Claude Console anzulegen. Verwende diese Google Cloud-spezifischen Werte.
Föderationsaussteller: Google veröffentlicht sein OIDC-Discovery-Dokument öffentlich, verwende daher den Discovery-Modus. Dieser einzelne Aussteller deckt jede Google Cloud-Oberfläche ab (Cloud Run, GCE, Cloud Functions, App Engine und GKE mit Workload Identity). Unterscheide Workloads mit Regeln, nicht mit Ausstellern.
{
"name": "gcp",
"issuer_url": "https://accounts.google.com",
"jwks_source": "discovery"
}Föderationsregel: Gleiche sowohl den sub- als auch den email-Claim ab. email ist die lesbare Service-Konto-Adresse; sub ist die numerische eindeutige ID des Service-Kontos, die Google niemals wiederverwendet, sodass das Festlegen dieser ID die Regel schützt, falls das Service-Konto gelöscht und später ein neues mit derselben E-Mail erstellt wird. Finde die eindeutige ID mit gcloud iam service-accounts describe SA_EMAIL --format='value(uniqueId)'.
{
"name": "gcp-inference-worker",
"issuer_id": "fdis_...",
"match": {
"audience": "https://api.anthropic.com",
"claims": {
"sub": "104892101234567890123",
"email": "[email protected]"
}
},
"target": {
"type": "service_account",
"service_account_id": "svac_..."
},
"workspace_id": "wrkspc_...",
"oauth_scope": "workspace:developer",
"token_lifetime_seconds": 600
}Rufe innerhalb deiner Google Cloud-Workload das Identitätstoken vom Metadatenserver ab, tausche es bei POST /v1/oauth/token ein und verwende das zurückgegebene Bearer-Token, um die Claude API aufzurufen. Jedes Anthropic-SDK übernimmt den Austausch und die Aktualisierungsschleife für dich, wenn du ein Token-Provider-Callable bereitstellst, das ein frisches Identitätstoken vom Metadatenserver zurückgibt, wie in den folgenden Beispielen gezeigt.
import os
import anthropic
import google.auth.transport.requests
import google.oauth2.id_token
from anthropic import WorkloadIdentityCredentials
AUDIENCE = "https://api.anthropic.com"
def fetch_google_identity_token() -> str:
request = google.auth.transport.requests.Request()
return google.oauth2.id_token.fetch_id_token(request, AUDIENCE)
client = anthropic.Anthropic(
credentials=WorkloadIdentityCredentials(
identity_token_provider=fetch_google_identity_token,
federation_rule_id=os.environ["ANTHROPIC_FEDERATION_RULE_ID"],
organization_id=os.environ["ANTHROPIC_ORGANIZATION_ID"],
service_account_id=os.environ["ANTHROPIC_SERVICE_ACCOUNT_ID"],
workspace_id=os.environ.get("ANTHROPIC_WORKSPACE_ID"),
),
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello from Cloud Run"}],
)
print(message.content[0].text)Google-Identitätstoken laufen nach etwa einer Stunde ab. Die SDKs rufen den Token-Provider erneut auf und führen den Austausch automatisch vor Ablauf erneut durch. Für Shell-Skripte, die länger als das expires_in des Zugriffstokens laufen, aktualisiere per Timer und wiederhole den Austausch.
Dekodiere innerhalb deiner Workload das Identitätstoken und bestätige, dass die Claims mit deiner Regel übereinstimmen:
curl -sS -H "Metadata-Flavor: Google" \
"http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=https://api.anthropic.com&format=full" \
| jq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson'Überprüfe, dass iss https://accounts.google.com ist, aud https://api.anthropic.com ist und email mit dem Wert in deiner Föderationsregel übereinstimmt. Führe dann den Austausch aus dem vorherigen Abschnitt aus. Ein erfolgreicher Austausch gibt ein access_token zurück, das mit sk-ant-oat01- beginnt, sowie einen expires_in-Wert in Sekunden. Bei 400 invalid_grant siehe Fehlgeschlagenen Austausch beheben; die häufigste Ursache auf der Google Cloud-Seite ist ein fehlender email-Claim (fordere das Token mit format=full an, damit er enthalten ist).
Der Google-sub-Claim ist die opake numerische eindeutige ID des Service-Kontos und
hat kein stabiles Präfix. Ein subject_prefix mit einem abschließenden * passt auf
beliebige Service-Konten in jedem Google Cloud-Projekt, und jedes davon
könnte ein föderiertes Anthropic-Token erhalten.
Beschränke den match-Block der Regel auf den engsten Bereich, der zu deinem Anwendungsfall passt:
sub exakt abgleichen: Setze die vollständige numerische eindeutige ID in claims.sub und verwende niemals subject_prefix für Google-Token.email-Claim festlegen: Füge claims.email neben sub hinzu, sodass sowohl die stabile ID als auch die lesbare Adresse übereinstimmen müssen.audience auf den exakten Wert, den du vom Metadatenserver anforderst, damit Token, die für andere Konsumenten ausgestellt wurden, abgelehnt werden.format=full-Token eine condition wie claims.google.compute_engine.project_id == "my-project" hinzu, um die Regel auf die Nodes eines Projekts zu beschränken.Was this page helpful?