51| `${file:/path}` | Contenu du fichier à ce chemin absolu, coupé. La référence doit être la valeur entière du champ : contrairement à `${VAR}`, elle n'est pas développée à l'intérieur d'une chaîne plus longue, donc pour un mot de passe de base de données, définissez `store.password` plutôt que de l'intégrer dans `postgres_url`. | Montages de volume Kubernetes Secret, Vault Agent, SOPS |51| `${file:/path}` | Contenu du fichier à ce chemin absolu, coupé. La référence doit être la valeur entière du champ : contrairement à `${VAR}`, elle n'est pas développée à l'intérieur d'une chaîne plus longue, donc pour un mot de passe de base de données, définissez `store.password` plutôt que de l'intégrer dans `postgres_url`. | Montages de volume Kubernetes Secret, Vault Agent, SOPS |
52 52
53<h2 id="required-sections">53<h2 id="required-sections">
54 Sections requises54 Sections obligatoires
55</h2>55</h2>
56 56
57<h3 id="listen">57<h3 id="listen">
58 `listen`58 `listen`
59</h3>59</h3>
60 60
61Le bloc `listen` contrôle où la passerelle sert : l'adresse de liaison et le port, l'origine visible en externe, et la terminaison TLS optionnelle.61Le bloc `listen` contrôle où la passerelle est servie : l'adresse de liaison et le port, l'origine visible de l'extérieur, et la terminaison TLS optionnelle.
62 62
63| Champ | Requis | Description |63| Champ | Obligatoire | Description |
64| - | - | - |64| - | - | - |
65| `host` | Non | Adresse de liaison. Par défaut `0.0.0.0`. |65| `host` | Non | Adresse de liaison. Par défaut `0.0.0.0`. |
66| `port` | Non | Port de liaison. Par défaut `8080`. |66| `port` | Non | Port de liaison. Par défaut `8080`. |
67| `public_url` | Sauf si `host` est loopback | L'origine `https://` visible en externe, utilisée pour construire le `redirect_uri` IdP et les métadonnées de découverte. Requis chaque fois que `host` n'est pas une adresse loopback, que TLS se termine à un proxy tel qu'un ALB, Ingress ou Cloud Run ou à la passerelle elle-même via `tls`, car la passerelle ne dérive jamais sa propre origine à partir des en-têtes `X-Forwarded-*` ; ils sont spoofables par le client. L'amorçage échoue sans lui. `trusted_proxies` ci-dessous régit uniquement la résolution de l'IP du client. Également requis pour activer la [télémétrie](#telemetry), car la passerelle construit le point de terminaison OTLP qu'elle pousse aux clients à partir de cette URL. |67| `public_url` | Sauf si `host` est loopback | L'origine `https://` visible de l'extérieur, utilisée pour construire le `redirect_uri` du fournisseur d'identité et les métadonnées de découverte. Obligatoire chaque fois que `host` n'est pas une adresse loopback, que la terminaison TLS se fasse à un proxy tel qu'un ALB, Ingress, ou Cloud Run ou à la passerelle elle-même via `tls`, car la passerelle ne dérive jamais sa propre origine à partir des en-têtes `X-Forwarded-*` ; ils peuvent être usurpés par le client. Le démarrage échoue sans lui. `trusted_proxies` ci-dessous régit uniquement la résolution de l'adresse IP du client. Également obligatoire pour activer la [télémétrie](#telemetry), car la passerelle construit le point de terminaison OTLP qu'elle pousse aux clients à partir de cette URL. |
68| `tls.cert` / `tls.key` | Non | Chemins PEM si la passerelle termine TLS elle-même |68| `tls.cert` / `tls.key` | Non | Chemins PEM si la passerelle termine TLS elle-même |
69| `trusted_proxies` | Non | CIDRs ou IPs des équilibreurs de charge devant la passerelle. Lorsqu'il est défini, la passerelle fait confiance à `X-Forwarded-For` uniquement à partir de ces pairs et enregistre l'IP client réelle pour la limitation de débit par IP et l'audit. Équivalent à nginx `set_real_ip_from`. Les entrées `X-Forwarded-For` écrites en tant que `ipv4:port` ou `[ipv6]:port`, comme certains équilibreurs de charge le font, sont lues avec le port supprimé. Une adresse IPv6 avec un port ajouté et sans crochets peut être lue comme une adresse différente ou ne pas être lue du tout, donc désactivez l'option de port sur tout proxy qui écrit cette forme. |69| `trusted_proxies` | Non | CIDR ou adresses IP des équilibreurs de charge devant la passerelle. Lorsqu'il est défini, la passerelle fait confiance à `X-Forwarded-For` uniquement à partir de ces pairs et enregistre l'adresse IP réelle du client pour la limitation de débit par adresse IP et l'audit. Équivalent à `set_real_ip_from` de nginx. Les entrées `X-Forwarded-For` écrites comme `ipv4:port` ou `[ipv6]:port`, comme certains équilibreurs de charge le font, sont lues avec le port supprimé. Une adresse IPv6 avec un port ajouté et sans crochets peut être lue comme une adresse différente ou ne pas être lue du tout, donc désactivez l'option de port sur tout proxy qui écrit cette forme. |
70 70
71<h3 id="oidc">71<h3 id="oidc">
72 `oidc`72 `oidc`
73</h3>73</h3>
74 74
75Le bloc `oidc` connecte la passerelle à votre fournisseur d'identité et décide qui peut se connecter. Il nomme l'émetteur et le client OAuth, mappe les réclamations qui portent l'e-mail et les groupes, et restreint la connexion par domaine d'e-mail ou groupe.75Le bloc `oidc` connecte la passerelle à votre fournisseur d'identité et décide qui peut se connecter. Il nomme l'émetteur et le client OAuth, mappe les revendications qui portent l'e-mail et les groupes, et restreint la connexion par domaine d'e-mail ou groupe.
76 76
77OpenID Connect (OIDC) est le protocole SSO que la passerelle utilise avec votre fournisseur d'identité ; voir [Configuration du fournisseur d'identité](/docs/fr/claude-apps-gateway-deploy#identity-provider-setup) pour ce qu'il faut enregistrer du côté IdP.77OpenID Connect (OIDC) est le protocole SSO que la passerelle utilise avec votre fournisseur d'identité ; voir [Configuration du fournisseur d'identité](/docs/fr/claude-apps-gateway-deploy#identity-provider-setup) pour savoir ce qu'il faut enregistrer du côté du fournisseur d'identité.
78 78
79| Champ | Requis | Description |79| Champ | Obligatoire | Description |
80| - | - | - |80| - | - | - |
81| `issuer` | Oui | Base de découverte OIDC. Doit servir la découverte à `/.well-known/openid-configuration`. Utilisez HTTPS en production ; la passerelle accepte un émetteur `http://`. Un émetteur de boucle locale tel que `http://localhost:8081` est rejeté par la [garde SSRF](/docs/fr/claude-apps-gateway-deploy#threat-model-summary) sauf si `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` est défini dans l'environnement de la passerelle. |81| `issuer` | Oui | Base de découverte OIDC. Doit servir la découverte à `/.well-known/openid-configuration`. Utilisez HTTPS en production ; la passerelle accepte un émetteur `http://`. Un émetteur loopback tel que `http://localhost:8081` est rejeté par la [protection SSRF](/docs/fr/claude-apps-gateway-deploy#threat-model-summary) sauf si `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` est défini dans l'environnement de la passerelle. |
82| `client_id` / `client_secret` | Oui | De votre enregistrement de client OAuth |82| `client_id` / `client_secret` | Oui | À partir de votre enregistrement de client OAuth |
83| `allowed_email_domains` | Non | Rejeter les id\_tokens dont la réclamation `email` n'est pas dans l'un de ces domaines, insensible à la casse. Défense en profondeur contre les erreurs de configuration IdP multi-locataires. Indépendamment de ce paramètre, un id\_token dont la réclamation `email_verified` est explicitement `false` est toujours rejeté. |83| `allowed_email_domains` | Non | Rejeter les id\_tokens dont la revendication `email` n'est pas dans l'un de ces domaines, insensible à la casse. Défense en profondeur contre les erreurs de configuration du fournisseur d'identité multi-locataire. Indépendamment de ce paramètre, un id\_token dont la revendication `email_verified` est explicitement `false` est toujours rejeté. |
84| `allowed_groups` | Non | Restreindre la connexion aux membres de ces groupes IdP, appariés par rapport à `groups_claim`. Un utilisateur dans un domaine d'e-mail autorisé mais dans aucun de ces groupes est rejeté. Nécessite que l'IdP émette la réclamation de groupes. L'appariement est une comparaison de chaîne exacte et sensible à la casse par rapport aux valeurs de cette réclamation, et la passerelle n'étend pas les groupes imbriqués : pour admettre les membres d'un sous-groupe, listez le sous-groupe ici ou configurez l'IdP pour émettre l'appartenance aplatie. |84| `allowed_groups` | Non | Restreindre la connexion aux membres de ces groupes du fournisseur d'identité, comparés à `groups_claim`. Un utilisateur dans un domaine d'e-mail autorisé mais dans aucun de ces groupes est rejeté. Nécessite que le fournisseur d'identité émette la revendication de groupes. La correspondance est une comparaison de chaîne exacte et sensible à la casse par rapport aux valeurs de cette revendication, et la passerelle n'étend pas les groupes imbriqués : pour admettre les membres d'un sous-groupe, listez le sous-groupe ici ou configurez le fournisseur d'identité pour émettre l'appartenance aplatie. |
85| `groups_claim` | Non | Quelle réclamation id\_token porte l'appartenance au groupe. Par défaut `groups`. Microsoft Entra émet les rôles d'application sous `roles`. Accepte une clé plate ou un pointeur JSON RFC 6901 tel que `/resource_access/gateway/roles` pour les réclamations imbriquées. |85| `groups_claim` | Non | Quelle revendication id\_token porte l'appartenance au groupe. Par défaut `groups`. Microsoft Entra émet les rôles d'application sous `roles`. Accepte une clé plate ou un pointeur JSON RFC 6901 tel que `/resource_access/gateway/roles` pour les revendications imbriquées. |
86| `google_groups` | Non | Rechercher les groupes de l'utilisateur connecté via l'API Google Workspace Admin SDK Directory, car le id\_token de Google ne porte aucune réclamation de groupes. Définissez `service_account_json_path` sur un fichier de clé de compte de service avec délégation à l'échelle du domaine sur la portée `https://www.googleapis.com/auth/admin.directory.group.readonly`, et `admin_email` sur un administrateur Workspace que le compte de service usurpe ; l'API Directory nécessite un sujet administrateur réel. Les adresses e-mail de groupe de chaque utilisateur deviennent leur réclamation de groupes, donc `allowed_groups` et `managed.policies.match.groups` correspondent sur les e-mails de groupe. |86| `google_groups` | Non | Rechercher les groupes de l'utilisateur connecté via l'API Google Workspace Admin SDK Directory, car le id\_token de Google ne porte aucune revendication de groupes. Définissez `service_account_json_path` sur un fichier de clé de compte de service avec délégation à l'échelle du domaine sur la portée `https://www.googleapis.com/auth/admin.directory.group.readonly`, et `admin_email` sur un administrateur Workspace que le compte de service usurpe ; l'API Directory nécessite un sujet administrateur réel. Les adresses e-mail de groupe de chaque utilisateur deviennent sa revendication de groupes, donc `allowed_groups` et `managed.policies.match.groups` correspondent sur les e-mails de groupe. |
87| `email_claim` | Non | Quelle réclamation id\_token porte l'e-mail de l'utilisateur. Par défaut `email`. Certains IdPs, tels que ADFS et Entra B2C, émettent `upn` ou `preferred_username` à la place. Accepte une clé plate, un pointeur JSON ou une liste de clés de secours où la première clé présente est utilisée. |87| `email_claim` | Non | Quelle revendication id\_token porte l'e-mail de l'utilisateur. Par défaut `email`. Certains fournisseurs d'identité, tels que ADFS et Entra B2C, émettent `upn` ou `preferred_username` à la place. Accepte une clé plate, un pointeur JSON, ou une liste de clés de secours où la première clé présente est utilisée. |
88| `scopes` | Non | Remplacement complet des portées OIDC que la passerelle demande. Par défaut `[openid, profile, email, offline_access]`. Définissez lorsque votre IdP rejette les portées qu'il ne reconnaît pas, ou nécessite une portée personnalisée pour émettre des groupes ou un e-mail. Doit inclure `openid`. Supprimer `offline_access` désactive les jetons d'actualisation, donc les développeurs réexécutent la connexion au navigateur tous les `session.ttl_hours`. Voir [Configuration du fournisseur d'identité](/docs/fr/claude-apps-gateway-deploy#identity-provider-setup) pour les recettes de portée par IdP telles que le flux de jeton d'actualisation de Google. |88| `scopes` | Non | Remplacement complet des portées OIDC que la passerelle demande. Par défaut `[openid, profile, email, offline_access]`. Définissez lorsque votre fournisseur d'identité rejette les portées qu'il ne reconnaît pas, ou nécessite une portée personnalisée pour émettre des groupes ou un e-mail. Doit inclure `openid`. Supprimer `offline_access` désactive les jetons d'actualisation, donc les développeurs réexécutent la connexion au navigateur tous les `session.ttl_hours`. Voir [Configuration du fournisseur d'identité](/docs/fr/claude-apps-gateway-deploy#identity-provider-setup) pour les recettes de portée par fournisseur d'identité telles que le flux de jeton d'actualisation de Google. |
89| `scope_on_refresh` | Non | Envoyer également `scope`, avec la même liste que la demande de connexion, lorsque la passerelle échange un jeton d'actualisation. Par défaut `false` : la demande d'actualisation omet `scope`. La plupart des IdPs retournent un id\_token à chaque actualisation et n'en ont pas besoin. Définissez `true` lorsque votre IdP retourne un id\_token lors de l'actualisation uniquement s'il est demandé à nouveau pour `openid`, ce qu'Okta documente pour sa subvention d'actualisation. Sans id\_token, chaque actualisation dépend du point de terminaison userinfo de l'IdP acceptant le jeton d'accès actualisé. Si vous contrôlez la connexion ou les politiques de correspondance sur les groupes et que le id\_token de votre IdP au moment de l'actualisation les omet, définissez également `userinfo_fallback: true` pour que la passerelle les remplisse à partir du point de terminaison userinfo. Un IdP qui a accordé moins de portées que demandé peut rejeter l'actualisation avec `invalid_scope`, y compris pour les sessions existantes si vous ajoutez des entrées à `scopes` pendant que ceci est activé. Décochez la clé si les actualisations commencent à échouer à `token_endpoint` après l'avoir définie. Nécessite Claude Code v2.1.260 ou ultérieur sur le serveur de la passerelle. |89| `scope_on_refresh` | Non | Envoyer également `scope`, avec la même liste que la demande de connexion, lorsque la passerelle échange un jeton d'actualisation. Par défaut `false` : la demande d'actualisation omet `scope`. La plupart des fournisseurs d'identité retournent un id\_token à chaque actualisation et n'en ont pas besoin. Définissez `true` lorsque votre fournisseur d'identité retourne un id\_token lors de l'actualisation uniquement s'il est demandé à nouveau `openid`, ce qu'Okta documente pour sa subvention d'actualisation. Sans id\_token, chaque actualisation dépend du point de terminaison userinfo du fournisseur d'identité acceptant le jeton d'accès actualisé. Si vous limitez la connexion ou les politiques de correspondance sur les groupes et que le id\_token du fournisseur d'identité au moment de l'actualisation les omet, définissez également `userinfo_fallback: true` pour que la passerelle les remplisse à partir du point de terminaison userinfo. Un fournisseur d'identité qui a accordé moins de portées que demandé peut rejeter l'actualisation avec `invalid_scope`, y compris pour les sessions existantes si vous ajoutez des entrées à `scopes` pendant que ceci est activé. Décochez la clé si les actualisations commencent à échouer à `token_endpoint` après l'avoir définie. Nécessite Claude Code v2.1.260 ou ultérieur sur le serveur de la passerelle. |
90| `extra_auth_params` | Non | Paramètres de requête supplémentaires ajoutés à la demande d'autorisation IdP, textuellement. C'est le mécanisme de remplacement pour le comportement spécifique à l'IdP, tel que `access_type: offline` pour les jetons d'actualisation Google, `domain_hint` pour certains locataires Entra, ou `acr_values` pour les flux d'escalade. Ne peut pas remplacer les paramètres de protocole gérés par la passerelle : `state`, `nonce`, `redirect_uri`, PKCE, `scope`, `response_type`, `response_mode` et `client_id`. |90| `extra_auth_params` | Non | Paramètres de requête supplémentaires ajoutés à la demande d'autorisation du fournisseur d'identité, textuellement. C'est le mécanisme de remplacement pour le comportement spécifique au fournisseur d'identité, tel que `access_type: offline` pour les jetons d'actualisation Google, `domain_hint` pour certains locataires Entra, ou `acr_values` pour les flux d'escalade. Ne peut pas remplacer les paramètres de protocole gérés par la passerelle : `state`, `nonce`, `redirect_uri`, PKCE, `scope`, `response_type`, `response_mode`, et `client_id`. |
91| `userinfo_fallback` | Non | Lorsque le id\_token omet l'e-mail ou les groupes, les récupérer à partir de `/userinfo`. Nécessaire pour les jetons d'accès légers Keycloak, le serveur org Okta et les jetons minimaux ADFS. Le id\_token reste faisant autorité ; userinfo remplit uniquement les lacunes. Par défaut `false`. |91| `userinfo_fallback` | Non | Lorsque le id\_token omet l'e-mail ou les groupes, les récupérer à partir de `/userinfo`. Nécessaire pour les jetons d'accès légers Keycloak, le serveur org Okta, et les jetons minimaux ADFS. Le id\_token reste faisant autorité ; userinfo remplit uniquement les lacunes. Par défaut `false`. |
92| `use_pkce` | Non | Envoyer un défi PKCE (S256) sur la demande d'autorisation. Par défaut `true`. Définissez `false` uniquement si votre IdP rejette PKCE pour ce client confidentiel. |92| `use_pkce` | Non | Envoyer un défi PKCE (S256) sur la demande d'autorisation. Par défaut `true`. Définissez `false` uniquement si votre fournisseur d'identité rejette PKCE pour ce client confidentiel. |
93| `clock_skew_seconds` | Non | Tolérer la dérive d'horloge lors de la validation des réclamations de temps id\_token. Par défaut `0`, ce qui est strict. Augmentez si vous voyez des erreurs « token expired / not yet valid » juste après la connexion en raison d'une dérive d'horloge hôte/IdP. |93| `clock_skew_seconds` | Non | Tolérer la dérive d'horloge lors de la validation des revendications de temps id\_token. Par défaut `0`, ce qui est strict. Augmentez si vous voyez des erreurs « token expired / not yet valid » juste après la connexion en raison d'une dérive d'horloge hôte/fournisseur d'identité. |
94| `token_endpoint_auth_method` | Non | Remplacer la méthode d'authentification du point de terminaison de jeton. Accepte `client_secret_basic` ou `client_secret_post`. Négocié automatiquement par défaut. |94| `token_endpoint_auth_method` | Non | Remplacer la méthode d'authentification du point de terminaison de jeton. Accepte `client_secret_basic` ou `client_secret_post`. Négocié automatiquement par défaut. |
95| `id_token_signed_response_alg` | Non | Algorithme de signature id\_token attendu. Par défaut `RS256`. Définissez pour les IdPs qui signent avec ES256, PS256 ou EdDSA. |95| `id_token_signed_response_alg` | Non | Algorithme de signature id\_token attendu. Par défaut `RS256`. Définissez pour les fournisseurs d'identité qui signent avec ES256, PS256, ou EdDSA. |
96| `additional_authorized_parties` | Non | Valeurs `azp` supplémentaires à accepter au-delà de `client_id`, pour les flux de courtier Keycloak et d'échange de jetons |96| `additional_authorized_parties` | Non | Valeurs `azp` supplémentaires à accepter au-delà de `client_id`, pour les flux de courtier Keycloak et d'échange de jetons |
97| `discovery_url` | Non | Récupérer le document de découverte à partir de cette URL au lieu de le dériver de `issuer`, pour les IdPs derrière un proxy qui réécrit l'hôte émetteur. Le chemin doit contenir `/.well-known/`. |97| `discovery_url` | Non | Récupérer le document de découverte à partir de cette URL au lieu de le dériver de `issuer`, pour les fournisseurs d'identité derrière un proxy qui réécrit l'hôte émetteur. Le chemin doit contenir `/.well-known/`. |
98| `use_proxy` | Non | Envoyer les propres demandes IdP de la passerelle via le proxy de transfert dans `HTTPS_PROXY` ou `HTTP_PROXY`, en honorer `NO_PROXY`. `false` garde ces demandes directes. Nécessite v2.1.227 ou ultérieur ; voir [Demandes IdP via un proxy de transfert](#idp-requests-through-a-forward-proxy) ci-dessous. |98| `use_proxy` | Non | Envoyer les propres demandes du fournisseur d'identité de la passerelle via le proxy avant dans `HTTPS_PROXY` ou `HTTP_PROXY`, en honorer `NO_PROXY`. `false` garde ces demandes directes. Nécessite v2.1.227 ou ultérieur ; voir [Demandes du fournisseur d'identité via un proxy avant](#idp-requests-through-a-forward-proxy) ci-dessous. |
99| `form_action_origins` | Non | Origines supplémentaires pour la directive `Content-Security-Policy: form-action` de la page `/device`. La passerelle autorise déjà `'self'` et l'origine du `authorization_endpoint` découverte, mais Chrome applique `form-action` à toute la chaîne de redirection. Si votre IdP redirige via un deuxième hôte, tel que Azure AD fédéré à ADFS, Okta hub-spoke ou un intercepteur SSO d'entreprise, listez chaque origine par laquelle la demande d'autorisation peut rediriger. |99| `form_action_origins` | Non | Origines supplémentaires pour la directive `Content-Security-Policy: form-action` de la page `/device`. La passerelle autorise déjà `'self'` et l'origine `authorization_endpoint` découverte, mais Chrome applique `form-action` à toute la chaîne de redirection. Si votre fournisseur d'identité redirige via un deuxième hôte, tel qu'Azure AD fédéré à ADFS, Okta hub-spoke, ou un intercepteur SSO d'entreprise, listez chaque origine par laquelle la demande d'autorisation peut rediriger. |
100| `ca_cert_pem` | Non | Le certificat CA PEM lui-même, pas un chemin vers un fichier. Il remplace le magasin de confiance système pour les demandes IdP uniquement. Pour charger un fichier monté, écrivez `${file:/etc/gateway/idp-ca.pem}`. Utilisez pour Keycloak ou Dex derrière une PKI d'entreprise. |100| `ca_cert_pem` | Non | Le certificat CA codé en PEM lui-même, pas un chemin vers un fichier. Il remplace le magasin de confiance du système pour les demandes du fournisseur d'identité uniquement. Pour charger un fichier monté, écrivez `${file:/etc/gateway/idp-ca.pem}`. Utilisez pour Keycloak ou Dex derrière une PKI d'entreprise. |
101 101
102<h4 id="idp-requests-through-a-forward-proxy">102<h4 id="idp-requests-through-a-forward-proxy">
103 Demandes IdP via un proxy de transfert103 Demandes du fournisseur d'identité via un proxy avant
104</h4>104</h4>
105 105
106Les upstreams d'inférence honorent `HTTPS_PROXY` et `HTTP_PROXY` sur chaque version. Les propres demandes de la passerelle à l'IdP, découverte, JWKS, jeton et userinfo, vont directement sauf si vous définissez `oidc.use_proxy: true`, ce qui nécessite v2.1.227 ou ultérieur. Lorsqu'une variable proxy est définie, `use_proxy` n'est pas défini et l'émetteur n'est pas couvert par `NO_PROXY`, la passerelle garde ces demandes directes et enregistre un avis au démarrage vous demandant de choisir ; `use_proxy: false` les garde directes et fait taire l'avis.106Les upstreams d'inférence honorent `HTTPS_PROXY` et `HTTP_PROXY` sur chaque version. Les propres demandes de la passerelle au fournisseur d'identité, découverte, JWKS, jeton, et userinfo, vont directes sauf si vous définissez `oidc.use_proxy: true`, ce qui nécessite v2.1.227 ou ultérieur. Lorsqu'une variable de proxy est définie, `use_proxy` n'est pas défini, et l'émetteur n'est pas couvert par `NO_PROXY`, la passerelle garde ces demandes directes et enregistre un avis au démarrage vous demandant de choisir ; `use_proxy: false` les garde directes et fait taire l'avis.
107 107
108Avec `use_proxy: true`, le pod résout lui-même le nom d'hôte de chaque point de terminaison IdP et demande au proxy de `CONNECT` à l'adresse IP résolue, donc le proxy doit accepter `CONNECT` à l'adresse IP de chaque hôte que le document de découverte nomme, pas seulement l'émetteur. Utilisez une URL de proxy `http://`. `ca_cert_pem` et la [garde SSRF](/docs/fr/claude-apps-gateway-deploy#threat-model-summary) s'appliquent également sur le chemin proxifié.108Avec `use_proxy: true`, le pod résout lui-même le nom d'hôte de chaque point de terminaison du fournisseur d'identité et demande au proxy de `CONNECT` à l'adresse IP résolue, donc le proxy doit accepter `CONNECT` à l'adresse IP de chaque hôte que le document de découverte nomme, pas seulement l'émetteur. Utilisez une URL de proxy `http://`. `ca_cert_pem` et la [protection SSRF](/docs/fr/claude-apps-gateway-deploy#threat-model-summary) s'appliquent également sur le chemin proxifié.
109 109
110[Egress proxy uniquement](#proxy-only-egress) change les deux : pendant qu'il est actif, les demandes IdP suivent le proxy sauf si vous définissez `use_proxy: false`, et la passerelle remet au proxy chaque nom d'hôte IdP sans le résoudre d'abord.110[Sortie proxy uniquement](#proxy-only-egress) change les deux : pendant qu'il est actif, les demandes du fournisseur d'identité suivent le proxy sauf si vous définissez `use_proxy: false`, et la passerelle remet au proxy chaque nom d'hôte du fournisseur d'identité sans le résoudre d'abord.
111 111
112<h4 id="proxy-only-egress">112<h4 id="proxy-only-egress">
113 Egress proxy uniquement113 Sortie proxy uniquement
114</h4>114</h4>
115 115
116Définissez `CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1` dans l'environnement de la passerelle, à côté de `HTTPS_PROXY`, lorsque le pod atteint d'autres hôtes uniquement via ce proxy de transfert et ne peut pas résoudre les noms DNS publics lui-même, ou lorsque le proxy refuse `CONNECT` à une adresse IP. Nécessite v2.1.277 ou ultérieur. C'est une variable d'environnement plutôt qu'une clé `gateway.yaml` pour que rien dans le fichier de configuration ne puisse assouplir la vérification d'adresse de la passerelle.116Définissez `CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1` dans l'environnement de la passerelle, à côté de `HTTPS_PROXY`, lorsque le pod atteint d'autres hôtes uniquement via ce proxy avant et ne peut pas résoudre les noms DNS publics lui-même, ou lorsque le proxy refuse `CONNECT` à une adresse IP. Nécessite v2.1.277 ou ultérieur. C'est une variable d'environnement plutôt qu'une clé `gateway.yaml` pour que rien dans le fichier de configuration ne puisse assouplir la vérification d'adresse de la passerelle.
117 117
118```bash theme={null}118```bash theme={null}
119export HTTPS_PROXY=http://proxy.corp.example.com:3128119export HTTPS_PROXY=http://proxy.corp.example.com:3128
122export CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1122export CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1
123```123```
124 124
125La passerelle enregistre une ligne `network:` au démarrage pendant que l'egress proxy uniquement est actif.125La passerelle enregistre une ligne `network:` au démarrage pendant que la sortie proxy uniquement est active.
126 126
127Chaque ligne ci-dessous est une classe de demande sortante sur une passerelle avec `HTTPS_PROXY` défini, par défaut et pendant que l'egress proxy uniquement est actif.127Chaque ligne ci-dessous est une classe de demande sortante sur une passerelle avec `HTTPS_PROXY` défini, par défaut et pendant que la sortie proxy uniquement est active.
128 128
129| Demande sortante | Par défaut | Egress proxy uniquement actif |129| Demande sortante | Par défaut | Sortie proxy uniquement active |
130| - | - | - |130| - | - | - |
131| Upstreams `provider: anthropic`, échange de jeton Workload Identity Federation, exports `telemetry.forward_to` | Résolus et vérifiés localement, puis `CONNECT` à l'adresse IP vérifiée via le proxy. Un collecteur de télémétrie listé dans `NO_PROXY` est atteint directement à la place | Nom d'hôte remis au proxy |131| Upstreams `provider: anthropic`, échange de jeton Workload Identity Federation, exports `telemetry.forward_to` | Résolus et vérifiés localement, puis `CONNECT` à l'adresse IP vérifiée via le proxy. Un collecteur de télémétrie listé dans `NO_PROXY` est atteint directement à la place | Nom d'hôte remis au proxy |
132| Découverte IdP, JWKS, jeton et userinfo | Direct sauf si [`oidc.use_proxy: true`](#idp-requests-through-a-forward-proxy), puis `CONNECT` à l'adresse IP vérifiée | Nom d'hôte remis au proxy, sauf si `oidc.use_proxy: false` garde un IdP interne direct |132| Découverte du fournisseur d'identité, JWKS, jeton, et userinfo | Direct sauf si [`oidc.use_proxy: true`](#idp-requests-through-a-forward-proxy), puis `CONNECT` à l'adresse IP vérifiée | Nom d'hôte remis au proxy, sauf si `oidc.use_proxy: false` garde un fournisseur d'identité interne direct |
133| Upstreams Amazon Bedrock, Claude Platform on AWS, Agent Platform de Google Cloud et Microsoft Foundry ; recherches de groupes Google | Nom d'hôte remis au proxy | Inchangé |133| Upstreams Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, et Microsoft Foundry ; recherches de groupes Google | Nom d'hôte remis au proxy | Inchangé |
134 134
135L'egress proxy uniquement reste désactivé sauf si l'environnement de la passerelle répond à ces trois conditions :135La sortie proxy uniquement reste désactivée sauf si l'environnement de la passerelle répond à ces trois conditions :
136 136
137* `HTTPS_PROXY` ou `HTTP_PROXY` est défini.137* `HTTPS_PROXY` ou `HTTP_PROXY` est défini.
138* `NO_PROXY` et `no_proxy` sont vides. Si votre plateforme injecte l'un ou l'autre dans les pods, définissez les deux sur une valeur vide sur le conteneur de la passerelle. Lister un collecteur de télémétrie dans `NO_PROXY` garde l'egress proxy uniquement désactivé.138* `NO_PROXY` et `no_proxy` sont vides. Si votre plateforme injecte l'un ou l'autre dans les pods, définissez les deux sur une valeur vide sur le conteneur de la passerelle. Lister un collecteur de télémétrie dans `NO_PROXY` garde la sortie proxy uniquement désactivée.
139* `CLAUDE_GATEWAY_ALLOW_LOOPBACK` n'est pas activé. Un collecteur ou IdP sur la propre boucle locale du pod ne peut pas être combiné avec l'egress proxy uniquement, car une adresse loopback remise au proxy serait la propre boucle locale de l'hôte proxy, donc donnez à ces services une adresse que le proxy peut atteindre à la place. Pour la même raison, la passerelle refuse les noms de style `localhost` directement pendant que l'egress proxy uniquement est actif.139* `CLAUDE_GATEWAY_ALLOW_LOOPBACK` n'est pas activé. Un collecteur ou un fournisseur d'identité sur la propre boucle locale du pod ne peut pas être combiné avec la sortie proxy uniquement, car une adresse loopback remise au proxy serait la propre boucle locale de l'hôte proxy, donc donnez à ces services une adresse que le proxy peut atteindre à la place. Pour la même raison, la passerelle refuse les noms de style `localhost` directement pendant que la sortie proxy uniquement est active.
140 140
141Lorsqu'une de ces conditions n'est pas remplie, la passerelle enregistre un avertissement au démarrage nommant la variable qui l'a arrêtée et garde le comportement par défaut.141Lorsque l'une de ces conditions n'est pas remplie, la passerelle enregistre un avertissement au démarrage nommant la variable qui l'a arrêtée et conserve le comportement par défaut.
142 142
143Une fois que l'egress proxy uniquement est actif, autorisez chaque destination dans le proxy, y compris un collecteur interne et tout hôte configuré par adresse IP. Vous pouvez toujours garder un IdP interne direct avec [`oidc.use_proxy: false`](#idp-requests-through-a-forward-proxy).143Une fois que la sortie proxy uniquement est active, autorisez chaque destination dans le proxy, y compris un collecteur interne et tout hôte configuré par adresse IP. Vous pouvez toujours garder un fournisseur d'identité interne direct avec [`oidc.use_proxy: false`](#idp-requests-through-a-forward-proxy).
144 144
145<Warning>145<Warning>
146 Activez ceci uniquement lorsque la liste d'autorisation du proxy est au moins aussi stricte que la vérification propre de la passerelle. Le proxy doit refuser les points de terminaison de métadonnées cloud tels que `169.254.169.254` et `metadata.google.internal`, les adresses link-local et la propre boucle locale de l'hôte proxy, et il doit les refuser par l'adresse à laquelle un nom se résout, pas seulement par nom, car la passerelle ne capture plus un nom d'hôte qui se résout à l'un d'eux. Un proxy qui se connecte n'importe où où on lui demande supprime la [garde SSRF](/docs/fr/claude-apps-gateway-deploy#threat-model-summary) de la passerelle pour ces demandes.146 Activez ceci uniquement lorsque la liste d'autorisation du proxy est au moins aussi stricte que la vérification propre de la passerelle. Le proxy doit refuser les points de terminaison de métadonnées cloud tels que `169.254.169.254` et `metadata.google.internal`, les adresses link-local, et la propre boucle locale de l'hôte proxy, et il doit les refuser par l'adresse à laquelle un nom se résout, pas seulement par nom, car la passerelle ne capture plus un nom d'hôte qui se résout en l'un d'eux. Un proxy qui se connecte n'importe où on lui demande supprime la [protection SSRF](/docs/fr/claude-apps-gateway-deploy#threat-model-summary) de la passerelle pour ces demandes.
147</Warning>147</Warning>
148 148
149<h3 id="session">149<h3 id="session">
152 152
153Le bloc `session` façonne les jetons porteurs que la passerelle émet après la connexion : le secret qui les signe et combien de temps ils vivent.153Le bloc `session` façonne les jetons porteurs que la passerelle émet après la connexion : le secret qui les signe et combien de temps ils vivent.
154 154
155| Champ | Requis | Description |155| Champ | Obligatoire | Description |
156| - | - | - |156| - | - | - |
157| `jwt_secret` | Oui | Au moins 32 octets d'entropie, par exemple à partir de `openssl rand -base64 32`. Signe les jetons porteurs HS256 de la passerelle. Accepte une chaîne unique ou un tableau pour la rotation : l'index 0 signe et toutes les entrées vérifient. Pour faire pivoter, prépendez un nouveau secret, attendez `ttl_hours`, puis supprimez l'ancien. |157| `jwt_secret` | Oui | Au moins 32 octets d'entropie, par exemple à partir de `openssl rand -base64 32`. Signe les jetons porteurs HS256 de la passerelle. Accepte une chaîne unique ou un tableau pour la rotation : l'index 0 signe et toutes les entrées vérifient. Pour faire tourner, prépendez un nouveau secret, attendez `ttl_hours`, puis supprimez l'ancien. |
158| `ttl_hours` | Non | Durée de vie du jeton porteur de la passerelle. Par défaut `1`. Le CLI s'actualise silencieusement avant l'expiration lorsque l'IdP émet des jetons d'actualisation. Une durée de vie plus courte déprovisionne plus rapidement ; une plus longue fait moins de trajets IdP. Si votre IdP ne peut pas émettre de jetons d'actualisation car `offline_access` n'est pas disponible, il n'y a pas d'actualisation silencieuse, donc augmentez ceci à `8` ou `12` pour éviter de renvoyer les développeurs à la connexion au navigateur toutes les heures. |158| `ttl_hours` | Non | Durée de vie du jeton porteur de la passerelle. Par défaut `1`. Le CLI s'actualise silencieusement avant l'expiration lorsque le fournisseur d'identité émet des jetons d'actualisation. Une durée de vie plus courte déprovisionne plus rapidement ; une plus longue fait moins d'allers-retours du fournisseur d'identité. Si votre fournisseur d'identité ne peut pas émettre de jetons d'actualisation car `offline_access` n'est pas disponible, il n'y a pas d'actualisation silencieuse, donc augmentez ceci à `8` ou `12` pour éviter de renvoyer les développeurs à la connexion au navigateur toutes les heures. |
159 159
160<h3 id="store">160<h3 id="store">
161 `store`161 `store`
162</h3>162</h3>
163 163
164Le bloc `store` pointe la passerelle vers sa base de données PostgreSQL, qui contient les subventions d'appareils et les compteurs de limite de débit.164Le bloc `store` pointe la passerelle vers sa base de données PostgreSQL, qui contient les subventions d'appareil et les compteurs de limitation de débit.
165 165
166| Champ | Requis | Description |166| Champ | Obligatoire | Description |
167| - | - | - |167| - | - | - |
168| `postgres_url` | Oui | URL `postgres://` ou `postgresql://`. Requis : le rendez-vous de subvention d'appareil, où le rappel du navigateur écrit et le CLI d'interrogation lit, a besoin d'un état entre répliques. La passerelle exécute ses propres migrations de schéma au démarrage et à la mise à niveau, donc le rôle a besoin de droits pour créer et modifier les tables sur le schéma cible. Voir [Mises à jour](/docs/fr/claude-apps-gateway-deploy#upgrades) et [Postgres](/docs/fr/claude-apps-gateway-deploy#postgres). |168| `postgres_url` | Oui | URL `postgres://` ou `postgresql://`. Obligatoire : le rendez-vous de subvention d'appareil, où le rappel du navigateur écrit et le CLI d'interrogation lit, a besoin d'un état entre répliques. La passerelle exécute ses propres migrations de schéma au démarrage et à la mise à niveau, donc le rôle a besoin de droits pour créer et modifier les tables sur le schéma cible. Voir [Mises à niveau](/docs/fr/claude-apps-gateway-deploy#upgrades) et [Postgres](/docs/fr/claude-apps-gateway-deploy#postgres). |
169| `username` | Non | Remplace l'utilisateur dans `postgres_url` |169| `username` | Non | Remplace l'utilisateur dans `postgres_url` |
170| `password` | Non | Identifiant de base de données. Définissez-le ici plutôt que dans `postgres_url` pour que l'identifiant reste hors de l'URL. Accepte n'importe quel caractère et prend la priorité sur les identifiants d'URL. |170| `password` | Non | Identifiant de base de données. Définissez-le ici plutôt que dans `postgres_url` pour que l'identifiant reste hors de l'URL. Accepte n'importe quel caractère et prend précédence sur les identifiants d'URL. |
171| `max_connections` | Non | Taille du pool de connexions Postgres par réplique. Par défaut `5`, ce qui est conservateur et convivial pour les bases de données partagées. Avec les [limites de dépenses](#admin) activées, le chemin chaud effectue quelques opérations par demande d'inférence, donc augmentez-le pour une base de données dédiée sous charge, et gardez les répliques × ceci en dessous du `max_connections` de la base de données. |171| `max_connections` | Non | Taille du pool de connexions Postgres par réplique. Par défaut `5`, ce qui est conservateur et convivial pour les bases de données partagées. Avec les [limites de dépenses](#admin) activées, le chemin chaud effectue quelques opérations par demande d'inférence, donc augmentez-le pour une base de données dédiée sous charge, et gardez répliques × ceci en dessous du `max_connections` de la base de données. |
172| `connect_timeout_seconds` | Non | Secondes que la passerelle attend lorsqu'elle ouvre une connexion Postgres. Un nombre entier de `1` à `60`, par défaut `5`. Augmentez-le si les tentatives de connexion expirent lorsqu'une nouvelle instance de passerelle démarre. Nécessite Claude Code v2.1.274 ou ultérieur sur le serveur de la passerelle. Les versions antérieures refusent de démarrer lorsque la clé est définie. |172| `connect_timeout_seconds` | Non | Secondes que la passerelle attend lorsqu'elle ouvre une connexion Postgres. Un nombre entier de `1` à `60`, par défaut `5`. Augmentez-le si les tentatives de connexion expirent lorsqu'une nouvelle instance de passerelle démarre. Nécessite Claude Code v2.1.274 ou ultérieur sur le serveur de la passerelle. Les versions antérieures refusent de démarrer lorsque la clé est définie. |
173| `readiness_grace_seconds` | Non | Combien de secondes `/readyz` continue de signaler prêt après que Postgres cesse de répondre. Un nombre entier de `0` à `3600`, par défaut `0`. Voir [Comportement de panne](/docs/fr/claude-apps-gateway-deploy#outage-behavior) pour savoir comment choisir une valeur. Nécessite Claude Code v2.1.282 ou ultérieur sur le serveur de la passerelle. Les versions antérieures refusent de démarrer lorsque la clé est définie. |
173 174
174Pour le développement local, pointez `postgres_url` sur un conteneur Postgres jetable, par exemple `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`.175Pour le développement local, pointez `postgres_url` vers un conteneur Postgres jetable, par exemple `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`.
175 176
176<h3 id="upstreams">177<h3 id="upstreams">
177 `upstreams`178 `upstreams`
179 180
180`upstreams` est une liste ordonnée. La passerelle transfère l'inférence au premier upstream qui résout le modèle demandé.181`upstreams` est une liste ordonnée. La passerelle transfère l'inférence au premier upstream qui résout le modèle demandé.
181 182
182Sur `5xx`, `429`, `401`, `403`, `404`, ou timeout, la passerelle bascule vers le suivant ; les autres `4xx` ne le font pas, car ces erreurs sont attribuables à la demande plutôt qu'à l'upstream. Un `401` ou `403` signifie que l'identifiant propre de la passerelle a échoué contre cet upstream. Un `404` signifie que cet upstream ne sert pas le modèle demandé, donc un upstream ultérieur dans la liste peut toujours le faire.183Sur `5xx`, `429`, `401`, `403`, `404`, ou timeout, la passerelle bascule vers l'upstream suivant ; les autres `4xx` ne le font pas, car ces erreurs sont attribuables à la demande plutôt qu'à l'upstream. Un `401` ou `403` signifie que l'identifiant que la passerelle a utilisé contre cet upstream a échoué. Un `404` signifie que cet upstream ne sert pas le modèle demandé, donc un upstream ultérieur dans la liste peut toujours le faire.
183 184
184Si vous définissez `forward_user_identity: true` sur un upstream, un `429` qu'il retourne à une demande qui portait l'e-mail du développeur ne bascule pas. Voir [comment un déni de limite par utilisateur atteint le développeur](#per-user-identity-headers-for-a-proxy-you-run).185Si vous définissez `forward_user_identity: true` sur un upstream, un `429` qu'il retourne à une demande qui portait l'e-mail du développeur ne bascule pas. Voir [comment un refus de limite par utilisateur atteint le développeur](#per-user-identity-headers-for-a-proxy-you-run).
185 186
186Le basculement sur `404` nécessite la passerelle v2.1.198 ou ultérieure. Les versions antérieures retournaient le premier `404` au client même lorsqu'un upstream ultérieur dans la liste servait le modèle.187Le basculement sur `404` nécessite la passerelle v2.1.198 ou ultérieur. Les versions antérieures retournaient le premier `404` au client même lorsqu'un upstream ultérieur dans la liste servait le modèle.
187 188
188Plusieurs upstreams du même fournisseur doivent définir un `name:` distinct.189Plusieurs upstreams du même fournisseur doivent définir un `name:` distinct.
189 190
190Les clients Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform et Microsoft Foundry sont construits une fois au démarrage, et leurs SDKs actualisent les identifiants en interne, donc la rotation des identifiants cloud ne nécessite pas un redémarrage. Les clés API Anthropic statiques et les porteurs sont lus au démarrage ; voir [Anthropic API](#anthropic-api).191Les clients Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, et Microsoft Foundry sont construits une fois au démarrage, et leurs SDK actualisent les identifiants en interne, donc la rotation des identifiants cloud ne nécessite pas un redémarrage. Les clés API Anthropic statiques et les porteurs sont lus au démarrage ; voir [Anthropic API](#anthropic-api).
191 192
192<h4 id="upstream-error-messages">193<h4 id="upstream-error-messages">
193 Messages d'erreur d'upstream194 Messages d'erreur Upstream
194</h4>195</h4>
195 196
196La passerelle retourne la réponse d'erreur d'un upstream, ou son propre `502`, selon la façon dont les upstreams ont répondu :197La passerelle retourne la réponse d'erreur d'un upstream, ou son propre `502`, selon la façon dont les upstreams ont répondu :
197 198
198* **Un upstream a retourné un statut sur lequel la passerelle ne [bascule pas](#multiple-upstreams)** : la réponse de cet upstream. La passerelle n'essaie pas d'autres upstreams.199* **Un upstream a retourné un statut sur lequel la passerelle ne [bascule pas](#multiple-upstreams)** : la réponse de cet upstream. La passerelle n'essaie pas d'autres upstreams.
199* **Chaque upstream que la passerelle a essayé a échoué d'une manière sur laquelle elle [bascule](#multiple-upstreams)** : le dernier `429`. Lorsqu'aucun n'a retourné un `429`, la passerelle préfère, dans l'ordre, le dernier `401` ou `403`, le dernier `404` et le dernier `501`. Lorsqu'aucun n'a retourné l'un de ceux-ci, le propre `502` de la passerelle, `all upstreams failed (N attempted)`, où N compte chaque entrée dans [`upstreams`](#upstreams), y compris les entrées que la passerelle a ignorées car elles ne servent pas le modèle demandé.200* **Chaque upstream que la passerelle a essayé a échoué d'une manière sur laquelle elle [bascule](#multiple-upstreams)** : le dernier `429`. Lorsqu'aucun n'a retourné un `429`, la passerelle préfère, dans l'ordre, le dernier `401` ou `403`, le dernier `404`, et le dernier `501`. Lorsqu'aucun n'a retourné l'un de ceux-ci, le propre `502` de la passerelle, `all upstreams failed (N attempted)`, où N compte chaque entrée dans [`upstreams`](#upstreams), y compris les entrées que la passerelle a ignorées car elles ne servent pas le modèle demandé.
200 201
201Lorsque la passerelle retourne la réponse d'un upstream, elle garde le code de statut de l'upstream. Qu'elle garde le message de l'upstream dépend du fournisseur. Le corps d'erreur d'un upstream Anthropic API atteint le développeur inchangé.202Lorsque la passerelle retourne la réponse d'un upstream, elle conserve le code de statut de l'upstream. Qu'elle conserve le message de l'upstream dépend du fournisseur. Le corps d'erreur d'un upstream Anthropic API atteint le développeur inchangé.
202 203
203Les upstreams Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform et Microsoft Foundry peuvent nommer vos IDs de compte, ARNs de rôle et IDs de projet dans leur texte d'erreur. La passerelle enregistre ce texte complet dans le [journal opérationnel](/docs/fr/claude-apps-gateway-deploy#logs). Ce que le développeur voit de ces upstreams dépend du rejet :204Les upstreams Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, et Microsoft Foundry peuvent nommer vos ID de compte, ARN de rôle, et ID de projet dans leur texte d'erreur. La passerelle enregistre ce texte complet dans le [journal opérationnel](/docs/fr/claude-apps-gateway-deploy#logs). Ce que le développeur voit de ces upstreams dépend du refus :
204 205
205* `400` ou `413` dans l'enveloppe d'erreur standard d'Anthropic : le message propre de l'upstream, tel que `prompt is too long`. Claude Platform on AWS, Agent Platform et Microsoft Foundry retournent cette enveloppe pour les rejets d'API de modèle.206* `400` ou `413` dans l'enveloppe d'erreur standard d'Anthropic : le message propre de l'upstream, tel que `prompt is too long`. Claude Platform on AWS, Agent Platform, et Microsoft Foundry retournent cette enveloppe pour les rejets d'API de modèle.
206* `400` ou `413` dans la propre forme du fournisseur : un jeton `capability_rejected:`. Lorsque la passerelle ne peut pas classer le rejet, `upstream rejected the request` sur un `400` ou `request too large for this upstream` sur un `413`.207* `400` ou `413` dans la propre forme du fournisseur : un jeton `capability_rejected:`. Lorsque la passerelle ne peut pas classer le refus, `upstream rejected the request` sur un `400` ou `request too large for this upstream` sur un `413`.
207* Tout autre statut : copie générique par statut, tel que `upstream rate limit exceeded` sur un `429`.208* N'importe quel autre statut : copie générique par statut, telle que `upstream rate limit exceeded` sur un `429`.
208 209
209Par exemple, la passerelle remplace le `Input is too long for requested model.` d'Amazon Bedrock par `capability_rejected: prompt_too_long`. Claude Code [se compacte automatiquement](/docs/fr/errors#prompt-is-too-long) sur ce jeton, comme il le fait sur `prompt is too long`.210Par exemple, la passerelle remplace le `Input is too long for requested model.` d'Amazon Bedrock par `capability_rejected: prompt_too_long`. Claude Code [se compacte automatiquement](/docs/fr/errors#prompt-is-too-long) sur ce jeton, comme il le fait sur `prompt is too long`.
210 211
211Garder le message `400` ou `413` d'un upstream cloud, ou le remplacer par un jeton `capability_rejected:`, nécessite la passerelle v2.1.233 ou ultérieure.212Garder le message `400` ou `413` d'un upstream cloud, ou le remplacer par un jeton `capability_rejected:`, nécessite la passerelle v2.1.233 ou ultérieur.
212 213
213<h4 id="anthropic-api">214<h4 id="anthropic-api">
214 Anthropic API215 Anthropic API
221 - provider: anthropic222 - provider: anthropic
222 auth:223 auth:
223 api_key: ${ANTHROPIC_API_KEY}224 api_key: ${ANTHROPIC_API_KEY}
224 # OU un porteur OAuth (par exemple un jeton échangé par Workload-Identity-Federation) :225 # OU un porteur OAuth (par exemple, un jeton échangé Workload-Identity-Federation) :
225 # oauth_token: ${file:/var/run/secrets/anthropic-oauth-token}226 # oauth_token: ${file:/var/run/secrets/anthropic-oauth-token}
226 # base_url: https://api.anthropic.com # par défaut ; remplacer pour un proxy de transfert227 # base_url: https://api.anthropic.com # par défaut ; remplacez pour un proxy avant
227```228```
228 229
229Les deux formes d'identifiants diffèrent dans l'en-tête qu'elles envoient :230Les deux formes d'identifiant diffèrent dans l'en-tête qu'elles envoient :
230 231
231* **`api_key`** : envoie `x-api-key`. Faites-la pivoter dans la Console Claude et mettez à jour la variable env.232* **`api_key`** : envoie `x-api-key`. Faites-la tourner dans la Console Claude et mettez à jour la variable d'environnement.
232* **`oauth_token`** : envoie `Authorization: Bearer`. Utilisez la forme porteur lorsque votre organisation émet des jetons de courte durée au lieu de clés API de longue durée. Le porteur est lu une fois au démarrage, donc actualisez en remontant le secret et en redémarrant.233* **`oauth_token`** : envoie `Authorization: Bearer`. Utilisez la forme porteur lorsque votre organisation émet des jetons de courte durée au lieu de clés API de longue durée. Le porteur est lu une fois au démarrage, donc actualisez en remontant le secret et en redémarrant.
233 234
234Au lieu d'une clé statique ou d'un porteur, vous pouvez utiliser Workload Identity Federation. Créez une règle de fédération en suivant le [guide Workload Identity Federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation), puis montez le JWT OIDC de votre charge de travail en tant que fichier, tel qu'un jeton de compte de service projeté Kubernetes ou un id-token de plateforme CI. La passerelle échange le JWT pour un porteur de courte durée et l'actualise automatiquement. Le fichier de jeton est relu à chaque échange, donc les jetons projetés pivotés sont récupérés sans redémarrage.235Au lieu d'une clé statique ou d'un porteur, vous pouvez utiliser Workload Identity Federation. Créez une règle de fédération en suivant le [guide Workload Identity Federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation), puis montez le JWT OIDC de votre charge de travail en tant que fichier, tel qu'un jeton de compte de service projeté Kubernetes ou un id-token de plateforme CI. La passerelle échange le JWT pour un porteur de courte durée et l'actualise automatiquement. Le fichier de jeton est relui à chaque échange, donc les jetons projetés en rotation sont récupérés sans redémarrage.
235 236
236```yaml theme={null}237```yaml theme={null}
237upstreams:238upstreams:
240 federation_rule_id: ${ANTHROPIC_FEDERATION_RULE_ID}241 federation_rule_id: ${ANTHROPIC_FEDERATION_RULE_ID}
241 organization_id: ${ANTHROPIC_ORGANIZATION_ID}242 organization_id: ${ANTHROPIC_ORGANIZATION_ID}
242 identity_token_file: /var/run/secrets/anthropic/id-token243 identity_token_file: /var/run/secrets/anthropic/id-token
243 # workspace_id: wrkspc_... # requis si la règle couvre >1 espace de travail244 # workspace_id: wrkspc_... # obligatoire si la règle couvre >1 espace de travail
244 # service_account_id: svac_... # vérification de cible attendue optionnelle245 # service_account_id: svac_... # vérification de cible attendue optionnelle
245```246```
246 247
267 268
268| En-tête | Valeur |269| En-tête | Valeur |
269| - | - |270| - | - |
270| `x-litellm-end-user-id` | L'e-mail du développeur, lorsque l'IdP l'a fourni. |271| `x-litellm-end-user-id` | L'e-mail du développeur, lorsque le fournisseur d'identité en a fourni un. |
271| `x-claude-gateway-user-id` | Le sujet IdP du développeur, à partir de la réclamation `sub` du jeton. |272| `x-claude-gateway-user-id` | Le sujet du fournisseur d'identité du développeur, à partir de la revendication `sub` du jeton. |
272| `x-claude-gateway-user-email` | L'e-mail du développeur, lorsque l'IdP l'a fourni. |273| `x-claude-gateway-user-email` | L'e-mail du développeur, lorsque le fournisseur d'identité en a fourni un. |
273 274
274Lorsque le jeton IdP ne porte pas d'e-mail, la passerelle envoie uniquement `x-claude-gateway-user-id` et omet les deux en-têtes d'e-mail. Si votre IdP met l'e-mail dans une réclamation différente, définissez [`oidc.email_claim`](#oidc) sur cette réclamation.275Lorsque le jeton du fournisseur d'identité ne porte pas d'e-mail, la passerelle envoie uniquement `x-claude-gateway-user-id` et omet les deux en-têtes d'e-mail. Si votre fournisseur d'identité met l'e-mail dans une revendication différente, définissez [`oidc.email_claim`](#oidc) sur cette revendication.
275 276
276Lorsque votre proxy répond `429` à une demande qui portait l'e-mail du développeur, la passerelle retourne cette réponse au développeur telle quelle au lieu de basculer vers le prochain upstream, donc votre limite de budget ou de débit par utilisateur du proxy tient. Les autres réponses du proxy suivent les [règles de basculement](#upstreams) ordinaires. Si le jeton IdP d'un développeur ne porte pas d'e-mail, la passerelle transfère ses demandes sans les en-têtes d'e-mail, donc un `429` à l'une de ces demandes compte comme capacité d'upstream et bascule. Avant v2.1.267 sur le serveur de la passerelle, chaque `429` basculait.277Lorsque votre proxy répond `429` à une demande qui portait l'e-mail du développeur, la passerelle retourne cette réponse au développeur tel quel au lieu de basculer vers l'upstream suivant, donc votre budget par utilisateur du proxy ou votre limite de débit tient. Les autres réponses du proxy suivent les [règles de basculement](#upstreams) ordinaires. Si le jeton du fournisseur d'identité d'un développeur ne porte pas d'e-mail, la passerelle transfère ses demandes sans les en-têtes d'e-mail, donc un `429` à l'une de ces demandes compte comme capacité upstream et bascule. Avant v2.1.267 sur le serveur de la passerelle, chaque `429` basculait.
277 278
278Définissez `forward_user_identity` uniquement sur un upstream dont le `base_url` est un proxy que vous exploitez. La passerelle envoie les e-mails des développeurs à quel que soit le serveur que ce `base_url` nomme. Si le `base_url` est l'API Anthropic, qui est la valeur par défaut, la passerelle refuse de démarrer.279Définissez `forward_user_identity` uniquement sur un upstream dont le `base_url` est un proxy que vous exploitez. La passerelle envoie les e-mails des développeurs à quel que soit le serveur que ce `base_url` nomme. Si le `base_url` est l'API Anthropic, qui est la valeur par défaut, la passerelle refuse de démarrer.
279 280
281 Amazon Bedrock282 Amazon Bedrock
282</h4>283</h4>
283 284
284Pour le déploiement Bedrock côté client que la passerelle remplace ou fronts, voir [Claude Code sur Amazon Bedrock](/docs/fr/amazon-bedrock). L'upstream côté passerelle :285Pour le déploiement côté client d'Amazon Bedrock que la passerelle remplace ou précède, voir [Claude Code on Amazon Bedrock](/docs/fr/amazon-bedrock). L'upstream côté passerelle :
285 286
286```yaml theme={null}287```yaml theme={null}
287upstreams:288upstreams:
288 - provider: bedrock289 - provider: bedrock
289 region: us-east-1290 region: us-east-1
290 auth: {} # préféré : chaîne d'identifiants par défaut AWS291 auth: {} # chaîne d'identifiants AWS par défaut préférée
291 # OU identifiants explicites :292 # OU identifiants explicites :
292 # auth:293 # auth:
293 # aws_access_key_id: ${AWS_AKID}294 # aws_access_key_id: ${AWS_AKID}
296 # OU un jeton porteur Bedrock API :297 # OU un jeton porteur Bedrock API :
297 # auth:298 # auth:
298 # aws_bearer_token: ${AWS_BEARER_TOKEN}299 # aws_bearer_token: ${AWS_BEARER_TOKEN}
299 # Remplacer le point de terminaison bedrock-runtime pour les déploiements FIPS ou VPC-endpoint :300 # Remplacez le point de terminaison bedrock-runtime pour les déploiements FIPS ou VPC-endpoint :
300 # base_url: https://bedrock-runtime-fips.us-east-1.amazonaws.com301 # base_url: https://bedrock-runtime-fips.us-east-1.amazonaws.com
301```302```
302 303
303Un bloc `auth` vide utilise la chaîne d'identifiants par défaut du SDK AWS : variables env, `~/.aws/credentials`, rôle de tâche ECS, métadonnées d'instance EC2 ou IRSA sur EKS. En production, donnez au pod de la passerelle un rôle IAM au lieu d'intégrer des clés statiques dans une image de conteneur.304Un bloc `auth` vide utilise la chaîne d'identifiants par défaut du SDK AWS : variables d'environnement, `~/.aws/credentials`, rôle de tâche ECS, métadonnées d'instance EC2, ou IRSA sur EKS. En production, donnez au pod de la passerelle un rôle IAM au lieu d'intégrer des clés statiques dans une image de conteneur.
304 305
305Les identifiants explicites doivent être complets : la passerelle échoue au démarrage lorsque `aws_access_key_id` et `aws_secret_access_key` ne sont pas définis ensemble, ou lorsque `aws_session_token` est défini sans eux. Avant v2.1.207, un bloc `auth:` partiel passait la validation.306Les identifiants explicites doivent être complets : la passerelle échoue au démarrage lorsque `aws_access_key_id` et `aws_secret_access_key` ne sont pas définis ensemble, ou lorsque `aws_session_token` est défini sans eux. Avant v2.1.207, un bloc `auth:` partiel passait la validation.
306 307
307| Configuration | Comment |308| Configuration | Comment |
308| - | - |309| - | - |
309| Permissions IAM | Accordez au principal de la passerelle `bedrock:InvokeModel` et `bedrock:InvokeModelWithResponseStream` sur les ARNs de profil d'inférence et les ARNs de modèle de fondation sous-jacents. Pour le catalogue intégré dans les régions US : `arn:aws:bedrock:<region>:<account>:inference-profile/us.anthropic.*` et `arn:aws:bedrock:*::foundation-model/anthropic.*`. Accordez également `bedrock:CountTokens` sur les ARNs de modèle de fondation. La passerelle l'utilise, sans frais, pour compter les jetons d'entrée d'une demande que le client a abandonnée, donc les [limites de dépenses](#admin) restent exactes. Sans cela, la passerelle revient à une demande Bedrock d'un jeton pour ce compte. |310| Permissions IAM | Accordez au principal de la passerelle `bedrock:InvokeModel` et `bedrock:InvokeModelWithResponseStream` sur les ARN de profil d'inférence et les ARN de modèle de fondation sous-jacents. Pour le catalogue intégré dans les régions US : `arn:aws:bedrock:<region>:<account>:inference-profile/us.anthropic.*` et `arn:aws:bedrock:*::foundation-model/anthropic.*`. Accordez également `bedrock:CountTokens` sur les ARN de modèle de fondation. La passerelle l'utilise, sans frais, pour compter les jetons d'entrée d'une demande que le client a abandonnée, donc les [limites de dépenses](#admin) restent exactes. Sans cela, la passerelle revient à une demande Bedrock d'un jeton pour ce compte. |
310| Accès au modèle | Amazon Bedrock active l'accès au modèle par défaut dans les régions commerciales. La porte au niveau du compte restante est celle d'Anthropic : un formulaire d'utilisation unique. Si personne dans votre compte AWS ne l'a soumis, ouvrez la console Amazon Bedrock, sélectionnez un modèle Anthropic dans le catalogue de modèles et complétez le formulaire. Voir [Soumettre les détails du cas d'utilisation](/docs/fr/amazon-bedrock#1-submit-use-case-details) pour le formulaire AWS Organizations et les permissions dont le soumetteur a besoin. |311| Accès au modèle | Amazon Bedrock active l'accès au modèle par défaut dans les régions commerciales. La porte au niveau du compte restante est celle d'Anthropic : un formulaire de cas d'utilisation unique ; si personne dans votre compte AWS ne l'a soumis, ouvrez la console Amazon Bedrock, sélectionnez un modèle Anthropic dans le catalogue de modèles, et complétez le formulaire. Voir [Soumettre les détails du cas d'utilisation](/docs/fr/amazon-bedrock#1-submit-use-case-details) pour le formulaire AWS Organizations et les permissions dont le soumetteur a besoin. |
311| EKS (IRSA) | Créez un rôle IAM avec la politique ci-dessus et une politique de confiance pour le fournisseur OIDC de votre cluster limité au compte de service de la passerelle. Annotez le compte de service avec `eks.amazonaws.com/role-arn: arn:aws:iam::<acct>:role/claude-gateway`. `auth: {}` le récupère. |312| EKS (IRSA) | Créez un rôle IAM avec la politique ci-dessus et une politique de confiance pour le fournisseur OIDC de votre cluster limité au compte de service de la passerelle. Annotez le compte de service avec `eks.amazonaws.com/role-arn: arn:aws:iam::<acct>:role/claude-gateway`. `auth: {}` le récupère. |
312| ECS / EC2 | Attachez le rôle IAM à la définition de tâche ou au profil d'instance. `auth: {}` le récupère. |313| ECS / EC2 | Attachez le rôle IAM à la définition de tâche ou au profil d'instance. `auth: {}` le récupère. |
313| N'importe où ailleurs | Passez les identifiants via les variables env `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` et `AWS_SESSION_TOKEN`, ou définissez-les explicitement dans `auth:` avec expansion `${VAR}` |314| N'importe où ailleurs | Passez les identifiants via les variables d'environnement `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, et `AWS_SESSION_TOKEN`, ou définissez-les explicitement dans `auth:` avec l'expansion `${VAR}` |
314| Région | `region:` est la région du point de terminaison API. Les profils d'inférence inter-régions routent à travers la géographie (US, EU, APAC) indépendamment de celui que vous choisissez. Pour les régions non-US ou les ARNs de débit provisionné, ajoutez un bloc [`models:`](#models) avec les bons IDs par upstream. |315| Région | `region:` est la région du point de terminaison API. Les profils d'inférence inter-régions acheminent à travers la géographie (US, EU, APAC) indépendamment de celui que vous choisissez. Pour les régions non-US ou les ARN de débit provisionné, ajoutez un bloc [`models:`](#models) avec les bons ID par upstream. |
316
317<h5 id="apply-an-amazon-bedrock-guardrail">
318 Appliquer une protection Amazon Bedrock
319</h5>
320
321Pour appliquer une protection Amazon Bedrock à chaque demande d'inférence que la passerelle envoie via un upstream Bedrock, ajoutez un bloc `guardrail` à cet upstream. Nécessite Claude Code v2.1.281 ou ultérieur sur le serveur de la passerelle.
322
323```yaml theme={null}
324upstreams:
325 - provider: bedrock
326 region: us-east-1
327 auth: {}
328 guardrail:
329 id: gr-abc123 # ID de protection ou ARN complet
330 version: "1" # un numéro de version publié, ou DRAFT
331 # gardez les guillemets : un 1 nu échoue au démarrage
332```
333
334<Warning>
335 La passerelle ne supporte pas les balises d'entrée de protection. Elle n'ajoute aucune balise de contenu de garde aux invites, donc un filtre de protection qu'Amazon Bedrock applique uniquement à l'entrée balisée ne s'exécute pas sur le trafic via la passerelle. Pour savoir quels filtres dépendent des balises d'entrée, voir [balises d'entrée](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-tagging.html) dans la documentation Amazon Bedrock.
336</Warning>
337
338Accordez également `bedrock:ApplyGuardrail` sur la protection au principal qui signe les demandes de cet upstream : le principal AWS de la passerelle, ou avec [`assume_role`](#bedrock-in-another-aws-account) le rôle nommé dans `role_arn`.
339
340Définissez `guardrail` sur chaque upstream `bedrock` ou sur aucun. La passerelle refuse de démarrer sur un mélange, car le [basculement](#multiple-upstreams) pourrait autrement envoyer une demande à un upstream Bedrock qui n'a pas de protection.
341
342La protection couvre les upstreams Bedrock uniquement. Si vous listez un autre fournisseur dans `upstreams`, la passerelle envoie les demandes à ce fournisseur sans la protection.
343
344Lorsqu'une demande `/v1/messages` dont le corps porte un champ `amazon-bedrock-*`, tel que `amazon-bedrock-guardrailConfig`, atteint un upstream Bedrock qui a `guardrail` défini, la passerelle répond 400 au lieu de la transférer.
345
346<a id="bedrock-in-another-aws-account" />
347
348<h5 id="bedrock-in-another-aws-account">
349 Bedrock dans un autre compte AWS
350</h5>
351
352Définissez `assume_role` sur un upstream Bedrock et la passerelle utilise sa propre identité AWS uniquement pour appeler `sts:AssumeRole` sur un rôle que vous nommez, qui peut être dans un compte AWS différent de la passerelle. Chaque demande Bedrock de cet upstream est signée avec les identifiants d'une heure que STS retourne, donc aucune clé d'accès de longue durée ne traverse les comptes.
353
354Nécessite une passerelle exécutant Claude Code v2.1.281 ou ultérieur. Une passerelle antérieure refuse de démarrer lorsqu'elle trouve la clé.
355
356```yaml theme={null}
357upstreams:
358 - name: bedrock-isolated
359 provider: bedrock
360 region: us-east-1
361 auth: {} # le rôle propre de la passerelle : il appelle uniquement STS
362 assume_role:
363 role_arn: arn:aws:iam::222222222222:role/claude-gateway-bedrock
364 # external_id: ${BEDROCK_ROLE_EXTERNAL_ID} # lorsque la politique de confiance du rôle en exige une
365```
366
367Le bloc `assume_role` prend trois clés :
368
369| Clé | Signification |
370| - | - |
371| `role_arn` | Le rôle IAM que la passerelle assume, comme un ARN `arn:aws:iam::` ou `arn:aws-us-gov:iam::`. Donnez-lui les [permissions Bedrock](#amazon-bedrock) que cet upstream a besoin, `bedrock:CountTokens` inclus, plus `bedrock:ApplyGuardrail` lorsque l'upstream définit `guardrail`. |
372| `external_id` | Optionnel. Envoyé comme ID externe à chaque appel `sts:AssumeRole`. Définissez-le lorsque la politique de confiance du rôle en exige un, et citez-le s'il est composé uniquement de chiffres. |
373| `session_name` | Optionnel. `email` ou `sub` donne à chaque développeur sa propre session : voir [Attribution des coûts AWS par développeur](#per-developer-aws-cost-attribution). Non défini, chaque demande utilise une session nommée `claude-apps-gateway`. |
374
375La politique de confiance du rôle nomme le principal propre de la passerelle, tel que son IRSA ou son rôle de tâche ECS. Ce principal a besoin de `sts:AssumeRole` sur le rôle et aucune permission Bedrock de sa propre. Supprimez la `Condition` si vous ne définissez pas `external_id`.
376
377```json theme={null}
378{
379 "Version": "2012-10-17",
380 "Statement": [{
381 "Effect": "Allow",
382 "Principal": { "AWS": "arn:aws:iam::111111111111:role/claude-gateway" },
383 "Action": "sts:AssumeRole",
384 "Condition": { "StringEquals": { "sts:ExternalId": "your-external-id" } }
385 }]
386}
387```
388
389* Si STS refuse ou est inaccessible, la passerelle n'envoie pas la demande avec les identifiants propres de l'upstream. Elle enregistre l'erreur STS avec ce qu'il faut vérifier, puis essaie l'upstream suivant que vous avez listé. [Messages d'erreur Upstream](#upstream-error-messages) couvre ce que le client reçoit lorsqu'aucun upstream ne réussit. Un upstream ultérieur sans `assume_role` servirait la demande avec ses propres identifiants, donc listez-en un uniquement si c'est ce que vous voulez.
390* La passerelle appelle le point de terminaison STS régional `sts.<region>.amazonaws.com`, que son réseau doit atteindre. Pour le point de terminaison FIPS, définissez `AWS_USE_FIPS_ENDPOINT=true` dans l'environnement de la passerelle plutôt que `use_fips_endpoint` dans un fichier de configuration AWS.
391* `assume_role` s'applique à `provider: bedrock` uniquement et a besoin d'identifiants source SigV4 : la passerelle refuse de démarrer lorsqu'il est défini à côté de `aws_bearer_token`.
392* Chaque développeur que la passerelle admet peut utiliser cet upstream ; [`managed`](#managed) régit quels développeurs peuvent utiliser quels modèles. Pour garder un modèle servi via le rôle d'être également servi à partir d'un autre compte, donnez-lui un id personnalisé dont la carte `upstream_model` n'a que le nom de cet upstream. Pour un tel id, la passerelle ignore chaque autre upstream, donc ni la demande ni le compte de jetons pour une demande abandonnée ne peuvent basculer vers un autre compte. Les noms de modèles intégrés sont toujours essayés sur chaque upstream dans l'ordre, celui-ci inclus, et une demande qui l'atteint est signée avec le même rôle, donc listez cet upstream en dernier sauf si son compte devrait également les servir.
393
394Cet exemple donne à un modèle un id personnalisé que seul l'upstream isolé sert :
395
396```yaml theme={null}
397models:
398 - id: claude-opus-restricted # un id personnalisé, pas un nom de modèle intégré
399 upstream_model:
400 bedrock-isolated: us.anthropic.claude-opus-4-8 # le seul upstream qui le sert
401```
402
403<a id="per-developer-aws-cost-attribution" />
404
405<h5 id="per-developer-aws-cost-attribution">
406 Attribution des coûts AWS par développeur
407</h5>
408
409Par défaut, la passerelle signe chaque demande Bedrock avec un identifiant, donc AWS voit toutes les demandes des développeurs sous un seul principal IAM. Ajoutez `session_name: email` à [`assume_role`](#bedrock-in-another-aws-account) et la passerelle appelle `sts:AssumeRole` une fois par développeur par heure, avec le nom de session défini sur l'e-mail de ce développeur, et signe ses demandes avec les identifiants retournés, donc les demandes de chaque développeur atteignent AWS sous leur propre session de rôle assumé. Le rôle peut être dans le compte propre de la passerelle.
410
411Nécessite une passerelle exécutant Claude Code v2.1.281 ou ultérieur. [Attribution des coûts sur AWS](/docs/fr/claude-apps-gateway-on-aws#cost-attribution) couvre le rôle IAM et où la facturation AWS affiche les sessions.
412
413```yaml theme={null}
414upstreams:
415 - provider: bedrock
416 region: us-east-1
417 auth: {} # le rôle propre de la passerelle : il appelle uniquement STS
418 assume_role:
419 role_arn: arn:aws:iam::123456789012:role/claude-gateway-bedrock-user
420 session_name: email # ou sub
421```
422
423`session_name` sélectionne quelle revendication vérifiée devient le `RoleSessionName` AWS : `email` ou `sub`. La passerelle écrit tout caractère autre que les lettres ASCII, les chiffres, et `_+,.@-` comme `=XX` hex par octet UTF-8, et raccourcit un résultat plus long que 64 caractères à un préfixe plus un hash, donc le nom de session de chaque développeur reste valide et unique. Une demande d'un développeur dont le jeton manque la revendication n'est pas envoyée via cet upstream, et le journal de l'opérateur dit de basculer vers `sub` ou de définir [`oidc.email_claim`](#oidc).
424
425Un développeur actif coûte un appel STS par heure par réplique de passerelle, et les demandes premières concurrentes partagent un appel.
426
427La passerelle fait également un appel de sa propre sur ce rôle : le compte de jetons pour une demande que le client a abandonnée, donc les [limites de dépenses](/docs/fr/claude-apps-gateway-spend-limits) restent exactes. Ce compte et sa [demande de secours d'un jeton](#amazon-bedrock) sont signés par la session partagée `claude-apps-gateway`, donc AWS attribue le secours à `claude-apps-gateway` plutôt qu'au développeur.
428
429Pour une attribution stricte par développeur, définissez `assume_role` avec `session_name` sur chaque upstream Bedrock que vous listez. Un upstream sans lui signe les demandes qu'il sert avec ses propres identifiants.
315 430
316<h4 id="claude-platform-on-aws">431<h4 id="claude-platform-on-aws">
317 Claude Platform on AWS432 Claude Platform on AWS
318</h4>433</h4>
319 434
320Claude Platform on AWS sert l'API Anthropic propriétaire sur l'infrastructure AWS à `aws-external-anthropic.<region>.api.aws`. Il utilise les IDs de modèle propriétaires, honore les en-têtes `anthropic-beta` tels qu'envoyés, et sert `count_tokens`, donc aucune des traductions spécifiques à Bedrock ne s'applique. Le fournisseur `anthropicAws` nécessite Claude Code v2.1.198 ou ultérieur ; les versions antérieures de la passerelle le rejettent au démarrage.435Claude Platform on AWS sert l'API Anthropic propriétaire sur l'infrastructure AWS à `aws-external-anthropic.<region>.api.aws`. Il utilise les ID de modèle propriétaires, honore les en-têtes `anthropic-beta` tels qu'envoyés, et sert `count_tokens`, donc aucune traduction spécifique à Bedrock ne s'applique. Le fournisseur `anthropicAws` nécessite Claude Code v2.1.198 ou ultérieur ; les versions antérieures de la passerelle le rejettent au démarrage.
321 436
322Pour le déploiement côté client de la même plateforme, voir [Claude Code sur Claude Platform on AWS](/docs/fr/claude-platform-on-aws). L'upstream côté passerelle :437Pour le déploiement côté client de la même plateforme, voir [Claude Code on Claude Platform on AWS](/docs/fr/claude-platform-on-aws). L'upstream côté passerelle :
323 438
324```yaml theme={null}439```yaml theme={null}
325upstreams:440upstreams:
327 region: us-east-1442 region: us-east-1
328 workspace_id: wrkspc_...443 workspace_id: wrkspc_...
329 auth:444 auth:
330 api_key: ${ANTHROPIC_AWS_API_KEY} # envoyé en tant que x-api-key445 api_key: ${ANTHROPIC_AWS_API_KEY} # envoyé comme x-api-key
331 # OU SigV4 via la chaîne d'identifiants par défaut AWS :446 # OU SigV4 via la chaîne d'identifiants AWS par défaut :
332 # auth: {}447 # auth: {}
333 # OU identifiants SigV4 explicites :448 # OU identifiants SigV4 explicites :
334 # auth:449 # auth:
335 # aws_access_key_id: ${AWS_ACCESS_KEY_ID}450 # aws_access_key_id: ${AWS_ACCESS_KEY_ID}
336 # aws_secret_access_key: ${AWS_SECRET_ACCESS_KEY}451 # aws_secret_access_key: ${AWS_SECRET_ACCESS_KEY}
337 # Remplacer le point de terminaison dérivé :452 # Remplacez le point de terminaison dérivé :
338 # base_url: https://aws-external-anthropic.us-east-1.api.aws453 # base_url: https://aws-external-anthropic.us-east-1.api.aws
339```454```
340 455
341La plateforme s'exécute dans un compte AWS séparé d'Amazon Bedrock et signe les demandes SigV4 pour son propre nom de service, `aws-external-anthropic`, donc un rôle IAM limité à Bedrock ne l'autorise pas. Une clé API dans `auth.api_key` prend la priorité lorsque les identifiants SigV4 sont également définis. Un bloc `auth` vide utilise la chaîne d'identifiants par défaut du SDK AWS, la même chaîne que l'upstream [Amazon Bedrock](#amazon-bedrock) utilise.456La plateforme s'exécute dans un compte AWS séparé d'Amazon Bedrock et signe les demandes SigV4 pour son propre nom de service, `aws-external-anthropic`, donc un rôle IAM limité à Bedrock ne l'autorise pas. Une clé API dans `auth.api_key` prend précédence lorsque les identifiants SigV4 sont également définis. Un bloc `auth` vide utilise la chaîne d'identifiants par défaut du SDK AWS, la même chaîne que l'upstream [Amazon Bedrock](#amazon-bedrock) utilise.
342 457
343| Champ | Requis | Description |458| Champ | Obligatoire | Description |
344| - | - | - |459| - | - | - |
345| `region` | Oui | Région AWS, lettres minuscules, chiffres et traits d'union. La passerelle dérive le point de terminaison à partir de celui-ci en tant que `https://aws-external-anthropic.<region>.api.aws`. |460| `region` | Oui | Région AWS, lettres minuscules, chiffres, et traits d'union. La passerelle dérive le point de terminaison à partir de lui comme `https://aws-external-anthropic.<region>.api.aws`. |
346| `workspace_id` | Oui | Envoyé en tant qu'en-tête sur chaque demande ; la plateforme l'exige |461| `workspace_id` | Oui | Envoyé comme en-tête à chaque demande ; la plateforme l'exige |
347| `auth.api_key` | Non | Clé API pour la plateforme, envoyée en tant que `x-api-key`. Pas un jeton porteur : les deux modes d'authentification sont une clé API ou SigV4. |462| `auth.api_key` | Non | Clé API pour la plateforme, envoyée comme `x-api-key`. Pas un jeton porteur : les deux modes d'authentification sont une clé API ou SigV4. |
348| `auth.aws_access_key_id` / `auth.aws_secret_access_key` | Non | Identifiants SigV4 explicites. Définir l'un sans l'autre échoue au démarrage. `auth.aws_session_token` est accepté à côté d'eux. |463| `auth.aws_access_key_id` / `auth.aws_secret_access_key` | Non | Identifiants SigV4 explicites. Définir l'un sans l'autre échoue au démarrage. `auth.aws_session_token` est accepté à côté d'eux. |
349| `base_url` | Non | Remplacer le point de terminaison dérivé |464| `base_url` | Non | Remplacez le point de terminaison dérivé |
350 465
351Parce que la plateforme résout les IDs de modèle propriétaires, le catalogue intégré route vers elle sans bloc [`models:`](#models). Lorsque vous organisez une liste `models:`, indexez l'entrée `anthropicAws:` avec l'ID propriétaire.466Parce que la plateforme résout les ID de modèle propriétaires, le catalogue intégré achemine vers elle sans bloc [`models:`](#models). Lorsque vous organisez une liste `models:`, clé l'entrée `anthropicAws:` avec l'ID propriétaire.
352 467
353<h4 id="google-cloud-agent-platform">468<h4 id="google-cloud-agent-platform">
354 Google Cloud Agent Platform469 Google Cloud Agent Platform
355</h4>470</h4>
356 471
357Pour la configuration équivalente côté client, voir [Claude Code sur Google Cloud](/docs/fr/google-vertex-ai). L'upstream côté passerelle :472Pour la configuration côté client équivalente, voir [Claude Code on Google Cloud](/docs/fr/google-vertex-ai). L'upstream côté passerelle :
358 473
359```yaml theme={null}474```yaml theme={null}
360upstreams:475upstreams:
361 - provider: vertex476 - provider: vertex
362 region: us-east5477 region: us-east5
363 project_id: example-prod478 project_id: example-prod
364 auth: {} # préféré : identifiants par défaut d'application479 auth: {} # identifiants par défaut d'application préférés
365 # OU un fichier de clé de compte de service :480 # OU un fichier de clé de compte de service :
366 # auth: { service_account_json: /secrets/sa.json }481 # auth: { service_account_json: /secrets/sa.json }
367 # Remplacer le point de terminaison aiplatform pour Private Service Connect :482 # Remplacez le point de terminaison aiplatform pour Private Service Connect :
368 # base_url: https://us-east5-aiplatform.p.googleapis.com483 # base_url: https://us-east5-aiplatform.p.googleapis.com
369```484```
370 485
371Un bloc `auth` vide utilise les identifiants par défaut d'application : `GOOGLE_APPLICATION_CREDENTIALS`, métadonnées GCE ou Workload Identity GKE. Les fichiers de clé JSON de compte de service sont pris en charge mais déconseillés ; utilisez Workload Identity ou attachez un compte de service à l'instance GCE ou Cloud Run.486Un bloc `auth` vide utilise les identifiants par défaut d'application : `GOOGLE_APPLICATION_CREDENTIALS`, métadonnées GCE, ou Workload Identity GKE. Les fichiers de clé JSON de compte de service sont supportés mais déconseillés ; utilisez Workload Identity ou attachez un compte de service à l'instance GCE ou Cloud Run.
372 487
373Définissez `region: global` pour utiliser le [point de terminaison global d'Agent Platform](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations) au lieu d'un point de terminaison régional. Google route ensuite chaque demande vers une région disponible, donc vous ne suivez pas la disponibilité du modèle par région. Définir une région spécifique épingle chaque demande à celle-ci.488Définissez `region: global` pour utiliser le [point de terminaison global pour Google Cloud's Agent Platform](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations) au lieu d'un régional. Google achemine ensuite chaque demande vers une région disponible, donc vous ne suivez pas la disponibilité du modèle par région. Définir une région spécifique épingle chaque demande à elle.
374 489
375| Configuration | Comment |490| Configuration | Comment |
376| - | - |491| - | - |
377| Permissions IAM | Accordez au compte de service de la passerelle `roles/aiplatform.user` sur le projet, ou un rôle personnalisé avec `aiplatform.endpoints.predict`. Activez l'API Agent Platform (`aiplatform.googleapis.com`). |492| Permissions IAM | Accordez au compte de service de la passerelle `roles/aiplatform.user` sur le projet, ou un rôle personnalisé avec `aiplatform.endpoints.predict`. Activez l'API Google Cloud's Agent Platform (`aiplatform.googleapis.com`). |
378| Accès au modèle | Dans Model Garden, activez les modèles Claude pour votre projet. Ils publient vers des régions spécifiques ; vérifiez la fiche du modèle pour les régions prises en charge. |493| Accès au modèle | Dans Model Garden, activez les modèles Claude pour votre projet. Ils publient vers des régions spécifiques ; vérifiez la fiche du modèle pour les régions supportées. |
379| GKE (Workload Identity) | Liez un compte de service GCP au compte de service Kubernetes de la passerelle et annotez le KSA avec `iam.gke.io/gcp-service-account: claude-gateway@<proj>.iam.gserviceaccount.com`. `auth: {}` le récupère. |494| GKE (Workload Identity) | Liez un compte de service GCP au compte de service Kubernetes de la passerelle et annotez le KSA avec `iam.gke.io/gcp-service-account: claude-gateway@<proj>.iam.gserviceaccount.com`. `auth: {}` le récupère. |
380| Cloud Run / GCE | Définissez le compte de service du service sur un avec `roles/aiplatform.user`. `auth: {}` le récupère. |495| Cloud Run / GCE | Définissez le compte de service du service sur un avec `roles/aiplatform.user`. `auth: {}` le récupère. |
381| N'importe où ailleurs | `auth: { service_account_json: /secrets/sa.json }`, le chemin vers un fichier de clé JSON monté en tant que secret. Le champ prend un chemin de fichier, pas le contenu de la clé, donc aucune expansion `${file:…}` n'est impliquée. |496| N'importe où ailleurs | `auth: { service_account_json: /secrets/sa.json }`, le chemin vers un fichier de clé JSON monté en tant que secret. Le champ prend un chemin de fichier, pas le contenu de la clé, donc aucune expansion `${file:…}` n'est impliquée. |
384 Microsoft Foundry499 Microsoft Foundry
385</h4>500</h4>
386 501
387Pour le déploiement Foundry côté client, voir [Claude Code sur Microsoft Foundry](/docs/fr/microsoft-foundry). L'upstream côté passerelle :502Pour le déploiement côté client de Microsoft Foundry, voir [Claude Code on Microsoft Foundry](/docs/fr/microsoft-foundry). L'upstream côté passerelle :
388 503
389```yaml theme={null}504```yaml theme={null}
390upstreams:505upstreams:
396 # api_key: ${FOUNDRY_API_KEY}511 # api_key: ${FOUNDRY_API_KEY}
397```512```
398 513
399`use_azure_ad: true` résout via `DefaultAzureCredential` : Managed Identity sur AKS, ACI ou App Service ; l'Azure CLI ; ou les identifiants d'environnement. Les clés API fonctionnent mais sont à l'échelle du projet et ne pivotent pas automatiquement. Le point de terminaison de Foundry est dérivé de `resource:` ; définissez le `base_url` optionnel pour le remplacer pour les clouds souverains tels que Azure Government.514`use_azure_ad: true` résout via `DefaultAzureCredential` : Managed Identity sur AKS, ACI, ou App Service ; l'Azure CLI ; ou les identifiants d'environnement. Les clés API fonctionnent mais sont au niveau du projet et ne tournent pas automatiquement. Le point de terminaison de Microsoft Foundry est dérivé de `resource:` ; définissez le `base_url` optionnel pour le remplacer pour les clouds souverains tels qu'Azure Government.
400 515
401| Configuration | Comment |516| Configuration | Comment |
402| - | - |517| - | - |
403| RBAC | Accordez à l'identité de la passerelle `Azure AI User` ou `Cognitive Services User` sur la ressource Foundry |518| RBAC | Accordez à l'identité de la passerelle `Azure AI User` ou `Cognitive Services User` sur la ressource Microsoft Foundry |
404| Déploiements | Foundry utilise les noms de déploiement choisis par l'administrateur, pas les IDs de modèle canoniques. Ajoutez un bloc [`models:`](#models) mappant chaque ID canonique à votre nom de déploiement. |519| Déploiements | Microsoft Foundry utilise les noms de déploiement choisis par l'administrateur, pas les ID de modèle canoniques. Ajoutez un bloc [`models:`](#models) mappant chaque ID canonique à votre nom de déploiement. |
405| AKS (workload identity) | Fédérez une identité gérée affectée par l'utilisateur avec le émetteur OIDC du cluster et liez-la au compte de service de la passerelle. `use_azure_ad: true` le récupère via `WorkloadIdentityCredential`. |520| AKS (workload identity) | Fédérez une identité gérée attribuée par l'utilisateur avec l'émetteur OIDC du cluster et liez-la au compte de service de la passerelle. `use_azure_ad: true` la récupère via `WorkloadIdentityCredential`. |
406| ACI / App Service | Activez l'identité gérée affectée par le système ou l'utilisateur sur la ressource. `use_azure_ad: true` le récupère. |521| ACI / App Service | Activez l'identité gérée attribuée par le système ou l'utilisateur sur la ressource. `use_azure_ad: true` la récupère. |
407| N'importe où ailleurs | `auth: { api_key: "${FOUNDRY_API_KEY}" }`. Citez `${…}` à l'intérieur de `{ }`. |522| N'importe où ailleurs | `auth: { api_key: "${FOUNDRY_API_KEY}" }`. Citez `${…}` à l'intérieur de `{ }`. |
408 523
409<h4 id="static-headers-on-upstream-requests">524<h4 id="static-headers-on-upstream-requests">
410 En-têtes statiques sur les demandes d'upstream525 En-têtes statiques sur les demandes upstream
411</h4>526</h4>
412 527
413Pour ajouter des en-têtes fixes aux demandes que la passerelle envoie à un upstream, définissez `headers:` sur cet upstream. Utilisez-le lorsqu'un proxy que vous exécutez devant le fournisseur route ou attribue le trafic par un en-tête.528Pour ajouter des en-têtes fixes aux demandes que la passerelle envoie à un upstream, définissez `headers:` sur cet upstream. Utilisez-le lorsqu'un proxy que vous exécutez devant le fournisseur achemine ou attribue le trafic par un en-tête.
414 529
415`headers:` nécessite Claude Code v2.1.277 ou ultérieur sur le serveur de la passerelle. Une passerelle antérieure refuse de démarrer lorsqu'elle trouve la clé. Mettez à niveau chaque réplique avant d'ajouter la clé, et supprimez la clé avant de revenir à une version antérieure.530`headers:` nécessite Claude Code v2.1.277 ou ultérieur sur le serveur de la passerelle. Une passerelle antérieure refuse de démarrer lorsqu'elle trouve la clé. Mettez à niveau chaque réplique avant d'ajouter la clé, et supprimez la clé avant de revenir à une version antérieure.
416 531
417Les en-têtes vont au serveur que `base_url` nomme, ou au point de terminaison propre du fournisseur lorsque `base_url` n'est pas défini. Le fournisseur les reçoit également sauf si votre proxy les supprime.532Les en-têtes vont au serveur que `base_url` nomme, ou au point de terminaison propre du fournisseur lorsque `base_url` n'est pas défini. Le fournisseur les reçoit également sauf si votre proxy les supprime.
418 533
419Cet exemple atteint un upstream `provider: vertex` via un proxy à `upstream-proxy.internal.example.com`. Il définit l'en-tête `x-source` que le proxy lit, et envoie un jeton de la variable d'environnement `PROXY_TOKEN` en tant que `x-proxy-token` :534Cet exemple atteint un upstream `provider: vertex` via un proxy à `upstream-proxy.internal.example.com`. Il définit l'en-tête `x-source` que le proxy lit, et envoie un jeton de la variable d'environnement `PROXY_TOKEN` comme `x-proxy-token` :
420 535
421```yaml theme={null}536```yaml theme={null}
422upstreams:537upstreams:
430 x-proxy-token: ${PROXY_TOKEN}545 x-proxy-token: ${PROXY_TOKEN}
431```546```
432 547
433Les valeurs sont du texte ASCII imprimable sans espace à chaque extrémité. Citez un nombre, `true` ou `false` pour que YAML le lise comme du texte.548Les valeurs sont du texte ASCII imprimable sans espace à chaque extrémité. Citez un nombre, `true`, ou `false` pour que YAML le lise comme texte.
434 549
435Pour garder un secret hors du fichier de configuration, utilisez [l'expansion de secret](#secret-expansion) pour charger la valeur à partir d'une variable d'environnement avec `${VAR}` ou à partir d'un fichier avec `${file:/path}`. Un `${VAR}` qui se résout à une valeur vide arrête le démarrage de la passerelle.550Pour garder un secret hors du fichier de configuration, utilisez l'[expansion de secret](#secret-expansion) pour charger la valeur à partir d'une variable d'environnement avec `${VAR}` ou à partir d'un fichier avec `${file:/path}`. Un `${VAR}` qui se résout en une valeur vide arrête le démarrage de la passerelle.
436 551
437`headers:` fonctionne sur chaque fournisseur, et chaque upstream envoie uniquement le sien.552`headers:` fonctionne sur chaque fournisseur, et chaque upstream envoie uniquement le sien.
438 553
442| - | - |557| - | - |
443| `/v1/messages`, streaming ou non, et `/v1/messages/count_tokens` | Oui |558| `/v1/messages`, streaming ou non, et `/v1/messages/count_tokens` | Oui |
444| Une demande qui a basculé à partir d'un autre upstream | Oui, uniquement le `headers:` de cet upstream |559| Une demande qui a basculé à partir d'un autre upstream | Oui, uniquement le `headers:` de cet upstream |
445| L'appel `CountTokens` d'Amazon Bedrock pour une demande que le client a abandonnée | Non |560| Appel `CountTokens` d'Amazon Bedrock pour une demande que le client a abandonnée | Non |
446| L'échange de jeton Workload Identity Federation | Non |561| L'échange de jeton Workload Identity Federation | Non |
447 562
448Sur un upstream Amazon Bedrock ou Claude Platform on AWS qui signe les demandes avec AWS SigV4, ces en-têtes font partie de la signature, donc votre proxy doit les transmettre inchangés.563Sur un upstream Amazon Bedrock ou Claude Platform on AWS qui signe les demandes avec AWS SigV4, ces en-têtes font partie de la signature, donc votre proxy doit les transmettre inchangés.
450Si vous utilisez un nom que la passerelle réserve, elle refuse de démarrer, et l'erreur de démarrage nomme l'en-tête. Les noms réservés incluent :565Si vous utilisez un nom que la passerelle réserve, elle refuse de démarrer, et l'erreur de démarrage nomme l'en-tête. Les noms réservés incluent :
451 566
452* `authorization` et `x-api-key`567* `authorization` et `x-api-key`
453* `host`, `content-type` et `user-agent`568* `host`, `content-type`, et `user-agent`
454* Tout nom commençant par `anthropic-`, `x-goog-`, `x-amz-` ou `x-amzn-`569* N'importe quel nom commençant par `anthropic-`, `x-goog-`, `x-amz-`, ou `x-amzn-`
455 570
456<h4 id="multiple-upstreams">571<h4 id="multiple-upstreams">
457 Plusieurs upstreams572 Plusieurs upstreams
459 574
460Le même fournisseur peut apparaître plus d'une fois avec un `name:` distinct. Cela couvre différentes régions, différents comptes via différentes chaînes d'identifiants, débit provisionné par rapport à la demande, et basculement inter-fournisseur.575Le même fournisseur peut apparaître plus d'une fois avec un `name:` distinct. Cela couvre différentes régions, différents comptes via différentes chaînes d'identifiants, débit provisionné par rapport à la demande, et basculement inter-fournisseur.
461 576
462La passerelle essaie les upstreams dans l'ordre. `5xx`, `429`, `401`, `403`, `404`, timeouts et point de terminaison manquant (`501`) basculent ; les autres `4xx` ne le font pas.577La passerelle essaie les upstreams dans l'ordre. `5xx`, `429`, `401`, `403`, `404`, timeouts, et point de terminaison manquant (`501`) basculer ; les autres `4xx` ne le font pas.
463 578
464`429` est la capacité par upstream, donc l'épuisement du débit provisionné (PT) bascule vers la demande. Si vous définissez [`forward_user_identity: true`](#per-user-identity-headers-for-a-proxy-you-run) sur un upstream, un `429` à une demande qui portait l'e-mail du développeur est un déni par utilisateur au lieu et ne bascule pas.579`429` est par capacité upstream, donc l'épuisement du débit provisionné (PT) bascule vers la demande. Si vous définissez [`forward_user_identity: true`](#per-user-identity-headers-for-a-proxy-you-run) sur un upstream, un `429` à une demande qui portait l'e-mail du développeur est un refus par utilisateur à la place et ne bascule pas.
465 580
466Chaque demande commence au premier upstream. Une demande atteint un upstream ultérieur uniquement lorsque chaque upstream devant lui a échoué ou ne sert pas le modèle demandé.581Chaque demande commence au premier upstream. Une demande atteint un upstream ultérieur uniquement lorsque chaque upstream devant lui a échoué ou ne sert pas le modèle demandé.
467 582
468La passerelle ne garde aucun enregistrement des upstreams défaillants, donc pendant qu'un upstream est en panne, chaque demande qui l'atteint l'essaie toujours et attend qu'il échoue avant de passer au suivant.583La passerelle ne garde aucun enregistrement des upstreams échoués, donc pendant qu'un upstream est en panne, chaque demande qui l'atteint l'essaie toujours et attend qu'il échoue avant de passer au suivant.
469 584
470Pour un upstream Anthropic API, [`timeouts.upstream_ttfb_ms`](#http-tuning) limite l'attente sur un upstream en panne. Ce paramètre ne s'applique pas aux autres fournisseurs, où la passerelle attend jusqu'à une heure pour qu'un upstream commence à répondre.585Pour un upstream Anthropic API, [`timeouts.upstream_ttfb_ms`](#http-tuning) limite l'attente sur un upstream en panne. Ce paramètre ne s'applique pas aux autres fournisseurs, où la passerelle attend jusqu'à une heure pour qu'un upstream commence à répondre.
471 586
472`404` est la disponibilité du modèle par upstream, donc un upstream qui n'a pas activé un modèle ne bloque pas un upstream ultérieur qui le sert. Un upstream qui ne peut pas résoudre le modèle demandé est ignoré sans un aller-retour réseau.587`404` est par disponibilité du modèle upstream, donc un upstream qui n'a pas activé un modèle ne bloque pas un upstream ultérieur qui le sert. Un upstream qui ne peut pas résoudre le modèle demandé est ignoré sans un aller-retour réseau.
473 588
474Cet exemple route une allocation Bedrock de débit provisionné en premier, déborde vers la demande et un deuxième compte, et revient à l'API Anthropic en dernier :589Cet exemple achemine une allocation de débit provisionné Amazon Bedrock en premier, déborde vers la demande et un deuxième compte, et revient à l'API Anthropic en dernier :
475 590
476```yaml theme={null}591```yaml theme={null}
477upstreams:592upstreams:
478 # Principal : débit provisionné dans votre région d'accueil.593 # Primaire : débit provisionné dans votre région d'accueil.
479 - name: bedrock-pt594 - name: bedrock-pt
480 provider: bedrock595 provider: bedrock
481 region: us-east-1596 region: us-east-1
485 provider: bedrock600 provider: bedrock
486 region: us-west-2601 region: us-west-2
487 auth: {}602 auth: {}
488 # Compte différent : une allocation Bedrock séparée via des identifiants de rôle assumé.603 # Compte différent : une allocation Bedrock séparée via des clés statiques.
489 - name: bedrock-acct2604 - name: bedrock-acct2
490 provider: bedrock605 provider: bedrock
491 region: us-east-1606 region: us-east-1
498 auth:613 auth:
499 api_key: ${ANTHROPIC_API_KEY}614 api_key: ${ANTHROPIC_API_KEY}
500 615
501# Les IDs de modèle par upstream sont indexés sur le `name:` de l'upstream.616# Les ID de modèle par upstream sont clés sur le `name:` de l'upstream.
502models:617models:
503 - id: claude-opus-4-8618 - id: claude-opus-4-8
504 label: Claude Opus 4.8619 label: Claude Opus 4.8
511 626
512| Levier | Comment |627| Levier | Comment |
513| - | - |628| - | - |
514| Différentes régions | Un upstream Bedrock par région, chacun avec sa propre `region:`. Avec [`auto_include_builtin_models: true`](#models) les profils d'inférence inter-régions routent automatiquement ; pour les déploiements épinglés à la région, utilisez un bloc `models:`. |629| Régions différentes | Un upstream Amazon Bedrock par région, chacun avec sa propre `region:`. Avec [`auto_include_builtin_models: true`](#models), les profils d'inférence inter-régions acheminent automatiquement ; pour les déploiements épinglés à la région, utilisez un bloc `models:`. |
515| Différents comptes | Un upstream Bedrock par compte, chacun avec ses propres identifiants dans `auth:`. La chaîne par défaut (`auth: {}`) utilise l'identité du pod ; pour un deuxième compte, définissez des identifiants explicites ou un jeton porteur. |630| Comptes différents | Un upstream Amazon Bedrock par compte. La chaîne par défaut (`auth: {}`) utilise l'identité du pod ; pour un deuxième compte, ajoutez [`assume_role`](#bedrock-in-another-aws-account) pour l'atteindre avec des identifiants de courte durée, ou définissez des identifiants explicites ou un jeton porteur dans `auth:`. |
516| Débit provisionné | Mappez le modèle à l'ARN de débit provisionné dans `models:` pour le nom de cet upstream. Les autres upstreams gardent l'ID à la demande, donc la capacité PT est épuisée avant de basculer. |631| Débit provisionné | Mappez le modèle à l'ARN de débit provisionné dans `models:` pour le nom de cet upstream. Les autres upstreams gardent l'ID à la demande, donc la capacité PT est épuisée avant de basculer. |
517| Points de terminaison VPC / FIPS | Définissez `base_url:` sur l'upstream vers votre URL de point de terminaison VPC ou FIPS |632| Points de terminaison VPC / FIPS | Définissez `base_url:` sur l'upstream à votre URL de point de terminaison VPC ou FIPS |
518| Routage limité au modèle | Seul un modèle personnalisé `id`, celui qui n'est pas un modèle Claude intégré, ignore les upstreams absents de sa carte `upstream_model:`. La passerelle essaie les modèles intégrés sur chaque upstream dans l'ordre et utilise l'ID par défaut du fournisseur où la carte n'a pas d'entrée, donc pour les modèles intégrés la carte change quel ID un upstream reçoit plutôt que s'il est essayé ; un upstream qui rejette l'ID suit les mêmes [règles de basculement](#upstreams) que toute autre erreur d'upstream. |633| Acheminement limité au modèle | Uniquement un id de modèle personnalisé, un qui n'est pas un nom de modèle Claude intégré, ignore les upstreams absents de sa carte `upstream_model:`. La passerelle essaie les modèles intégrés sur chaque upstream dans l'ordre et utilise l'ID par défaut du fournisseur où la carte n'a pas d'entrée, donc pour les modèles intégrés, la carte change quel ID un upstream reçoit plutôt que s'il est essayé ; un upstream qui rejette l'ID suit les mêmes [règles de basculement](#upstreams) que n'importe quelle autre erreur upstream. |
519 634
520Le basculement entre les fournisseurs cloud ou vers l'API Anthropic directe change quel accord, géographie et autres conditions régissent la demande.635Le basculement entre les fournisseurs cloud, ou vers l'API Anthropic directe, change quel accord, géographie, et autres conditions régissent la demande.
521 636
522Le CLI applique le même contrôle de fonctionnalité aux passerelles indépendamment de quel upstream sert une demande donnée, donc le basculement n'envoie pas un champ de corps qu'un upstream rejetterait.637Le CLI applique la même limitation de fonctionnalité aux passerelles indépendamment de quel upstream sert une demande donnée, donc le basculement n'envoie pas un champ de corps qu'un upstream rejetterait.
523 638
524<h2 id="optional-sections">639<h2 id="optional-sections">
525 Sections optionnelles640 Sections optionnelles
529 `admin`644 `admin`
530</h3>645</h3>
531 646
532Optionnel. Active `/v1/organizations/spend_limits`, qui reflète l'API Admin publique d'Anthropic, et l'application des limites de dépenses par développeur sur `/v1/messages`. Consultez [Limites de dépenses](/docs/fr/claude-apps-gateway-spend-limits) pour savoir comment les plafonds sont définis et appliqués ; cette section couvre les clés `gateway.yaml` qui activent la fonctionnalité et l'ajustent.647Optionnel. Active `/v1/organizations/spend_limits`, qui reflète l'API Admin publique d'Anthropic, et l'application des dépenses par développeur sur `/v1/messages`. Consultez [Limites de dépenses](/docs/fr/claude-apps-gateway-spend-limits) pour savoir comment les plafonds sont définis et appliqués ; cette section couvre les clés `gateway.yaml` qui activent la fonctionnalité et l'ajustent.
533 648
534```yaml theme={null}649```yaml theme={null}
535admin:650admin:
551| - | - | - |666| - | - | - |
552| `write_keys` | Non | Tableau de `{id, key}`. Une `x-api-key` correspondant à l'une de ces clés peut lister, définir et supprimer les limites de dépenses. Les valeurs de clé doivent comporter au moins 32 caractères ; les `id` doivent être uniques dans `read_keys` et `write_keys`. |667| `write_keys` | Non | Tableau de `{id, key}`. Une `x-api-key` correspondant à l'une de ces clés peut lister, définir et supprimer les limites de dépenses. Les valeurs de clé doivent comporter au moins 32 caractères ; les `id` doivent être uniques dans `read_keys` et `write_keys`. |
553| `read_keys` | Non | Tableau de `{id, key}`. Lecture seule : tous les points de terminaison `GET`, y compris la liste des plafonds, la récupération d'un par ID, et la lecture de [`/effective`](/docs/fr/claude-apps-gateway-spend-limits#%2Feffective) et [`/audit`](/docs/fr/claude-apps-gateway-spend-limits#%2Faudit). |668| `read_keys` | Non | Tableau de `{id, key}`. Lecture seule : tous les points de terminaison `GET`, y compris la liste des plafonds, la récupération d'un par ID, et la lecture de [`/effective`](/docs/fr/claude-apps-gateway-spend-limits#%2Feffective) et [`/audit`](/docs/fr/claude-apps-gateway-spend-limits#%2Faudit). |
554| `admin_groups` | Non | Noms de groupes IdP. Un JWT de passerelle dont la revendication `groups` inclut l'un de ces groupes dispose d'un accès admin complet, lecture et écriture, et effectue un audit en tant que `oidc:<sub>`. Utilisez ceci pour les administrateurs humains ; utilisez les clés API pour les machines. Une entrée vide dans cette liste arrête la passerelle au démarrage. Consultez [Valeurs de correspondance qui arrêtent la passerelle au démarrage](#matcher-values-that-stop-the-gateway-at-boot). |669| `admin_groups` | Non | Noms de groupes IdP. Un JWT de passerelle dont la revendication `groups` inclut l'un de ces groupes dispose d'un accès admin complet, lecture et écriture, et audite en tant que `oidc:<sub>`. Utilisez ceci pour les administrateurs humains ; utilisez les clés API pour les machines. Une entrée vide dans cette liste arrête la passerelle au démarrage. Consultez [Valeurs de correspondance qui arrêtent la passerelle au démarrage](#matcher-values-that-stop-the-gateway-at-boot). |
555| `blocked_message` | Non | Ajouté textuellement à l'erreur `429 billing_error` qu'un développeur bloqué voit. Écrivez l'instruction complète, comme une URL ou un canal Slack. Lorsqu'il n'est pas défini, la passerelle envoie uniquement le message par défaut. Consultez [Comment l'application fonctionne](/docs/fr/claude-apps-gateway-spend-limits#how-enforcement-works). |670| `blocked_message` | Non | Ajouté textuellement à l'erreur `429 billing_error` qu'un développeur bloqué voit. Écrivez l'instruction complète, comme une URL ou un canal Slack. Lorsqu'il n'est pas défini, la passerelle envoie uniquement le message par défaut. Consultez [Comment l'application fonctionne](/docs/fr/claude-apps-gateway-spend-limits#how-enforcement-works). |
556| `audit_retention_days` | Non | Par défaut `365`. Les lignes `admin_audit` plus anciennes sont supprimées. |671| `audit_retention_days` | Non | Par défaut `365`. Les lignes `admin_audit` plus anciennes sont supprimées. |
557| `spend_retention_months` | Non | Par défaut `13`. Les lignes du compteur `spend` plus anciennes que cela sont supprimées. La valeur par défaut conserve une année complète plus le mois partiel actuel pour les rapports d'une année sur l'autre. |672| `spend_retention_months` | Non | Par défaut `13`. Les lignes du compteur `spend` plus anciennes que cela sont supprimées. La valeur par défaut conserve une année complète plus le mois partiel actuel pour les rapports d'une année sur l'autre. |
558| `identity_retention_days` | Non | Par défaut `90`. TTL de dernière consultation pour les lignes `principal_emails`, qui contiennent l'e-mail, le nom d'affichage et les groupes de chaque développeur (données personnelles). Délibérément plus court que la rétention des dépenses afin qu'une identité déprovisionée expire tandis que ses compteurs de dépenses anonymes restent. |673| `identity_retention_days` | Non | Par défaut `90`. TTL de dernière consultation pour les lignes `principal_emails`, qui contiennent l'e-mail, le nom d'affichage et les groupes de chaque développeur (PII). Délibérément plus court que la rétention des dépenses afin qu'une identité déprovisionée expire tandis que ses compteurs de dépenses anonymes restent. |
559| `group_limit_mode` | Non | `min` (par défaut) ou `max`. Lorsqu'un développeur se trouve dans plusieurs groupes avec des plafonds, `min` applique le plus restrictif et `max` le moins restrictif. Utilisé à la fois par l'application et par `/effective`. |674| `group_limit_mode` | Non | `min` (par défaut) ou `max`. Lorsqu'un développeur se trouve dans plusieurs groupes avec des plafonds, `min` applique le plus restrictif et `max` le moins restrictif. Utilisé à la fois par l'application et par `/effective`. |
560 675
561<h3 id="enforcement">676<h3 id="enforcement">
566 681
567| Champ | Requis | Description |682| Champ | Requis | Description |
568| - | - | - |683| - | - | - |
569| `fail_closed_on_error` | Non | Par défaut `false`. L'application des limites de dépenses échoue de manière permissive en cas de panne Postgres, afin que l'inférence reste opérationnelle. Définissez `true` pour échouer de manière restrictive : les développeurs au-delà du plafond sont bloqués, mais tout le monde l'est aussi si le magasin est inaccessible. Nécessite un bloc [`admin:`](#admin) : l'application des limites de dépenses ne s'exécute que lorsque `admin` est configuré, et la passerelle refuse de démarrer si vous définissez ceci à `true` sans bloc. |684| `fail_closed_on_error` | Non | Par défaut `false`. L'application des dépenses échoue ouvertement en cas de panne Postgres, afin que l'inférence reste active. Définissez `true` pour échouer fermé : les développeurs au-delà du plafond sont bloqués, mais tout le monde l'est aussi si le magasin est inaccessible. Nécessite un bloc [`admin:`](#admin) : l'application des dépenses ne s'exécute que lorsque `admin` est configuré, et la passerelle refuse de démarrer si vous définissez ceci `true` sans un. |
570 685
571<h3 id="pricing">686<h3 id="pricing">
572 `pricing`687 `pricing`
592| Champ | Requis | Description |707| Champ | Requis | Description |
593| - | - | - |708| - | - | - |
594| `multiplier` | Non | Par défaut `1`. Le compteur multiplie chaque montant mesuré par ceci, qu'il soit au prix catalogue ou remplacé, donc `0.85` facture 85 % du prix. Doit être supérieur à 0 et au maximum 10, et une valeur supérieure à 1 est une [majoration](#mark-prices-up). |709| `multiplier` | Non | Par défaut `1`. Le compteur multiplie chaque montant mesuré par ceci, qu'il soit au prix catalogue ou remplacé, donc `0.85` facture 85 % du prix. Doit être supérieur à 0 et au maximum 10, et une valeur supérieure à 1 est une [majoration](#mark-prices-up). |
595| `overrides` | Non | Lignes de `{upstream, model, input, output, cache_read, cache_write}` en USD par million de jetons. Les quatre tarifs sont obligatoires. Chacun doit être supérieur à 0 et au maximum 10 000. |710| `overrides` | Non | Lignes de `{upstream, model, input, output, cache_read, cache_write}` en USD par million de jetons. Les quatre tarifs sont requis. Chacun doit être supérieur à 0 et au maximum 10000. |
596 711
597Comment le compteur correspond à une ligne de remplacement :712Comment le compteur correspond à une ligne de remplacement :
598 713
599* Une ligne remplace le prix catalogue pour les demandes que `upstream`, un [`upstreams[].name`](#upstreams), traite pour `model`. Cela inclut le tarif [mode rapide](/docs/fr/fast-mode#understand-the-cost-tradeoff) plus élevé, afin que les demandes en mode rapide et standard soient mesurées aux mêmes quatre tarifs.714* Une ligne remplace le prix catalogue pour les demandes que `upstream`, un [`upstreams[].name`](#upstreams), traite pour `model`. Cela inclut le tarif [mode rapide](/docs/fr/fast-mode#understand-the-cost-tradeoff) plus élevé, donc les demandes en mode rapide et standard sont mesurées aux mêmes quatre tarifs.
600* Un ID intégré tel que `claude-sonnet-4-6`, correspondant comme [`models[].id`](#models), couvre chaque forme datée, forme régionale Amazon Bedrock, ou forme Google Cloud Agent Platform que le compteur évalue comme ce modèle. Toute autre chaîne, comme un alias ou un ARN de profil d'inférence, correspond à l'ID que le client a envoyé ou à la chaîne envoyée en amont, insensible à la casse.715* Un ID intégré tel que `claude-sonnet-4-6`, correspondant comme [`models[].id`](#models), couvre chaque forme datée, forme Amazon Bedrock régionale, ou forme Google Cloud Agent Platform que le compteur évalue comme ce modèle. Toute autre chaîne, comme un alias ou un ARN de profil d'inférence, correspond à l'ID que le client a envoyé ou à la chaîne envoyée en amont, insensible à la casse.
601* Lorsque les lignes se chevauchent, le compteur choisit la ligne la plus spécifique plutôt que la première ligne : une ligne dont `model` est la chaîne de modèle exacte envoyée en amont, puis une ligne correspondant à l'ID exact que le client a envoyé, puis une ligne nommant le modèle intégré.716* Lorsque les lignes se chevauchent, le compteur choisit la ligne la plus spécifique plutôt que la première ligne : une ligne dont `model` est la chaîne de modèle exacte envoyée en amont, puis une ligne correspondant à l'ID exact que le client a envoyé, puis une ligne nommant le modèle intégré.
602* Un nom d'amont inconnu échoue au démarrage, tout comme deux lignes pour un amont qui nomment le même modèle, y compris deux orthographes d'un modèle intégré. La passerelle avertit au démarrage à propos d'une ligne qu'aucun modèle demandable ne peut utiliser.717* Un nom d'upstream inconnu échoue au démarrage, tout comme deux lignes pour un upstream qui nomment le même modèle, y compris deux orthographes d'un modèle intégré. La passerelle avertit au démarrage à propos d'une ligne qu'aucun modèle demandable ne peut utiliser.
603* Les demandes de recherche Web restent au prix catalogue de \$0,01 ; le multiplicateur s'y applique toujours.718* Les demandes de recherche Web restent au prix catalogue de \$0,01 ; le multiplicateur s'y applique toujours.
604 719
605Pour les tarifs par région, donnez à chaque région son propre amont nommé et une ligne par amont.720Pour les tarifs par région, donnez à chaque région son propre upstream nommé et une ligne par upstream.
606 721
607<h4 id="mark-prices-up">722<h4 id="mark-prices-up">
608 Majorer les prix723 Majorer les prix
627 Envoyer les tarifs aux clients connectés742 Envoyer les tarifs aux clients connectés
628</h4>743</h4>
629 744
630Avec v2.1.268 ou ultérieur sur le serveur de passerelle, la passerelle place également les tarifs de `pricing` dans les politiques [`managed`](#managed) qu'elle sert, en tant que paramètre géré [`modelPricing`](/docs/fr/settings-reference#modelpricing). Les développeurs correspondant à une politique voient alors les tarifs `pricing` pour le premier amont qui sert chaque ID de modèle dans `/usage`, la ligne d'état et OpenTelemetry. Un développeur qui ne correspond à aucune politique ne reçoit aucun paramètre géré, afin que ses chiffres restent au prix catalogue. Les clients appliquent le paramètre dans Claude Code v2.1.242 ou ultérieur.745Avec v2.1.268 ou ultérieur sur le serveur de passerelle, la passerelle place également les tarifs de `pricing` dans les politiques [`managed`](#managed) qu'elle sert, en tant que paramètre géré [`modelPricing`](/docs/fr/settings-reference#modelpricing). Les développeurs correspondant à une politique voient alors les tarifs `pricing` pour le premier upstream qui sert chaque ID de modèle dans `/usage`, la ligne d'état et OpenTelemetry. Un développeur qui ne correspond à aucune politique ne reçoit aucun paramètre géré, afin que ses chiffres restent au prix catalogue. Les clients appliquent le paramètre dans Claude Code v2.1.242 ou ultérieur.
631 746
632* Ce que la passerelle ajoute : à moins que le bloc `cli` d'une politique ne définisse déjà `modelPricing`, la passerelle ajoute le `multiplier` et, pour chaque ID de modèle qu'un client peut demander, la ligne de remplacement du premier amont qui sert cet ID. Un tarif que seul un amont de basculement facture reste sur la passerelle.747* Ce que la passerelle ajoute : à moins que le bloc `cli` d'une politique ne définisse déjà `modelPricing`, la passerelle ajoute le `multiplier` et, pour chaque ID de modèle qu'un client peut demander, la ligne de remplacement du premier upstream qui sert cet ID. Un tarif que seul un upstream de basculement facture reste sur la passerelle.
633* Exclure une politique : définissez `modelPricing` à `{}` dans le bloc `cli` de cette politique, et ses développeurs restent au prix catalogue.748* Exclure une politique : définissez `modelPricing` à `{}` dans le bloc `cli` de cette politique, et ses développeurs restent au prix catalogue.
634* Conserver les tarifs propres d'une politique : une politique dont le bloc `cli` définit `modelPricing` avec son propre `multiplier` ou `overrides` conserve ce `modelPricing` entièrement, et la passerelle n'ajoute aucun de ses propres tarifs à celui-ci.749* Conserver les tarifs propres d'une politique : une politique dont le bloc `cli` définit `modelPricing` avec son propre `multiplier` ou `overrides` conserve ce `modelPricing` entièrement, et la passerelle n'ajoute aucun de ses propres tarifs.
635 750
636<h3 id="models">751<h3 id="models">
637 `models`752 `models`
638</h3>753</h3>
639 754
640Le bloc `models` est une liste de modèles optionnelle organisée par l'administrateur, servie à `/v1/models` et utilisée pour traduire les ID de modèles par amont. Elle est obligatoire pour les régions Amazon Bedrock non-US, les ARN de débit provisionné Amazon Bedrock et les noms de déploiement Microsoft Foundry.755Le bloc `models` est une liste de modèles optionnelle organisée par l'administrateur, servie à `/v1/models` et utilisée pour traduire les ID de modèles par upstream. Elle est requise pour les régions Amazon Bedrock non-US, les ARN de débit provisionné Amazon Bedrock et les noms de déploiement Microsoft Foundry.
641 756
642```yaml theme={null}757```yaml theme={null}
643auto_include_builtin_models: true # false: expose only the list below758auto_include_builtin_models: true # false: expose only the list below
651 foundry: your-opus-deployment-name766 foundry: your-opus-deployment-name
652```767```
653 768
654Chaque clé sous `upstream_model` doit correspondre au `name` d'un amont configuré, qui par défaut est le nom du fournisseur. Une clé qui ne correspond à aucun amont échoue au démarrage, donc omettez les lignes pour les fournisseurs que vous n'utilisez pas.769Chaque clé sous `upstream_model` doit correspondre au `name` d'un upstream configuré, qui par défaut est le nom du fournisseur. Une clé qui ne correspond à aucun upstream échoue au démarrage, donc omettez les lignes pour les fournisseurs que vous n'utilisez pas.
655 770
656<h3 id="managed">771<h3 id="managed">
657 `managed`772 `managed`
658</h3>773</h3>
659 774
660Le bloc `managed` définit les politiques d'accès basées sur les rôles basées sur les groupes IdP ou le domaine de messagerie. Les politiques sont évaluées dans l'ordre ; la première correspondance est sélectionnée, puis fusionnée sur la base de capture-tout `match: {}`. Elles sont servies par utilisateur à `GET /managed/settings` avec mise en cache ETag/304.775Le bloc `managed` définit les politiques d'accès basées sur les rôles basées sur les groupes IdP ou le domaine de courrier électronique. Les politiques sont évaluées dans l'ordre ; la première correspondance est sélectionnée, puis fusionnée sur la base de capture-tout `match: {}`. Elles sont servies par utilisateur à `GET /managed/settings` avec mise en cache ETag/304.
661 776
662```yaml theme={null}777```yaml theme={null}
663managed:778managed:
675 790
676Une capture-tout `match: {}`, conventionnellement listée en dernier, est traitée comme une couche de base. Chaque autre politique hérite de toute clé qu'elle ne définit pas de la capture-tout, afin que les entrées par rôle n'aient besoin de lister que ce qui diffère de la valeur par défaut de l'organisation. Les règles de fusion dépendent du type de clé :791Une capture-tout `match: {}`, conventionnellement listée en dernier, est traitée comme une couche de base. Chaque autre politique hérite de toute clé qu'elle ne définit pas de la capture-tout, afin que les entrées par rôle n'aient besoin de lister que ce qui diffère de la valeur par défaut de l'organisation. Les règles de fusion dépendent du type de clé :
677 792
678* **Listes d'autorisation** : `availableModels` et `permissions.allow`. La liste d'une politique spécifique remplace entièrement celle de la base.793* **Listes d'autorisation** : `availableModels` et `permissions.allow`. La liste d'une politique spécifique remplace complètement celle de la base.
679* **Listes de refus et tableaux de hooks** : `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces` et chaque tableau d'événement de type `hooks`. Ceux-ci prennent l'union de la base et de la politique, afin qu'un refus à l'échelle de l'organisation ou un hook d'audit ne soit pas accidentellement supprimé par un remplacement par rôle.794* **Listes de refus et tableaux de hooks** : `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces` et chaque tableau d'événement de type `hooks`. Ceux-ci prennent l'union de la base et de la politique, afin qu'un hook de refus ou d'audit à l'échelle de l'organisation ne soit pas accidentellement supprimé par un remplacement par rôle.
680* **Clés de type enregistrement** : `env`, `modelOverrides` et `skillOverrides`. Ceux-ci fusionnent superficiellement, afin qu'un bloc `env` par rôle remplace les clés qu'il définit et hérite du reste de la base.795* **Clés de type enregistrement** : `env`, `modelOverrides` et `skillOverrides`. Ceux-ci fusionnent superficiellement, afin qu'un bloc `env` par rôle remplace les clés qu'il définit et hérite du reste de la base.
681 796
682`availableModels` est également appliqué côté serveur à `/v1/messages`, afin qu'un modèle refusé retourne `400` indépendamment de ce que le client envoie.797`availableModels` est également appliqué côté serveur à `/v1/messages`, afin qu'un modèle refusé retourne `400` indépendamment de ce que le client envoie.
683 798
684La passerelle valide la valeur `model` elle-même avant de relayer une demande, afin qu'une valeur mal formée n'atteigne jamais un amont. Elle rejette la demande avec un `400` dans deux cas :799La passerelle valide la valeur `model` elle-même avant de relayer une demande, afin qu'une valeur mal formée n'atteigne jamais un upstream. Elle rejette la demande avec un `400` dans deux cas :
685 800
686* Lorsque la valeur est manquante ou vide, la passerelle rejette la demande avec le message `model is required`. Cette vérification nécessite une passerelle exécutant Claude Code v2.1.228 ou ultérieur.801* Lorsque la valeur est manquante ou vide, la passerelle rejette la demande avec le message `model is required`. Cette vérification nécessite une passerelle exécutant Claude Code v2.1.228 ou ultérieur.
687* Lorsque la valeur est présente mais n'est pas une chaîne, la passerelle rejette la demande avec le message `model must be a string`. Nécessite une passerelle exécutant Claude Code v2.1.221 ou ultérieur.802* Lorsque la valeur est présente mais n'est pas une chaîne, la passerelle rejette la demande avec le message `model must be a string`. Nécessite une passerelle exécutant Claude Code v2.1.221 ou ultérieur.
698<Note>813<Note>
699 La passerelle ne conserve aucun répertoire d'utilisateurs propre. Elle autorise chaque demande à partir du jeton IdP de l'utilisateur, en lisant l'appartenance au groupe à partir de la revendication `groups` du jeton et en évaluant les politiques par rapport à celui-ci. Il n'y a pas de liste à énumérer et aucun compte à pré-créer, et donc aucun point de terminaison SCIM, car il n'y a rien pour que SCIM se synchronise.814 La passerelle ne conserve aucun répertoire d'utilisateurs propre. Elle autorise chaque demande à partir du jeton IdP de l'utilisateur, en lisant l'appartenance au groupe à partir de la revendication `groups` du jeton et en évaluant les politiques par rapport à celui-ci. Il n'y a pas de liste à énumérer et aucun compte à pré-créer, et donc aucun point de terminaison SCIM, car il n'y a rien pour que SCIM se synchronise.
700 815
701 Exécutez la gestion du cycle de vie des utilisateurs et des groupes à la source de vérité, qui est le provisionnement SCIM natif de votre IdP ou une plateforme de gouvernance des identités dédiée. L'appartenance et la déprovision gouvernées là-bas s'écoulent dans la passerelle automatiquement via le jeton. Si vous voulez le provisionnement SCIM des comptes Claude eux-mêmes, c'est une capacité de [Claude for Enterprise](/docs/fr/admin-setup).816 Exécutez la gestion du cycle de vie des utilisateurs et des groupes à la source de vérité, qui est l'approvisionnement SCIM natif de votre IdP ou une plateforme de gouvernance des identités dédiée. L'appartenance et la déprovision gouvernées là-bas s'écoulent dans la passerelle automatiquement via le jeton. Si vous voulez l'approvisionnement SCIM des comptes Claude eux-mêmes, c'est une capacité [Claude for Enterprise](/docs/fr/admin-setup).
702 817
703 Deux horloges de propagation s'appliquent :818 Deux horloges de propagation s'appliquent :
704 819
705 * **Contenu de la politique** : modifier une politique et redéployer atteint les clients connectés lors de leur prochain sondage de paramètres gérés, dans l'heure, à l'exception des [modifications qui s'appliquent uniquement au prochain lancement](/docs/fr/server-managed-settings#fetch-and-caching-behavior)820 * **Contenu de la politique** : modifier une politique et redéployer atteint les clients connectés lors de leur prochain sondage de paramètres gérés, dans une heure, à part les [modifications qui s'appliquent uniquement au prochain lancement](/docs/fr/server-managed-settings#fetch-and-caching-behavior)
706 * **Appartenance au groupe** : modifier l'appartenance au groupe d'un utilisateur change la politique qui le correspond. Cela prend effet lors de la prochaine réémission de session, ce qui signifie le prochain renouvellement silencieux, limité par `session.ttl_hours`.821 * **Appartenance au groupe** : modifier l'appartenance au groupe d'un utilisateur change la politique qui le correspond. Cela prend effet lors de la prochaine remise en session, ce qui signifie le prochain renouvellement silencieux, limité par `session.ttl_hours`.
707</Note>822</Note>
708 823
709<h4 id="matcher-values-that-stop-the-gateway-at-boot">824<h4 id="matcher-values-that-stop-the-gateway-at-boot">
715* Une liste `groups` vide830* Une liste `groups` vide
716* Une entrée vide dans `groups` ou dans `admin_groups`831* Une entrée vide dans `groups` ou dans `admin_groups`
717* Un `email_domain` vide832* Un `email_domain` vide
718* Un `email_domain` qui contient `@`, un espace ou une virgule. La passerelle supprime la valeur et enlève un `@` initial avant cette vérification. Écrivez un domaine nu, comme `example.com`.833* Un `email_domain` qui contient `@`, un espace ou une virgule. La passerelle supprime la valeur et supprime un `@` initial avant cette vérification. Écrivez un domaine nu, comme `example.com`.
719 834
720Avant v2.1.232, la passerelle démarrait avec ces valeurs. Chaque valeur avait cet effet :835Avant v2.1.232, la passerelle a démarré avec ces valeurs. Chaque valeur avait cet effet :
721 836
722* Un `email_domain` vide : la passerelle a ignoré la vérification du domaine, afin qu'une politique avec un `email_domain` vide et aucune liste `groups` corresponde à chaque utilisateur authentifié837* Un `email_domain` vide : la passerelle a ignoré la vérification du domaine, afin qu'une politique avec un `email_domain` vide et aucune liste `groups` corresponde à chaque utilisateur authentifié
723* Une liste `groups` vide : la politique ne correspondait à personne838* Une liste `groups` vide : la politique ne correspondait à personne
775| `permissions.disableBypassPermissionsMode` | CLI | Définissez à `disable` pour bloquer [`bypassPermissions`](/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode), le mode qui ignore les invites de permission, et l'indicateur `--dangerously-skip-permissions` |890| `permissions.disableBypassPermissionsMode` | CLI | Définissez à `disable` pour bloquer [`bypassPermissions`](/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode), le mode qui ignore les invites de permission, et l'indicateur `--dangerously-skip-permissions` |
776| `allowManagedPermissionRulesOnly` | CLI | Lorsque `true`, les paramètres gérés deviennent la seule source de paramètres des règles de permission. L'entrée [`allowManagedPermissionRulesOnly`](/docs/fr/settings-reference#allowmanagedpermissionrulesonly) liste chaque source que Claude Code ignore ensuite. |891| `allowManagedPermissionRulesOnly` | CLI | Lorsque `true`, les paramètres gérés deviennent la seule source de paramètres des règles de permission. L'entrée [`allowManagedPermissionRulesOnly`](/docs/fr/settings-reference#allowmanagedpermissionrulesonly) liste chaque source que Claude Code ignore ensuite. |
777| `env` | CLI | Variables d'environnement fusionnées dans le processus CLI. Utilisez pour la télémétrie, la mise à jour automatique et les remplacements de noms de modèles. |892| `env` | CLI | Variables d'environnement fusionnées dans le processus CLI. Utilisez pour la télémétrie, la mise à jour automatique et les remplacements de noms de modèles. |
778| `hooks` | CLI | [Hooks](/docs/fr/hooks) à l'échelle de l'organisation |893| `hooks` | CLI | Hooks à l'échelle de l'organisation [hooks](/docs/fr/hooks) |
779| `managedMcpServers` | CLI | Serveurs MCP distants [fournis à chaque développeur correspondant](/docs/fr/managed-mcp#provide-servers-through-managed-settings) aux côtés des serveurs qu'ils ajoutent eux-mêmes, `http` et `sse` uniquement. Consultez [Serveurs MCP dans une politique](#mcp-servers-in-a-policy). Nécessite Claude Code v2.1.259 ou ultérieur sur le serveur de passerelle et sur les clients. Les clients antérieurs ignorent la clé. |894| `managedMcpServers` | CLI | Serveurs MCP distants [fournis à chaque développeur correspondant](/docs/fr/managed-mcp#provide-servers-through-managed-settings) aux côtés des serveurs qu'ils ajoutent eux-mêmes, `http` et `sse` uniquement. Consultez [Serveurs MCP dans une politique](#mcp-servers-in-a-policy). Nécessite Claude Code v2.1.259 ou ultérieur sur le serveur de passerelle et sur les clients. Les clients antérieurs ignorent la clé. |
780 895
781Parce que ces paramètres arrivent sur le réseau, le CLI affiche à chaque développeur une boîte de dialogue d'approbation de sécurité avant d'appliquer les paramètres listés ci-dessous :896Parce que ces paramètres arrivent sur le réseau, le CLI affiche à chaque développeur une boîte de dialogue d'approbation de sécurité avant d'appliquer les paramètres listés ci-dessous :
783* `hooks`898* `hooks`
784* Variables `env` qui nécessitent l'approbation du développeur, comme les variables de proxy et d'URL de base899* Variables `env` qui nécessitent l'approbation du développeur, comme les variables de proxy et d'URL de base
785* Paramètres d'exécution de shell comme `apiKeyHelper` et `statusLine`900* Paramètres d'exécution de shell comme `apiKeyHelper` et `statusLine`
786* Les paramètres binaires du bac à sable `sandbox.bwrapPath`, `sandbox.socatPath` et `sandbox.ripgrep`901* Les paramètres binaires du sandbox `sandbox.bwrapPath`, `sandbox.socatPath` et `sandbox.ripgrep`
787* Les paramètres du bac à sable qui interceptent le trafic, injectent des identifiants ou affaiblissent l'isolation, comme `sandbox.network.tlsTerminate` et les paramètres du port proxy. [Boîtes de dialogue d'approbation de sécurité](/docs/fr/server-managed-settings#security-approval-dialogs) les liste tous.902* Les paramètres du sandbox qui interceptent le trafic, injectent des identifiants ou affaiblissent l'isolation, comme `sandbox.network.tlsTerminate` et les paramètres du port proxy. [Boîtes de dialogue d'approbation de sécurité](/docs/fr/server-managed-settings#security-approval-dialogs) les liste tous.
788 903
789[Mémoire d'approbation](/docs/fr/server-managed-settings#approval-memory) couvre la durée d'une approbation et quand la boîte de dialogue apparaît à nouveau.904[Mémoire d'approbation](/docs/fr/server-managed-settings#approval-memory) couvre la durée d'une approbation et quand la boîte de dialogue réapparaît.
790 905
791Claude Code applique certaines variables `env` livrées sans afficher la boîte de dialogue d'approbation au développeur, comme les paramètres de sélection de modèle et les limites numériques. D'autres variables livrées peuvent nécessiter l'approbation du développeur avant de prendre effet ; une valeur de proxy, d'URL de base ou `OTEL_EXPORTER_OTLP_ENDPOINT` non vide le fait toujours. Lorsqu'une variable livrée a besoin d'approbation, la boîte de dialogue la nomme.906Claude Code applique certaines variables `env` livrées sans afficher la boîte de dialogue d'approbation au développeur, comme les paramètres de sélection de modèle et les limites numériques. D'autres variables livrées peuvent nécessiter l'approbation du développeur avant de prendre effet ; une valeur de proxy, d'URL de base ou `OTEL_EXPORTER_OTLP_ENDPOINT` non vide le fait toujours. Lorsqu'une variable livrée a besoin d'approbation, la boîte de dialogue la nomme.
792 907
793[Variables d'environnement et boîte de dialogue d'approbation](/docs/fr/server-managed-settings#environment-variables-and-the-approval-dialog) a les détails, y compris quatre bascules de confidentialité dont la valeur livrée décide si elles ont besoin d'approbation. Avant v2.1.218, Claude Code appliquait moins de variables sans demander au développeur, afin que plus de variables livrées déclenchent la boîte de dialogue.908[Variables d'environnement et boîte de dialogue d'approbation](/docs/fr/server-managed-settings#environment-variables-and-the-approval-dialog) a les détails, y compris quatre bascules de confidentialité dont la valeur livrée décide si elles ont besoin d'approbation. Avant v2.1.218, Claude Code appliquait moins de variables sans demander au développeur, afin que plus de variables livrées déclenchent la boîte de dialogue.
794 909
795La configuration de [télémétrie](#telemetry) de la passerelle pousse `OTEL_EXPORTER_OTLP_ENDPOINT`, afin que la définition de `telemetry.forward_to` déclenche la boîte de dialogue sur chaque client interactif. La boîte de dialogue protège la machine du développeur d'une passerelle compromise ou hostile, pas l'organisation du développeur.910La configuration [télémétrie](#telemetry) de la passerelle pousse `OTEL_EXPORTER_OTLP_ENDPOINT`, afin que la définition de `telemetry.forward_to` déclenche la boîte de dialogue sur chaque client interactif. La boîte de dialogue protège la machine du développeur d'une passerelle compromise ou hostile, pas l'organisation du développeur.
796 911
797Une exécution non interactive avec l'indicateur `-p` ne peut pas afficher la boîte de dialogue. Elle applique les paramètres poussés pour cette exécution uniquement et ne les enregistre pas comme approuvés, afin que la prochaine session interactive du développeur affiche toujours la boîte de dialogue pour eux. Avant v2.1.207, une exécution non interactive enregistrait les paramètres comme approuvés et aucune session interactive ultérieure n'affichait la boîte de dialogue pour eux.912Une [exécution non interactive](/docs/fr/server-managed-settings#security-approval-dialogs), comme `claude -p` ou une session Agent SDK, ne peut pas afficher la boîte de dialogue. Elle applique les paramètres poussés pour cette exécution uniquement et ne les enregistre pas comme approuvés, afin que la prochaine session interactive du développeur affiche toujours la boîte de dialogue pour eux. Avant v2.1.207, une exécution non interactive enregistrait les paramètres comme approuvés et aucune session interactive ultérieure n'affichait la boîte de dialogue pour eux.
798 913
799Si un développeur refuse, Claude Code quitte cette session plutôt que d'appliquer la politique. Lorsque vous poussez un nouveau hook, ou toute variable env qui déclenche la boîte de dialogue, à une politique large, Claude Code affiche donc la boîte de dialogue à chaque développeur correspondant. Il affiche la boîte de dialogue dans une session en cours lors du prochain sondage horaire, et sinon au prochain démarrage du développeur.914Si un développeur refuse, Claude Code quitte cette session plutôt que d'appliquer la politique. Lorsque vous poussez un nouveau hook, ou toute variable env qui déclenche la boîte de dialogue, à une politique large, chaque développeur correspondant voit donc la boîte de dialogue dans ses sessions interactives. Une session interactive en cours l'affiche lors du prochain sondage horaire, et sinon elle apparaît au prochain démarrage interactif du développeur.
800 915
801La clé `cli` s'appelait `settings` dans les versions antérieures. Cette orthographe est toujours acceptée comme alias, mais les nouveaux déploiements doivent utiliser `cli`.916La clé `cli` s'appelait `settings` dans les versions antérieures. Cette orthographe est toujours acceptée comme alias, mais les nouveaux déploiements doivent utiliser `cli`.
802 917
808 923
809La passerelle vérifie chaque entrée au démarrage avec [les mêmes règles que Claude Code applique sur le client](/docs/fr/managed-mcp#what-an-entry-can-contain), et si une entrée échoue une vérification, la passerelle refuse de démarrer et nomme l'entrée.924La passerelle vérifie chaque entrée au démarrage avec [les mêmes règles que Claude Code applique sur le client](/docs/fr/managed-mcp#what-an-entry-can-contain), et si une entrée échoue une vérification, la passerelle refuse de démarrer et nomme l'entrée.
810 925
811Si vous écrivez une référence `${VAR}` dans `gateway.yaml`, la passerelle la résout à partir de son environnement au démarrage via [expansion de secret](#secret-expansion) avant d'exécuter les vérifications d'entrée, afin que chaque client correspondant reçoive la valeur littérale et puisse la lire. L'[orientation d'en-tête pour les serveurs fournis](/docs/fr/managed-mcp#provide-servers-through-managed-settings) s'applique à la valeur étendue.926Si vous écrivez une référence `${VAR}` dans `gateway.yaml`, la passerelle la résout à partir de son environnement au démarrage via [expansion de secret](#secret-expansion) avant d'exécuter les vérifications d'entrée, afin que chaque client correspondant reçoive la valeur littérale et puisse la lire. L'[orientation d'en-tête pour les serveurs fournis](/docs/fr/managed-mcp#provide-servers-through-managed-settings) s'applique à la valeur développée.
812 927
813La passerelle rejette l'orthographe `.mcp.json` `mcpServers` dans un bloc `cli`, et son erreur de démarrage nomme `managedMcpServers` comme clé à utiliser. Avant v2.1.259, la passerelle rejetait toute définition de serveur MCP dans un bloc `cli`.928La passerelle rejette l'orthographe `.mcp.json` `mcpServers` dans un bloc `cli`, et son erreur de démarrage nomme `managedMcpServers` comme clé à utiliser. Avant v2.1.259, la passerelle rejetait toute définition de serveur MCP dans un bloc `cli`.
814 929
829* La liste d'autorisation de sortie, de `sandbox.network.allowedDomains`. Si vous définissez `coworkEgressAllowedHosts` dans le bloc `desktop` de la politique, la passerelle utilise cette valeur à la place de la liste dérivée944* La liste d'autorisation de sortie, de `sandbox.network.allowedDomains`. Si vous définissez `coworkEgressAllowedHosts` dans le bloc `desktop` de la politique, la passerelle utilise cette valeur à la place de la liste dérivée
830* Un point de terminaison OTLP qui pointe vers la passerelle elle-même, et les attributs d'identité de l'utilisateur connecté. La passerelle relaie les exportations qu'elle reçoit à ce point de terminaison vers vos destinations `forward_to`. Elle inclut le point de terminaison et les attributs lorsque vous définissez à la fois [`telemetry.forward_to`](#telemetry) et `listen.public_url`.945* Un point de terminaison OTLP qui pointe vers la passerelle elle-même, et les attributs d'identité de l'utilisateur connecté. La passerelle relaie les exportations qu'elle reçoit à ce point de terminaison vers vos destinations `forward_to`. Elle inclut le point de terminaison et les attributs lorsque vous définissez à la fois [`telemetry.forward_to`](#telemetry) et `listen.public_url`.
831 946
832 Claude Desktop exporte chaque signal avec un encodage : `http/protobuf`, ou `http/json` lorsque vous définissez `OTEL_EXPORTER_OTLP_PROTOCOL` ou l'un de ses variantes par signal à `http/json` dans l'`env` de la politique. Avant Claude Code v2.1.261 sur le serveur de passerelle, la réponse définissait `http/json` indépendamment, afin qu'un collecteur qui accepte uniquement protobuf rejette les exportations de Claude Desktop947 Claude Desktop exporte chaque signal avec un encodage : `http/protobuf`, ou `http/json` lorsque vous définissez `OTEL_EXPORTER_OTLP_PROTOCOL` ou l'une de ses variantes par signal à `http/json` dans le `env` de la politique. Avant Claude Code v2.1.261 sur le serveur de passerelle, la réponse définissait `http/json` indépendamment, afin qu'un collecteur qui accepte uniquement protobuf rejette les exportations de Claude Desktop
833 948
834Pour définir `disabledBuiltinTools`, `coworkEgressAllowedHosts` ou le paramètre `managedMcpServers` propre de Claude Desktop dans le bloc `desktop` d'une politique, vous avez besoin de Claude Code v2.1.232 ou ultérieur sur le serveur de passerelle. Le `managedMcpServers` de Claude Desktop prend une valeur de tableau plutôt qu'un objet.949Pour définir `disabledBuiltinTools`, `coworkEgressAllowedHosts` ou le paramètre `managedMcpServers` propre de Claude Desktop dans le bloc `desktop` d'une politique, vous avez besoin de Claude Code v2.1.232 ou ultérieur sur le serveur de passerelle. Le `managedMcpServers` de Claude Desktop prend une valeur de tableau plutôt qu'un objet.
835 950
836La passerelle omet les clés sans équivalent Claude Desktop, comme `hooks` et les règles de permission limitées comme `Bash(npm *)`, de la réponse d'amorçage.951La passerelle omet les clés sans équivalent Claude Desktop, comme `hooks` et les règles de permission limitées comme `Bash(npm *)`, de la réponse d'amorçage.
837 952
838Ajoutez le bloc `desktop` optionnel aux côtés de `cli` pour définir les paramètres Claude Desktop directement. Écrivez les paramètres de la [référence de configuration gérée](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop en tant que noms de clés plats. Laissez de côté les clés que Claude Desktop lit uniquement à partir de MDM ou de fichiers locaux, comme `bootstrapUrl` ; la passerelle les rejette au démarrage. Avant v2.1.232, la passerelle acceptait une liste fixe de 11 clés de porte de fonctionnalité, comme `chatTabEnabled` et `disableAutoUpdates`, et rejetait chaque autre clé au démarrage. Avant v2.1.227, la passerelle rejetait également `chatTabEnabled` et `chatAdvancedFileAnalysisEnabled` au démarrage.953Ajoutez le bloc `desktop` optionnel aux côtés de `cli` pour définir les paramètres de Claude Desktop directement. Écrivez les paramètres de la [référence de configuration gérée](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop en tant que noms de clés plats. Laissez de côté les clés que Claude Desktop lit uniquement à partir de fichiers MDM ou locaux, comme `bootstrapUrl` ; la passerelle les rejette au démarrage. Avant v2.1.232, la passerelle acceptait une liste fixe de 11 clés de porte de fonctionnalité, comme `chatTabEnabled` et `disableAutoUpdates`, et rejetait chaque autre clé au démarrage. Avant v2.1.227, la passerelle rejetait également `chatTabEnabled` et `chatAdvancedFileAnalysisEnabled` au démarrage.
839 954
840```yaml theme={null}955```yaml theme={null}
841managed:956managed:
860 975
861La passerelle valide un bloc `desktop` par rapport au schéma fourni avec sa version installée, comme elle le fait pour le bloc `cli`. Pour livrer un paramètre introduit par une version plus récente de Claude Desktop, mettez à niveau la passerelle en premier. Par exemple, `userPluginMarketplacesEnabled` et `userPluginUploadsEnabled` nécessitent Claude Code v2.1.260 ou ultérieur sur le serveur de passerelle et Claude Desktop 1.37937.0 ou ultérieur sur les machines des membres.976La passerelle valide un bloc `desktop` par rapport au schéma fourni avec sa version installée, comme elle le fait pour le bloc `cli`. Pour livrer un paramètre introduit par une version plus récente de Claude Desktop, mettez à niveau la passerelle en premier. Par exemple, `userPluginMarketplacesEnabled` et `userPluginUploadsEnabled` nécessitent Claude Code v2.1.260 ou ultérieur sur le serveur de passerelle et Claude Desktop 1.37937.0 ou ultérieur sur les machines des membres.
862 977
863Si vous définissez `orgPluginSettings` dans le bloc `desktop` d'une politique, la passerelle le sert sous la forme de tableau que Claude Desktop 1.15200.0 et ultérieur lit. Les anciens bureaux ignorent le tableau et n'appliquent aucune politique d'outil de plugin, afin de mettre à jour les membres vers 1.15200.0 ou ultérieur avant de vous y fier.978`blockReadsOutsideWorkingDirectories`, `disableBypassPermissionsMode`, `configRecheckIntervalMinutes` et `sshClientPath` nécessitent Claude Code v2.1.281 ou ultérieur sur le serveur de passerelle. Tout comme la valeur `required` de `microsoftAuthBroker` et le champ `continuousAccessEvaluation` d'une entrée Microsoft 365 `managedMcpServers`. Les versions de Claude Desktop qui précèdent la valeur `required` la lisent comme `disabled`, donc définissez `required` uniquement après que chaque membre's Claude Desktop la supporte. La [référence de configuration gérée](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop liste la version qui lit en premier chaque clé.
979
980Si vous définissez `orgPluginSettings` dans le bloc `desktop` d'une politique, la passerelle la sert sous la forme de tableau que Claude Desktop 1.15200.0 et ultérieur lit. Les anciens bureaux ignorent le tableau et n'appliquent aucune politique d'outil de plugin, donc mettez à jour les membres à 1.15200.0 ou ultérieur avant de vous y fier.
864 981
865La passerelle remplit les clés qu'un bloc `desktop` d'une politique ne définit pas à partir du bloc `desktop` de la capture-tout `match: {}`, de la même manière qu'elle remplit le bloc `cli` d'une politique à partir de la base. Si vous définissez `disabledBuiltinTools` ou `builtinToolPolicy` à la fois dans la base et dans une politique par rôle, la passerelle conserve la restriction de la base :982La passerelle remplit les clés qu'un bloc `desktop` d'une politique ne définit pas à partir du bloc `desktop` de la capture-tout `match: {}`, de la même manière qu'elle remplit le bloc `cli` d'une politique à partir de la base. Si vous définissez `disabledBuiltinTools` ou `builtinToolPolicy` à la fois dans la base et dans une politique par rôle, la passerelle conserve la restriction de la base :
866 983
875 Précédence avec d'autres sources gérées992 Précédence avec d'autres sources gérées
876</h4>993</h4>
877 994
878Si un appareil a également une politique livrée par MDM ou un `managed-settings.json` local, les paramètres livrés par la passerelle sont prioritaires. [Précédence au sein du niveau géré](/docs/fr/managed-settings#precedence-within-the-managed-tier) sur la page des paramètres gérés dit quand les sources locales s'appliquent, et a les [clés que Claude Code lit à partir de chaque source admin](/docs/fr/managed-settings#keys-read-from-every-admin-source) indépendamment de la source qu'il a sélectionnée, comme les clés de verrouillage du bac à sable, `forceRemoteSettingsRefresh` et la fusion `env` par variable. Un [`policyHelper`](/docs/fr/settings-reference#policyhelper) configuré dans un profil MDM ou le fichier de paramètres gérés s'exécute uniquement lorsque la passerelle ne livre aucun paramètre ; l'entrée dit ce que sa sortie remplace.995Si un appareil a également une politique livrée par MDM ou un `managed-settings.json` local, les paramètres livrés par la passerelle sont classés en premier. [Précédence au sein du niveau géré](/docs/fr/managed-settings#precedence-within-the-managed-tier) sur la page des paramètres gérés dit quand les sources locales s'appliquent, et a les [clés que Claude Code lit à partir de chaque source admin](/docs/fr/managed-settings#keys-read-from-every-admin-source) indépendamment de la source qu'il a sélectionnée, comme les clés de verrouillage du sandbox, `forceRemoteSettingsRefresh` et le `env` par variable fusionner. Un [`policyHelper`](/docs/fr/settings-reference#policyhelper) configuré dans un profil MDM ou le fichier de paramètres gérés s'exécute uniquement lorsque la passerelle ne livre aucun paramètre ; l'entrée dit ce que sa sortie remplace.
879 996
880Les hôtes d'intégration comme [Claude Desktop](/docs/fr/desktop) peuvent fournir une politique via l'option SDK `managedSettings`. [Paramètres parents à partir d'hôtes d'intégration](/docs/fr/managed-settings#parent-settings-from-embedding-hosts) dit quand Claude Code l'applique, et [Restreindre les paramètres parents](/docs/fr/claude-apps-gateway#restrict-parent-settings) liste les paramètres de direction d'autorisation qui s'appliquent toujours sans les verrous `allowManaged*Only`.997Les hôtes d'intégration tels que [Claude Desktop](/docs/fr/desktop) peuvent fournir une politique via l'option SDK `managedSettings`. [Paramètres parents à partir d'hôtes d'intégration](/docs/fr/managed-settings#parent-settings-from-embedding-hosts) dit quand Claude Code l'applique, et [Restreindre les paramètres parents](/docs/fr/claude-apps-gateway#restrict-parent-settings) liste les paramètres de direction d'autorisation qui s'appliquent toujours sans les verrous `allowManaged*Only`.
881 998
882Les politiques de passerelle s'appliquent à chaque invocation de Claude Code sur la machine, y compris les exécutions non interactives `claude -p` et les sessions générées par le SDK Agent. Si la passerelle est inaccessible au démarrage, les sessions connectées quittent avec une erreur plutôt que de s'exécuter sans leur politique.999Les politiques de passerelle s'appliquent à chaque invocation de Claude Code sur la machine, y compris les exécutions non interactives `claude -p` et les sessions générées par le SDK Agent. Si la passerelle est inaccessible au démarrage, les sessions connectées quittent avec une erreur plutôt que de s'exécuter sans leur politique.
883 1000
887 1004
888Le CLI envoie des métriques, des journaux et, lorsqu'ils sont activés, des traces à la passerelle, qui les relaie textuellement à chaque destination configurée. Les exportations utilisent OpenTelemetry Protocol (OTLP) sur HTTP. Pour ignorer le relais et faire exporter les sessions directement à votre collecteur, [nommez le collecteur dans une politique](#export-directly-to-your-collector). Consultez [Surveillance de l'utilisation](/docs/fr/monitoring-usage) pour les métriques et événements que le CLI émet.1005Le CLI envoie des métriques, des journaux et, lorsqu'ils sont activés, des traces à la passerelle, qui les relaie textuellement à chaque destination configurée. Les exportations utilisent OpenTelemetry Protocol (OTLP) sur HTTP. Pour ignorer le relais et faire exporter les sessions directement à votre collecteur, [nommez le collecteur dans une politique](#export-directly-to-your-collector). Consultez [Surveillance de l'utilisation](/docs/fr/monitoring-usage) pour les métriques et événements que le CLI émet.
889 1006
890Le CLI horodate chaque exportation avec l'identité de l'utilisateur authentifié, lue à partir du JWT émis par la passerelle : les attributs `user.id`, `user.email` et `user.groups`. L'attribution du coût et de l'utilisation par développeur fonctionne donc sans configuration côté développeur.1007Dans les sessions connectées via `/login`, le CLI horodate chaque exportation avec l'identité de l'utilisateur authentifié, lue à partir du JWT émis par la passerelle : les attributs `user.id`, `user.email` et `user.groups`. L'attribution des coûts et de l'utilisation par développeur fonctionne donc sans configuration côté développeur.
891 1008
892[Claude Desktop](#claude-desktop-overlay) et les sessions Cowork connectées via la passerelle horodatent leur télémétrie avec `user.email` et `user.groups` aux côtés de `enduser.id`, afin que vous puissiez couvrir l'utilisation du terminal, du bureau et de Cowork avec une requête sur `user.email` ou `user.groups`. `user.groups` est la liste des groupes IdP séparée par des virgules.1009[Claude Desktop](#claude-desktop-overlay) et les sessions Cowork connectées via la passerelle horodatent leur télémétrie avec `user.email` et `user.groups` aux côtés de `enduser.id`, afin que vous puissiez couvrir l'utilisation du terminal, du bureau et de Cowork avec une requête sur `user.email` ou `user.groups`. `user.groups` est la liste des groupes IdP séparés par des virgules.
893 1010
894La télémétrie du bureau et de Cowork porte également `enduser.sub`, la revendication `sub` que votre fournisseur d'identité émet pour l'utilisateur, qui reste la même lorsque l'e-mail d'un utilisateur change. Les sessions de terminal horodatent la même valeur sous `user.id`, afin qu'une requête qui correspond à `enduser.sub` par rapport à `user.id` du terminal couvre l'utilisation du terminal, du bureau et de Cowork d'un utilisateur ensemble. Sur les exportations du bureau et de Cowork, `user.id` est un identifiant anonyme, pas le sujet.1011La télémétrie du bureau et de Cowork porte également `enduser.sub`, la revendication `sub` que votre fournisseur d'identité émet pour l'utilisateur, qui reste la même lorsque l'e-mail d'un utilisateur change. Les sessions de terminal horodatent la même valeur sous `user.id`, afin qu'une requête qui correspond à `enduser.sub` par rapport au terminal `user.id` couvre l'utilisation du terminal, du bureau et de Cowork d'un utilisateur ensemble. Sur les exportations du bureau et de Cowork, `user.id` est un identifiant anonyme, pas le sujet.
895 1012
896Comme toutes les données OpenTelemetry de Claude Code, ces attributs vont uniquement aux destinations que votre organisation configure, jamais à Anthropic.1013Comme toutes les données OpenTelemetry de Claude Code, ces attributs vont uniquement aux destinations que votre organisation configure, jamais à Anthropic.
897 1014
898Si la liste des groupes d'un utilisateur est plus longue que 255 caractères une fois codée en pourcentage, ou si un nom de groupe contient une virgule ou un signe égal, la passerelle laisse `user.groups` hors de la télémétrie du bureau et de Cowork de cet utilisateur plutôt que de la tronquer. Les sessions de terminal de cet utilisateur portent toujours la liste complète.1015Si la liste de groupes d'un utilisateur est plus longue que 255 caractères une fois codée en pourcentage, ou si un nom de groupe contient une virgule ou un signe égal, la passerelle laisse `user.groups` hors de la télémétrie du bureau et de Cowork de cet utilisateur plutôt que de la tronquer. Les sessions de terminal de cet utilisateur portent toujours la liste complète.
899 1016
900La passerelle laisse `enduser.sub` hors quand le sujet est plus long que 255 caractères une fois codé en pourcentage, ou contient un espace, un caractère en dehors de l'ASCII imprimable, ou l'un de `,` `;` `=` `\` `"` `%`. La télémétrie du bureau et de Cowork de cet utilisateur conserve ses autres attributs.1017La passerelle laisse `enduser.sub` hors quand le sujet est plus long que 255 caractères une fois codé en pourcentage, ou contient un espace, un caractère en dehors de l'ASCII imprimable, ou l'un de `,` `;` `=` `\` `"` `%`. La télémétrie du bureau et de Cowork de cet utilisateur conserve ses autres attributs.
901 1018
921<Warning>1038<Warning>
922 Chaque destination opte pour `metrics`, `logs` et `traces` indépendamment, et la valeur par défaut est les métriques uniquement. Les signaux diffèrent en sensibilité :1039 Chaque destination opte pour `metrics`, `logs` et `traces` indépendamment, et la valeur par défaut est les métriques uniquement. Les signaux diffèrent en sensibilité :
923 1040
924 * **Métriques** : compteurs agrégés comme les comptages de jetons, les comptages de demandes et la latence1041 * **Métriques** : compteurs agrégés tels que les comptages de jetons, les comptages de demandes et la latence
925 * **Journaux et traces** : peuvent porter des commandes Bash complètes, des entrées d'outils et des chemins de fichiers, couvrant tout ce que Claude Code fait sur la machine d'un développeur1042 * **Journaux et traces** : peuvent porter des commandes Bash complètes, des entrées d'outils et des chemins de fichiers, couvrant tout ce que Claude Code fait sur la machine d'un développeur
926 1043
927 Activez les journaux et les traces uniquement sur les destinations avec les contrôles d'accès et la politique de rétention que les données justifient.1044 Activez les journaux et les traces uniquement sur les destinations avec les contrôles d'accès et la politique de rétention que les données justifient.
928</Warning>1045</Warning>
929 1046
930Chaque URL `forward_to` doit utiliser `https://`, avec une exception pour un collecteur sur l'interface de bouclage propre de la passerelle :1047Chaque URL `forward_to` doit utiliser `https://`, avec une exception pour un collecteur sur l'interface de bouclage de la passerelle elle-même :
931 1048
932* `http://localhost:<port>` passe la validation de configuration, mais la [garde SSRF](/docs/fr/claude-apps-gateway-deploy#threat-model-summary) bloque chaque exportation avec `ECONNREFUSED_SSRF` à moins que vous ne définissiez `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` dans l'environnement de la passerelle1049* `http://localhost:<port>` passe la validation de configuration, mais le [garde SSRF](/docs/fr/claude-apps-gateway-deploy#threat-model-summary) bloque chaque exportation avec `ECONNREFUSED_SSRF` à moins que vous ne définissiez `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` dans l'environnement de la passerelle
933* `http://127.0.0.1:<port>` ou `http://[::1]:<port>` échoue au démarrage à moins que cette variable ne soit définie1050* `http://127.0.0.1:<port>` ou `http://[::1]:<port>` échoue au démarrage à moins que cette variable ne soit définie
934 1051
935Pour un collecteur en cluster, exposez-le sur HTTPS à sa propre adresse interne, ou exécutez-le en tant que sidecar avec la variable définie.1052Pour un collecteur en cluster, exposez-le sur HTTPS à sa propre adresse interne, ou exécutez-le en tant que sidecar avec la variable définie.
956Les développeurs connectés via `/login` ne peuvent pas rediriger les exportations avec leur propre configuration OTEL :1073Les développeurs connectés via `/login` ne peuvent pas rediriger les exportations avec leur propre configuration OTEL :
957 1074
958* **Variables définies localement** : Claude Code applique les variables poussées au niveau géré, afin que chacune remplace la valeur qu'un développeur définit pour elle localement.1075* **Variables définies localement** : Claude Code applique les variables poussées au niveau géré, afin que chacune remplace la valeur qu'un développeur définit pour elle localement.
959* **Points de terminaison configurés localement** : avec l'exportation OTLP/HTTP activée, le CLI ignore tout point de terminaison configuré localement, que la passerelle ait poussé les variables de télémétrie ou non. Ses exportations vont à la passerelle à moins qu'une politique [nomme votre collecteur comme point de terminaison](#export-directly-to-your-collector).1076* **Points de terminaison configurés localement** : avec l'exportation OTLP/HTTP activée, le CLI ignore tout point de terminaison configuré localement, que la passerelle ait poussé ou non les variables de télémétrie. Ses exportations vont à la passerelle à moins qu'une politique [nomme votre collecteur comme point de terminaison](#export-directly-to-your-collector).
960 1077
961Sans destination `forward_to` pour un signal, la passerelle l'accepte et le rejette. Si les développeurs exportent déjà la télémétrie Claude Code vers l'un de vos collecteurs, ajoutez-le en tant que destination `forward_to`, avec les journaux ou les traces activés s'ils les exportent, afin qu'il continue à recevoir leurs données après qu'ils se connectent. Pour ignorer le relais à la place, [nommez le collecteur dans une politique](#export-directly-to-your-collector).1078Sans destination `forward_to` pour un signal, la passerelle l'accepte et le rejette. Si les développeurs exportent déjà la télémétrie Claude Code vers l'un de vos collecteurs, ajoutez-le en tant que destination `forward_to`, avec les journaux ou les traces activés s'ils les exportent, afin qu'il continue à recevoir leurs données après qu'ils se connectent. Pour ignorer le relais à la place, [nommez le collecteur dans une politique](#export-directly-to-your-collector).
962 1079
963[Les traces](/docs/fr/monitoring-usage#traces-beta) nécessitent également `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` sur chaque client. Définissez-le dans le bloc `env` d'une politique gérée, car la passerelle ne le pousse pas. Les développeurs l'approuvent dans la même [boîte de dialogue d'approbation de sécurité](#managed) que le point de terminaison poussé déclenche déjà.1080[Traces](/docs/fr/monitoring-usage#traces-beta) nécessitent également `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` sur chaque client. Définissez-le dans le bloc `env` d'une politique gérée, car la passerelle ne le pousse pas. Les développeurs l'approuvent dans la même [boîte de dialogue d'approbation de sécurité](#managed) que le point de terminaison poussé déclenche déjà.
964 1081
965Définissez-le à `1` uniquement dans les politiques dont vous voulez que les groupes soient tracés. Une politique qui ne le définit pas hérite de la valeur de votre politique de capture-tout `match: {}` si cette politique en définit une, selon les [règles de fusion](#managed). Pour empêcher les clients d'un groupe d'envoyer des traces même lorsqu'un développeur définit la variable localement, définissez-la à `0` dans la politique de ce groupe.1082Définissez-le à `1` uniquement dans les politiques dont vous voulez que les groupes soient tracés. Une politique qui ne le définit pas hérite de la valeur de votre politique de capture-tout `match: {}` si cette politique en définit une, selon les [règles de fusion](#managed). Pour empêcher les clients d'un groupe d'envoyer des traces même lorsqu'un développeur définit la variable localement, définissez-la à `0` dans la politique de ce groupe.
966 1083
967Les encodages OTLP protobuf et JSON sont tous deux relayés, et tout backend compatible OpenTelemetry fonctionne comme destination.1084Les encodages OTLP protobuf et JSON sont relayés, et tout backend compatible OpenTelemetry fonctionne comme destination.
968 1085
969<h4 id="add-your-own-labels">1086<h4 id="add-your-own-labels">
970 Ajouter vos propres étiquettes1087 Ajouter vos propres étiquettes
971</h4>1088</h4>
972 1089
973Pour mettre des étiquettes fixes comme `service.namespace` ou `deployment.environment.name` sur la télémétrie des sessions connectées via la passerelle, définissez `telemetry.resource_attributes`. Chaque étiquette est un attribut de ressource OpenTelemetry, et chaque destination reçoit les mêmes étiquettes.1090Pour placer des étiquettes fixes comme `service.namespace` ou `deployment.environment.name` sur la télémétrie des sessions connectées via la passerelle, définissez `telemetry.resource_attributes`. Chaque étiquette est un attribut de ressource OpenTelemetry, et chaque destination reçoit les mêmes étiquettes.
974 1091
975Les sessions obtiennent les étiquettes uniquement lorsque vous définissez également `telemetry.forward_to` et `listen.public_url`. Cet exemple ajoute deux étiquettes :1092Les sessions obtiennent les étiquettes uniquement lorsque vous définissez également `telemetry.forward_to` et `listen.public_url`. Cet exemple ajoute deux étiquettes :
976 1093
991* Les valeurs sont au maximum 255 caractères tels que la passerelle les compte après codage en pourcentage, donc `/`, `:` et `@` comptent chacun comme trois1108* Les valeurs sont au maximum 255 caractères tels que la passerelle les compte après codage en pourcentage, donc `/`, `:` et `@` comptent chacun comme trois
992* Les valeurs sont du texte, donc citez un nombre, `true` ou `false`1109* Les valeurs sont du texte, donc citez un nombre, `true` ou `false`
993 1110
994Vous avez besoin de Claude Code v2.1.281 ou ultérieur sur le serveur de passerelle pour définir `telemetry.resource_attributes`. Une passerelle antérieure refuse de démarrer lorsqu'elle trouve la clé. Mettez à niveau chaque réplica avant d'ajouter la clé, et supprimez la clé avant de revenir en arrière vers une version antérieure.1111Vous avez besoin de Claude Code v2.1.281 ou ultérieur sur le serveur de passerelle pour définir `telemetry.resource_attributes`. Une passerelle antérieure refuse de démarrer lorsqu'elle trouve la clé. Mettez à niveau chaque réplica avant d'ajouter la clé, et supprimez la clé avant de revenir à une version antérieure.
995 1112
996Les sessions de terminal connectées via `/login` reçoivent les étiquettes en tant que `OTEL_RESOURCE_ATTRIBUTES`, poussées avec les autres [variables de télémétrie](#telemetry). Si vous définissez `OTEL_RESOURCE_ATTRIBUTES` dans le bloc `env` d'une politique, les sessions de terminal que cette politique correspond obtiennent cette valeur à la place des étiquettes. Claude Desktop reçoit les étiquettes de la passerelle aux côtés de `user.email` et des autres attributs d'identité.1113Les sessions de terminal connectées via `/login` reçoivent les étiquettes en tant que `OTEL_RESOURCE_ATTRIBUTES`, poussées avec les autres [variables de télémétrie](#telemetry). Si vous définissez `OTEL_RESOURCE_ATTRIBUTES` dans le bloc `env` d'une politique, les sessions de terminal que cette politique correspond obtiennent cette valeur à la place des étiquettes. Claude Desktop reçoit les étiquettes de la passerelle aux côtés de `user.email` et des autres attributs d'identité.
997 1114
1001 Exporter directement vers votre collecteur1118 Exporter directement vers votre collecteur
1002</h4>1119</h4>
1003 1120
1004Pour que les sessions connectées via `/login` envoient la télémétrie directement à votre collecteur au lieu de passer par le relais, définissez `OTEL_EXPORTER_OTLP_ENDPOINT` à l'URL de base `https://` du collecteur dans le bloc `env` d'une [politique gérée](#managed). Claude Code ajoute `/v1/metrics`, `/v1/logs` ou `/v1/traces` à l'URL que vous définissez, comme `https://otel-collector.example.com:4318`, et exporte chaque signal là-bas sur OTLP/HTTP. Nécessite Claude Code v2.1.265 ou ultérieur sur la machine de chaque développeur. Les clients antérieurs exportent via le relais.1121Pour faire envoyer les sessions connectées via `/login` la télémétrie directement à votre collecteur au lieu de passer par le relais, définissez `OTEL_EXPORTER_OTLP_ENDPOINT` à l'URL de base `https://` du collecteur dans le bloc `env` d'une [politique gérée](#managed). Claude Code ajoute `/v1/metrics`, `/v1/logs` ou `/v1/traces` à l'URL que vous définissez, comme `https://otel-collector.example.com:4318`, et exporte chaque signal là-bas sur OTLP/HTTP. Nécessite Claude Code v2.1.265 ou ultérieur sur la machine de chaque développeur. Les clients antérieurs exportent via le relais.
1005 1122
1006Pour vous authentifier auprès du collecteur, définissez `OTEL_EXPORTER_OTLP_HEADERS` dans le même bloc `env`. Les sessions n'envoient jamais le jeton de session de passerelle du développeur à un collecteur nommé de cette façon.1123Pour vous authentifier auprès du collecteur, définissez `OTEL_EXPORTER_OTLP_HEADERS` dans le même bloc `env`. Les sessions n'envoient jamais le jeton de session de passerelle du développeur à un collecteur nommé de cette façon.
1007 1124
1008Lorsque vous ajoutez ou modifiez ce point de terminaison dans une politique, Claude Code demande à chaque développeur de l'approuver dans la [boîte de dialogue d'approbation de sécurité](#managed) avant de l'appliquer dans une session interactive.1125Lorsque vous ajoutez ou modifiez ce point de terminaison dans une politique, Claude Code demande à chaque développeur de l'approuver dans la [boîte de dialogue d'approbation de sécurité](#managed) avant de l'appliquer dans une session interactive.
1009 1126
1010Claude Code vérifie le point de terminaison avant d'exporter un signal directement, et garde ce signal sur le relais lorsqu'une vérification échoue. Les vérifications incluent :1127Claude Code vérifie le point de terminaison avant d'exporter un signal directement, et conserve ce signal sur le relais lorsqu'une vérification échoue. Les vérifications incluent :
1011 1128
1012* Le point de terminaison provient de la passerelle elle-même. Si vous définissez la même variable dans un profil MDM ou un `managed-settings.json` local, les exportations restent sur le relais.1129* Le point de terminaison provient de la passerelle elle-même. Si vous définissez la même variable dans un profil MDM ou un `managed-settings.json` local, les exportations restent sur le relais.
1013* L'URL utilise `https://`, ou `http://` à une adresse de bouclage1130* L'URL utilise `https://`, ou `http://` à une adresse de bouclage
1014* L'URL se résout en un chemin se terminant par `/v1/<signal>`, sans requête ni fragment. Claude Code construit ce chemin lui-même à partir de la variable générique. Il utilise une variable par signal comme `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` telle qu'écrite, afin d'inclure le chemin complet là-bas.1131* L'URL se résout en un chemin se terminant par `/v1/<signal>`, sans requête ni fragment. Claude Code construit ce chemin lui-même à partir de la variable générique. Il utilise une variable par signal comme `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` telle qu'écrite, donc incluez le chemin complet là-bas.
1015* L'URL n'est pas l'hôte propre de la passerelle. Un point de terminaison adressé à la passerelle conserve le chemin du relais et son jeton de session.1132* L'URL n'est pas l'hôte propre de la passerelle. Un point de terminaison adressé à la passerelle conserve le chemin du relais et son jeton de session.
1016* Ni vous ni le développeur n'avez configuré [`otelHeadersHelper`](/docs/fr/settings-reference#otelheadershelper) dans aucune source de paramètres. Avec un helper configuré, chaque signal reste sur le relais.1133* Ni vous ni le développeur n'avez configuré [`otelHeadersHelper`](/docs/fr/settings-reference#otelheadershelper) dans aucune source de paramètres. Avec un helper configuré, chaque signal reste sur le relais.
1017 1134
1018Le point de terminaison que vous nommez change uniquement où les exportations vont. Vous choisissez toujours quels signaux exportent du tout avec les sélecteurs `OTEL_*_EXPORTER`.1135Le point de terminaison que vous nommez change uniquement où les exportations vont. Vous choisissez toujours quels signaux exportent du tout avec les sélecteurs `OTEL_*_EXPORTER`.
1019 1136
1020Le point de terminaison seul n'active pas l'exportation, afin de définir également les variables qui le font, à moins que la passerelle ne les pousse déjà :1137Le point de terminaison seul n'active pas l'exportation, donc définissez également les variables qui le font, à moins que la passerelle ne les pousse déjà :
1021 1138
1022* Si la passerelle [pousse déjà les variables de télémétrie](#telemetry), elles couvrent l'activation, les sélecteurs et le protocole, et votre point de terminaison explicite remplace la valeur `<public_url>` poussée. Définissez un sélecteur `OTEL_*_EXPORTER` à `otlp` vous-même uniquement pour un signal qu'aucune destination `forward_to` n'active.1139* Si la passerelle [pousse déjà les variables de télémétrie](#telemetry), elles couvrent l'activation, les sélecteurs et le protocole, et votre point de terminaison explicite remplace la valeur `<public_url>` poussée. Définissez un sélecteur `OTEL_*_EXPORTER` à `otlp` vous-même uniquement pour un signal qu'aucune destination `forward_to` n'active.
1023* Si ce n'est pas le cas, définissez également `CLAUDE_CODE_ENABLE_TELEMETRY=1`, les sélecteurs `OTEL_*_EXPORTER` et `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`.1140* Si ce n'est pas le cas, définissez également `CLAUDE_CODE_ENABLE_TELEMETRY=1`, les sélecteurs `OTEL_*_EXPORTER` et `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`.
1024 1141
1025Lorsque le développeur se déconnecte, ou se connecte à une passerelle différente, les exportations vers le collecteur s'arrêtent et Claude Code supprime chaque lot restant plutôt que de l'envoyer.1142Lorsque le développeur se déconnecte, ou se connecte à une passerelle différente, les exportations vers le collecteur s'arrêtent et Claude Code rejette chaque lot restant plutôt que de l'envoyer.
1026 1143
1027<h4 id="when-a-destination-fails">1144<h4 id="when-a-destination-fails">
1028 Lorsqu'une destination échoue1145 Quand une destination échoue
1029</h4>1146</h4>
1030 1147
1031La passerelle ne met pas en mémoire tampon, ne réessaie pas ou ne stocke pas la télémétrie, afin qu'elle rejette une exportation qui n'atteint pas une destination plutôt que de la livrer tard. Chaque destination réussit ou échoue par elle-même, et le client exportateur reçoit une réponse de succès de toute façon, afin qu'une livraison échouée n'apparaisse que dans le journal de la passerelle.1148La passerelle ne met pas en mémoire tampon, ne réessaie pas ou ne stocke pas la télémétrie, afin qu'elle rejette une exportation qui n'atteint pas une destination plutôt que de la livrer tard. Chaque destination réussit ou échoue par elle-même, et le client exportateur reçoit une réponse de succès de toute façon, afin qu'une livraison échouée n'apparaisse que dans le journal de la passerelle.
1032 1149
1033Après cinq livraisons consécutives échouées à une destination, la passerelle met en pause le transfert vers elle en étirements de 30 secondes, enregistrant chaque pause, jusqu'à ce qu'une livraison réussisse. Toute réponse d'erreur, délai d'attente ou erreur de connexion compte comme une livraison échouée, sauf `400`, `413`, `415`, `422` et `431`, qui signifient que le collecteur a refusé la charge utile de cette exportation comme mal formée ou trop grande.1150Après cinq livraisons consécutives échouées à une destination, la passerelle met en pause le transfert vers elle en étirements de 30 secondes, enregistrant chaque pause, jusqu'à ce qu'une livraison réussisse. Toute réponse d'erreur, délai d'attente ou erreur de connexion compte comme une livraison échouée, sauf `400`, `413`, `415`, `422` et `431`, qui signifient que le collecteur a refusé la charge utile de cette exportation comme mal formée ou trop grande.
1034 1151
1035Une charge utile refusée n'avance ni ne réinitialise le compteur d'échecs : la passerelle continue de transférer vers la destination et enregistre un avertissement la nommant et le statut, au premier refus de la destination et tous les centièmes après.1152Une charge utile refusée n'avance ni ne réinitialise le compteur d'échecs : la passerelle continue de transférer vers la destination et enregistre un avertissement nommant celle-ci et le statut, au premier refus de la destination et tous les centièmes après.
1036 1153
1037<h3 id="http-tuning">1154<h3 id="http-tuning">
1038 Réglage HTTP1155 Réglage HTTP
1042 1159
1043| Bloc | Clé | Par défaut | Description |1160| Bloc | Clé | Par défaut | Description |
1044| - | - | - | - |1161| - | - | - | - |
1045| `access_control` | `allow_cidrs` / `deny_cidrs` | vide | Autorisation/refus IP entrant par adresse client, après résolution `trusted_proxies`. `deny_cidrs` est vérifié en premier ; un client qu'il correspond est rejeté même si `allow_cidrs` correspond également. Si `allow_cidrs` est non vide, la passerelle est par défaut refusée. `/healthz` et `/readyz` sont exempts de `allow_cidrs`. Lorsqu'un proxy de confiance envoie une entrée `X-Forwarded-For` qui n'est pas une adresse IP, le vrai client est inconnu et la passerelle enregistre un avertissement une fois nommant ce qu'il faut vérifier. Où l'une ou l'autre liste s'applique à la demande, elle la refuse avec `403` et la raison d'audit `xff_unparseable`. Où aucune ne le fait, elle sert la demande et utilise l'adresse propre du proxy comme adresse IP client pour les limites de débit par IP et l'audit. |1162| `access_control` | `allow_cidrs` / `deny_cidrs` | vide | Inbound IP allow/deny par adresse client, après résolution `trusted_proxies`. `deny_cidrs` est vérifié en premier ; un client qu'il correspond est rejeté même si `allow_cidrs` correspond également. Si `allow_cidrs` est non vide, la passerelle est par défaut refusée. `/healthz` et `/readyz` sont exempts de `allow_cidrs`. Lorsqu'un proxy de confiance envoie une entrée `X-Forwarded-For` qui n'est pas une adresse IP, le client réel est inconnu et la passerelle enregistre un avertissement une fois nommant ce qu'il faut vérifier. Lorsque l'une ou l'autre liste s'applique à la demande, elle la refuse avec `403` et la raison d'audit `xff_unparseable`. Lorsqu'aucune ne s'applique, elle sert la demande et utilise l'adresse propre du proxy comme adresse IP client pour les limites de débit par IP et l'audit. |
1046| `limits` | `max_request_bytes` | 32 MiB | Corps de demande entrant max ; les demandes surdimensionnées obtiennent `413` avant que le corps ne soit mis en mémoire tampon. Augmentez pour les demandes de fichiers ou d'images volumineux. |1163| `limits` | `max_request_bytes` | 32 MiB | Corps de demande entrante max ; les demandes surdimensionnées obtiennent `413` avant que le corps ne soit mis en mémoire tampon. Augmentez pour les demandes de fichiers ou d'images volumineux. |
1047| `limits` | `max_request_header_bytes` | non défini | Lorsqu'il est défini, les en-têtes surdimensionnés retournent `431` |1164| `limits` | `max_request_header_bytes` | non défini | Lorsqu'il est défini, les en-têtes surdimensionnés retournent `431` |
1048| `limits` | `max_url_length` | non défini | Lorsqu'il est défini, une URL trop longue retourne `414` |1165| `limits` | `max_url_length` | non défini | Lorsqu'il est défini, une URL trop longue retourne `414` |
1049| `timeouts` | `upstream_ttfb_ms` | 120000 | Attente max pour les en-têtes de réponse en amont (temps jusqu'au premier octet). Le corps de la réponse s'écoule ensuite sans plafond mural. S'applique au chemin d'amont Anthropic direct ; sur tous les autres fournisseurs, la passerelle attend jusqu'à une heure pour que la réponse commence. |1166| `timeouts` | `upstream_ttfb_ms` | 120000 | Attente max pour les en-têtes de réponse en amont (temps jusqu'au premier octet). Le corps de la réponse s'écoule ensuite sans plafond mural. S'applique au chemin d'amont Anthropic direct ; sur tous les autres fournisseurs, la passerelle attend jusqu'à une heure pour que la réponse commence. |
1050| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | Limite de débit par IP sur le point de terminaison d'autorisation d'appareil non authentifié. Augmentez pour une grande organisation derrière une adresse IP de sortie partagée ou NAT. [Déploiements à grande échelle](/docs/fr/claude-apps-gateway-deploy#large-rollouts) montre comment le dimensionner. Ces limites s'appliquent uniquement au flux de connexion par octroi d'appareil, pas à l'inférence `/v1/messages`. Consultez [Résistance à la force brute du code utilisateur](/docs/fr/claude-apps-gateway-deploy#user-code-brute-force-resistance). |1167| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | Limite de débit par IP sur le point de terminaison d'autorisation d'appareil non authentifié. Augmentez pour une grande organisation derrière une adresse IP de sortie partagée ou NAT. [Déploiements à grande échelle](/docs/fr/claude-apps-gateway-deploy#large-rollouts) montre comment le dimensionner. Ces limites s'appliquent uniquement au flux de connexion par octroi d'appareil, pas à l'inférence `/v1/messages`. Consultez [Résistance à la force brute du code utilisateur](/docs/fr/claude-apps-gateway-deploy#user-code-brute-force-resistance). |
1051| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | Limite de débit par IP sur les soumissions `user_code` à `/device`. C'est ce qui empêche quelqu'un de deviner le code d'un autre développeur. [Déploiements à grande échelle](/docs/fr/claude-apps-gateway-deploy#large-rollouts) montre jusqu'où l'augmenter. |1168| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | Limite de débit par IP sur les soumissions `user_code` à `/device`. C'est ce qui empêche quelqu'un de deviner le code d'un autre développeur. [Déploiements à grande échelle](/docs/fr/claude-apps-gateway-deploy#large-rollouts) montre jusqu'où l'augmenter. |
1052 1169
1053Si vous laissez les deux listes `access_control` vides, ce qui est la valeur par défaut, la passerelle sert toute adresse client, afin que seul votre réseau restreigne qui peut l'atteindre. C'est important car une passerelle peut pousser des [paramètres gérés](#managed) qui exécutent des commandes sur les machines des développeurs.1170Si vous laissez les deux listes `access_control` vides, ce qui est la valeur par défaut, la passerelle sert n'importe quelle adresse client, afin que seul votre réseau restreigne qui peut l'atteindre. C'est important car une passerelle peut pousser [des paramètres gérés](#managed) qui exécutent des commandes sur les machines des développeurs.
1054 1171
1055Tandis que `allow_cidrs` est vide, la passerelle avertit à deux endroits, sans changer la façon dont elle répond à toute demande :1172Tandis que `allow_cidrs` est vide, la passerelle avertit à deux endroits, sans changer la façon dont elle répond à aucune demande :
1056 1173
1057* **Au démarrage** : un avertissement dans le journal opérationnel recommande d'autoriser uniquement les plages privées `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128` et `fc00::/7`, plus toute autre plage interne à partir de laquelle vos développeurs se connectent. Si vous liez la passerelle à une adresse de bouclage et ne définissez ni `trusted_proxies` ni `public_url`, comme dans le développement local, l'avertissement n'apparaît pas.1174* **Au démarrage** : un avertissement dans le journal opérationnel recommande d'autoriser uniquement les plages privées `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128` et `fc00::/7`, plus toute autre plage interne à partir de laquelle vos développeurs se connectent. Si vous liez la passerelle à une adresse de bouclage et ne définissez ni `trusted_proxies` ni `public_url`, comme dans le développement local, l'avertissement n'apparaît pas.
1058* **À l'exécution** : la première fois qu'une demande arrive d'une adresse en dehors de ces plages privées, la passerelle enregistre un avertissement et émet un événement d'audit [`access.public_client`](/docs/fr/claude-apps-gateway-deploy#logs) portant l'adresse IP du client. Les deux se déclenchent une fois par processus. Les adresses lien-local, `169.254.0.0/16` et `fe80::/10`, ne comptent pas comme publiques. La passerelle répond à `/healthz` et `/readyz` avant cette vérification, afin que les sondes de santé à partir de plages publiques ne la déclenchent pas.1175* **À l'exécution** : la première fois qu'une demande arrive d'une adresse en dehors de ces plages privées, la passerelle enregistre un avertissement et émet un événement d'audit [`access.public_client`](/docs/fr/claude-apps-gateway-deploy#logs) portant l'adresse IP du client. Les deux se déclenchent une fois par processus. Les adresses lien-local, `169.254.0.0/16` et `fe80::/10`, ne comptent pas comme publiques. La passerelle répond à `/healthz` et `/readyz` avant cette vérification, afin que les sondes de santé à partir de plages publiques ne la déclenchent pas.
1059 1176
1060Les deux signaux utilisent l'adresse client telle que la passerelle la résout. Si un équilibreur de charge, un port-forward ou un tunnel relaie le trafic et n'est pas listé dans `listen.trusted_proxies`, la passerelle voit l'adresse du relais, qui est généralement privée, afin que ni l'avertissement d'exécution ni une liste d'autorisation privée ne l'attrape.1177Les deux signaux utilisent l'adresse client telle que la passerelle la résout. Si un équilibreur de charge, un port-forward ou un tunnel relaie le trafic et n'est pas listé dans `listen.trusted_proxies`, la passerelle voit l'adresse du relais, qui est généralement privée, afin que ni l'avertissement à l'exécution ni une liste d'autorisation privée ne l'attrape.
1061 1178
1062Derrière un tel front-end, définissez [`listen.trusted_proxies`](#listen) en premier afin que la passerelle voie les vraies adresses client, et gardez la passerelle et tout ce qui se trouve devant elle inaccessible à partir d'Internet public indépendamment.1179Derrière un tel front-end, définissez [`listen.trusted_proxies`](#listen) en premier afin que la passerelle voie les adresses client réelles, et gardez la passerelle et tout ce qui se trouve devant elle inaccessible à partir d'Internet public indépendamment.
1063 1180
1064<h3 id="load_test_mode">1181<h3 id="load_test_mode">
1065 `load_test_mode`1182 `load_test_mode`
1066</h3>1183</h3>
1067 1184
1068Le bloc `load_test_mode` vous permet de tester la charge d'une passerelle sans appeler un fournisseur de modèles. Tandis qu'il est activé, la passerelle construit et signe chaque demande de fournisseur comme d'habitude, la rejette au lieu de l'envoyer, et diffuse une réponse en conserve via son chemin de réponse normal. La réponse est un texte de remplissage qui commence par une phrase disant qu'elle est en conserve.1185Le bloc `load_test_mode` vous permet de tester la charge d'une passerelle sans appeler un fournisseur de modèles. Pendant qu'il est activé, la passerelle construit et signe chaque demande de fournisseur comme d'habitude, la rejette au lieu de l'envoyer, et diffuse une réponse en conserve via son chemin de réponse normal. La réponse est du texte de remplissage qui commence par une phrase disant qu'elle est en conserve.
1069 1186
1070Nécessite Claude Code v2.1.282 ou ultérieur sur le serveur de passerelle. Les versions antérieures refusent de démarrer lorsque la clé est trouvée. Mettez à niveau chaque réplica avant d'ajouter le bloc, et supprimez le bloc avant de revenir en arrière.1187Nécessite Claude Code v2.1.282 ou ultérieur sur le serveur de passerelle. Une passerelle antérieure refuse de démarrer lorsqu'elle trouve la clé. Mettez à niveau chaque réplica avant d'ajouter le bloc, et supprimez le bloc avant de revenir à une version antérieure.
1071 1188
1072L'exemple ci-dessous active le mode avec les valeurs par défaut, une réponse d'environ 750 jetons de texte diffusée sur environ 10 secondes :1189L'exemple ci-dessous active le mode avec les valeurs par défaut, une réponse d'environ 750 jetons de texte diffusée sur environ 10 secondes :
1073 1190
1081| Champ | Requis | Description |1198| Champ | Requis | Description |
1082| - | - | - |1199| - | - | - |
1083| `enabled` | Oui | `true` active le mode. `false` conserve vos nombres dans le fichier avec le mode désactivé. La passerelle refuse de démarrer si le bloc est présent sans lui. |1200| `enabled` | Oui | `true` active le mode. `false` conserve vos nombres dans le fichier avec le mode désactivé. La passerelle refuse de démarrer si le bloc est présent sans lui. |
1084| `reply_tokens` | Non | Par défaut `750`. Environ combien de jetons de texte chaque réponse en conserve porte, un nombre entier de 1 à 100 000. |1201| `reply_tokens` | Non | Par défaut `750`. Environ combien de jetons de texte chaque réponse en conserve porte, un nombre entier de 1 à 100000. |
1085| `reply_seconds` | Non | Par défaut `9.5`. Combien de temps une réponse diffusée prend, de 0 à 600. `0` envoie la réponse entière à la fois. Une réponse à une demande non diffusée revient toujours à la fois. |1202| `reply_seconds` | Non | Par défaut `9.5`. Combien de temps une réponse diffusée prend, de 0 à 600. `0` envoie la réponse entière à la fois. Une réponse à une demande non diffusée revient toujours à la fois. |
1086 1203
1087Un test de charge dans ce mode couvre la passerelle, votre Postgres et tout ce qui se trouve devant la passerelle. Il ne couvre pas les limites, la vitesse ou le chemin réseau du fournisseur.1204Un test de charge dans ce mode couvre la passerelle, votre Postgres et tout ce qui se trouve devant la passerelle. Il ne couvre pas les limites, la vitesse ou le chemin réseau du fournisseur.
1088 1205
1089Aucune demande de modèle n'est envoyée au fournisseur, afin que le CPU d'une réplica par demande soit une estimation et se lit plus bas qu'en production, qui chiffre également son trafic vers le fournisseur. Confirmez un nombre de réplicas avec un petit pilote contre le vrai fournisseur. Avant v2.1.283, l'estimation se lit beaucoup plus bas.1206Aucune demande de modèle n'est envoyée au fournisseur, afin que le CPU d'une réplica par demande soit une estimation et se lit plus bas que la production, qui chiffre également son trafic vers le fournisseur. Confirmez un nombre de réplicas avec un petit pilote contre le vrai fournisseur. Avant v2.1.283, l'estimation se lit beaucoup plus bas.
1090 1207
1091Tandis que le mode est activé, une demande peut porter un en-tête `x-load-test-user` contenant un nombre entier de jusqu'à sept chiffres. La passerelle compte chaque nombre comme un développeur distinct avec l'e-mail et les groupes du développeur dont le jeton est venu avec la demande.1208Tandis que le mode est activé, une demande peut porter un en-tête `x-load-test-user` contenant un nombre entier de jusqu'à sept chiffres. La passerelle compte chaque nombre comme un développeur séparé, avec l'e-mail et les groupes du développeur dont le jeton est venu avec la demande.
1092 1209
1093Donnez au déploiement de test de charge sa propre base de données vide, car la passerelle refuse de démarrer avec le mode activé par rapport à une base de données dans laquelle un développeur a déjà dépensé quelque chose.1210Donnez au déploiement de test de charge sa propre base de données vide, car la passerelle refuse de démarrer avec le mode activé par rapport à une base de données dans laquelle un développeur a déjà dépensé quelque chose.
1094 1211
1149 postgres_url: ${GATEWAY_POSTGRES_URL}1266 postgres_url: ${GATEWAY_POSTGRES_URL}
1150 # max_connections: 51267 # max_connections: 5
1151 # connect_timeout_seconds: 51268 # connect_timeout_seconds: 5
1269 # readiness_grace_seconds: 300 # continuez à passer le contrôle de disponibilité lors d'un basculement de base de données
1152 1270
1153# Active /v1/organizations/spend_limits (reflète l'API Admin Anthropic)1271# Active /v1/organizations/spend_limits (reflète l'API Admin Anthropic)
1154# et l'application des limites de dépenses par développeur sur /v1/messages. Omettez pour désactiver.1272# et l'application des limites de dépenses par développeur sur /v1/messages. Omettez pour désactiver.
1276 1394
1277Pour Claude Desktop, définissez la clé `bootstrapUrl` dans la propre [configuration gérée](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop sur `<listen.public_url>/user/bootstrap`. Le flux de connexion et la stratégie par groupe correspondent alors à ceux du CLI une fois qu'une stratégie opte pour le serveur avec une clé `desktop` ; sans l'opt-in, `/user/bootstrap` retourne 404. Voir [Claude Desktop overlay](#claude-desktop-overlay) pour la moitié côté serveur.1395Pour Claude Desktop, définissez la clé `bootstrapUrl` dans la propre [configuration gérée](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop sur `<listen.public_url>/user/bootstrap`. Le flux de connexion et la stratégie par groupe correspondent alors à ceux du CLI une fois qu'une stratégie opte pour le serveur avec une clé `desktop` ; sans l'opt-in, `/user/bootstrap` retourne 404. Voir [Claude Desktop overlay](#claude-desktop-overlay) pour la moitié côté serveur.
1278 1396
1279Claude Code honore [`forceLoginGatewayUrl`](/docs/fr/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/fr/settings-reference#gatewayinternalnetworks), et la valeur `"gateway"` de [`forceLoginMethod`](/docs/fr/settings-reference#forceloginmethod) uniquement à partir d'une source gérée sur la machine : `managed-settings.json`, le plist macOS ou le registre HKLM Windows, ou un assistant de stratégie. Un développeur les définissant dans son propre `~/.claude/settings.json` n'a aucun effet, et il en va de même pour les définir dans la charge utile de la passerelle.1397Claude Code honore [`forceLoginGatewayUrl`](/docs/fr/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/fr/settings-reference#gatewayinternalnetworks), et la valeur `"gateway"` de [`forceLoginMethod`](/docs/fr/settings-reference#forceloginmethod) uniquement à partir d'une source gérée sur la machine : `managed-settings.json`, le plist macOS ou le registre HKLM Windows, ou un assistant de stratégie. Les définir dans le `~/.claude/settings.json` personnel d'un développeur ou dans la charge utile de la passerelle ne configure pas la connexion à la passerelle.
1398
1399Omettez `forceLoginMethod` et `forceLoginOrgUUID` de la charge utile. Claude Code lit toujours les deux clés à partir de la charge utile pour sa vérification des identifiants au démarrage, donc un développeur qui conserve une identifiant émis par Anthropic sur la machine obtient la sortie au démarrage décrite sous [Administrator policy requires a Cloud gateway sign-in](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) même après sa connexion.
1280 1400
1281<h2 id="related">1401<h2 id="related">
1282 Connexes1402 Connexes