Questa pagina spiega come condividere un client OAuth con un'altra applicazione all'interno della tua organizzazione.
Panoramica
La condivisione dei client OAuth tra progetti significa utilizzare un singolo client OAuth personalizzato per più applicazioni protette da Identity-Aware Proxy (IAP) anziché creare un nuovo client OAuth per ogni applicazione. Questo approccio semplifica la gestione, soprattutto per le organizzazioni con molte applicazioni.
Quando configuri IAP, puoi utilizzare uno dei due tipi di client OAuth:
Client OAuth gestito da Google: IAP lo utilizza automaticamente per impostazione predefinita. Questa opzione integrata non richiede la creazione manuale del client, ma presenta due limitazioni principali:
- Consente l'accesso solo agli utenti all'interno della tua organizzazione (utenti interni)
- Visualizza Google Cloud il branding nella schermata per il consenso anziché il branding della tua organizzazione
Client OAuth personalizzato: lo crei e lo gestisci tu. Questa opzione:
- Può essere condiviso tra più applicazioni
- Consente la personalizzazione del branding nella schermata per il consenso
- Supporta l'accesso per utenti esterni (al di fuori dell'organizzazione)
Quando crei un client OAuth personalizzato, puoi utilizzarlo con una singola applicazione o condividerlo con più applicazioni. La condivisione di un client OAuth personalizzato offre diversi vantaggi:
- Riduce l'overhead amministrativo della gestione di più clienti
- Semplifica l'attivazione di IAP per i membri del team che non devono avere accesso alla pagina Credenziali
- Facilita l'accesso programmatico (non basato su browser) alle applicazioni protette da IAP
Per informazioni sulla creazione di client OAuth, vedi Creare client OAuth per IAP. Per informazioni dettagliate sui client OAuth gestiti da Google, vedi Personalizzare una configurazione OAuth per abilitare IAP.
Prima di iniziare
Crea un nuovo client OAuth completando i passaggi descritti in Creazione del client OAuth o utilizza un client OAuth esistente.
Accesso programmatico
Configura i client OAuth per l'accesso programmatico per consentire alle applicazioni non browser di autenticarsi con le risorse protette da IAP. Ciò consente a script, job automatizzati e servizi di backend di accedere in modo sicuro alle applicazioni protette senza l'accesso interattivo dell'utente.
Puoi applicare queste impostazioni di autenticazione a qualsiasi livello della gerarchia delle risorse: organizzazione, cartella o progetto.
Per i passaggi di implementazione, consulta la guida all'autenticazione programmatica e la documentazione relativa alla gestione delle impostazioni IAP.
gcloud
Prepara un file di impostazioni con i tuoi ID client OAuth:
cat << EOF > SETTINGS_FILENAME access_settings: oauth_settings: programmatic_clients: [clientId1, clientId2, ..] EOFApplica le impostazioni utilizzando il comando
gcloud iap settings set:gcloud iap settings set SETTINGS_FILENAME \ [--organization=ORGANIZATION | --folder=FOLDER | --project=PROJECT] \ [--resource-type=RESOURCE_TYPE] \ [--service=SERVICE] \ [--version=VERSION]Comandi di esempio:
# Organization level gcloud iap settings set SETTINGS_FILENAME --organization=ORGANIZATION # Folder level gcloud iap settings set SETTINGS_FILENAME --folder=FOLDER # Project level (web resources) gcloud iap settings set SETTINGS_FILENAME \ --project=PROJECT \ --resource-type=iap_web # App Engine service in a project gcloud iap settings set SETTINGS_FILENAME \ --project=PROJECT \ --resource-type=app-engine \ --service=SERVICEDove:
- SETTINGS_FILENAME: il file YAML che hai preparato.
- ORGANIZATION: l'ID organizzazione
- FOLDER: l'ID della cartella
- PROJECT: l'ID progetto
- RESOURCE_TYPE: il tipo di risorsa IAP
(
app-engine,iap_web,compute,organizationofolder) - SERVICE: Il nome del servizio (facoltativo per i tipi di risorse
computeoapp-engine) - VERSION: il nome della versione (non applicabile per
compute, facoltativo perapp-engine)
API
Prepara un file JSON delle impostazioni:
cat << EOF > iap_settings.json { "access_settings": { "oauth_settings": { programmatic_clients: [clientId1, clientId2, ..] } } } EOFRecupera il nome della risorsa:
gcloud iap settings get \ [--organization=ORGANIZATION | --folder=FOLDER | --project=PROJECT] \ [--resource-type=RESOURCE_TYPE] \ [--service=SERVICE] \ [--version=VERSION]Aggiorna le impostazioni utilizzando il nome della risorsa:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @iap_settings.json \ "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.oauthSettings.programmaticClients"Dove:
- ORGANIZATION: l'ID organizzazione
- FOLDER: l'ID della cartella
- PROJECT: l'ID progetto
- RESOURCE_TYPE: il tipo di risorsa IAP
(
app-engine,iap_web,compute,organizationofolder) - SERVICE: Il nome del servizio (facoltativo per i tipi di risorse
computeoapp-engine) - VERSION: il nome della versione (non applicabile per
compute, facoltativo perapp-engine)
Dopo la configurazione, accedi all'applicazione utilizzando uno qualsiasi degli ID client OAuth che hai configurato. Per informazioni dettagliate, consulta Autenticazione programmatica.
Accesso al browser
Per consentire a IAP di utilizzare l'ID client e il client secret tramite la consoleGoogle Cloud , completa le seguenti istruzioni:
- Configurare il client OAuth per Compute Engine (Compute Engine)
- Configurare il client OAuth per Google Kubernetes Engine (GKE)
- Configurare il client OAuth per App Engine
- Configura il client OAuth per Cloud Run
Rischi
Sebbene la condivisione di un client tra le applicazioni sia comoda, comporta dei rischi. Questa sezione descrive i potenziali rischi della condivisione dei clienti e come mitigarli.
Single point of failure
L'utilizzo di un client OAuth per molte applicazioni crea un unico punto di dipendenza. Se un client viene eliminato o modificato in modo errato, tutte le applicazioni che lo utilizzano vengono interessate. I client OAuth eliminati possono essere ripristinati entro 30 giorni.
Per gestire in modo efficace questo rischio operativo:
- Implementa controlli dell'accesso adeguati per impedire modifiche o eliminazioni accidentali
- Limitare l'accesso ai client OAuth utilizzando le autorizzazioni
clientauthconfig.clients.* - Utilizza gli audit log diGoogle Cloud per monitorare le attività amministrative che coinvolgono i client OAuth
Si tratta principalmente di un rischio operativo piuttosto che di un rischio per la sicurezza. Con controlli di accesso e monitoraggio adeguati, i vantaggi di praticità e gestione dei client OAuth condivisi in genere superano questa considerazione.
Divulgazione di client secret
La condivisione di un client richiede la condivisione del client secret con persone e script. In questo modo, aumenta il rischio di fuga del client secret. IAP non possono distinguere tra i token creati dalla tua applicazione e i token creati da uclient secretnt compromesso.
Per mitigare questo rischio:
- Proteggi i client secret come le password e non memorizzarli mai come testo non crittografato
- Implementa la gestione sicura delle credenziali utilizzando Secret Manager
- Monitora l'accesso alle risorse IAP con Cloud Audit Logging
- Un client secret compromesso influisce solo sull'autenticazione, non sull'autorizzazione all'accesso alle risorse. Se sospetti che il tuo segreto sia stato divulgato, reimpostalo immediatamente.
Per l'accesso programmatico alle risorse protette da IAP, valuta la possibilità di utilizzare l'autenticazione JWT dell'account di servizio anziché condividere i client secret OAuth con singoli utenti. Questo approccio offre un migliore isolamento della sicurezza, mantenendo al contempo i vantaggi di un client OAuth condiviso per le tue applicazioni.
Considerazioni sull'ambito delle autorizzazioni
Quando condividi i client OAuth, tutte le applicazioni utilizzano gli stessi ambiti di autorizzazione. Per
IAP, openid e email sono gli unici ambiti obbligatori. Questa considerazione di per sé non rappresenta un rischio significativo, ma è importante
capire:
- OAuth viene utilizzato solo per l'autenticazione (verifica dell'identità) in IAP; l'autorizzazione (accesso alle risorse) viene gestita separatamente tramite le policy IAM.
- Anche se le credenziali di autenticazione vengono compromesse, un malintenzionato avrebbe comunque bisogno delle autorizzazioni IAM appropriate per accedere alle risorse protette.
- Limitare il client solo agli ambiti
openideemailnecessari aiuta a limitare il potenziale impatto sulla sicurezza.