Agent-Identität und Anmeldeinformationen
Lass deinen selbst gehosteten Claude Managed Agents-Server ein kurzlebiges Token signieren, das jeden Agenten benennt, speichere Vault-Anmeldedaten in deinem Secret-Manager und halte Secrets mit dem Egress-Gateway aus Sandboxes heraus.
Diese Seite zeigt, wie Systeme außerhalb deines Servers einem Agenten vertrauen können und wo du die Anmeldeinformationen aufbewahrst, die deine Agenten verwenden:
- Agent-Identität: Lass einen MCP-Server oder ein Gateway jedem Agenten eigenen Zugriff gewähren. Der Server signiert ein kurzlebiges Token, das den Agenten benennt.
- Secret-Manager: Der Server speichert Vault-Anmeldedaten in AWS Secrets Manager, Google Cloud Secret Manager, HashiCorp Vault oder Azure Key Vault.
- Anmeldeinformationen als Umgebungsvariablen: Lass die Befehle eines Agenten einen Dienst aufrufen, während die Sandbox nur einen Platzhalter enthält. Das Egress-Gateway setzt den echten Wert in die Anfragen des Agenten ein.
Agent-Identität
Dein Server kann ein kurzlebiges „JSON Web Token“ (JSON-Web-Token), oder JWT, signieren, das einen Agenten benennt, und es mit den MCP-Aufrufen dieses Agenten senden. Der Empfänger, ein MCP-Server oder ein MCP-„gateway“ (Gateway), prüft das Token anhand öffentlicher Schlüssel, die du veröffentlichst, und kann dann jedem Agenten eigenen Zugriff gewähren.
Den Issuer einrichten
-
Wähle die Issuer-URL. Unter dieser URL veröffentlichst du in Schritt 3 deine öffentlichen Schlüssel, und Empfänger rufen sie von dort ab. Ein statischer Webhost funktioniert. Verwende nicht die Adresse deines Servers, da der Server die Schlüssel nicht unter den Pfaden bereitstellt, die Empfänger abrufen. Verwende eine
https://-URL ohne Pfad oder abschließenden Schrägstrich, auf einem Hostnamen, den du behalten kannst. -
Erstelle den Signaturschlüssel. Führe diese Befehle im obersten Verzeichnis des entpackten Archivs aus:
mkdir -m 700 agent-identity openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out agent-identity/signing-key.pem -
Veröffentliche die öffentlichen Schlüssel. Dieser Befehl schreibt sie nach
issuer-files/.well-known/. Stelleissuer-filesim Stammverzeichnis des Hostnamens des Issuers bereit, mit dem Content-Typeapplication/json.CMA_AGENT_IDENTITY__ISSUER=https://agents.example.com \ CMA_AGENT_IDENTITY__KEY_FILE=./agent-identity/signing-key.pem \ ./cma-server export-issuer -out issuer-files -
Gib dem Server den Schlüssel.
- Wenn das Archiv ein
compose-Verzeichnis hat, verschiebe das Verzeichnis des Schlüssels dorthin:mv agent-identity compose/agent-identity. - Lösche in
docker-compose.ymldie Zeilevolumes: *server_mountsdes Dienstescma-serverund entferne die Kommentierung desvolumes:-Blocks darunter. Wenn du diex-server-mounts-Liste geändert hast, nimm dieselbe Änderung in diesem Block vor, da der Dienstcma-serverdie Liste nicht mehr liest. - Führe im Verzeichnis, das
agent-identityenthält,sudo chown -R root:root agent-identityaus, es sei denn, du verwendest Docker Desktop unter macOS oder rootless Docker.
Führe
kubectl -n cma-server create secret generic cma-agent-identity --from-file=agent-identity/signing-key.pemaus. Setze dannserver.agentIdentity.secretNamein der Values-Datei des Server-Charts aufcma-agent-identity. - Wenn das Archiv ein
-
Ändere die Einstellungsdatei. Trage den Hostnamen des Empfängers in
mcp.allowed_hostnamesein und füge diesen Abschnitt hinzu:agent_identity: issuer: https://agents.example.com key_file: /run/cma-server/agent-identity/signing-key.pem direct: audiences: - audience: https://mcp-gateway.example.com urls: - https://mcp-gateway.example.comJede
audiencebenennt einen Empfänger alshttps://-URL. Ihreurlssind die URL-Präfixe der MCP-Server, die ein Token dafür empfangen können. -
Starte den Server neu. Führe im Compose-Stack statt eines Neustarts
docker compose up -dim Verzeichnis der Compose-Datei aus.
Um den privaten Schlüssel aus Dateien herauszuhalten, verwende key_secret (deinen Secret-Manager) oder kms_key (AWS KMS oder Google Cloud KMS). Die Konfigurationsreferenz beschreibt beide Einstellungen.
Das Token an einen MCP-Server senden
MCP-Connector beschreibt die Felder des MCP-Server-Eintrags eines Agenten. Füge diesem Eintrag ein auth-Feld hinzu:
mcp_servers:
- type: url
name: tickets
url: https://mcp-gateway.example.com/tickets
auth:
type: agent_token
audience: https://mcp-gateway.example.comFür jede Tool-Auflistung oder jeden Tool-Aufruf signiert dein Server ein neues Token. Er sendet das Token als Authorization: Bearer <token> anstelle einer Vault-Anmeldeinformation. Weder das Modell noch der Worker erhalten es.
Um sowohl das Token als auch Vault-Anmeldedaten zu senden, ersetze das auth-Feld durch ein agent_token_header-Feld:
mcp_servers:
- type: url
name: tickets
url: https://mcp-gateway.example.com/tickets
agent_token_header:
audience: https://mcp-gateway.example.comDie Vault-Anmeldedaten werden im Authorization-Header gesendet, so wie bei einem Eintrag ohne eines der beiden Felder. Das Token wird in einem Agent-Identity-Token-Header gesendet, ohne Bearer-Präfix.
Das SDK kennt die Felder auth und agent_token_header nicht. Füge das Feld im SDK-Code dem MCP-Server-Eintrag als zusätzliches Feld hinzu, oder sende die Anfrage als reines JSON.
Diese Seiten zeigen, wie du zusätzliche Felder sendest:
Python SDK · TypeScript SDK · Go SDK · Java SDK · PHP SDK · Ruby SDK
Einige dieser Seiten zeigen zusätzliche Felder nur auf der obersten Ebene einer Anfrage, nicht innerhalb eines Listeneintrags. Mache in diesem Fall mcp_servers selbst zum zusätzlichen Feld. Sende die gesamte Liste auf diese Weise, mit auth oder agent_token_header in ihrem Eintrag.
Um die Tokens eines Agenten zu stoppen, entferne den Eintrag aus dem Agenten oder archiviere den Agenten. Ein bereits gesendetes Token bleibt bis zu seinem exp gültig, standardmäßig höchstens 5 Minuten.
Was der Empfänger prüft
Lass den Empfänger eine Anfrage nur akzeptieren, wenn alle diese Bedingungen erfüllt sind:
- Die Signatur lässt sich mit einem Schlüssel in deinem Key-Set,
<issuer>/.well-known/jwks.json, verifizieren. Der richtige Schlüssel ist derjenige, dessen ID mitkidim Header des Tokens übereinstimmt. Für einen RSA-Schlüssel ist der AlgorithmusRS256. issentspricht deiner Issuer-URL, undaudentspricht der Audience des Empfängers.expliegt in der Zukunft, undiatliegt nicht in der Zukunft.typim Header des Tokens istagent+jwt, undtoken_useistagent.
Wende dann diese Regeln an:
- Stütze die Zugriffsregeln jedes Agenten auf den Claim
agent_id, die ID des Agenten in der API. - Akzeptiere ein wiederholtes
jti, da eine Auflistung oder ein Aufruf mehrere Anfragen mit demselben Token umfassen kann. - Lass ein Gateway jedes Tool mit seiner eigenen Anmeldeinformation aufrufen und das Token niemals weitergeben.
Mit Single Sign-On benennt das Token eines Tool-Aufrufs auch den Aufrufer, der die Sitzung erstellt hat, in den Claims actor_sub und actor_iss. actor_sub bedeutet nicht, dass der Aufrufer den Aufruf genehmigt hat. Das Modell wählt jeden Aufruf.
Diese Tokens haben kein actor_sub:
- Das Token einer Tool-Auflistung
- Das Token eines Aufrufs eines Subagenten
- Jedes Token einer Sitzung, die mit dem API-Key des Servers erstellt wurde
Wenn eine Regel vom Aufrufer abhängt, lehne einen Tool-Aufruf ab, der kein actor_sub hat.
Das MCP-Gateway testen
Der Befehl check-gateway sendet einem MCP-Gateway gültige und ungültige Tokens. Gib dem Befehl eine eigene Einstellungsdatei, hier check-gateway.yaml:
- Kopiere nur die Abschnitte
mcpundagent_identityder Einstellungen des Servers in die Datei, sowielimits.mcp_call_timeout, wenn der Server diesen Wert setzt. - Ändere in der Kopie
key_fileauf den Pfad des Schlüssels auf dem Rechner, auf dem du den Befehl ausführst, etwa./agent-identity/signing-key.pem. Wenn du das Verzeichnis nachcomposeverschoben hast, ist das./compose/agent-identity/signing-key.pem.
Gib für -agent die ID eines Agenten an, den das Gateway zulässt. Wenn root der Besitzer des Schlüssels ist, verwende sudo.
./cma-server check-gateway -config check-gateway.yaml -agent agent_011CYm1BLqPXpQRk5khsSXrs \
-url https://mcp-gateway.example.com/ticketsDer Befehl gibt für jede Anfrage, die er sendet, eine Zeile mit der Antwort des Gateways aus. Ein erfolgreicher Durchlauf gibt dann eine Zeile aus, die mit check-gateway: PASS beginnt, und beendet sich mit dem Code 0. Ein fehlgeschlagener Durchlauf nennt in einer Zeile, die mit check-gateway: beginnt, was schiefgelaufen ist, und beendet sich mit dem Code 1.
Secret-Manager
Standardmäßig speichert der Server die Secrets von Vault-Anmeldedaten in seiner Datenbank. Mit einem secret_store-Abschnitt schreibt der Server das Secret neuer Vault-Anmeldedaten in deinen „secret manager“ (Secret-Manager), unter einem Namenspräfix, das du dafür reservierst. Die Datenbank behält nur eine Referenz.
Füge den Block für deinen Secret-Manager zur Einstellungsdatei hinzu:
secret_store:
type: aws_secrets_manager
region: us-east-1
prefix: cma-server/prod/secret_store:
type: gcp_secret_manager
project: my-project # the project ID, not its number
prefix: cma-server-prod--secret_store:
type: azure_key_vault
vault_url: https://my-vault.vault.azure.net
prefix: cma-server-prod--secret_store:
type: hashicorp_vault
address: https://vault.internal:8200
prefix: cma-server/prod/
approle:
role_id: <role-id>
secret_id_file: /run/vault/secret-id
#kubernetes: { role: cma-server }
#token_file: /run/vault/tokenSetze genau eine der drei Anmeldemethoden:
approle: Verwende sie mit Docker Compose, auf einem Host oder mit dem Server-Helm-Chart. Der Server meldet sich mit einer Rollen-ID und mit einer Secret-ID an, die er aus einer Datei liest.kubernetes: Verwende sie nur bei einer eigenen Kubernetes-Installation, deren Server-Pod ein Service-Account-Token hat. Der Server meldet sich mit diesem Token an. Das Server-Helm-Chart gibt den Pods des Servers kein solches Token, daher funktioniert diese Methode nicht mit dem Chart.token_file: Verwende sie für jede andere Anmeldemethode von Vault. Führe Vault Agent neben dem Server aus und lass ihn sein Token in diese Datei schreiben.
Gib dem Server beim Server-Helm-Chart die Secret-ID in einem Secret:
- Lege die Secret-ID in einem Secret im Namespace des Servers ab und benenne dieses Secret in
server.extensionFiles.secretNamedes Charts. - Setze
approle.secret_id_fileauf den Pfad der Secret-ID. Das Chart mountet jeden Schlüssel dieses Secrets als Datei unter/run/cma-server/extension-files/, daher liegt ein Schlüssel namenssecret-idunter/run/cma-server/extension-files/secret-id.
Binde für die kubernetes-Methode die Vault-Kubernetes-Rolle an den Namespace und das Service-Konto des Servers, nicht an den Namespace der Sandboxes, cma.
Zugriff gewähren
Gib dem Server eine Identität und beschränke sie auf das Präfix. Das Verzeichnis iam/ des Archivs enthält eine Datei für jeden Secret-Manager:
- AWS Secrets Manager: Ersetze die Platzhalter in
aws-secrets-manager-policy.jsonund hänge die Policy an die Identität an, unter der der Server läuft. - Google Cloud Secret Manager: Führe die Befehle in den Kommentaren von
gcp-secret-manager-role.yamlaus. - Azure Key Vault: Eine Azure-Rolle umfasst einen ganzen Key Vault, kein Präfix. Gib dem Deployment daher einen eigenen Key Vault, der die rollenbasierte Zugriffssteuerung von Azure verwendet. Ersetze
SUBSCRIPTION_IDinazure-key-vault-role.jsonund erstelle daraus eine benutzerdefinierte Rolle. Weise die Rolle auf dem Key Vault der Identität zu, unter der der Server läuft. - HashiCorp Vault: Ersetze die Platzhalter in
hashicorp-vault-policy.hclund hänge die Policy an die Identität an, unter der der Server läuft.
Gegenüber AWS und Google Cloud authentifiziert sich der Server so wie bei der Inferenz. Gegenüber Azure Key Vault authentifiziert er sich mit Microsoft Entra ID, so wie bei Microsoft Foundry.
Die Einrichtung prüfen
Führe validate-store vor dem ersten Start und nach jeder Änderung der Policy aus. Der Befehl erstellt, liest und löscht ein Test-Secret unter dem Präfix, ohne den Server zu starten. Führe den Befehl dort aus, wo der Server läuft, mit der Umgebung des Servers:
-
Docker Compose: Führe ihn im Container des Servers aus. Ersetze auf Arm
linux_amd64in diesem Befehl durchlinux_arm64:docker compose exec cma-server /opt/cma-server/bin/linux_amd64/cma-server validate-store -config /etc/cma-server/config.yaml -
Auf einem Host:
./cma-server validate-store -config /etc/cma-server/config.yaml -
Kubernetes: Führe denselben Befehl als Job unter dem Service-Konto des Servers aus.
Ein erfolgreicher Durchlauf endet mit einer Zeile, die pass lautet, und beendet sich mit dem Code 0.
Führe diese Prüfung mit Azure Key Vault gegen deinen Key Vault aus, bevor du dich darauf verlässt.
Einschränkungen des Secret-Managers
-
Lege die Einstellungen einmalig fest. Nach jeder dieser Änderungen findet der Server die Secrets, die er vor der Änderung geschrieben hat, nicht mehr:
- Du entfernst den
secret_store-Abschnitt. - Du änderst
type,prefix,region,project,vault_url,mountodernamespace. Die letzten beiden sind optionale HashiCorp-Vault-Einstellungen. - Du richtest
addressauf einen anderen Vault.
Der Server findet diese Secrets erst wieder, wenn du die alten Werte wiederherstellst.
- Du entfernst den
-
Eine Identität liest das gesamte Präfix. Wenn zwei Gruppen nicht auf die Anmeldeinformationen der jeweils anderen zugreifen dürfen, gib jeder Gruppe ein eigenes Deployment. Jedes Deployment braucht ein eigenes Präfix oder einen eigenen Key Vault und eine eigene Identität.
Anmeldeinformationen als Umgebungsvariablen
Mit einer Anmeldeinformation als Umgebungsvariable können die Befehle eines Agenten einen Dienst aufrufen, während die Sandbox nur einen Platzhalter für das Secret enthält. Das „egress gateway“ (Egress-Gateway) setzt den echten Wert in Anfragen an die Hosts ein, die die Anmeldeinformation auflistet.
Das Gateway, cma-egress, ist ein Proxy im Release-Archiv, der zwischen deinen Sandboxes und dem Internet steht. Standardmäßig ist es ausgeschaltet, und dein Server akzeptiert diese Anmeldeinformationen nur bei eingeschaltetem Gateway.
Bei eingeschaltetem Gateway gelten zwei Einschränkungen für deine Sandboxes:
- Sandboxes erreichen das Internet nur über das Gateway.
- Das Gateway verbindet sich nur mit den Hosts, die du in der Server-Einstellung
egress.allowed_hostnamesauflistest.
Liste exakte öffentliche Hostnamen ohne Platzhalterzeichen auf. Nimm jeden Host auf, von dem die Befehle deiner Agenten etwas herunterladen.
Wenn du ein eigenes Sandbox-Image erstellt hast, starte den Worker über cma-with-egress, wie Ein eigenes Sandbox-Image erstellen zeigt.
Das Gateway im Compose-Stack einschalten
Füge im Verzeichnis, das docker-compose.yml enthält, zwei Zeilen zu .env hinzu. Die erste listet die Hosts auf, mit denen sich das Gateway verbindet, durch Kommas getrennt. Die zweite lädt die Compose-Datei des Gateways. Starte dann den Stack:
echo 'CMA_EGRESS__ALLOWED_HOSTNAMES=api.github.com' >> .env
echo 'COMPOSE_FILE=docker-compose.yml:docker-compose.egress.yml' >> .env
docker compose up --build -dWenn du zusätzlich eine weitere Compose-Datei verwendest, füge sie der COMPOSE_FILE-Zeile hinzu. Eine COMPOSE_FILE-Variable in deiner Shell überschreibt die Variable in .env, entferne daher die Variable der Shell mit unset.
Die Datei des Gateways setzt die übrigen egress-Einstellungen des Servers, füge daher keinen egress-Abschnitt zu compose.config.yaml hinzu.
Das Gateway auf Kubernetes einschalten
Diese Schritte gehen vom Deployment aus Auf Kubernetes bereitstellen aus. Sie verwenden die Variablen REGISTRY, TAG und PLATFORM dieser Seite sowie ihre beiden Values-Dateien. Führe die Befehle im obersten Verzeichnis des Archivs aus, mit OpenSSL 3.0 oder neuer. Das Sandbox-Chart bietet das Gateway auf Azure Kubernetes Service (AKS) nicht an.
Das Upgrade des Server-Charts in diesen Schritten fügt außerdem eine Network Policy über die Pods der Server hinzu. Prüfe zwei der Ports, die sie abdeckt, bevor du beginnst:
- Port 9464, der Metrik-Port: Die Policy schließt ihn. Wenn Prometheus diesen Port abfragt, setze
server.telemetry.prometheus.scraper.namespaceincma-server-values.yamlauf den Namespace, in dem Prometheus läuft. - Port 8400, der Port der API: Die Policy lässt jede Quelle zu. Wenn eine eigene Policy einschränkt, wer Port 8400 erreicht, funktioniert diese Einschränkung nicht mehr. Network Policies summieren sich, daher kommt eine Verbindung durch, wenn irgendeine Policy sie zulässt.
Das Image des Gateways erstellen und pushen
docker buildx build --platform "$PLATFORM" -f kubernetes/egress/Dockerfile -t "$REGISTRY/cma-egress:$TAG" --push .Die Zertifizierungsstelle und den Schlüssel des Gateways erstellen
(umask 077 && openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 -nodes -days 825 \ -subj "/CN=cma-server egress gateway" \ -addext "basicConstraints=critical,CA:TRUE,pathlen:0" \ -addext "keyUsage=critical,keyCertSign,cRLSign" \ -keyout egress-ca.key -out egress-ca.crt) kubectl -n cma create secret tls cma-egress-ca --cert=egress-ca.crt --key=egress-ca.key kubectl -n cma-server create configmap cma-egress-ca --from-file=ca.crt=egress-ca.crt GATEWAY_KEY=$(openssl rand -hex 32) printf %s "$GATEWAY_KEY" | kubectl -n cma create secret generic cma-egress-gateway-key --from-file=gateway-key=/dev/stdin printf %s "$GATEWAY_KEY" | kubectl -n cma-server create secret generic cma-egress-gateway-key --from-file=gateway-key=/dev/stdin unset GATEWAY_KEYLösche dann
egress-ca.key, den privaten Schlüssel der Zertifizierungsstelle. Jeder, der ihn besitzt, kann sich gegenüber deinen Sandboxes als jede beliebige Website ausgeben. Das Zertifikat ist 825 Tage gültig. Siehe Das Zertifikat erneuern.Die Sandboxes früherer Sitzungen entfernen
Wenn die Umgebung noch keine Sitzungen ausgeführt hat, überspringe diesen Schritt. Eine Sandbox von vor der Änderung kann ihren Worker danach nicht starten. Diese Befehle löschen auch den Workspace jeder Sandbox:
kubectl -n cma scale deployment cma-dispatcher --replicas=0 kubectl -n cma delete sandboxwarmpool cma-sandbox kubectl -n cma delete sandboxclaims --allFühre auf Google Kubernetes Engine (GKE) zusätzlich diesen Befehl aus:
kubectl -n cma delete sandboxes --allWiederhole
kubectl -n cma get sandboxes,pods,pvc, bis nichts mehr gefunden wird. Derhelm upgradeim Schritt „Die Sandbox-Seite einschalten“ startet den Dispatcher wieder.Die Serverseite einschalten
Wähle für das Gateway eine freie IPv4-Adresse im Service-Bereich des Clusters. Die Spalte
CLUSTER-IPvonkubectl get svc -Azeigt Adressen in diesem Bereich. Füge dies zucma-server-values.yamlhinzu. Wenn die Datei bereits einenserver-Block hat, führe diese Zeilen darin zusammen:egressGateway: enabled: true proxyAddress: 34.118.224.53:3128 # the address that you chose, and port 3128 server: config: egress: allowed_hostnames: - api.github.comFühre dann das Upgrade aus:
helm upgrade cma-server kubernetes/server/chart --namespace cma-server -f cma-server-values.yaml --waitDie Sandbox-Seite einschalten
Führe
kubectl -n cma-server get svcaus, um die beiden Services des Servers aufzulisten. Bei einer Neuinstallation heißen siecma-serverundcma-server-egress.Ändere in
cma-values.yamlegress.modeaufgatewayund füge unteregresseinengateway-Block hinzu. Gib dem Block die beiden Namen, die der Befehl aufgelistet hat:egress: mode: gateway gateway: serviceIP: 34.118.224.53 # the address that you chose serverService: cma-server serverEgressService: cma-server-egress apiServerCIDRs: - 203.0.113.10/32 # the cluster's API endpointBehalte die übrigen
egress-Werte der Datei bei. Um die Adressen und den Port des API-Endpunkts auszugeben, führekubectl get endpoints kubernetes -n defaultaus. Wenn der Port nicht 443 ist, setze zusätzlichegress.gateway.apiServerPort.helm upgrade cma kubernetes/chart --namespace cma -f cma-values.yaml --waitWenn das Upgrade bei einem Konflikt über
.spec.replicasabbricht, führekubectl -n cma scale deployment cma-dispatcher --replicas=1aus und führe dann das Upgrade erneut aus.
Eine Anmeldeinformation hinzufügen
Erstelle eine Anmeldeinformation als Umgebungsvariable, wie Eine Anmeldeinformation hinzufügen zeigt. Die Leitfäden zum gehosteten Dienst besagen, dass diese Anmeldeinformationen mit selbst gehosteten Sandboxes nicht unterstützt werden. Das beschreibt den gehosteten Dienst, nicht deinen Server.
Dein Server fügt eigene Regeln hinzu. Er lehnt eine Anfrage, die gegen eine davon verstößt, mit einem 400-Fehler ab, der das Feld benennt. Zwei dieser Regeln folgen:
networkingmuss den Typlimitedhaben, und jeder Host inallowed_hostsmuss auf deregress.allowed_hostnames-Liste des Servers stehen.injection_locationmuss in JSON{"header": true}sein und darf nicht weggelassen werden.
Nachdem du einen Host zur Liste des Servers hinzugefügt hast, wende die Änderung an. Führe auf Docker Compose docker compose up -d aus. Führe auf Kubernetes den helm upgrade-Befehl des Servers und kubectl -n cma-server rollout restart deployment -l anthropic.com/role=server aus.
Das Egress-Gateway prüfen
Erstelle eine Sitzung mit dem Vault der Anmeldeinformation und bitte den Agenten, zwei Befehle auszuführen. Dieses Beispiel gilt für eine Anmeldeinformation namens GITHUB_TOKEN, die api.github.com auflistet:
printenv GITHUB_TOKEN
curl -sS -H "Authorization: Bearer $GITHUB_TOKEN" https://api.github.com/userDer erste Befehl gibt einen Platzhalter aus, der mit cma_ph_ beginnt. Der zweite gibt das Profil des GitHub-Kontos des Tokens aus, weil das Gateway den Platzhalter durch das Token ersetzt hat. Das Gateway lehnt eine Anfrage an einen Host, der nicht auf deiner Liste steht, mit einem 403-Fehler ab.
Wenn auf Kubernetes jede Anfrage einen 503-Fehler erhält, schreibt das Netzwerk deines Clusters wahrscheinlich die Adressen der Pods um, wie es die Option --masquerade-all von kube-proxy tut. Das Gateway unterscheidet Sandboxes anhand der Adressen ihrer Pods, daher müssen diese Adressen es unverändert erreichen.
Das Zertifikat erneuern
Erneuere das Zertifikat auf Kubernetes, während keine Sitzung läuft. Wiederhole den gesamten Schritt „Die Zertifizierungsstelle und den Schlüssel des Gateways erstellen“ in Das Gateway auf Kubernetes einschalten. Er erstellt die Zertifizierungsstelle und den Schlüssel des Gateways erneut, daher brauchst du die gelöschte Datei egress-ca.key nicht. Nimm eine Änderung vor: Füge --dry-run=client -o yaml | kubectl apply -f - am Ende jeder der vier Zeilen hinzu, die kubectl create ausführen. Eine Zeile, die beispielsweise auf --from-file=gateway-key=/dev/stdin endet, endet dann auf --from-file=gateway-key=/dev/stdin --dry-run=client -o yaml | kubectl apply -f -.
Starte dann die Server und das Gateway neu:
kubectl -n cma-server rollout restart deployment -l anthropic.com/role=server
kubectl -n cma rollout restart deployment/cma-egressEinschränkungen des Egress-Gateways
- Header: Das Gateway setzt einen Wert nur in einen Anfrage-Header ein, niemals in eine URL oder einen Body. Standardmäßig ist
Authorizationder einzige Header. Um weitere zuzulassen, liste sie zusammen mitAuthorizationinegress.swap_header_namesauf, oder für den Compose-Stack inCMA_EGRESS__SWAP_HEADER_NAMESin.env. - Programme, die Proxy-Variablen ignorieren: Sandboxes finden das Gateway über
HTTPS_PROXYund verwandte Variablen. Java-Tools wie Maven und Gradle lesen diese Variablen nicht, daher erreichen sie nichts.
War diese Seite hilfreich?