claude-apps-gateway-deploy.md +28 −26
6 6
7> Registrare il gateway con il vostro IdP, costruire il container, distribuire su Kubernetes o Cloud Run, e gestirlo: controlli di integrità, rotazione dei segreti, aggiornamenti e sicurezza.7> Registrare il gateway con il vostro IdP, costruire il container, distribuire su Kubernetes o Cloud Run, e gestirlo: controlli di integrità, rotazione dei segreti, aggiornamenti e sicurezza.
8 8
99Questa pagina copre il lato operativo dell'esecuzione del [gateway delle app Claude](/it/claude-apps-gateway): registrazione di un client OAuth nel vostro provider di identità (IdP), distribuzione del gateway come container, e gestione quotidiana. Per ogni opzione nel file `gateway.yaml` che il gateway legge all'avvio, consultare il [Riferimento di configurazione](/it/claude-apps-gateway-config).Questa pagina copre il lato operativo dell'esecuzione del [gateway delle app Claude](/docs/it/claude-apps-gateway): registrazione di un client OAuth nel vostro provider di identità (IdP), distribuzione del gateway come container, e gestione quotidiana. Per ogni opzione nel file `gateway.yaml` che il gateway legge all'avvio, consultare il [Riferimento di configurazione](/docs/it/claude-apps-gateway-config).
10 10
11Una distribuzione in produzione segue quattro passaggi in ordine, e le sezioni sottostanti li corrispondono. I primi due sono dove fate scelte; i secondi due sono materiale di riferimento da consultare una volta che è in esecuzione.11Una distribuzione in produzione segue quattro passaggi in ordine, e le sezioni sottostanti li corrispondono. I primi due sono dove fate scelte; i secondi due sono materiale di riferimento da consultare una volta che è in esecuzione.
12 12
31 31
32Qualsiasi IdP conforme a OIDC funziona: Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex, PingFederate e altri. L'IdP deve soddisfare tre requisiti:32Qualsiasi IdP conforme a OIDC funziona: Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex, PingFederate e altri. L'IdP deve soddisfare tre requisiti:
33 33
3434* Serve `/.well-known/openid-configuration`, su HTTPS in produzione; il gateway accetta un [`http://` issuer](/it/claude-apps-gateway-config#oidc), e un issuer loopback richiede inoltre `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`* Serve `/.well-known/openid-configuration`, su HTTPS in produzione; il gateway accetta un [`http://` issuer](/docs/it/claude-apps-gateway-config#oidc), e un issuer loopback richiede inoltre `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`
35* Supporta il flusso authorization-code. PKCE (Proof Key for Code Exchange) è attivo per impostazione predefinita; disabilitalo con `oidc.use_pkce: false` per IdP che non lo supportano35* Supporta il flusso authorization-code. PKCE (Proof Key for Code Exchange) è attivo per impostazione predefinita; disabilitalo con `oidc.use_pkce: false` per IdP che non lo supportano
36* Restituisce `email` e facoltativamente `groups` nell'id\_token, o li serve dall'endpoint userinfo con `oidc.userinfo_fallback: true`36* Restituisce `email` e facoltativamente `groups` nell'id\_token, o li serve dall'endpoint userinfo con `oidc.userinfo_fallback: true`
37 37
41 41
42* **Okta**: il server di autorizzazione dell'organizzazione in `https://example.okta.com` restituisce un id\_token sottile che omette `email` e `groups`, quindi imposta `oidc.userinfo_fallback: true` ogni volta che lo usi come `issuer`. Un server di autorizzazione personalizzato come `https://example.okta.com/oauth2/default` che include `email` e facoltativamente `groups` nell'id\_token li emette direttamente e non ha bisogno di fallback. Okta emette `groups` solo quando lo scope `groups` è richiesto in `oidc.scopes` e il filtro dei claim dei gruppi dell'app lo consente; `userinfo_fallback` non può riempire un claim per il quale l'IdP non è stato interrogato.42* **Okta**: il server di autorizzazione dell'organizzazione in `https://example.okta.com` restituisce un id\_token sottile che omette `email` e `groups`, quindi imposta `oidc.userinfo_fallback: true` ogni volta che lo usi come `issuer`. Un server di autorizzazione personalizzato come `https://example.okta.com/oauth2/default` che include `email` e facoltativamente `groups` nell'id\_token li emette direttamente e non ha bisogno di fallback. Okta emette `groups` solo quando lo scope `groups` è richiesto in `oidc.scopes` e il filtro dei claim dei gruppi dell'app lo consente; `userinfo_fallback` non può riempire un claim per il quale l'IdP non è stato interrogato.
43* **Microsoft Entra ID**: `issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`. Entra emette Object ID dei gruppi piuttosto che nomi, quindi usa i GUID in `managed.policies.match.groups`, o usa App Roles per nomi leggibili. Se il tuo tenant emette ruoli sotto `roles` invece di `groups`, imposta `oidc.groups_claim: roles`.43* **Microsoft Entra ID**: `issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`. Entra emette Object ID dei gruppi piuttosto che nomi, quindi usa i GUID in `managed.policies.match.groups`, o usa App Roles per nomi leggibili. Se il tuo tenant emette ruoli sotto `roles` invece di `groups`, imposta `oidc.groups_claim: roles`.
4444* **Google Workspace**: `issuer` = `https://accounts.google.com`. L'id\_token di Google non contiene gruppi. Per usare `allowed_groups` basato su gruppi o `managed.policies` con Google come IdP, configura [`oidc.google_groups`](/it/claude-apps-gateway-config#oidc), che cerca i gruppi di ogni utente tramite l'API Admin SDK Directory usando un account di servizio con delega a livello di dominio. Senza di esso, usa `oidc.allowed_email_domains` per il gating dell'appartenenza e `managed.policies.match.email_domain` per l'assegnazione della policy. Google ignora anche lo scope standard `offline_access`. Per i token di aggiornamento, imposta `oidc.scopes: [openid, profile, email]` e `oidc.extra_auth_params: { access_type: offline, prompt: consent }`.* **Google Workspace**: `issuer` = `https://accounts.google.com`. L'id\_token di Google non contiene gruppi. Per usare `allowed_groups` basato su gruppi o `managed.policies` con Google come IdP, configura [`oidc.google_groups`](/docs/it/claude-apps-gateway-config#oidc), che cerca i gruppi di ogni utente tramite l'API Admin SDK Directory usando un account di servizio con delega a livello di dominio. Senza di esso, usa `oidc.allowed_email_domains` per il gating dell'appartenenza e `managed.policies.match.email_domain` per l'assegnazione della policy. Google ignora anche lo scope standard `offline_access`. Per i token di aggiornamento, imposta `oidc.scopes: [openid, profile, email]` e `oidc.extra_auth_params: { access_type: offline, prompt: consent }`.
45 45
46Per supporto con un provider di identità non trattato sopra, vedi [Troubleshooting](#troubleshooting).46Per supporto con un provider di identità non trattato sopra, vedi [Troubleshooting](#troubleshooting).
47 47
48<Warning>48<Warning>
49 I token di aggiornamento consentono al gateway di rinnovare silenziosamente la sessione di uno sviluppatore, senza inviare lo sviluppatore al browser. Guidano anche il deprovisioning, perché quando l'IdP disabilita un utente, il prossimo aggiornamento fallisce e la sessione termina entro `ttl_hours`. Il gateway richiede `offline_access` per impostazione predefinita per ottenere un token di aggiornamento. Se il tuo IdP richiede il consenso esplicito per l'accesso offline, configura il client OAuth per consentirlo.49 I token di aggiornamento consentono al gateway di rinnovare silenziosamente la sessione di uno sviluppatore, senza inviare lo sviluppatore al browser. Guidano anche il deprovisioning, perché quando l'IdP disabilita un utente, il prossimo aggiornamento fallisce e la sessione termina entro `ttl_hours`. Il gateway richiede `offline_access` per impostazione predefinita per ottenere un token di aggiornamento. Se il tuo IdP richiede il consenso esplicito per l'accesso offline, configura il client OAuth per consentirlo.
50 50
5151 Se il tuo IdP non può emettere token di aggiornamento affatto, il gateway funziona comunque, ma non c'è rinnovamento silenzioso, quindi gli sviluppatori rieseguono l'accesso al browser quando la loro sessione scade. Per evitare che ciò accada ogni ora, aumenta [`session.ttl_hours`](/it/claude-apps-gateway-config#session) a `8` o `12`. Il compromesso è la latenza di deprovisioning, perché senza token di aggiornamento un utente disabilitato mantiene l'accesso fino a quando il TTL più lungo non scade. Se il tuo IdP non può emettere token di aggiornamento affatto, il gateway funziona comunque, ma non c'è rinnovamento silenzioso, quindi gli sviluppatori rieseguono l'accesso al browser quando la loro sessione scade. Per evitare che ciò accada ogni ora, aumenta [`session.ttl_hours`](/docs/it/claude-apps-gateway-config#session) a `8` o `12`. Il compromesso è la latenza di deprovisioning, perché senza token di aggiornamento un utente disabilitato mantiene l'accesso fino a quando il TTL più lungo non scade.
52</Warning>52</Warning>
53 53
54<h2 id="deployment">54<h2 id="deployment">
62Alcune decisioni modellano la distribuzione oltre a dove viene eseguita:62Alcune decisioni modellano la distribuzione oltre a dove viene eseguita:
63 63
64* **Costo**: non c'è una licenza separata o una tassa per posto per il gateway; fa parte del binario `claude`. Paghi per l'inferenza attraverso il tuo impegno cloud o Anthropic esistente, più il calcolo per il container e il tuo collettore di telemetria.64* **Costo**: non c'è una licenza separata o una tassa per posto per il gateway; fa parte del binario `claude`. Paghi per l'inferenza attraverso il tuo impegno cloud o Anthropic esistente, più il calcolo per il container e il tuo collettore di telemetria.
6565* **Bypass**: il gateway non applica che l'unica rotta a un modello passi attraverso di esso. Uno sviluppatore con la propria credenziale può comunque chiamare il provider direttamente, quindi chiudere quel percorso è una decisione di policy di rete, ad esempio bloccando l'uscita verso `api.anthropic.com` tranne dal gateway. Bloccare anche quell'uscita interrompe il [controllo di sicurezza del dominio WebFetch](/it/data-usage#webfetch-domain-safety-check), che chiama `api.anthropic.com` da ogni macchina dello sviluppatore; imposta `skipWebFetchPreflight: true` nella policy gestita per disabilitarlo.* **Bypass**: il gateway non applica che l'unica rotta a un modello passi attraverso di esso. Uno sviluppatore con la propria credenziale può comunque chiamare il provider direttamente, quindi chiudere quel percorso è una decisione di policy di rete, ad esempio bloccando l'uscita verso `api.anthropic.com` tranne dal gateway. Bloccare anche quell'uscita interrompe il [controllo di sicurezza del dominio WebFetch](/docs/it/data-usage#webfetch-domain-safety-check), che chiama `api.anthropic.com` da ogni macchina dello sviluppatore; imposta `skipWebFetchPreflight: true` nella policy gestita per disabilitarlo.
66* **Gateway multipli**: ogni gateway è una distribuzione separata con la sua configurazione. Il CLI memorizza la sua impronta digitale di fiducia e le credenziali per nome host del gateway, quindi diversi team possono connettersi a gateway diversi senza conflitto. Per servire più emittenti OIDC, esegui istanze separate.66* **Gateway multipli**: ogni gateway è una distribuzione separata con la sua configurazione. Il CLI memorizza la sua impronta digitale di fiducia e le credenziali per nome host del gateway, quindi diversi team possono connettersi a gateway diversi senza conflitto. Per servire più emittenti OIDC, esegui istanze separate.
67* **Serverless**: Cloud Run funziona; imposta `min-instances: 1` per evitare il cold start della scoperta OIDC. Lambda e Cloud Functions no, perché il gateway è un server HTTP a lunga durata.67* **Serverless**: Cloud Run funziona; imposta `min-instances: 1` per evitare il cold start della scoperta OIDC. Lambda e Cloud Functions no, perché il gateway è un server HTTP a lunga durata.
68 68
6969Ogni topologia di produzione qui mette un proxy L7, come un Ingress, il front-end di Cloud Run, o un ALB, davanti alle repliche HTTP semplici. Imposta [`listen.trusted_proxies`](/it/claude-apps-gateway-config#listen) agli intervalli di origine del proxy in modo che il gateway legga gli IP client da `X-Forwarded-For`. Il gateway onora l'intestazione solo quando il peer TCP è affidabile; l'[esempio elaborato di Google Cloud](/it/claude-apps-gateway-on-gcp) ha valori concreti per topologia. Senza proxy affidabili, ogni richiesta sembra provenire dall'IP del proxy, il che comprime i limiti di velocità per IP in un bucket condiviso e registra l'IP del proxy negli eventi di audit.Ogni topologia di produzione qui mette un proxy L7, come un Ingress, il front-end di Cloud Run, o un ALB, davanti alle repliche HTTP semplici. Imposta [`listen.trusted_proxies`](/docs/it/claude-apps-gateway-config#listen) agli intervalli di origine del proxy in modo che il gateway legga gli IP client da `X-Forwarded-For`. Il gateway onora l'intestazione solo quando il peer TCP è affidabile; l'[esempio elaborato di Google Cloud](/docs/it/claude-apps-gateway-on-gcp) ha valori concreti per topologia. Senza proxy affidabili, ogni richiesta sembra provenire dall'IP del proxy, il che comprime i limiti di velocità per IP in un bucket condiviso e registra l'IP del proxy negli eventi di audit.
70 70
71<h3 id="container-image">71<h3 id="container-image">
72 Immagine del container72 Immagine del container
74 74
75Costruisci la tua immagine attorno al binario `claude` nativo dalla versione standard di Claude Code:75Costruisci la tua immagine attorno al binario `claude` nativo dalla versione standard di Claude Code:
76 76
77771. Scarica la build Linux per l'architettura della tua immagine da una versione fissa; consulta [Installa una versione specifica](/it/setup#install-a-specific-version) per l'URL di download.1. Scarica la build Linux per l'architettura della tua immagine da una versione fissa; consulta [Installa una versione specifica](/docs/it/setup#install-a-specific-version) per l'URL di download.
78782. Verificalo rispetto al `manifest.json` firmato con GPG della versione come descritto in [Integrità binaria e firma del codice](/it/setup#binary-integrity-and-code-signing).2. Verificalo rispetto al `manifest.json` firmato con GPG della versione come descritto in [Integrità binaria e firma del codice](/docs/it/setup#binary-integrity-and-code-signing).
793. Copialo nel contesto di build.793. Copialo nel contesto di build.
80 80
81Specchia la versione nel tuo registro interno se le tue build non possono raggiungere l'host della versione, e fissa la versione che la tua flotta esegue.81Specchia la versione nel tuo registro interno se le tue build non possono raggiungere l'host della versione, e fissa la versione che la tua flotta esegue.
82 82
83Oltre al binario, l'immagine ha bisogno di:83Oltre al binario, l'immagine ha bisogno di:
84 84
8585* **Un'immagine basata su glibc**: la build glibc ha solo dipendenze dinamiche dalle librerie glibc. Le immagini basate su Musl hanno bisogno della build `linux-x64-musl` o `linux-arm64-musl` più pacchetti aggiuntivi; consulta [Configurazione di Alpine Linux](/it/setup#alpine-linux-and-musl-based-distributions).* **Un'immagine basata su glibc**: la build glibc ha solo dipendenze dinamiche dalle librerie glibc. Le immagini basate su Musl hanno bisogno della build `linux-x64-musl` o `linux-arm64-musl` più pacchetti aggiuntivi; consulta [Configurazione di Alpine Linux](/docs/it/setup#alpine-linux-and-musl-based-distributions).
86* **Una directory di stato scrivibile**: il gateway funziona come qualsiasi utente, ma le immagini minime non hanno home scrivibile. Imposta `CLAUDE_CONFIG_DIR` a un percorso scrivibile come `/tmp/.claude`.86* **Una directory di stato scrivibile**: il gateway funziona come qualsiasi utente, ma le immagini minime non hanno home scrivibile. Imposta `CLAUDE_CONFIG_DIR` a un percorso scrivibile come `/tmp/.claude`.
87* **Il comando del container**: `claude gateway --config /etc/claude/gateway.yaml`, con il file di configurazione montato in sola lettura e i segreti forniti come variabili di ambiente; il gateway ascolta su `listen.port`, predefinito `8080`.87* **Il comando del container**: `claude gateway --config /etc/claude/gateway.yaml`, con il file di configurazione montato in sola lettura e i segreti forniti come variabili di ambiente; il gateway ascolta su `listen.port`, predefinito `8080`.
88 88
99<Note>99<Note>
100 **Workload identity**100 **Workload identity**
101 101
102102 Preferisci l'identità del workload della piattaforma rispetto alle chiavi statiche: IRSA su EKS per Bedrock e per Claude Platform su AWS, Workload Identity su GKE per Agent Platform, e workload identity su AKS per Foundry. Imposta `auth: {}` nel blocco upstream, o `use_azure_ad: true` per Foundry, e il gateway raccoglie l'identità del pod attraverso la catena di credenziali predefinita di quel provider. Per un accoppiamento cross-cloud, come un upstream Bedrock su GKE, imposta credenziali esplicite nel blocco `auth` dell'upstream. Il [riferimento `upstreams`](/it/claude-apps-gateway-config#upstreams) ha dettagli di configurazione per piattaforma. Preferisci l'identità del workload della piattaforma rispetto alle chiavi statiche: IRSA su EKS per Bedrock e per Claude Platform su AWS, Workload Identity su GKE per Agent Platform, e workload identity su AKS per Foundry. Imposta `auth: {}` nel blocco upstream, o `use_azure_ad: true` per Foundry, e il gateway raccoglie l'identità del pod attraverso la catena di credenziali predefinita di quel provider. Per un accoppiamento cross-cloud, come un upstream Bedrock su GKE, imposta credenziali esplicite nel blocco `auth` dell'upstream. Il [riferimento `upstreams`](/docs/it/claude-apps-gateway-config#upstreams) ha dettagli di configurazione per piattaforma.
103</Note>103</Note>
104 104
105<h3 id="cloud-run">105<h3 id="cloud-run">
109Configura il servizio come segue:109Configura il servizio come segue:
110 110
111* Lascia `listen.port` al suo predefinito di `8080`, che corrisponde al `PORT` predefinito di Cloud Run, o imposta `port: ${PORT}`111* Lascia `listen.port` al suo predefinito di `8080`, che corrisponde al `PORT` predefinito di Cloud Run, o imposta `port: ${PORT}`
112112* Imposta `public_url` all'origine esternamente raggiungibile. Per la produzione questo è normalmente il nome host di un load balancer interno, perché `/login` [rifiuta gli indirizzi pubblici](/it/claude-apps-gateway#prerequisites) e l'URL `*.run.app` si risolve in uno, quindi l'URL di Cloud Run da solo funziona solo per un test di fumo `curl` o browser. L'eccezione è una rete dove `*.run.app` si risolve privatamente tramite Private Service Connect e una zona privata di Cloud DNS; in quella topologia l'URL di Cloud Run è un `public_url` valido. L'[esempio elaborato di Google Cloud](/it/claude-apps-gateway-on-gcp#deploy-the-gateway) copre entrambi.* Imposta `public_url` all'origine esternamente raggiungibile. Per la produzione questo è normalmente il nome host di un load balancer interno, perché `/login` [rifiuta gli indirizzi pubblici](/docs/it/claude-apps-gateway#prerequisites) e l'URL `*.run.app` si risolve in uno, quindi l'URL di Cloud Run da solo funziona solo per un test di fumo `curl` o browser. L'eccezione è una rete dove `*.run.app` si risolve privatamente tramite Private Service Connect e una zona privata di Cloud DNS; in quella topologia l'URL di Cloud Run è un `public_url` valido. L'[esempio elaborato di Google Cloud](/docs/it/claude-apps-gateway-on-gcp#deploy-the-gateway) copre entrambi.
113* Monta la configurazione come volume segreto113* Monta la configurazione come volume segreto
114* Imposta `min-instances: 1` per evitare il cold start della scoperta OIDC alla prima richiesta114* Imposta `min-instances: 1` per evitare il cold start della scoperta OIDC alla prima richiesta
115 115
116<Note>116<Note>
117117 Per un esempio elaborato completo su Google Cloud, che copre Cloud Run o GKE, Cloud SQL e Secret Manager, consulta [Distribuisci su Google Cloud](/it/claude-apps-gateway-on-gcp). Per un esempio elaborato completo su Google Cloud, che copre Cloud Run o GKE, Cloud SQL e Secret Manager, consulta [Distribuisci su Google Cloud](/docs/it/claude-apps-gateway-on-gcp).
118</Note>118</Note>
119 119
120<h3 id="push-the-gateway-url-to-developer-machines">120<h3 id="push-the-gateway-url-to-developer-machines">
121 Invia l'URL del gateway alle macchine degli sviluppatori121 Invia l'URL del gateway alle macchine degli sviluppatori
122</h3>122</h3>
123 123
124124Una volta che il gateway è in servizio, invia `forceLoginMethod` e `forceLoginGatewayUrl` a ogni macchina dello sviluppatore tramite impostazioni gestite, tramite MDM o scrivendo direttamente il `managed-settings.json` per OS. Senza questo, `/login` mostra il selettore di account standard senza opzione gateway. Consulta [Impostazioni gestite lato client](/it/claude-apps-gateway-config#client-side-managed-settings) per i percorsi dei file.Una volta che il gateway è in servizio, invia `forceLoginMethod` e `forceLoginGatewayUrl` a ogni macchina dello sviluppatore tramite impostazioni gestite, tramite MDM o scrivendo direttamente il `managed-settings.json` per OS. Senza questo, `/login` mostra il selettore di account standard senza opzione gateway. Consulta [Impostazioni gestite lato client](/docs/it/claude-apps-gateway-config#client-side-managed-settings) per i percorsi dei file.
125 125
126<h2 id="operations">126<h2 id="operations">
127 Operazioni127 Operazioni
160 160
161* **Sessioni esistenti**: i bearer token si convalidano localmente con il segreto JWT, gli aggiornamenti della sessione non toccano lo store, e il processo del gateway può comunque servire l'inferenza161* **Sessioni esistenti**: i bearer token si convalidano localmente con il segreto JWT, gli aggiornamenti della sessione non toccano lo store, e il processo del gateway può comunque servire l'inferenza
162* **Nuovi accessi**: falliscono fino al recupero di Postgres, perché il flusso del dispositivo e i suoi contatori di limite di velocità vivono in Postgres162* **Nuovi accessi**: falliscono fino al recupero di Postgres, perché il flusso del dispositivo e i suoi contatori di limite di velocità vivono in Postgres
163163* **[Applicazione del limite di spesa](/it/claude-apps-gateway-spend-limits#postgres-availability)**: fallisce aperto per impostazione predefinita durante l'interruzione, quindi l'inferenza continua a fluire; capovolgilo per fallire chiuso se preferisci bloccare piuttosto che eseguire senza misurazione* **[Applicazione del limite di spesa](/docs/it/claude-apps-gateway-spend-limits#postgres-availability)**: fallisce aperto per impostazione predefinita durante l'interruzione, quindi l'inferenza continua a fluire; capovolgilo per fallire chiuso se preferisci bloccare piuttosto che eseguire senza misurazione
164* **Readiness**: `/readyz` segnala non-ready durante l'interruzione, quindi gli orchestrator che controllano il traffico sulla readiness rimuovono ogni replica dalla rotazione contemporaneamente. In quella topologia tutto il traffico, inclusa l'inferenza che il gateway potrebbe comunque servire, fallisce al load balancer fino al recupero di Postgres. La sonda di liveness su `/healthz` continua a passare, quindi le repliche non vengono riavviate. Punta la sonda di readiness a `/healthz` invece se preferisci che gli sviluppatori che hanno effettuato l'accesso continuino a lavorare attraverso un'interruzione dello store; il costo è che i nuovi accessi falliscono contro una replica che ancora segnala ready.164* **Readiness**: `/readyz` segnala non-ready durante l'interruzione, quindi gli orchestrator che controllano il traffico sulla readiness rimuovono ogni replica dalla rotazione contemporaneamente. In quella topologia tutto il traffico, inclusa l'inferenza che il gateway potrebbe comunque servire, fallisce al load balancer fino al recupero di Postgres. La sonda di liveness su `/healthz` continua a passare, quindi le repliche non vengono riavviate. Punta la sonda di readiness a `/healthz` invece se preferisci che gli sviluppatori che hanno effettuato l'accesso continuino a lavorare attraverso un'interruzione dello store; il costo è che i nuovi accessi falliscono contro una replica che ancora segnala ready.
165 165
166Se il tuo IdP si arresta, le sessioni esistenti funzionano fino a `ttl_hours`, e i nuovi accessi e aggiornamenti falliscono. Imposta un `ttl_hours` più lungo se il tuo IdP ha frequenti finestre di manutenzione.166Se il tuo IdP si arresta, le sessioni esistenti funzionano fino a `ttl_hours`, e i nuovi accessi e aggiornamenti falliscono. Imposta un `ttl_hours` più lungo se il tuo IdP ha frequenti finestre di manutenzione.
191| `admin_audit` | Traccia di mutazione dell'API admin | `admin.audit_retention_days`, predefinito 365 |191| `admin_audit` | Traccia di mutazione dell'API admin | `admin.audit_retention_days`, predefinito 365 |
192| `principal_emails` | Email dell'ultimo accesso di ogni principale, nome visualizzato e gruppi IdP. Contiene PII. | `admin.identity_retention_days` dall'ultima attività, predefinito 90 |192| `principal_emails` | Email dell'ultimo accesso di ogni principale, nome visualizzato e gruppi IdP. Contiene PII. | `admin.identity_retention_days` dall'ultima attività, predefinito 90 |
193 193
194194Un ciclo di 30 secondi scade le righe `kv` oltre il loro TTL, e una pulizia oraria applica le finestre di conservazione sulle tabelle di spesa, quindi nulla cresce senza limiti. Senza [limiti di spesa](/it/claude-apps-gateway-spend-limits) configurati, solo `kv` viene scritto. Se la tua policy di sicurezza proibisce DDL dal ruolo dell'applicazione, pre-crea queste tabelle e `_migrations` con un ruolo admin e concedi al ruolo dell'app `SELECT, INSERT, UPDATE, DELETE` su ciascuno.Un ciclo di 30 secondi scade le righe `kv` oltre il loro TTL, e una pulizia oraria applica le finestre di conservazione sulle tabelle di spesa, quindi nulla cresce senza limiti. Senza [limiti di spesa](/docs/it/claude-apps-gateway-spend-limits) configurati, solo `kv` viene scritto. Se la tua policy di sicurezza proibisce DDL dal ruolo dell'applicazione, pre-crea queste tabelle e `_migrations` con un ruolo admin e concedi al ruolo dell'app `SELECT, INSERT, UPDATE, DELETE` su ciascuno.
195 195
196Con limiti di spesa in uso, un database perso significa perdita di tracciamento della spesa e limiti, non solo re-accessi degli sviluppatori, quindi esegui backup regolari. Per cancellare immediatamente uno sviluppatore partito piuttosto che aspettare la conservazione, esegui `DELETE FROM principal_emails WHERE principal = '<sub>'` direttamente; questo rimuove l'unica tabella che contiene la loro email, nome e gruppi. Le righe `spend` e `admin_audit` fanno riferimento solo allo pseudonimo OIDC `sub`.196Con limiti di spesa in uso, un database perso significa perdita di tracciamento della spesa e limiti, non solo re-accessi degli sviluppatori, quindi esegui backup regolari. Per cancellare immediatamente uno sviluppatore partito piuttosto che aspettare la conservazione, esegui `DELETE FROM principal_emails WHERE principal = '<sub>'` direttamente; questo rimuove l'unica tabella che contiene la loro email, nome e gruppi. Le righe `spend` e `admin_audit` fanno riferimento solo allo pseudonimo OIDC `sub`.
197 197
218| Dati | Percorso | Inviato ad Anthropic dal gateway |218| Dati | Percorso | Inviato ad Anthropic dal gateway |
219| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------- |219| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------- |
220| Inferenza (prompt, completamenti) | CLI → gateway → il tuo upstream | Solo se l'API Anthropic è un upstream configurato |220| Inferenza (prompt, completamenti) | CLI → gateway → il tuo upstream | Solo se l'API Anthropic è un upstream configurato |
221221| Telemetria (metriche OTLP, più [log e tracce opt-in](/it/claude-apps-gateway-config#telemetry)) | CLI → gateway → il tuo collettore | Mai || Telemetria (metriche OTLP, più [log e tracce opt-in](/docs/it/claude-apps-gateway-config#telemetry)) | CLI → gateway → il tuo collettore | Mai |
222| Identità (email, gruppi, sub) | IdP → gateway → JWT → CLI; il CLI lo marca sulle esportazioni OTLP | Mai |222| Identità (email, gruppi, sub) | IdP → gateway → JWT → CLI; il CLI lo marca sulle esportazioni OTLP | Mai |
223| Impostazioni gestite | Il tuo gateway YAML → CLI | Mai |223| Impostazioni gestite | Il tuo gateway YAML → CLI | Mai |
224| Log di audit | Gateway stderr → il tuo aggregatore | Mai |224| Log di audit | Gateway stderr → il tuo aggregatore | Mai |
237 237
238Due minacce sono fuori ambito perché sono la tua infrastruttura da proteggere:238Due minacce sono fuori ambito perché sono la tua infrastruttura da proteggere:
239 239
240240* **Un host gateway compromesso**: l'host sia contiene la credenziale upstream che distribuisce [impostazioni gestite](/it/claude-apps-gateway-config#managed) a ogni sviluppatore connesso, quindi il controllo sulla configurazione del gateway è paragonabile al controllo sul tuo MDM. La finestra di dialogo di approvazione una tantum del CLI per le impostazioni in grado di shell limita i cambiamenti silenziosi ma non sostituisce la sicurezza dell'host.* **Un host gateway compromesso**: l'host sia contiene la credenziale upstream che distribuisce [impostazioni gestite](/docs/it/claude-apps-gateway-config#managed) a ogni sviluppatore connesso, quindi il controllo sulla configurazione del gateway è paragonabile al controllo sul tuo MDM. La finestra di dialogo di approvazione una tantum del CLI per le impostazioni in grado di shell limita i cambiamenti silenziosi ma non sostituisce la sicurezza dell'host.
241* **Un provider OIDC malintenzionato**: il provider firma gli id\_token che il gateway si fida, quindi può asserire qualsiasi identità. Il vetting e la protezione del tuo IdP è tua responsabilità.241* **Un provider OIDC malintenzionato**: il provider firma gli id\_token che il gateway si fida, quindi può asserire qualsiasi identità. Il vetting e la protezione del tuo IdP è tua responsabilità.
242 242
243<h3 id="user-code-brute-force-resistance">243<h3 id="user-code-brute-force-resistance">
246 246
247Il `user_code` che uno sviluppatore digita nella pagina di verifica `/device` è di 8 caratteri tratti da un alfabeto di 20 caratteri, che produce 20⁸ o circa 2,56×10¹⁰ combinazioni, e scade dopo 10 minuti.247Il `user_code` che uno sviluppatore digita nella pagina di verifica `/device` è di 8 caratteri tratti da un alfabeto di 20 caratteri, che produce 20⁸ o circa 2,56×10¹⁰ combinazioni, e scade dopo 10 minuti.
248 248
249249Il gateway applica limiti di velocità per IP sugli endpoint di concessione del dispositivo, configurabili tramite [`rate_limits`](/it/claude-apps-gateway-config#http-tuning). Aumenta i limiti se molti sviluppatori accedono da un singolo indirizzo NAT aziendale condiviso. I limiti si applicano solo al flusso di accesso, non all'inferenza.Il gateway applica limiti di velocità per IP sugli endpoint di concessione del dispositivo, configurabili tramite [`rate_limits`](/docs/it/claude-apps-gateway-config#http-tuning). Aumenta i limiti se molti sviluppatori accedono da un singolo indirizzo NAT aziendale condiviso. I limiti si applicano solo al flusso di accesso, non all'inferenza.
250 250
251<h3 id="compliance-posture">251<h3 id="compliance-posture">
252 Postura di conformità252 Postura di conformità
255* **Residenza dei dati**: il piano dati del gateway stesso non invia nulla ad Anthropic a meno che l'API Anthropic non sia un upstream configurato; quando lo è, il tuo accordo di gestione dei dati esistente si applica al percorso di inferenza. Telemetria, audit, identità e impostazioni vanno solo alle destinazioni che configuri.255* **Residenza dei dati**: il piano dati del gateway stesso non invia nulla ad Anthropic a meno che l'API Anthropic non sia un upstream configurato; quando lo è, il tuo accordo di gestione dei dati esistente si applica al percorso di inferenza. Telemetria, audit, identità e impostazioni vanno solo alle destinazioni che configuri.
256* **Traffico del processo host**: il processo host è il CLI di Claude Code, che può inviare analitiche di avvio e controlli di aggiornamento ad Anthropic. Per distribuzioni con uscita ristretta, imposta `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` nell'ambiente del container del gateway.256* **Traffico del processo host**: il processo host è il CLI di Claude Code, che può inviare analitiche di avvio e controlli di aggiornamento ad Anthropic. Per distribuzioni con uscita ristretta, imposta `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` nell'ambiente del container del gateway.
257* **Analitiche client**: il CLI disabilita la sua stessa analittica di utilizzo mentre è connesso a un gateway, e la segnalazione degli errori è disattivata per impostazione predefinita su superfici API di terze parti.257* **Analitiche client**: il CLI disabilita la sua stessa analittica di utilizzo mentre è connesso a un gateway, e la segnalazione degli errori è disattivata per impostazione predefinita su superfici API di terze parti.
258258* **Macchine client**: i CLI degli sviluppatori inviano comunque controlli del nome host WebFetch e controlli della versione ad Anthropic a meno che `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` e `skipWebFetchPreflight: true` non siano impostati. Consulta [utilizzo dei dati](/it/data-usage).* **Macchine client**: i CLI degli sviluppatori inviano comunque controlli del nome host WebFetch e controlli della versione ad Anthropic a meno che `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` e `skipWebFetchPreflight: true` non siano impostati. Consulta [utilizzo dei dati](/docs/it/data-usage).
259* **Valutazioni del sondaggio**: la credenziale del gateway disabilita il sink di valutazione legato ad Anthropic, quindi le valutazioni non vengono inviate ad Anthropic.259* **Valutazioni del sondaggio**: la credenziale del gateway disabilita il sink di valutazione legato ad Anthropic, quindi le valutazioni non vengono inviate ad Anthropic.
260* **Condivisione della trascrizione**: scegliere Sì su un prompt di condivisione della trascrizione di un sondaggio scrive un file locale sotto `~/.claude/feedback-bundles/` invece di caricare su Anthropic.260* **Condivisione della trascrizione**: scegliere Sì su un prompt di condivisione della trascrizione di un sondaggio scrive un file locale sotto `~/.claude/feedback-bundles/` invece di caricare su Anthropic.
261* **Aggiornamenti client**: i controlli di aggiornamento sono separati dal traffico del gateway. Fissa le versioni attraverso la tua distribuzione e imposta `DISABLE_UPDATES` se i laptop non devono recuperare le versioni. `DISABLE_AUTOUPDATER` interrompe solo gli aggiornamenti in background mentre `claude update` funziona ancora.261* **Aggiornamenti client**: i controlli di aggiornamento sono separati dal traffico del gateway. Fissa le versioni attraverso la tua distribuzione e imposta `DISABLE_UPDATES` se i laptop non devono recuperare le versioni. `DISABLE_AUTOUPDATER` interrompe solo gli aggiornamenti in background mentre `claude update` funziona ancora.
262* **TLS**: servi `public_url` su HTTPS in produzione, sia dal listener proprio del gateway tramite `listen.tls` che da un ingress che termina TLS davanti alle repliche HTTP semplici con `listen.public_url` impostato. Il gateway non rifiuta HTTP semplice. L'IdP deve servire HTTPS in produzione, e Postgres supporta `?sslmode=require`. Imposta `Strict-Transport-Security` al tuo ingress.262* **TLS**: servi `public_url` su HTTPS in produzione, sia dal listener proprio del gateway tramite `listen.tls` che da un ingress che termina TLS davanti alle repliche HTTP semplici con `listen.public_url` impostato. Il gateway non rifiuta HTTP semplice. L'IdP deve servire HTTPS in produzione, e Postgres supporta `?sslmode=require`. Imposta `Strict-Transport-Security` al tuo ingress.
263263* **Divulgazione di vulnerabilità**: segui [Segnalazione di problemi di sicurezza](/it/security#reporting-security-issues)* **Divulgazione di vulnerabilità**: segui [Segnalazione di problemi di sicurezza](/docs/it/security#reporting-security-issues)
264 264
265<h2 id="troubleshooting">265<h2 id="troubleshooting">
266 Risoluzione dei problemi266 Risoluzione dei problemi
272* **Problema di accesso**: lo sviluppatore esegue `claude --debug-file ./claude-debug.txt`, riproduce, e invia quel file più il log di audit del gateway per la stessa finestra272* **Problema di accesso**: lo sviluppatore esegue `claude --debug-file ./claude-debug.txt`, riproduce, e invia quel file più il log di audit del gateway per la stessa finestra
273* **Problema di inferenza**: il modello richiesto, gli upstream configurati, e il log di audit del gateway per la richiesta, che registra quale upstream l'ha servita e lo stato della risposta273* **Problema di inferenza**: il modello richiesto, gli upstream configurati, e il log di audit del gateway per la richiesta, che registra quale upstream l'ha servita e lo stato della risposta
274 274
275Lo stderr del gateway include il flusso di eventi di audit, il log di audit registra le identità degli sviluppatori e il file di debug registra l'output di hook e MCP server dalla macchina dello sviluppatore. Rivedere e oscurare questi elementi prima di pubblicare in un problema pubblico.
276
275| Sintomo | Causa | Correzione |277| Sintomo | Causa | Correzione |
276| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |278| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
277279| Lo `/login` di uno sviluppatore mostra il selettore di account standard invece della schermata **Cloud gateway** | `forceLoginMethod` o `forceLoginGatewayUrl` non è impostato nelle impostazioni gestite su quella macchina | Distribuisci il [file di impostazioni gestite](/it/claude-apps-gateway#set-the-gateway-url) al dispositivo; `/login` legge l'URL del gateway da lì || Lo `/login` di uno sviluppatore mostra il selettore di account standard invece della schermata **Cloud gateway** | `forceLoginMethod` o `forceLoginGatewayUrl` non è impostato nelle impostazioni gestite su quella macchina | Distribuisci il [file di impostazioni gestite](/docs/it/claude-apps-gateway#set-the-gateway-url) al dispositivo; `/login` legge l'URL del gateway da lì |
278| L'avvio mostra `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | La build di Claude Code installata precede il supporto del gateway | Fai aggiornare lo sviluppatore a Claude Code a una versione che include il supporto del gateway cloud |280| L'avvio mostra `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | La build di Claude Code installata precede il supporto del gateway | Fai aggiornare lo sviluppatore a Claude Code a una versione che include il supporto del gateway cloud |
279281| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | Il nome host del gateway si risolve in almeno un indirizzo IP pubblico. Claude Code controlla ogni indirizzo risolto e richiede che ogni uno sia privato. Una causa comune è un nome dual-stack dove una famiglia si risolve in un indirizzo pubblico, inclusi i load balancer dual-stack interni AWS, che restituiscono indirizzi AAAA di intervallo pubblico. | Fai risolvere il nome del gateway solo in indirizzi privati sulle macchine degli sviluppatori. Per un nome dual-stack, elimina il record di intervallo pubblico o servi un nome DNS solo interno separato. Consulta il [prerequisito di rete privata](/it/claude-apps-gateway#prerequisites). || CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | Il nome host del gateway si risolve in almeno un indirizzo IP pubblico. Claude Code controlla ogni indirizzo risolto e richiede che ogni uno sia privato. Una causa comune è un nome dual-stack dove una famiglia si risolve in un indirizzo pubblico, inclusi i load balancer dual-stack interni AWS, che restituiscono indirizzi AAAA di intervallo pubblico. | Fai risolvere il nome del gateway solo in indirizzi privati sulle macchine degli sviluppatori. Per un nome dual-stack, elimina il record di intervallo pubblico o servi un nome DNS solo interno separato. Consulta il [prerequisito di rete privata](/docs/it/claude-apps-gateway#prerequisites). |
280| CLI `/login`: `Gateway login requires a direct connection and does not support connecting through an HTTP proxy` | Un `HTTPS_PROXY` o `HTTP_PROXY` si applica all'host del gateway e il nome host del proxy si risolve in un indirizzo pubblico. Un proxy il cui host si risolve solo in indirizzi privati è consentito e non attiva questo errore | Aggiungi l'host del gateway a `NO_PROXY` sulla macchina dello sviluppatore in modo che la connessione sia diretta, o usa un proxy il cui nome host si risolve in indirizzi privati |282| CLI `/login`: `Gateway login requires a direct connection and does not support connecting through an HTTP proxy` | Un `HTTPS_PROXY` o `HTTP_PROXY` si applica all'host del gateway e il nome host del proxy si risolve in un indirizzo pubblico. Un proxy il cui host si risolve solo in indirizzi privati è consentito e non attiva questo errore | Aggiungi l'host del gateway a `NO_PROXY` sulla macchina dello sviluppatore in modo che la connessione sia diretta, o usa un proxy il cui nome host si risolve in indirizzi privati |
281| CLI `/login`: `Could not resolve gateway host <host>` | La macchina non può risolvere il nome DNS interno del gateway, tipicamente perché non è sulla rete aziendale | Fai connettere lo sviluppatore alla tua rete o VPN, quindi riprova `/login` |283| CLI `/login`: `Could not resolve gateway host <host>` | La macchina non può risolvere il nome DNS interno del gateway, tipicamente perché non è sulla rete aziendale | Fai connettere lo sviluppatore alla tua rete o VPN, quindi riprova `/login` |
282| L'avvio esce con un errore di convalida della configurazione che nomina `store.postgres_url` | Nessun Postgres configurato; il gateway richiede Postgres | Imposta `store.postgres_url`. Per lo sviluppo locale, usa un container usa e getta: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |284| L'avvio esce con un errore di convalida della configurazione che nomina `store.postgres_url` | Nessun Postgres configurato; il gateway richiede Postgres | Imposta `store.postgres_url`. Per lo sviluppo locale, usa un container usa e getta: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |
283285| L'avvio esce: `requires the native binary` | Esecuzione sotto Node invece del binario nativo | Installa Claude Code con uno dei [metodi di installazione standalone](/it/setup) || L'avvio esce: `requires the native binary` | Esecuzione sotto Node invece del binario nativo | Installa Claude Code con uno dei [metodi di installazione standalone](/docs/it/setup) |
284| L'avvio esce con un errore di scoperta OIDC dopo `config.load` | `oidc.issuer` non raggiungibile, o catena TLS non affidabile | Controlla che l'emittente sia raggiungibile dal pod e serva `/.well-known/openid-configuration`. Imposta `ca_cert_pem` per PKI privata. |286| L'avvio esce con un errore di scoperta OIDC dopo `config.load` | `oidc.issuer` non raggiungibile, o catena TLS non affidabile | Controlla che l'emittente sia raggiungibile dal pod e serva `/.well-known/openid-configuration`. Imposta `ca_cert_pem` per PKI privata. |
285| L'avvio esce con un errore di permesso di Postgres | Il ruolo dell'app manca `CREATE TABLE` | Pre-crea lo schema con un ruolo admin e concedi DML al ruolo dell'app, o concedi DDL temporaneamente per gli avvii che applicano nuove migrazioni |287| L'avvio esce con un errore di permesso di Postgres | Il ruolo dell'app manca `CREATE TABLE` | Pre-crea lo schema con un ruolo admin e concedi DML al ruolo dell'app, o concedi DDL temporaneamente per gli avvii che applicano nuove migrazioni |
286| `/oauth/callback` mostra "Sign-in could not be completed" | Dominio email rifiutato, convalida id\_token fallita, o `email_verified` è esplicitamente `false`, che il gateway rifiuta sempre senza override | Controlla `allowed_email_domains` e che l'IdP restituisca un claim `email` verificato. Per `email_verified: false`, correggi la verifica lato IdP. Se il tuo IdP emette email sotto un nome di claim diverso, imposta `oidc.email_claim`. |288| `/oauth/callback` mostra "Sign-in could not be completed" | Dominio email rifiutato, convalida id\_token fallita, o `email_verified` è esplicitamente `false`, che il gateway rifiuta sempre senza override | Controlla `allowed_email_domains` e che l'IdP restituisca un claim `email` verificato. Per `email_verified: false`, correggi la verifica lato IdP. Se il tuo IdP emette email sotto un nome di claim diverso, imposta `oidc.email_claim`. |
293| L'accesso si completa all'IdP ma il callback fallisce, con un errore CSP in Chrome o "this sign-in link has expired" in Safari | L'IdP ha restituito il codice tramite `response_mode=form_post`, che lo auto-invia cross-origin tramite POST a `/oauth/callback`. Chrome blocca quello sotto una CSP ristretta; Safari consente l'invio ma il callback legge solo la stringa di query. | Assicurati che il tuo IdP onori `response_mode=query`, che il gateway richiede esplicitamente in modo che il callback sia un reindirizzamento semplice |295| L'accesso si completa all'IdP ma il callback fallisce, con un errore CSP in Chrome o "this sign-in link has expired" in Safari | L'IdP ha restituito il codice tramite `response_mode=form_post`, che lo auto-invia cross-origin tramite POST a `/oauth/callback`. Chrome blocca quello sotto una CSP ristretta; Safari consente l'invio ma il callback legge solo la stringa di query. | Assicurati che il tuo IdP onori `response_mode=query`, che il gateway richiede esplicitamente in modo che il callback sia un reindirizzamento semplice |
294| L'accesso funziona localmente ma fallisce dietro un ALB | `public_url` non impostato, quindi l'IdP ottiene l'origine interna `http://` come `redirect_uri` | Imposta `listen.public_url` all'origine esterna `https://` |296| L'accesso funziona localmente ma fallisce dietro un ALB | `public_url` non impostato, quindi l'IdP ottiene l'origine interna `http://` come `redirect_uri` | Imposta `listen.public_url` all'origine esterna `https://` |
295| Lo sviluppatore vede il prompt di fiducia ripetutamente | Il certificato TLS ruota per replica o per richiesta | Usa un certificato stabile all'ingress, o termina TLS una volta ed esegui le repliche su HTTP semplice internamente |297| Lo sviluppatore vede il prompt di fiducia ripetutamente | Il certificato TLS ruota per replica o per richiesta | Usa un certificato stabile all'ingress, o termina TLS una volta ed esegui le repliche su HTTP semplice internamente |
296298| CLI `/login`: "Could not verify the gateway's TLS certificate" o `SELF_SIGNED_CERT_IN_CHAIN` | La catena TLS del gateway è firmata da una CA privata non nell'archivio di fiducia dell'host CLI | Claude Code legge l'archivio di fiducia del sistema operativo per impostazione predefinita sul binario nativo e su Node 22.15 o successivo; [`CLAUDE_CODE_CERT_STORE`](/it/network-config#ca-certificate-store) controlla questo comportamento. Se la CA è installata nell'archivio di fiducia del sistema operativo, assicurati che gli sviluppatori siano su un runtime corrente. Altrimenti imposta `NODE_EXTRA_CA_CERTS` al certificato CA PEM prima di lanciare. Il prompt dell'impronta digitale della prima connessione si applica comunque. || CLI `/login`: "Could not verify the gateway's TLS certificate" o `SELF_SIGNED_CERT_IN_CHAIN` | La catena TLS del gateway è firmata da una CA privata non nell'archivio di fiducia dell'host CLI | Claude Code legge l'archivio di fiducia del sistema operativo per impostazione predefinita sul binario nativo e su Node 22.15 o successivo; [`CLAUDE_CODE_CERT_STORE`](/docs/it/network-config#ca-certificate-store) controlla questo comportamento. Se la CA è installata nell'archivio di fiducia del sistema operativo, assicurati che gli sviluppatori siano su un runtime corrente. Altrimenti imposta `NODE_EXTRA_CA_CERTS` al certificato CA PEM prima di lanciare. Il prompt dell'impronta digitale della prima connessione si applica comunque. |
297 299
298<h2 id="related">300<h2 id="related">
299 Correlati301 Correlati
300</h2>302</h2>
301 303
302304* [Panoramica del gateway delle app Claude](/it/claude-apps-gateway): quickstart e connessione dello sviluppatore* [Panoramica del gateway delle app Claude](/docs/it/claude-apps-gateway): quickstart e connessione dello sviluppatore
303305* [Riferimento di configurazione](/it/claude-apps-gateway-config): ogni opzione di `gateway.yaml`* [Riferimento di configurazione](/docs/it/claude-apps-gateway-config): ogni opzione di `gateway.yaml`