SpyBara
Go Premium

Documentation 2026-10-06 23:59 UTC to 2026-10-07 03:02 UTC

5 files changed +40 −32. View all changes and history on the product overview
2026
Wed 7 03:58 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

75| - | - |75| - | - |

76| Claude Code v2.1.195 ou ultérieur | La sous-commande `claude gateway` et le flux de connexion de la passerelle sont livrés dans v2.1.195. Les versions publiques antérieures ne les incluent pas. La machine exécutant le serveur de passerelle et la machine de chaque développeur doivent être sur v2.1.195 ou ultérieur ; exécutez `claude update` pour obtenir la dernière version. L'[amont Claude Platform on AWS](/docs/fr/claude-apps-gateway-config#claude-platform-on-aws) nécessite Claude Code v2.1.198 ou ultérieur sur le serveur de passerelle. |76| Claude Code v2.1.195 ou ultérieur | La sous-commande `claude gateway` et le flux de connexion de la passerelle sont livrés dans v2.1.195. Les versions publiques antérieures ne les incluent pas. La machine exécutant le serveur de passerelle et la machine de chaque développeur doivent être sur v2.1.195 ou ultérieur ; exécutez `claude update` pour obtenir la dernière version. L'[amont Claude Platform on AWS](/docs/fr/claude-apps-gateway-config#claude-platform-on-aws) nécessite Claude Code v2.1.198 ou ultérieur sur le serveur de passerelle. |

77| Fournisseur d'identité OpenID Connect (OIDC) | Okta, Microsoft Entra ID, Google Workspace, Keycloak, ou Dex, ou tout autre IdP conforme à OIDC comme PingFederate. La passerelle exécute la découverte OIDC standard et le flux de code d'autorisation contre elle. SAML et LDAP ne sont pas supportés. |77| Fournisseur d'identité OpenID Connect (OIDC) | Okta, Microsoft Entra ID, Google Workspace, Keycloak, ou Dex, ou tout autre IdP conforme à OIDC comme PingFederate. La passerelle exécute la découverte OIDC standard et le flux de code d'autorisation contre elle. SAML et LDAP ne sont pas supportés. |

78| PostgreSQL 14 ou ultérieur | Soutient le flux de connexion d'appareil, où le rappel du navigateur écrit et l'interface de ligne de commande d'interrogation lit, plus les compteurs de limite de débit. Tout Postgres géré fonctionne, y compris le plus petit niveau. Sans limites de dépenses configurées, la passerelle stocke quelques Ko d'état d'authentification de courte durée ; avec les [limites de dépenses](/docs/fr/claude-apps-gateway-spend-limits), elle détient également des tables de dépenses durables, d'audit et d'identité qui doivent être sauvegardées. TLS via `?sslmode=require` est recommandé. |78| PostgreSQL 11 ou ultérieur | Soutient le flux de connexion d'appareil et les compteurs de limite de débit. Un service PostgreSQL géré fonctionne, y compris le plus petit niveau ; voir [quelles bases de données sont prises en charge](/docs/fr/claude-apps-gateway-deploy#postgres). Avec les [limites de dépenses](/docs/fr/claude-apps-gateway-spend-limits), la base de données détient également des tables de dépenses durables, d'audit et d'identité qui doivent être sauvegardées. TLS via `?sslmode=require` est recommandé. PostgreSQL 11, 12 et 13 nécessitent Claude Code v2.1.290 ou ultérieur sur le serveur de passerelle. Le projet PostgreSQL ne maintient plus ces versions ; utilisez donc une version plus récente lorsque c'est possible. |

79| Amont du modèle | Identifiants Amazon Bedrock, identifiants Claude Platform on AWS, identifiants Google Cloud, une ressource Microsoft Foundry, ou une clé API Anthropic. Plusieurs ammonts sont supportés avec basculement. |79| Amont du modèle | Identifiants Amazon Bedrock, identifiants Claude Platform on AWS, identifiants Google Cloud, une ressource Microsoft Foundry, ou une clé API Anthropic. Plusieurs ammonts sont supportés avec basculement. |

80| HTTPS | La passerelle doit être accessible via `https://` à partir des ordinateurs portables des développeurs et de tout navigateur utilisé pour la connexion ; la passerelle sert la page de vérification d'appareil sur le même écouteur. Fournissez un certificat TLS via `listen.tls` ou exécutez derrière un ingress qui termine TLS, et définissez `listen.public_url` à l'origine externe dans les deux cas. À `/login`, Claude Code accepte une origine `http://` simple uniquement quand l'hôte de la passerelle est une boucle locale : `localhost`, `127.0.0.1`, ou `::1`. |80| HTTPS | La passerelle doit être accessible via `https://` à partir des ordinateurs portables des développeurs et de tout navigateur utilisé pour la connexion ; la passerelle sert la page de vérification d'appareil sur le même écouteur. Fournissez un certificat TLS via `listen.tls` ou exécutez derrière un ingress qui termine TLS, et définissez `listen.public_url` à l'origine externe dans les deux cas. À `/login`, Claude Code accepte une origine `http://` simple uniquement quand l'hôte de la passerelle est une boucle locale : `localhost`, `127.0.0.1`, ou `::1`. |

81| Adresse de réseau privé | À `/login`, Claude Code exige que le nom d'hôte ou l'adresse IP de la passerelle ne se résolve qu'à des adresses privées : RFC 1918, link-local, CGNAT `100.64.0.0/10`, ULA IPv6 `fc00::/7`, ou boucle locale. Pour une passerelle que vous hébergez, toute adresse publique en dehors d'un bloc que vous déclarez est rejetée ; voir le [modèle de menace](/docs/fr/claude-apps-gateway-deploy#threat-model-summary) dans le guide de déploiement. Si les machines des développeurs acheminent HTTPS via un proxy d'entreprise, la connexion exige également que l'hôte proxy se résolve à des adresses privées ; s'il ne le fait pas, ajoutez l'hôte de la passerelle à `NO_PROXY` pour que l'interface de ligne de commande se connecte directement. Si votre réseau interne est numéroté à partir d'un espace IPv4 public que votre organisation possède, [déclarez ces blocs](#allow-a-gateway-on-public-address-space-you-own) pour que `/login` accepte une passerelle là-bas. |81| Adresse de réseau privé | À `/login`, Claude Code exige que le nom d'hôte ou l'adresse IP de la passerelle ne se résolve qu'à des adresses privées : RFC 1918, link-local, CGNAT `100.64.0.0/10`, ULA IPv6 `fc00::/7`, ou boucle locale. Pour une passerelle que vous hébergez, toute adresse publique en dehors d'un bloc que vous déclarez est rejetée ; voir le [modèle de menace](/docs/fr/claude-apps-gateway-deploy#threat-model-summary) dans le guide de déploiement. Si les machines des développeurs acheminent HTTPS via un proxy d'entreprise, la connexion exige également que l'hôte proxy se résolve à des adresses privées ; s'il ne le fait pas, ajoutez l'hôte de la passerelle à `NO_PROXY` pour que l'interface de ligne de commande se connecte directement. Si votre réseau interne est numéroté à partir d'un espace IPv4 public que votre organisation possède, [déclarez ces blocs](#allow-a-gateway-on-public-address-space-you-own) pour que `/login` accepte une passerelle là-bas. |


91 </Step>91 </Step>

92 92 

93 <Step title="Provisionner une base de données PostgreSQL">93 <Step title="Provisionner une base de données PostgreSQL">

94 Tout Postgres 14 ou ultérieur fonctionne, y compris le plus petit niveau géré. La passerelle exécute ses propres migrations de schéma au démarrage, donc le rôle de la base de données a besoin de droits pour créer et modifier les tables ; voir [`store`](/docs/fr/claude-apps-gateway-config#store).94 Utilisez PostgreSQL 11 ou ultérieur. Le plus petit niveau géré suffit. La passerelle exécute ses propres migrations de schéma au démarrage, donc le rôle de la base de données a besoin de droits pour créer et modifier les tables ; voir [`store`](/docs/fr/claude-apps-gateway-config#store).

95 </Step>95 </Step>

96 96 

97 <Step title="Écrivez gateway.yaml">97 <Step title="Écrivez gateway.yaml">

Details

158La passerelle lit la clé et le certificat une seule fois au démarrage, donc un fichier modifié ne prend effet qu'après un redémarrage. Effectuez la rotation dans cet ordre afin qu'aucune requête de jeton ne présente un certificat dont le fournisseur d'identité ne dispose pas :158La passerelle lit la clé et le certificat une seule fois au démarrage, donc un fichier modifié ne prend effet qu'après un redémarrage. Effectuez la rotation dans cet ordre afin qu'aucune requête de jeton ne présente un certificat dont le fournisseur d'identité ne dispose pas :

159 159 

1601. Téléversez le nouveau certificat vers le fournisseur d'identité à côté de l'ancien.1601. Téléversez le nouveau certificat vers le fournisseur d'identité à côté de l'ancien.

1612. Remplacez les fichiers de clé et de certificat que `gateway.yaml` charge, puis redémarrez la passerelle.1612. Remplacez les fichiers de clé et de certificat que `gateway.yaml` charge, puis redémarrez la passerelle. Si vous exécutez plusieurs répliques, un [redémarrage progressif](/docs/fr/claude-apps-gateway-deploy#upgrades) fonctionne, car le fournisseur d'identité dispose des deux certificats jusqu'à ce que vous supprimiez l'ancien.

1623. Supprimez l'ancien certificat du fournisseur d'identité.1623. Une fois que chaque réplique a redémarré, supprimez l'ancien certificat du fournisseur d'identité.

163 163 

164<h4 id="idp-requests-through-a-forward-proxy">164<h4 id="idp-requests-through-a-forward-proxy">

165 Demandes du fournisseur d'identité via un proxy avant165 Demandes du fournisseur d'identité via un proxy avant


227 227 

228| Champ | Obligatoire | Description |228| Champ | Obligatoire | Description |

229| - | - | - |229| - | - | - |

230| `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). |230| `postgres_url` | Oui | URL `postgres://` ou `postgresql://` avec un seul hôte, et non une liste séparée par des virgules. 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). |

231| `username` | Non | Remplace l'utilisateur dans `postgres_url` |231| `username` | Non | Remplace l'utilisateur dans `postgres_url` |

232| `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 a priorité sur les identifiants d'URL. |232| `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 a priorité sur les identifiants d'URL. |

233| `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. |233| `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. |

Details

249 Postgres249 Postgres

250</h3>250</h3>

251 251 

252La passerelle stocke son état dans une base de données PostgreSQL :

253 

254* **Base de données** : PostgreSQL lui-même, auto-hébergé ou managé, en [version minimale](/docs/fr/claude-apps-gateway#prerequisites) ou ultérieure. Les bases de données qui implémentent uniquement le protocole Postgres, comme les bases de données SQL distribuées, ne sont pas prises en charge.

255* **Adresse** : `store.postgres_url` accepte un seul hôte. Si la base de données comporte plusieurs nœuds, utilisez l'adresse placée devant eux, comme l'endpoint de votre service managé, un équilibreur de charge ou une IP virtuelle. Définissez une [période de grâce de disponibilité](#readiness-grace-period) plus longue que la durée d'un basculement.

256 

252La passerelle détient cinq tables de données plus une table `_migrations`, toutes créées par ses migrations au démarrage :257La passerelle détient cinq tables de données plus une table `_migrations`, toutes créées par ses migrations au démarrage :

253 258 

254| Table | Contenu | Rétention |259| Table | Contenu | Rétention |


396| CLI `/login` : `Could not resolve the configured HTTP proxy` | Le nom d'hôte dans `HTTPS_PROXY` ou `HTTP_PROXY` ne se résout pas à partir de la machine du développeur, généralement parce qu'il n'est pas connecté au réseau d'entreprise | Demandez au développeur de se connecter à votre réseau ou VPN et de réessayer, ou corrigez l'URL du proxy |401| CLI `/login` : `Could not resolve the configured HTTP proxy` | Le nom d'hôte dans `HTTPS_PROXY` ou `HTTP_PROXY` ne se résout pas à partir de la machine du développeur, généralement parce qu'il n'est pas connecté au réseau d'entreprise | Demandez au développeur de se connecter à votre réseau ou VPN et de réessayer, ou corrigez l'URL du proxy |

397| CLI `/login` : `Could not resolve gateway host <host>` | La machine ne peut pas résoudre le nom DNS interne de la passerelle, généralement parce qu'elle n'est pas sur le réseau d'entreprise | Demandez au développeur de se connecter à votre réseau ou VPN, puis de réessayer `/login` |402| CLI `/login` : `Could not resolve gateway host <host>` | La machine ne peut pas résoudre le nom DNS interne de la passerelle, généralement parce qu'elle n'est pas sur le réseau d'entreprise | Demandez au développeur de se connecter à votre réseau ou VPN, puis de réessayer `/login` |

398| Le démarrage se termine avec une erreur de validation de configuration nommant `store.postgres_url` | Aucun Postgres configuré ; la passerelle nécessite Postgres | Définissez `store.postgres_url`. Pour le développement local, utilisez un conteneur jetable : `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |403| Le démarrage se termine avec une erreur de validation de configuration nommant `store.postgres_url` | Aucun Postgres configuré ; la passerelle nécessite Postgres | Définissez `store.postgres_url`. Pour le développement local, utilisez un conteneur jetable : `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |

404| Le démarrage se termine : `store.postgres_url in <path> is not a URL the gateway can read`, ou avant v2.1.290 un simple `Invalid URL` ou `URI error` | L'URL ne peut pas être analysée, par exemple parce qu'elle liste plus d'un hôte ou que son mot de passe contient un `/`, `?`, `#` ou `%` non encodé | Nommez [un seul hôte](#postgres), et déplacez le mot de passe dans [`store.password`](/docs/fr/claude-apps-gateway-config#store) |

399| Le démarrage se termine : `requires the native binary` | Exécution sous Node au lieu du binaire natif | Installez Claude Code avec l'une des [méthodes d'installation autonome](/docs/fr/setup) |405| Le démarrage se termine : `requires the native binary` | Exécution sous Node au lieu du binaire natif | Installez Claude Code avec l'une des [méthodes d'installation autonome](/docs/fr/setup) |

400| Le démarrage se termine avec une erreur de découverte OIDC après `config.load` | `oidc.issuer` inaccessible, ou chaîne TLS non approuvée | Vérifiez que l'émetteur est accessible à partir du pod et sert `/.well-known/openid-configuration`. Définissez `ca_cert_pem` pour l'infrastructure à clé publique privée. Si le pod atteint l'IdP uniquement via un proxy de transfert, définissez [`oidc.use_proxy: true`](/docs/fr/claude-apps-gateway-config#idp-requests-through-a-forward-proxy) ; sur les versions antérieures à v2.1.227, donnez au pod une route directe vers chacun des endpoints de l'IdP à la place. Si le pod ne peut pas non plus résoudre le nom d'hôte de l'IdP, ou le proxy refuse `CONNECT` à une adresse IP, voir [Sortie proxy uniquement](/docs/fr/claude-apps-gateway-config#proxy-only-egress), qui nécessite v2.1.277 ou ultérieur. |406| Le démarrage se termine avec une erreur de découverte OIDC après `config.load` | `oidc.issuer` inaccessible, ou chaîne TLS non approuvée | Vérifiez que l'émetteur est accessible à partir du pod et sert `/.well-known/openid-configuration`. Définissez `ca_cert_pem` pour l'infrastructure à clé publique privée. Si le pod atteint l'IdP uniquement via un proxy de transfert, définissez [`oidc.use_proxy: true`](/docs/fr/claude-apps-gateway-config#idp-requests-through-a-forward-proxy) ; sur les versions antérieures à v2.1.227, donnez au pod une route directe vers chacun des endpoints de l'IdP à la place. Si le pod ne peut pas non plus résoudre le nom d'hôte de l'IdP, ou le proxy refuse `CONNECT` à une adresse IP, voir [Sortie proxy uniquement](/docs/fr/claude-apps-gateway-config#proxy-only-egress), qui nécessite v2.1.277 ou ultérieur. |

401| Le démarrage se termine avec une erreur de permission Postgres | Le rôle de base de données manque de droits DDL sur son schéma | Accordez au rôle `CREATE` sur le schéma de la passerelle pour qu'il puisse créer et modifier ses tables au démarrage |407| Le démarrage se termine avec une erreur de permission Postgres | Le rôle de base de données manque de droits DDL sur son schéma | Accordez au rôle `CREATE` sur le schéma de la passerelle pour qu'il puisse créer et modifier ses tables au démarrage |

402| Journal : `could not connect to Postgres at boot, attempt 1 of 3` | La base de données n'était pas accessible lorsque la passerelle a démarré, par exemple sur une instance froide dont le réseau est encore en cours de configuration | Si la passerelle termine ensuite le démarrage, aucune action n'est nécessaire. Lorsque la base de données n'est pas accessible, la passerelle essaie la connexion trois fois, deux secondes d'intervalle, avant de se terminer. Si elle se termine avec `could not connect to Postgres`, vérifiez `store.postgres_url` et le chemin réseau vers la base de données. Si les tentatives expirent plutôt que d'être refusées, augmentez [`store.connect_timeout_seconds`](/docs/fr/claude-apps-gateway-config#store) pour donner à chacune plus de temps. |408| Journal : `could not connect to Postgres at boot, attempt 1 of 3` | La base de données n'était pas accessible lorsque la passerelle a démarré, par exemple sur une instance froide dont le réseau est encore en cours de configuration | Si la passerelle termine ensuite le démarrage, aucune action n'est nécessaire. Lorsque la base de données n'est pas accessible, la passerelle essaie la connexion trois fois, deux secondes d'intervalle, avant de se terminer. Si elle se termine avec `could not connect to Postgres`, vérifiez `store.postgres_url`, notamment qu'elle nomme un seul hôte, ainsi que le chemin réseau vers la base de données. Si les tentatives expirent plutôt que d'être refusées, augmentez [`store.connect_timeout_seconds`](/docs/fr/claude-apps-gateway-config#store) pour donner à chacune plus de temps. |

403| `/oauth/callback` affiche « Sign-in could not be completed » | Domaine de courrier électronique rejeté, validation id\_token échouée, ou `email_verified` est explicitement `false`, que la passerelle rejette toujours sans remplacement | Vérifiez `allowed_email_domains` et que l'IdP renvoie une réclamation `email` vérifiée. Pour `email_verified: false`, corrigez la vérification côté IdP. Si votre IdP émet le courrier électronique sous un nom de réclamation différent, définissez `oidc.email_claim`. |409| `/oauth/callback` affiche « Sign-in could not be completed » | Domaine de courrier électronique rejeté, validation id\_token échouée, ou `email_verified` est explicitement `false`, que la passerelle rejette toujours sans remplacement | Vérifiez `allowed_email_domains` et que l'IdP renvoie une réclamation `email` vérifiée. Pour `email_verified: false`, corrigez la vérification côté IdP. Si votre IdP émet le courrier électronique sous un nom de réclamation différent, définissez `oidc.email_claim`. |

404| Journal : `token exchange failed request_id=<id>: id_token missing email claim` | L'IdP n'inclut pas `email` dans l'id\_token par défaut. Ce rejet ne se déclenche que lorsque `allowed_email_domains` est défini ; sans lui, un courrier électronique manquant crée une session sans courrier électronique | Configurez l'IdP pour émettre `email` dans l'id\_token. Okta : ajoutez `email` aux réclamations de jeton d'ID d'un serveur d'autorisation personnalisé. Entra : ajoutez `email` comme réclamation facultative sur l'enregistrement de l'application. PingFederate : activez une politique OpenID Connect qui émet `email`. Si l'IdP sert `email` à partir de l'endpoint userinfo mais ne l'inclura pas dans l'id\_token, comme le serveur d'autorisation org Okta, définissez `oidc.userinfo_fallback: true`. |410| Journal : `token exchange failed request_id=<id>: id_token missing email claim` | L'IdP n'inclut pas `email` dans l'id\_token par défaut. Ce rejet ne se déclenche que lorsque `allowed_email_domains` est défini ; sans lui, un courrier électronique manquant crée une session sans courrier électronique | Configurez l'IdP pour émettre `email` dans l'id\_token. Okta : ajoutez `email` aux réclamations de jeton d'ID d'un serveur d'autorisation personnalisé. Entra : ajoutez `email` comme réclamation facultative sur l'enregistrement de l'application. PingFederate : activez une politique OpenID Connect qui émet `email`. Si l'IdP sert `email` à partir de l'endpoint userinfo mais ne l'inclura pas dans l'id\_token, comme le serveur d'autorisation org Okta, définissez `oidc.userinfo_fallback: true`. |

405| Journal : `refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`, et les développeurs voient `Cloud gateway session expired` tous les `session.ttl_hours` | L'IdP a accepté le jeton d'actualisation mais n'a renvoyé aucun id\_token avec lui, donc la passerelle a demandé à l'endpoint userinfo de l'IdP les réclamations de l'utilisateur. L'IdP a rejeté le jeton d'accès actualisé là. La passerelle répond `temporarily_unavailable`, donc Claude Code conserve le jeton d'actualisation mais ne peut pas renouveler la session. Les versions de passerelle antérieures à v2.1.260 enregistrent la même ligne sans le détail `(at …)`. | Définissez [`oidc.scope_on_refresh: true`](/docs/fr/claude-apps-gateway-config#oidc), disponible dans la passerelle v2.1.260 ou ultérieure, pour que la demande d'actualisation demande à nouveau `openid`. Certains IdP, comme Okta, renvoient un id\_token lors de l'actualisation uniquement lorsqu'on le demande. Sur PingFederate, activez **Return ID Token On Refresh Grant** sous **Applications > OAuth > OpenID Connect Policy Management** à la place. La clé ne change pas le comportement de PingFederate. Pour les autres IdP qui l'omettent toujours, vérifiez si l'endpoint userinfo accepte les jetons d'accès émis par une actualisation. En tant que solution temporaire, augmentez [`session.ttl_hours`](/docs/fr/claude-apps-gateway-config#session). Voir [Configuration du fournisseur d'identité](#identity-provider-setup) pour le compromis de déprovisionnement. |411| Journal : `refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`, et les développeurs voient `Cloud gateway session expired` tous les `session.ttl_hours` | L'IdP a accepté le jeton d'actualisation mais n'a renvoyé aucun id\_token avec lui, donc la passerelle a demandé à l'endpoint userinfo de l'IdP les réclamations de l'utilisateur. L'IdP a rejeté le jeton d'accès actualisé là. La passerelle répond `temporarily_unavailable`, donc Claude Code conserve le jeton d'actualisation mais ne peut pas renouveler la session. Les versions de passerelle antérieures à v2.1.260 enregistrent la même ligne sans le détail `(at …)`. | Définissez [`oidc.scope_on_refresh: true`](/docs/fr/claude-apps-gateway-config#oidc), disponible dans la passerelle v2.1.260 ou ultérieure, pour que la demande d'actualisation demande à nouveau `openid`. Certains IdP, comme Okta, renvoient un id\_token lors de l'actualisation uniquement lorsqu'on le demande. Sur PingFederate, activez **Return ID Token On Refresh Grant** sous **Applications > OAuth > OpenID Connect Policy Management** à la place. La clé ne change pas le comportement de PingFederate. Pour les autres IdP qui l'omettent toujours, vérifiez si l'endpoint userinfo accepte les jetons d'accès émis par une actualisation. En tant que solution temporaire, augmentez [`session.ttl_hours`](/docs/fr/claude-apps-gateway-config#session). Voir [Configuration du fournisseur d'identité](#identity-provider-setup) pour le compromis de déprovisionnement. |

Details

169 </Step>169 </Step>

170 170 

171 <Step title="Provisionner Amazon RDS pour PostgreSQL">171 <Step title="Provisionner Amazon RDS pour PostgreSQL">

172 L'instance s'exécute dans les sous-réseaux privés sans adresse publique et avec le chiffrement du stockage activé. La version du moteur est épinglée à Postgres 16, ce qui satisfait le plancher pris en charge de PostgreSQL 14 de la passerelle et garantit que la famille du groupe de paramètres ci-dessous correspond à l'instance.172 L'instance exécute Postgres 16 dans les sous-réseaux privés, sans adresse publique et avec le chiffrement du stockage activé.

173 173 

174 Tout d'abord, créez le groupe de sous-réseaux qui place la base de données dans les sous-réseaux privés, et un groupe de paramètres avec `rds.force_ssl=1` pour que le serveur rejette les connexions en texte brut. La version du moteur est épinglée une fois car la famille du groupe de paramètres doit correspondre à la version majeure du moteur que l'instance exécute :174 Tout d'abord, créez le groupe de sous-réseaux qui place la base de données dans les sous-réseaux privés, et un groupe de paramètres avec `rds.force_ssl=1` pour que le serveur rejette les connexions en texte brut. La version du moteur est épinglée une fois car la famille du groupe de paramètres doit correspondre à la version majeure du moteur que l'instance exécute :

175 175 


203 203 

204 L'argument littéral `--master-user-password` est visible dans la table des processus et dans les journaux d'audit/EDR pendant l'exécution de la commande, la même exposition que celle couverte par la note de l'étape des secrets. Sur un hôte partagé ou surveillé, passez le mot de passe via `--cli-input-json` à partir d'un fichier `0600` à la place, de la même façon que le `setup.sh` du bundle.204 L'argument littéral `--master-user-password` est visible dans la table des processus et dans les journaux d'audit/EDR pendant l'exécution de la commande, la même exposition que celle couverte par la note de l'étape des secrets. Sur un hôte partagé ou surveillé, passez le mot de passe via `--cli-input-json` à partir d'un fichier `0600` à la place, de la même façon que le `setup.sh` du bundle.

205 205 

206 Attendez que l'instance soit opérationnelle, ce qui peut prendre plusieurs minutes, puis lisez son point de terminaison privé et assemblez la chaîne de connexion que la passerelle utilisera :206 Attendez que l'instance soit opérationnelle, ce qui peut prendre plusieurs minutes, puis lisez son endpoint privé et assemblez la chaîne de connexion que la passerelle utilisera :

207 207 

208 ```bash theme={null}208 ```bash theme={null}

209 aws rds wait db-instance-available --db-instance-identifier claude-gateway-db209 aws rds wait db-instance-available --db-instance-identifier claude-gateway-db


212 GATEWAY_POSTGRES_URL="postgres://gateway:${PGPASS}@${DB_HOST}:5432/claude_gateway?sslmode=verify-full"212 GATEWAY_POSTGRES_URL="postgres://gateway:${PGPASS}@${DB_HOST}:5432/claude_gateway?sslmode=verify-full"

213 ```213 ```

214 214 

215 `sslmode=verify-full` fait que la passerelle vérifie la chaîne du certificat du serveur RDS et le nom d'hôte, pas seulement le chiffrement. L'ancre de confiance est le [bundle de certificats AWS RDS](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem), que l'étape de construction d'image ci-dessous copie à `/etc/claude/rds-global-bundle.pem` et approuve via `NODE_EXTRA_CA_CERTS`. N'ajoutez pas de paramètre `sslrootcert=` de style libpq à l'URL : le pilote de la passerelle lit uniquement `sslmode` à partir de la chaîne de requête et transmettrait `sslrootcert` à Postgres en tant que paramètre de démarrage, que le serveur rejette.215 `sslmode=verify-full` fait que la passerelle vérifie la chaîne du certificat du serveur RDS et le nom d'hôte, pas seulement le chiffrement. L'ancre de confiance est le [bundle de certificats AWS RDS](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem), que l'étape de build d'image ci-dessous copie à `/etc/claude/rds-global-bundle.pem` et approuve via `NODE_EXTRA_CA_CERTS`. N'ajoutez pas de paramètre `sslrootcert=` de style libpq à l'URL : le pilote de la passerelle lit uniquement `sslmode` à partir de la chaîne de requête et transmettrait `sslrootcert` à Postgres en tant que paramètre de démarrage, que le serveur rejette.

216 216 

217 Le service ECS ou les pods EKS doivent s'exécuter dans ce VPC pour pouvoir atteindre le point de terminaison privé de l'instance, et le groupe de sécurité `claude-gateway-db` n'admet que le groupe de sécurité de la passerelle.217 Le service ECS ou les pods EKS doivent s'exécuter dans ce VPC pour pouvoir atteindre l'endpoint privé de l'instance, et le groupe de sécurité `claude-gateway-db` n'admet que le groupe de sécurité de la passerelle.

218 </Step>218 </Step>

219 219 

220 <Step title="Écrire gateway.yaml">220 <Step title="Écrire gateway.yaml">

221 Le bloc `upstreams` pointe vers Bedrock avec `auth: {}`, donc la passerelle s'authentifie via la chaîne de credentials par défaut d'AWS à partir du rôle de tâche sur ECS ou du rôle IRSA sur EKS. Consultez la [référence de configuration](/docs/fr/claude-apps-gateway-config) pour chaque champ.221 Le bloc `upstreams` pointe vers Bedrock avec `auth: {}`, donc la passerelle s'authentifie via la chaîne d'identifiants par défaut d'AWS à partir du rôle de tâche sur ECS ou du rôle IRSA sur EKS. Consultez la [référence de configuration](/docs/fr/claude-apps-gateway-config) pour chaque champ.

222 222 

223 Deux champs `listen` décrivent ce qui est en face de la passerelle :223 Deux champs `listen` décrivent ce qui est en face de la passerelle :

224 224 

225 * `public_url` : l'origine `https://` externe, requise pour tout bind non-loopback ; consultez la [référence `listen`](/docs/fr/claude-apps-gateway-config#listen). La passerelle construit l'`redirect_uri` de l'IdP et son document de découverte uniquement à partir de cette valeur, jamais à partir des en-têtes `X-Forwarded-*`.225 * `public_url` : l'origine `https://` externe, requise pour tout bind non-loopback ; consultez la [référence `listen`](/docs/fr/claude-apps-gateway-config#listen). La passerelle construit l'`redirect_uri` de l'IdP et son document de découverte uniquement à partir de cette valeur, jamais à partir des en-têtes `X-Forwarded-*`.

226 * `trusted_proxies` : les plages source du frontal. La passerelle honore `X-Forwarded-For` uniquement lorsque le pair TCP est dans cette liste, puis parcourt la chaîne au-delà des sauts de confiance, donc les limites de taux de connexion par IP et les événements d'audit enregistrent les adresses IP des développeurs au lieu de celle de l'équilibreur de charge.226 * `trusted_proxies` : les plages source du frontal. La passerelle honore `X-Forwarded-For` uniquement lorsque le pair TCP est dans cette liste, puis parcourt la chaîne au-delà des sauts de confiance, donc les limites de débit de connexion par IP et les événements d'audit enregistrent les adresses IP des développeurs au lieu de celle de l'équilibreur de charge.

227 227 

228 Sur les deux pistes, le frontal est un ALB interne, qu'il soit créé directement ou par le contrôleur AWS Load Balancer, et les nœuds d'un ALB prennent des adresses à partir des sous-réseaux auxquels il est attaché, donc définissez `trusted_proxies` sur les CIDR de ces sous-réseaux. Cela approuve chaque hôte de ces sous-réseaux en tant que proxy. Gardez la source d'entrée de l'ALB, votre CIDR d'entreprise, de ne pas chevaucher, et ne partagez pas les sous-réseaux avec des charges de travail non fiables qui pourraient usurper les adresses IP des clients via `X-Forwarded-For`.228 Sur les deux pistes, le frontal est un ALB interne, qu'il soit créé directement ou par le contrôleur AWS Load Balancer, et les nœuds d'un ALB prennent des adresses à partir des sous-réseaux auxquels il est attaché, donc définissez `trusted_proxies` sur les CIDR de ces sous-réseaux. Cela approuve chaque hôte de ces sous-réseaux en tant que proxy. Veillez à ce que la source d'entrée de l'ALB, votre CIDR d'entreprise, ne les chevauche pas, et ne partagez pas les sous-réseaux avec des charges de travail non fiables qui pourraient usurper les adresses IP des clients via `X-Forwarded-For`.

229 229 

230 L'attribut de préservation du port client de l'ALB, `routing.http.xff_client_port.enabled`, peut rester à l'un ou l'autre paramètre : avec lui activé, l'ALB écrit le client comme `203.0.113.7:54321` ou `[2001:db8::1]:54321`, et la passerelle lit les deux avec le port supprimé.230 L'attribut de préservation du port client de l'ALB, `routing.http.xff_client_port.enabled`, peut rester à l'un ou l'autre paramètre : avec lui activé, l'ALB écrit le client comme `203.0.113.7:54321` ou `[2001:db8::1]:54321`, et la passerelle lit les deux avec le port supprimé.

231 231 


244 # Le serveur d'autorisation org Okta retourne un id_token mince qui omet244 # Le serveur d'autorisation org Okta retourne un id_token mince qui omet

245 # l'email et les groupes ; la passerelle les remplit à partir de /userinfo.245 # l'email et les groupes ; la passerelle les remplit à partir de /userinfo.

246 userinfo_fallback: true246 userinfo_fallback: true

247 # Okta émet des groupes uniquement lorsque la portée `groups` est demandée et que247 # Okta émet des groupes uniquement lorsque le scope `groups` est demandé et que

248 # le filtre de revendication de groupes de l'application les autorise.248 # le filtre de revendication de groupes de l'application les autorise.

249 scopes: [openid, profile, email, offline_access, groups]249 scopes: [openid, profile, email, offline_access, groups]

250 250 


262 - provider: bedrock262 - provider: bedrock

263 region: <your-region> # correspondre à $AWS_REGION pour que les ARN de la politique IAM263 region: <your-region> # correspondre à $AWS_REGION pour que les ARN de la politique IAM

264 # le couvrent264 # le couvrent

265 auth: {} # chaîne de credentials par défaut d'AWS :265 auth: {} # chaîne d'identifiants par défaut d'AWS :

266 # rôle de tâche ECS, ou IRSA sur EKS266 # rôle de tâche ECS, ou IRSA sur EKS

267 ```267 ```

268 268 

269 <Note>269 <Note>

270 Seul le bloc `oidc` est spécifique à Okta. Pour utiliser Microsoft Entra ID à la place, définissez `issuer` sur `https://login.microsoftonline.com/<tenant-id>/v2.0`, supprimez `userinfo_fallback` et la portée `groups`, et notez qu'Entra émet des ID d'objet de groupe plutôt que des noms, donc [`managed.policies`](/docs/fr/claude-apps-gateway-config#managed) doit correspondre sur les GUID, ou sur les rôles d'application avec `oidc.groups_claim: roles`. Consultez [Configuration du fournisseur d'identité](/docs/fr/claude-apps-gateway-deploy#identity-provider-setup).270 Seul le bloc `oidc` est spécifique à Okta. Pour utiliser Microsoft Entra ID à la place, définissez `issuer` sur `https://login.microsoftonline.com/<tenant-id>/v2.0`, supprimez `userinfo_fallback` et le scope `groups`, et notez qu'Entra émet des ID d'objet de groupe plutôt que des noms, donc [`managed.policies`](/docs/fr/claude-apps-gateway-config#managed) doit correspondre sur les GUID, ou sur les rôles d'application avec `oidc.groups_claim: roles`. Consultez [Configuration du fournisseur d'identité](/docs/fr/claude-apps-gateway-deploy#identity-provider-setup).

271 </Note>271 </Note>

272 </Step>272 </Step>

273 273 


289 Les arguments littéraux `--secret-string` sont visibles dans la table des processus et dans les journaux d'audit/EDR pendant l'exécution de chaque commande. Sur un hôte partagé ou surveillé, mettez la valeur dans un fichier `0600` et passez `--secret-string file://<path>` à la place. Le `setup.sh` du bundle garde les valeurs secrètes hors de l'argv du processus de la même façon, en passant des fichiers temporaires `0600` à `--cli-input-json`.289 Les arguments littéraux `--secret-string` sont visibles dans la table des processus et dans les journaux d'audit/EDR pendant l'exécution de chaque commande. Sur un hôte partagé ou surveillé, mettez la valeur dans un fichier `0600` et passez `--secret-string file://<path>` à la place. Le `setup.sh` du bundle garde les valeurs secrètes hors de l'argv du processus de la même façon, en passant des fichiers temporaires `0600` à `--cli-input-json`.

290 </Note>290 </Note>

291 291 

292 Contrairement aux secrets, `gateway.yaml` lui-même ne contient aucune valeur secrète, car chaque credential se résout au démarrage via l'expansion [`${VAR}` ou `${file:...}`](/docs/fr/claude-apps-gateway-config#secret-expansion). La façon dont tout atteint le conteneur diffère selon la piste :292 Contrairement aux secrets, `gateway.yaml` lui-même ne contient aucune valeur secrète, car tous les identifiants se résolvent au démarrage via l'expansion [`${VAR}` ou `${file:...}`](/docs/fr/claude-apps-gateway-config#secret-expansion). La façon dont tout atteint le conteneur diffère selon la piste :

293 293 

294 * Sur ECS, l'étape de construction suivante copie `gateway.yaml` dans l'image à `/etc/claude/gateway.yaml`, et la définition de tâche injecte les trois secrets en tant que variables d'environnement via son champ `secrets`, donc le YAML référence `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}` et `${GATEWAY_POSTGRES_URL}`.294 * Sur ECS, l'étape de build suivante copie `gateway.yaml` dans l'image à `/etc/claude/gateway.yaml`, et la définition de tâche injecte les trois secrets en tant que variables d'environnement via son champ `secrets`, donc le YAML référence `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}` et `${GATEWAY_POSTGRES_URL}`.

295 * Sur EKS, montez `gateway.yaml` à partir d'une ConfigMap et les secrets en tant que fichiers à `/secrets`, référencés comme `${file:/secrets/...}`. Sourcez les secrets Kubernetes à partir de Secrets Manager avec External Secrets Operator ou le pilote AWS du pilote CSI Secrets Store, ou créez-les directement avec `kubectl`.295 * Sur EKS, montez `gateway.yaml` à partir d'une ConfigMap et les secrets en tant que fichiers à `/secrets`, référencés comme `${file:/secrets/...}`. Sourcez les secrets Kubernetes à partir de Secrets Manager avec External Secrets Operator ou le fournisseur AWS du pilote CSI Secrets Store, ou créez-les directement avec `kubectl`.

296 </Step>296 </Step>

297 297 

298 <Step title="Construire et pousser l'image vers Amazon ECR">298 <Step title="Construire et pousser l'image vers Amazon ECR">

299 Construisez l'image selon les [exigences d'image de conteneur](/docs/fr/claude-apps-gateway-deploy#container-image), en plaçant le binaire glibc `linux-x64` à `./claude` dans le contexte de construction. Écrivez votre propre Dockerfile selon ces exigences ou commencez par le [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/examples/gateway/aws/Dockerfile) du bundle, qui copie le `gateway.yaml` rempli des étapes précédentes dans l'image à `/etc/claude/gateway.yaml`. Sur ECS, cette copie intégrée est la façon dont la configuration atteint le conteneur, c'est pourquoi la construction vient après l'écriture du fichier. La piste EKS monte plutôt `gateway.yaml` à partir d'une ConfigMap au déploiement, donc la copie intégrée n'est pas utilisée là.299 Construisez l'image selon les [exigences d'image de conteneur](/docs/fr/claude-apps-gateway-deploy#container-image), en plaçant le binaire glibc `linux-x64` à `./claude` dans le contexte de build. Écrivez votre propre Dockerfile selon ces exigences ou commencez par le [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/examples/gateway/aws/Dockerfile) du bundle, qui copie le `gateway.yaml` rempli des étapes précédentes dans l'image à `/etc/claude/gateway.yaml`. Sur ECS, cette copie intégrée est la façon dont la configuration atteint le conteneur, c'est pourquoi le build vient après l'écriture du fichier. La piste EKS monte plutôt `gateway.yaml` à partir d'une ConfigMap au déploiement, donc la copie intégrée n'est pas utilisée là.

300 300 

301 L'image porte également le bundle de certificats AWS RDS comme ancre de confiance pour la chaîne de connexion `sslmode=verify-full`, donc téléchargez-le d'abord dans le contexte de construction. AWS fait tourner le bundle (les nouvelles autorités de certification régionales sont ajoutées), donc téléchargez-le par construction plutôt que d'épingler une somme de contrôle ou de le valider :301 L'image porte également le bundle de certificats AWS RDS comme ancre de confiance pour la chaîne de connexion `sslmode=verify-full`, donc téléchargez-le d'abord dans le contexte de build. AWS fait tourner le bundle (les nouvelles autorités de certification régionales sont ajoutées), donc téléchargez-le à chaque build plutôt que d'épingler une somme de contrôle ou de le valider :

302 302 

303 ```bash theme={null}303 ```bash theme={null}

304 curl -fL --proto '=https' -o rds-global-bundle.pem \304 curl -fL --proto '=https' -o rds-global-bundle.pem \

305 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem305 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

306 ```306 ```

307 307 

308 Les exigences d'image de conteneur ne couvrent pas le bundle, donc si vous écrivez votre propre Dockerfile, ajoutez les deux lignes qui le copient et le font confiance ; le Dockerfile du bundle les inclut déjà :308 Les exigences d'image de conteneur ne couvrent pas le bundle, donc si vous écrivez votre propre Dockerfile, ajoutez les deux lignes qui le copient et le font confiance ; le `Dockerfile` du bundle les inclut déjà :

309 309 

310 ```dockerfile theme={null}310 ```dockerfile theme={null}

311 COPY rds-global-bundle.pem /etc/claude/rds-global-bundle.pem311 COPY rds-global-bundle.pem /etc/claude/rds-global-bundle.pem

312 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem312 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem

313 ```313 ```

314 314 

315 Créez le référentiel ECR et connectez Docker à celui-ci. Les balises immuables signifient que la balise `<version>` que l'étape de déploiement épingle ne peut pas être ultérieurement silencieusement réorientée vers une image différente :315 Créez le dépôt ECR et connectez Docker à celui-ci. Les balises immuables signifient que la balise `<version>` que l'étape de déploiement épingle ne peut pas être ultérieurement silencieusement réorientée vers une image différente :

316 316 

317 ```bash theme={null}317 ```bash theme={null}

318 aws ecr create-repository --repository-name claude-gateway \318 aws ecr create-repository --repository-name claude-gateway \


425 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"425 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"

426 ```426 ```

427 427 

428 La période de grâce de 60 secondes donne à une tâche froide le temps de tirer l'image, de se connecter au store et de répondre à sa première vérification de santé avant qu'ECS ne commence à compter les défaillances par rapport au déploiement. La vérification de santé du groupe cible sur `GET /readyz` vérifie que le store est accessible, donc une tâche qui ne peut pas atteindre Postgres n'entre jamais en rotation. Pour garder les tâches passant la vérification lors d'une courte panne de base de données telle qu'un basculement RDS, définissez `store.readiness_grace_seconds` comme décrit dans [Comportement en cas de panne](/docs/fr/claude-apps-gateway-deploy#outage-behavior), qui couvre également l'alternative `/healthz`.428 La période de grâce de 60 secondes donne à une tâche froide le temps de tirer l'image, de se connecter au store et de répondre à sa première vérification de santé avant qu'ECS ne commence à compter les défaillances par rapport au déploiement.

429 429 

430 Les tâches s'exécutent dans des sous-réseaux privés sans IP publique, donc tout le trafic sortant (vers Bedrock, votre IdP, Secrets Manager, ECR et CloudWatch Logs) passe par la passerelle NAT. Pour garder le trafic Bedrock hors du chemin public, créez un point de terminaison VPC d'interface `bedrock-runtime` et pointez l'`base_url` upstream vers celui-ci, comme indiqué dans la [référence upstream Bedrock](/docs/fr/claude-apps-gateway-config#amazon-bedrock) ; l'IdP a toujours besoin d'une sortie Internet.430 La vérification de santé du groupe cible sur `GET /readyz` vérifie que le store est accessible, donc une tâche qui ne peut pas atteindre Postgres n'entre jamais en rotation. Pour garder les tâches passant la vérification lors d'une courte panne de base de données telle qu'un basculement RDS, définissez `store.readiness_grace_seconds` comme décrit dans [Comportement en cas de panne](/docs/fr/claude-apps-gateway-deploy#outage-behavior), qui couvre également l'alternative `/healthz`.

431 

432 Les tâches s'exécutent dans des sous-réseaux privés sans IP publique, donc tout le trafic sortant (vers Bedrock, votre IdP, Secrets Manager, ECR et CloudWatch Logs) passe par la passerelle NAT. Pour garder le trafic Bedrock hors du chemin public, créez un endpoint VPC d'interface `bedrock-runtime` et pointez l'`base_url` upstream vers celui-ci, comme indiqué dans la [référence upstream Bedrock](/docs/fr/claude-apps-gateway-config#amazon-bedrock) ; l'IdP a toujours besoin d'une sortie Internet.

431 433 

432 Terminez en donnant aux développeurs un nom d'hôte privé résolvable : dans une zone hébergée privée Route 53, aliasez le nom DNS interne de la passerelle à l'ALB, et définissez `listen.public_url` sur ce nom d'hôte. Le nom `*.elb.amazonaws.com` propre de l'ALB se résout en adresses privées sur un ALB interne, mais il ne peut pas porter votre certificat ACM, donc utilisez votre propre nom.434 Terminez en donnant aux développeurs un nom d'hôte privé résolvable : dans une zone hébergée privée Route 53, aliasez le nom DNS interne de la passerelle à l'ALB, et définissez `listen.public_url` sur ce nom d'hôte. Le nom `*.elb.amazonaws.com` propre de l'ALB se résout en adresses privées sur un ALB interne, mais il ne peut pas porter votre certificat ACM, donc utilisez votre propre nom.

433 435 


435 </Tab>437 </Tab>

436 438 

437 <Tab title="EKS">439 <Tab title="EKS">

438 Cette piste a besoin de `kubectl` et `eksctl` installés localement, et d'un cluster EKS existant avec un fournisseur OIDC IAM et le contrôleur AWS Load Balancer installé. Le cluster doit être sur `$VPC_ID` pour que les pods puissent atteindre le point de terminaison privé RDS, et le groupe de sécurité `claude-gateway-db` doit admettre le groupe de sécurité du pod ou du nœud du cluster à la place de `$GW_SG`.440 Cette piste a besoin de `kubectl` et `eksctl` installés localement, et d'un cluster EKS existant avec un fournisseur OIDC IAM et le contrôleur AWS Load Balancer installé. Le cluster doit être sur `$VPC_ID` pour que les pods puissent atteindre l'endpoint privé RDS, et le groupe de sécurité `claude-gateway-db` doit admettre le groupe de sécurité du pod ou du nœud du cluster à la place de `$GW_SG`.

439 441 

440 Sur EKS, la passerelle obtient ses credentials Bedrock via IRSA plutôt que les rôles ECS. La politique de confiance `ecs-tasks.amazonaws.com` de l'étape IAM ne s'applique pas ici ; IRSA a besoin d'un rôle dont la politique de confiance fédère sur le fournisseur OIDC du cluster, limité à `system:serviceaccount:claude-gateway:gateway`. `eksctl create iamserviceaccount` crée ce rôle, attache les politiques et annote le compte de service Kubernetes avec l'ARN du rôle en une seule étape. Transformez les deux documents de politique de l'étape IAM en politiques gérées qu'il peut attacher :442 Sur EKS, la passerelle obtient ses identifiants Bedrock via IRSA plutôt que les rôles ECS. La politique de confiance `ecs-tasks.amazonaws.com` de l'étape IAM ne s'applique pas ici ; IRSA a besoin d'un rôle dont la politique de confiance fédère sur le fournisseur OIDC du cluster, limité à `system:serviceaccount:claude-gateway:gateway`. `eksctl create iamserviceaccount` crée ce rôle, attache les politiques et annote le compte de service Kubernetes avec l'ARN du rôle en une seule étape. Transformez les deux documents de politique de l'étape IAM en politiques gérées qu'il peut attacher :

441 443 

442 ```bash theme={null}444 ```bash theme={null}

443 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \445 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \


453 --approve455 --approve

454 ```456 ```

455 457 

456 La politique des secrets n'est nécessaire que lorsque les pods lisent eux-mêmes Secrets Manager, comme le fait le pilote AWS du pilote CSI Secrets Store en utilisant le compte de service du pod de montage ; supprimez-la si vous créez les secrets Kubernetes d'une autre façon. Le fournisseur a besoin des deux actions de la politique : il appelle `DescribeSecret` lorsqu'il réconcilie les secrets rotatés, donc une subvention `GetSecretValue`-uniquement monte au premier déploiement mais arrête de récupérer les rotations.458 La politique des secrets n'est nécessaire que lorsque les pods lisent eux-mêmes Secrets Manager, comme le fait le fournisseur AWS du pilote CSI Secrets Store en utilisant le compte de service du pod de montage ; supprimez-la si vous créez les secrets Kubernetes d'une autre façon. Le fournisseur a besoin des deux actions de la politique : il appelle `DescribeSecret` lorsqu'il réconcilie les secrets ayant fait l'objet d'une rotation, donc une autorisation limitée à `GetSecretValue` permet le montage au premier déploiement mais cesse de récupérer les rotations.

457 459 

458 Déployez la passerelle en tant que Deployment standard plus un Service et un Ingress, comme décrit dans [Déploiement Kubernetes](/docs/fr/claude-apps-gateway-deploy#kubernetes), avec :460 Déployez la passerelle en tant que Deployment standard plus un Service et un Ingress, comme décrit dans [Déploiement Kubernetes](/docs/fr/claude-apps-gateway-deploy#kubernetes), avec :

459 461 


476 </Step>478 </Step>

477 479 

478 <Step title="Pousser l'URL de la passerelle vers les machines des développeurs">480 <Step title="Pousser l'URL de la passerelle vers les machines des développeurs">

479 La passerelle s'exécute maintenant, mais les développeurs ne peuvent pas la atteindre à partir de `/login` jusqu'à ce que l'URL de la passerelle soit sur leurs machines. Définissez `forceLoginMethod` et `forceLoginGatewayUrl` dans le [fichier de paramètres gérés](/docs/fr/claude-apps-gateway#set-the-gateway-url) que vous déployez sur chaque appareil via MDM. Il n'y a pas d'option de passerelle dans le sélecteur de connexion pour qu'un développeur sélectionne manuellement.481 La passerelle s'exécute maintenant, mais les développeurs ne peuvent pas l'atteindre à partir de `/login` tant que l'URL de la passerelle n'est pas sur leurs machines. Définissez `forceLoginMethod` et `forceLoginGatewayUrl` dans le [fichier de paramètres gérés](/docs/fr/claude-apps-gateway#set-the-gateway-url) que vous déployez sur chaque appareil via MDM. Il n'y a pas d'option de passerelle dans le sélecteur de connexion pour qu'un développeur sélectionne manuellement.

480 </Step>482 </Step>

481</Steps>483</Steps>

482 484 

sessions.md +3 −3

Details

83* Terminal : `claude --continue`, `claude --resume <session-id>` ou `claude --resume <name>` lorsque le nom correspond à une session, sans `-p`. Claude Code restaure le mode de permission dans lequel se trouvait la session, sauf dans les cas du tableau. Passez `--permission-mode` ou `--dangerously-skip-permissions` pour remplacer le mode restauré.83* Terminal : `claude --continue`, `claude --resume <session-id>` ou `claude --resume <name>` lorsque le nom correspond à une session, sans `-p`. Claude Code restaure le mode de permission dans lequel se trouvait la session, sauf dans les cas du tableau. Passez `--permission-mode` ou `--dangerously-skip-permissions` pour remplacer le mode restauré.

84* Non-interactif : `claude -p --resume` ou `claude -p --continue`. Claude Code démarre l'exécution dans le mode de permission qu'une nouvelle exécution `claude -p` démarrerait, sauf qu'une session qui s'est terminée en mode plan reprend en mode plan selon les [conditions ci-dessous](#resume-in-plan-mode-with-p).84* Non-interactif : `claude -p --resume` ou `claude -p --continue`. Claude Code démarre l'exécution dans le mode de permission qu'une nouvelle exécution `claude -p` démarrerait, sauf qu'une session qui s'est terminée en mode plan reprend en mode plan selon les [conditions ci-dessous](#resume-in-plan-mode-with-p).

85* VS Code : le panneau de conversation de l'extension. Le tableau couvre uniquement une conversation qui s'est terminée en mode plan ; pour le reste, voir [reprendre les conversations passées](/docs/fr/vs-code#resume-past-conversations).85* VS Code : le panneau de conversation de l'extension. Le tableau couvre uniquement une conversation qui s'est terminée en mode plan ; pour le reste, voir [reprendre les conversations passées](/docs/fr/vs-code#resume-past-conversations).

86* Sélecteur de sessions au lancement : une session que vous sélectionnez dans le [sélecteur de sessions](#use-the-session-picker), que vous l'ayez ouvert avec `claude --resume` seul, `claude --from-pr` ou un nom qui correspond à plus d'une session. Claude Code ne restaure pas le mode de permission stocké. Il démarre la session dans le mode de permission qu'il démarrerait une nouvelle session depuis la même ligne de commande.86* Sélecteur de sessions au lancement : une session que vous sélectionnez dans le [sélecteur de sessions](#use-the-session-picker), que vous l'ayez ouvert avec `claude --resume` seul, `claude --from-pr` ou un nom qui correspond à plus d'une session. Claude Code démarre la session dans le mode de permission dans lequel il démarrerait une nouvelle session depuis la même ligne de commande, sauf qu'une session qui s'est terminée en mode plan reprend en mode plan, à moins que vous ne passiez `--permission-mode`, `--dangerously-skip-permissions` ou `--fork-session`. Aucun autre mode de permission stocké n'est restauré.

87* `/resume` à l'intérieur d'une session, avec ou sans argument : Claude Code ne restaure pas le mode de permission stocké. La conversation vers laquelle vous basculez continue dans le mode de permission dans lequel se trouve votre session actuelle.87* `/resume` à l'intérieur d'une session, avec ou sans argument : la conversation vers laquelle vous basculez continue dans le mode de permission dans lequel se trouve votre session actuelle, sauf qu'une conversation qui s'est terminée en mode plan reprend en mode plan, même si vous avez lancé Claude Code avec `--permission-mode` ou `--dangerously-skip-permissions`. Si cette conversation était déjà ouverte plus tôt dans cette exécution de Claude Code, comme la conversation dans laquelle vous avez commencé ou une conversation que vous avez quittée avec `/clear` ou `/resume`, elle continue plutôt dans votre mode de permission actuel.

88 88 

89La restauration du mode plan sur les chemins non-interactif et VS Code nécessite Claude Code v2.1.246 ou ultérieur. Chaque ligne nomme le mode de permission dans lequel la session s'est terminée, lequel des chemins terminal, non-interactif et VS Code vous la reprenez par, et le mode de permission dans lequel Claude Code démarre la session reprise.89La restauration du mode plan sur les chemins non-interactif et VS Code nécessite Claude Code v2.1.246 ou ultérieur. Chaque ligne nomme le mode de permission dans lequel la session s'est terminée, lequel des chemins terminal, non-interactif et VS Code vous la reprenez par, et le mode de permission dans lequel Claude Code démarre la session reprise.

90 90 

91| Session terminée en | Comment vous la reprenez | Mode de permission après la reprise |91| Session terminée en | Comment vous la reprenez | Mode de permission après la reprise |

92| :- | :- | :- |92| :- | :- | :- |

93| `bypassPermissions` | Terminal | Le mode de permission qu'une nouvelle session démarrerait. Pour [contourner les permissions](/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode) à nouveau, activez-le au lancement avec l'un de ses drapeaux de lancement ou `permissions.defaultMode: "bypassPermissions"` dans les [paramètres utilisateur, `--settings` ou gérés](/docs/fr/settings-reference#permissions-defaultmode) |93| `bypassPermissions` | Terminal | Le mode de permission qu'une nouvelle session démarrerait. Pour [contourner les permissions](/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode) à nouveau, activez-le au lancement avec l'un de ses drapeaux de lancement ou `permissions.defaultMode: "bypassPermissions"` dans les [paramètres utilisateur, `--settings` ou gérés](/docs/fr/settings-reference#permissions-defaultmode) |

94| `plan` | Terminal | Le mode de permission qu'une nouvelle session démarrerait |94| `plan` | Terminal | Mode plan. Avec `--fork-session`, le mode de permission dans lequel une nouvelle session démarrerait |

95| `auto` | Terminal | `auto`, uniquement lorsque votre compte répond toujours aux [exigences du mode auto](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode) |95| `auto` | Terminal | `auto`, uniquement lorsque votre compte répond toujours aux [exigences du mode auto](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode) |

96| Manuel | Terminal | Manuel lorsqu'une nouvelle session démarrerait en mode auto à partir de la [valeur par défaut intégrée](/docs/fr/permission-modes#which-mode-a-session-starts-in). Lorsqu'un `defaultMode` d'un fichier de paramètres [prend effet](/docs/fr/permission-modes#which-mode-a-session-starts-in), Claude Code démarre la session reprise dans ce mode à la place |96| Manuel | Terminal | Manuel lorsqu'une nouvelle session démarrerait en mode auto à partir de la [valeur par défaut intégrée](/docs/fr/permission-modes#which-mode-a-session-starts-in). Lorsqu'un `defaultMode` d'un fichier de paramètres [prend effet](/docs/fr/permission-modes#which-mode-a-session-starts-in), Claude Code démarre la session reprise dans ce mode à la place |

97| `plan` | Non-interactif, selon les [conditions ci-dessous](#resume-in-plan-mode-with-p) | Mode plan |97| `plan` | Non-interactif, selon les [conditions ci-dessous](#resume-in-plan-mode-with-p) | Mode plan |