Questa pagina spiega come proteggere un'istanza di Google Kubernetes Engine (GKE) con Identity-Aware Proxy (IAP).
Panoramica
IAP è integrato tramite Ingress per GKE. Questa integrazione ti consente di controllare l'accesso a livello di risorsa per i dipendenti anziché utilizzare una VPN.
In un cluster GKE, il traffico in entrata è gestito da HTTP(S) Load Balancing, un componente di Cloud Load Balancing. Il bilanciatore del carico HTTP(S) è in genere configurato dal controller Ingress Ingress. Il controller Ingress riceve le informazioni di configurazione da un oggetto Kubernetes Ingress associato a uno o più oggetti Service. Ogni oggetto di servizio contiene le informazioni di routing utilizzate per indirizzare una richiesta in entrata a un determinato pod e porta.
A partire da Kubernetes versione 1.10.5-gke.3, puoi aggiungere la configurazione per il bilanciatore del carico associando un servizio a un oggetto BackendConfig. BackendConfig è una definizione di risorsa personalizzata (CRD) definita nel repository kubernetes/ingress-gce.
Il controller Kubernetes Ingress legge le informazioni di configurazione da BackendConfig e imposta il bilanciatore del carico di conseguenza. Un backendConfig contiene informazioni di configurazione specifiche per Cloud Load Balancing e ti consente di definire una configurazione separata per ogni servizio di backend bilanciamento del carico HTTP(S).
Prima di iniziare
Per abilitare IAP per GKE, devi avere:
- Un progetto di Google Cloud Console con la fatturazione abilitata.
- Un gruppo di una o più istanze GKE gestite da un bilanciatore del carico HTTPS. Il bilanciatore del carico deve essere creato automaticamente quando crei un oggetto Ingress in un cluster GKE.
- Scopri di più sulla creazione di una risorsa Ingress per HTTPS. NOTA: la risorsa Ingress interna richiede un abbonamento BeyondCorp Enterprise.
- Un nome di dominio registrato all'indirizzo del bilanciatore del carico.
- Il codice dell'app per verificare che tutte le richieste abbiano un'identità.
- Scopri come ottenere l'identità dell'utente.
Abilitazione di IAP
Configurare la schermata per il consenso OAuth
Se non hai configurato la schermata per il consenso OAuth del progetto, devi farlo. Un indirizzo email e il nome del prodotto sono obbligatori per la schermata per il consenso OAuth.
-
Vai alla schermata di consenso OAuth.
Configurare la schermata per il consenso - In Email di assistenza, seleziona l'indirizzo email che vuoi visualizzare come contatto pubblico. L'indirizzo email deve appartenere all'account utente attualmente connesso o a un gruppo Google di cui fa parte l'utente che ha eseguito l'accesso.
- Inserisci il Nome applicazione che vuoi visualizzare.
- Aggiungi eventuali dettagli facoltativi.
- Fai clic su Salva.
Per modificare in seguito le informazioni sulla schermata di consenso OAuth, ad esempio il nome del prodotto o l'indirizzo email, ripeti i passaggi precedenti per configurare la schermata di consenso.
Creazione delle credenziali OAuth
-
Vai alla pagina Credenziali.
Vai alla pagina Credenziali - Nel menu a discesa Crea credenziali, seleziona ID client OAuth.
- In Tipo di applicazione, seleziona Applicazione web.
- Aggiungi un nome per l'ID client OAuth.
-
Fai clic su Create (Crea).
L'ID client OAuth e il client secret vengono generati e visualizzati nella finestra Client OAuth.
- Nella finestra di dialogo Client OAuth creato, copia l'ID client negli appunti.
- Fai clic su OK.
- Fai clic sul nome del client appena creato per riaprirlo per la modifica.
-
Nel campo URI di reindirizzamento autorizzati, inserisci la seguente stringa:
https://iap.googleapis.com/v1/oauth/clientIds/CLIENT_ID:handleRedirect
dove
CLIENT_ID
è l'ID client OAuth che hai appena copiato negli appunti.
Configurazione dell'accesso IAP
-
Vai alla pagina di Identity-Aware Proxy.
Vai alla pagina Identity-Aware Proxy - Seleziona il progetto che vuoi proteggere con IAP.
- Seleziona la casella di controllo accanto alla risorsa a cui vuoi concedere l'accesso.
- Nel riquadro laterale a destra, fai clic su Aggiungi entità.
-
Nella finestra di dialogo Aggiungi entità che viene visualizzata, inserisci gli indirizzi email dei gruppi o delle persone che devono avere il ruolo Utente applicazione web con protezione IAP per il progetto.
I seguenti tipi di entità possono avere questo ruolo:
- Account Google: user@gmail.com
- Gruppo Google: admins@googlegroups.com
- Account di servizio: server@example.gserviceaccount.com
- Dominio Google Workspace: example.com
Assicurati di aggiungere un Account Google a cui hai accesso.
- Seleziona Cloud IAP > Utente applicazione web con protezione IAP dall'elenco a discesa Ruoli.
- Fai clic su Salva.
Configurazione di BackendConfig
Per configurare BackendConfig per IAP, crea un secret di Kubernetes, quindi aggiungi un blocco iap
a BackendConfig.
Creazione di un secret di Kubernetes
BackendConfig utilizza un secret di Kubernetes per eseguire il wrapping del client OAuth creato in precedenza. I secret di Kubernetes sono gestiti come altri oggetti Kubernetes tramite l'interfaccia a riga di comando (CLI) di kubectl
. Per creare un Secret, esegui il comando seguente in cui
client_id_key e client_secret_key sono le chiavi del file JSON che hai
scaricato durante la creazione delle credenziali OAuth:
kubectl create secret generic my-secret --from-literal=client_id=client_id_key \ --from-literal=client_secret=client_secret_key
Il comando precedente mostra l'output per confermare la creazione del secret:
secret "my-secret" created
Aggiunta di un blocco iap
a BackendConfig
Per configurare BackendConfig per IAP, devi specificare i valori enabled
e secretName
. Per specificare questi valori, assicurati
di avere l'autorizzazione compute.backendServices.update
e aggiungi il
blocco iap
a BackendConfig. In questo blocco, my-secret è il nome del secret di Kubernetes creato in precedenza:
apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: config-default namespace: my-namespace spec: iap: enabled: true oauthclientCredentials: secretName: my-secret
Devi anche associare le porte di servizio al tuo backend per attivare l'attivazione di IAP. Un modo per creare questa associazione è impostare tutte le porte per il servizio come predefinite in BackendConfig, cosa che puoi fare aggiungendo la seguente annotazione alla risorsa di servizio:
metadata: annotations: beta.cloud.google.com/backend-config: '{"default": "config-default"}'
Per testare la configurazione, esegui kubectl get event
. Se viene visualizzato il messaggio
"no BackendConfig for service port exists
", significa che
la porta di servizio è stata associata correttamente alla risorsa BackendConfig, ma la risorsa
BackendConfig non è stata trovata. Questo errore può verificarsi se non hai creato la risorsa BackendConfig, se l'hai creata nello spazio dei nomi errato o se hai digitato in modo errato il riferimento nell'annotazione di servizio.
Se il secretName
a cui fai riferimento non esiste o non è strutturato correttamente, verrà visualizzato uno dei seguenti messaggi di errore:
-
BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found.
Per risolvere questo errore, assicurati di aver creato correttamente il secret di Kubernetes, come descritto nella sezione precedente. -
BackendConfig default/config-default is not valid: secret "foo" missing client_secret data.
Per risolvere questo errore, assicurati di aver creato le credenziali OAuth correttamente. Inoltre, assicurati di aver fatto riferimento alle chiaviclient_id
eclient_secret
corrette nel file JSON scaricato in precedenza.
Quando il flag enabled
è impostato su true
e
secretName
è impostato correttamente, IAP è configurato
per la risorsa selezionata.
Disattivazione di IAP
Per disattivare IAP, devi impostare enabled
su
false
in BackendConfig. Se elimini il blocco IAP da BackendConfig, le impostazioni verranno mantenute. Ad esempio, se IAP è
abilitato con secretName: my_secret
ed elimini il blocco, IAP verrà comunque attivato con le credenziali OAuth archiviate in
my_secret
.
Passaggi successivi
- Scopri come configurare Cloud CDN su GKE.
- Scopri come configurare Cloud Armor per GKE.
- Scopri di più sulla risorsa BackendConfig.