Auf Google Cloud gehostete Agents können ihre eigene Identität verwenden, um sich bei Tools und Diensten zu authentifizieren, die in Google Cloud -Laufzeiten wie Cloud Run oder Google Kubernetes Engine (GKE) gehostet werden. Dazu fordern sie ein OpenID Connect-ID-Token (OIDC) von Agent Identity an. Agents können diese ID-Tokens auch verwenden, um sich bei Cloud-Plattformen von Drittanbietern (z. B. Amazon Web Services (AWS) und Microsoft Azure), benutzerdefinierten APIs, API-Gateways und lokalen Backends zu authentifizieren.
Wenn ein Agent in eigener Verantwortung auf einen externen Dienst zugreift, stellt Agent Identity ein OpenID Connect-ID-Token (OIDC) aus. Dieses JSON Web Token (JWT) bestätigt die SPIFFE-Identität des Agents und wird von den Ausstellerschlüsseln für die vertrauenswürdige Domain des Agents (verwalteter Workload Identity-Pool) signiert. Externe Systeme können diese Tokens ohne Google Cloud Anmeldedaten oder SDKs über öffentliche Endpunkte prüfen, die vom Google Cloud Security Token Service gehostet werden:
- Ein OpenID Connect Discovery 1.0-Endpunkt (
/.well-known/openid-configuration), der die OpenID-Anbietermetadaten und den Endpunkt für öffentliche Schlüssel (jwks_uri) veröffentlicht. - Ein JWKS-Endpunkt (JSON Web Key Set) (
/openid/jwks), der die aktiven öffentlichen Schlüssel bereitstellt, mit denen Signaturen für Agent-ID-Tokens überprüft werden.
Hinweis
- Prüfen Sie, ob Sie die richtige Authentifizierungsmethode ausgewählt haben. In der Übersicht zur Agent Identity erfahren Sie, wie SPIFFE-Identitäten, Vertrauensdomänen und Agenten-Anmeldedaten funktionieren.
- Erstellen und stellen Sie einen Agenten mit aktivierter Agent-Identität bereit.
- Ihr externer Dienst oder Identitätsanbieter muss die folgenden Anforderungen erfüllen:
- Unterstützt die Validierung von JSON Web Tokens (JWTs) mit OpenID Connect Discovery 1.0 und JSON Web Key Sets (JWKS).
- Kann ausgehende HTTPS-Anfragen an
https://sts.googleapis.comsenden, um die OpenID-Anbietermetadaten und öffentlichen Signaturschlüssel abzurufen.
- Ermitteln Sie die folgenden Konfigurationswerte für Ihren Agent und den externen Zieldienst:
- Aussteller-URL (
iss-Anspruch): Die Aussteller-URL des Workload Identity-Pools für Ihre Organisation (https://sts.googleapis.com/v1/organizations/ORGANIZATION_ID/locations/global/workloadIdentityPools/TRUST_DOMAIN) oder Ihr Projekt (https://sts.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/TRUST_DOMAIN). - Zulässige Zielgruppe (
aud-Anspruch): Der Zielgruppen-URI, den der externe Dienst oder Identitätsanbieter bei der Validierung von ID-Tokens erwartet.
- Aussteller-URL (
- Prüfen Sie, ob Sie die Rollen haben, die für diese Aufgabe erforderlich sind.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Bereitstellen eines Agents mit Agent Identity benötigen:
-
Stellen Sie einen Agent in der Agent Runtime auf der Gemini Enterprise Agent Platform bereit:
Vertex AI-Nutzer (
roles/aiplatform.user) -
Agent-Dienst in Cloud Run bereitstellen:
Cloud Run-Administrator (
roles/run.admin)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Bereitstellen eines Agents mit Agent Identity erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um einen Agent mit Agent-Identität bereitzustellen:
-
So stellen Sie einen Agenten in der Agent Runtime auf der Gemini Enterprise Agent Platform bereit:
-
aiplatform.reasoningEngines.create -
aiplatform.reasoningEngines.update
-
-
Agent-Dienst in Cloud Run bereitstellen:
-
run.services.create -
run.services.update
-
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
OIDC-ID-Token für einen Agenten abrufen
So konfigurieren Sie Ihren Agent, damit er ein OIDC-ID-Token abruft und an einen externen Dienst sendet:
KI‑Agent mit der Funktion „Agent Identity“ konfigurieren
Aktivieren Sie die Agent-Identität, wenn Sie Ihren Agenten bereitstellen:
Wenn Sie Ihren Agenten in der Agent Runtime on Gemini Enterprise Agent Platform bereitstellen, legen Sie
identity_typeaufAGENT_IDENTITYfest:remote_app = client.agent_engines.create( agent=app, config={ "identity_type": types.IdentityType.AGENT_IDENTITY, "requirements": ["google-cloud-aiplatform[agent_engines,adk]"], }, )Wenn Sie einen containerisierten Agent-Dienst in Cloud Run bereitstellen, übergeben Sie das Flag
--identity-type=agent-identity:gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --identity-type=agent-identity \ --no-allow-unauthenticated
Ersetzen Sie Folgendes:
SERVICE_NAME: Der Name Ihres Cloud Run-Dienstes.IMAGE_URL: Die Container-Image-URL für Ihren Agent.
OIDC-ID-Token im Anwendungscode anfordern
Verwenden Sie im Anwendungscode Ihres Agents die Google Auth-Clientbibliothek, um ein OIDC-ID-Token für Ihre externe Zielgruppe anzufordern. Die Clientbibliothek übernimmt die Tokengenerierung, das lokale Caching und die automatische Erneuerung vom Metadatenserver.
Standardmäßig sind OIDC-ID-Tokens, die für externe Zielgruppen ausgestellt werden, nicht an das Laufzeitzertifikat gebunden.
Im folgenden Beispiel wird die google-auth-Bibliothek verwendet, um ein OIDC-ID-Token anzufordern und es als Bearer-Token an eine ausgehende Anfrage anzuhängen:
Python
from google.auth.transport.requests import AuthorizedSession from google.oauth2 import id_token # 1. Specify the audience expected by the external receiver # (for example, AWS Bedrock AgentCore or your external service URL). target_audience = "https://EXTERNAL_SERVICE_AUDIENCE" # 2. Create ID token credentials and an AuthorizedSession, which handles # local token caching, automatic renewal before expiry, and the Bearer header. credentials = id_token.fetch_id_token_credentials(audience=target_audience) authed_session = AuthorizedSession(credentials) # 3. Send the authenticated request to the external service. response = authed_session.post( "https://EXTERNAL_SERVICE_ENDPOINT", json={"prompt": "Hello from Agent"}, )
Ersetzen Sie Folgendes:
EXTERNAL_SERVICE_AUDIENCE: Der Zielgruppen-URI, der von Ihrem empfangenden Dienst erwartet wird (z. B.bedrock.us-east-1.amazonaws.comoderapi.example.com).EXTERNAL_SERVICE_ENDPOINT: Die URL der externen API oder des Backend-Endpunkts, die von Ihrem Agenten aufgerufen wird.
Anleitungen und Beispiele für Clientbibliotheken in anderen Programmiersprachen (einschließlich Go, Node.js und Java) finden Sie unter ID-Token abrufen. Die aktuellen Clientbibliotheksversionen für diese Sprachen unterstützen --identity-type=agent-identity, verwenden aber standardmäßig keine gebundenen Tokens.
ID-Tokens für Agent Identity überprüfen
Wenn ein externer Dienst ein OIDC-ID-Token von Ihrem Agent erhält, prüfen Sie das Token mit einer der folgenden Methoden, je nach Zieldienst:
- Verwaltete Cloud-Plattformen (z. B. Cloud Run, AWS oder Microsoft Azure): Verwenden Sie die integrierte Workload Identity-Föderation, um eingehende Tokens zu überprüfen, ohne benutzerdefinierten Bestätigungscode schreiben zu müssen.
- Benutzerdefinierte Backend-Dienste, API-Gateways und lokale Arbeitslasten: Tokens programmatisch überprüfen mit den öffentlichen OpenID Connect Discovery- und JWKS-Endpunkten.
Integrierte Workload Identity-Föderation verwenden
Wenn Ihr Empfangsdienst auf einer Cloud-Plattform ausgeführt wird, die die integrierte IAM-Authentifizierung oder die OIDC-Identitätsföderation von Arbeitslasten unterstützt, müssen Sie keinen benutzerdefinierten Code zur Tokenüberprüfung schreiben:
Cloud Run: Wenn Ihr empfangender Dienst in Cloud Run mit authentifiziertem eingehenden Traffic (
--no-allow-unauthenticated) ausgeführt wird, validiert Cloud Run eingehende Agent Identity-Tokens auf der Ingress-Ebene. Gewähren Sie dem aufrufenden Agent die Rolle „Cloud Run Invoker“ (roles/run.invoker) für den empfangenden Dienst. Weitere Informationen finden Sie unter Bei MCP-Servern in Cloud Run authentifizieren.Wenn Ihr Dienst nicht authentifizierten Ingress zulässt und Tokens im Anwendungscode überprüft, lesen Sie den Abschnitt Tokens programmgesteuert überprüfen.
Amazon Bedrock: Konfigurieren Sie die eingehende JWT-Authentifizierung, indem Sie dieGoogle Cloud Security Token Service-Discovery-URL oder die Aussteller-URL und die erwartete Zielgruppe angeben. Eine Anleitung finden Sie in der AWS-Dokumentation unter Inbound-JWT-Autorisierung konfigurieren.
Microsoft Entra ID: Konfigurieren Sie Anmeldedaten für föderierte Identitäten mit dem Szenario Anderer Aussteller. Geben Sie die Aussteller-URL des Google Cloud Security Token Service , die erwartete Zielgruppe und die Subjekt-ID (
sub-Anspruch) an. Eine Anleitung finden Sie in der Microsoft Learn-Dokumentation unter Vertrauensstellung zwischen einer App und einem externen Identitätsanbieter erstellen.
Tokens programmatisch überprüfen
Wenn Ihr Agent Anfragen an eine benutzerdefinierte API, einen Mikrodienst, ein API-Gateway oder eine lokale Arbeitslast sendet, muss der empfangende Dienst das eingehende OIDC-ID-Token überprüfen, bevor er Zugriff gewährt. Ihr KI-Agent übergibt dieses Token in der Regel im Authorization: Bearer TOKEN-HTTP-Header.
So überprüfen Sie eingehende ID-Tokens programmatisch:
- Aussteller-URL des Tokens extrahieren und validieren
- Öffentliche Signaturschlüssel ermitteln und im Cache speichern
- Tokensignatur und ‑ansprüche überprüfen
- SPIFFE-Identität des Agents autorisieren
URL des Tokenausstellers extrahieren und validieren
Wenn eine eingehende Anfrage eintrifft, lesen Sie die nicht bestätigte JWT-Nutzlast, um den Anspruch iss (Aussteller) zu extrahieren. Dieser Anspruch enthält die URL des Workload Identity-Pools für die vertrauenswürdige Domain des Agents. Diese URL dient als Basis-URL für das Discovery-Dokument und die öffentlichen Signaturschlüssel.
Bevor Sie ausgehende Netzwerkanfragen stellen, prüfen Sie, ob der iss-Anspruch mit der erwarteten Google Cloud -URL des Security Token Service-Workload Identity-Pools für Ihre Organisation oder Ihr Projekt übereinstimmt:
Vertrauenswürdige Domains auf Organisationsebene:
https://sts.googleapis.com/v1/organizations/ORGANIZATION_ID/locations/global/workloadIdentityPools/TRUST_DOMAIN
Für eine Organisation mit der ID
123456789012istTRUST_DOMAINbeispielsweiseagents.global.org-123456789012.system.id.goog.Vertrauenswürdige Domains auf Projektebene (für Projekte ohne Organisation):
https://sts.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/TRUST_DOMAIN
Für ein Projekt mit der Nummer
9876543210istTRUST_DOMAINbeispielsweiseagents.global.proj-9876543210.system.id.goog.
Öffentliche Signaturschlüssel ermitteln und im Cache speichern
Nachdem Sie die Aussteller-URL validiert haben, rufen Sie die öffentlichen Signaturschlüssel vom Google Cloud Security Token Service ab und speichern Sie sie im Cache:
-
OpenID Connect-Discovery-Endpunkt abfragen: Hängen Sie
/.well-known/openid-configurationan die Basis-Aussteller-URL an und senden Sie eine nicht authentifizierte HTTP-GET-Anfrage:Ersetzen Sie diese Werte in den folgenden Anfragedaten:
ORGANIZATION_ID: Ihre Google Cloud Organisations-ID. Ersetzen Sie bei einem Projekt ohne Organisationorganizations/ORGANIZATION_IDdurchprojects/PROJECT_NUMBER.TRUST_DOMAIN: Die ID des Workload Identity-Pools für die Vertrauensdomäne Ihres Agenten (z. B.agents.global.org-123456789012.system.id.goog).
HTTP-Methode und URL:
GET https://sts.googleapis.com/v1/organizations/ORGANIZATION_ID/locations/global/workloadIdentityPools/TRUST_DOMAIN/.well-known/openid-configuration
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Bei einer erfolgreichen Anfrage wird der Status
HTTP 200 OKund ein JSON-Objekt mit den OpenID-Anbietermetadaten zurückgegeben, einschließlich des Feldsjwks_uri:{ "issuer": "https://sts.googleapis.com/v1/organizations/123456789012/locations/global/workloadIdentityPools/agents.global.org-123456789012.system.id.goog", "jwks_uri": "https://sts.googleapis.com/v1/organizations/123456789012/locations/global/workloadIdentityPools/agents.global.org-123456789012.system.id.goog/openid/jwks", "authorization_endpoint": "https://sts.googleapis.com/v1/organizations/123456789012/locations/global/workloadIdentityPools/agents.global.org-123456789012.system.id.goog/authorize", "token_endpoint": "https://sts.googleapis.com/v1/organizations/123456789012/locations/global/workloadIdentityPools/agents.global.org-123456789012.system.id.goog/token", "response_types_supported": [ "id_token" ], "subject_types_supported": [ "public" ], "id_token_signing_alg_values_supported": [ "RS256" ] } -
JWKS-Endpunkt (JSON Web Key Set) abfragen: Senden Sie eine nicht authentifizierte HTTP-
GET-Anfrage an diejwks_uri-URL, die in den OpenID-Anbietermetadaten zurückgegeben wird:Ersetzen Sie diese Werte in den folgenden Anfragedaten:
ORGANIZATION_ID: Ihre Google Cloud Organisations-ID. Ersetzen Sie bei einem Projekt ohne Organisationorganizations/ORGANIZATION_IDdurchprojects/PROJECT_NUMBER.TRUST_DOMAIN: Die ID des Workload Identity-Pools für die Vertrauensdomäne Ihres Agenten (z. B.agents.global.org-123456789012.system.id.goog).
HTTP-Methode und URL:
GET https://sts.googleapis.com/v1/organizations/ORGANIZATION_ID/locations/global/workloadIdentityPools/TRUST_DOMAIN/openid/jwks
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Bei einer erfolgreichen Anfrage wird der Status
HTTP 200 OKund ein JSON-Objekt mit einem Array von öffentlichen Schlüsseln zurückgegeben, die gemäß RFC 7517 formatiert sind:{ "keys": [ { "kty": "RSA", "use": "sig", "alg": "RS256", "kid": "4d1933f8e6c4e0b512c140989f6655c68997...", "n": "uQn4zN_1mQ0VpGv82-Wp3w...", "e": "AQAB" } ] } -
Discovery-Dokument und Schlüssel im Cache speichern: Antworten vom OpenID Connect Discovery-Endpunkt und vom JWKS-Endpunkt enthalten den folgenden HTTP-Cache-Header:
Cache-Control: public, max-age=86400, must-revalidate
Das Discovery-Dokument und die JWKS können bis zu 24 Stunden (
86400Sekunden) im Cache gespeichert werden, um die Überprüfungsleistung zu verbessern und Ratenbegrenzungen zu vermeiden.Google Cloud rotiert regelmäßig die privaten und öffentlichen Signaturschlüssel für Workload Identity-Pools. Wenn Ihr Verifier ein eingehendes Token mit einer
kid(Schlüssel-ID) empfängt, die sich nicht in seinem lokalen Schlüsselcache befindet, rufen Sie ein neues JWKS vom/openid/jwks-Endpunkt ab, bevor Sie das Token ablehnen.Wenn beim Abfragen der Discovery- oder JWKS-Endpunkte HTTP-Fehler auftreten, lesen Sie den Abschnitt Probleme bei der Authentifizierung der Agent-Identität beheben.
Tokensignatur und ‑claims prüfen
Verwenden Sie eine Standardbibliothek für die OIDC- oder JWT-Verifizierung (z. B. Google Tink), um die Tokensignatur kryptografisch zu verifizieren und die JWT-Ansprüche zu validieren. Gehen Sie dazu so vor:
- Signatur: Suchen Sie im zwischengespeicherten JWKS nach dem öffentlichen Schlüssel, der mit der
kid(Schlüssel-ID) im JWT-Header übereinstimmt. Validieren Sie die Signatur mit dem Algorithmus, der im Feldalg(RS256) angegeben ist. Um die Vorwärtskompatibilität zu gewährleisten, sollten Sie die Felderalgundktyin den JWKS dynamisch prüfen, anstatt Algorithmustypen fest zu codieren. - Aussteller (
iss): Prüfen Sie, ob deriss-Anspruch mit der vertrauenswürdigenGoogle Cloud -Aussteller-URL des Workload Identity-Pools für Ihre Vertrauensdomäne übereinstimmt. - Zielgruppe (
aud): Prüfen Sie, ob deraud-Anspruch mit der konfigurierten Zielgruppen-ID Ihres Dienstes übereinstimmt. - Ausstellungszeitpunkt (
iat) und Ablaufzeit (exp): Prüfen Sie, ob die Anforderungiatin der Vergangenheit liegt und die aktuelle Zeit vor der Anforderungexpliegt (mit einer geringen Toleranz für die Zeitabweichung, z. B. 1 bis 2 Minuten).
Im folgenden Beispiel wird Google Tink (tink.jwt) verwendet, um ein Agent Identity-ID-Token anhand einer JWKS-JSON-Nutzlast zu überprüfen:
Python
import tink from tink import jwt # Initialize Tink JWT signature primitives (call once at application startup). jwt.register_jwt_signature() def verify_agent_identity_token( token: str, jwks_json: str, expected_issuer: str, expected_audience: str, ) -> jwt.VerifiedJwt: """Verifies an Agent Identity JWT against a JWKS JSON string using Tink. Args: token: The compact serialized JWT string. jwks_json: The JWKS JSON string fetched from the STS pool endpoint. expected_issuer: The expected token issuer ('iss' claim). expected_audience: The expected token audience ('aud' claim). Returns: jwt.VerifiedJwt: The verified JWT claims object. Raises: tink.TinkError: If the JWKS cannot be parsed, the key is not found, or token validation (signature, issuer, audience, expiration) fails. """ # 1. Convert the JWKS JSON into a Tink public KeysetHandle. keyset_handle = jwt.jwk_set_to_public_keyset_handle(jwks_json) # 2. Instantiate the Tink JwtPublicKeyVerify primitive. jwt_verifier = keyset_handle.primitive(jwt.JwtPublicKeyVerify) # 3. Configure expected validation rules (issuer, audience, expiration). # Google Cloud STS sets 'typ': 'JWT' in the header, so # expected_type_header="JWT" is required. validator = jwt.new_validator( expected_issuer=expected_issuer, expected_audience=expected_audience, expected_type_header="JWT", allow_missing_expiration=False, ) # 4. Cryptographically verify the signature and standard OIDC claims. return jwt_verifier.verify_and_decode(token, validator)
SPIFFE-Identität des KI-Agenten autorisieren
Nachdem Sie die Signatur und die Standardansprüche des Tokens überprüft haben, prüfen Sie den bestätigten Anspruch sub (subject), um die Anfrage zu autorisieren und den aufrufenden Agent in Ihren Audit-Logs zu erfassen.
Der sub-Anspruch enthält die eindeutige SPIFFE-ID des Agenten, z. B.:
spiffe://agents.global.org-123456789012.system.id.goog/resources/aiplatform/projects/9876543210/locations/us-central1/reasoningEngines/my-test-agent
Vergleichen Sie in der Autorisierungslogik Ihres Dienstes den bestätigten sub-Anspruch mit einer Zulassungsliste vertrauenswürdiger Agent-SPIFFE-IDs (oder Vertrauensdomänenpräfixe), bevor Sie den Zugriff auf geschützte Ressourcen gewähren.
Nächste Schritte
- Probleme bei der Authentifizierung der Agent Identity beheben
- Mit der Identität eines KI-Agenten bei Google Cloud authentifizieren
- Mit zweiseitigem OAuth und dem Authentifizierungsmanager authentifizieren
- Mit dreibeinigem OAuth und dem Authentifizierungsmanager authentifizieren
- Mit einem API-Schlüssel mit Auth Manager authentifizieren
- Agent-Identität – Übersicht