Questa pagina spiega come proteggere un'istanza 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 viene gestito dal bilanciamento del carico HTTP(S), un componente di Cloud Load Balancing. Il bilanciatore del carico HTTP(S) viene in genere configurato dal controller Kubernetes Ingress. Il controller Ingress riceve le informazioni di configurazione da un oggetto Ingress Kubernetes associato a uno o più oggetti Service. Ogni oggetto Service contiene informazioni di routing utilizzate per indirizzare una richiesta in arrivo a un determinato pod e a una determinata porta.
A partire dalla versione 1.10.5-gke.3 di Kubernetes, 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 configura il bilanciatore del carico di conseguenza. Un elemento BackendConfig contiene informazioni di configurazione specifiche per Cloud Load Balancing e ti consente di definire una configurazione separata per ogni servizio di backend del bilanciamento del carico HTTP(S).
Prima di iniziare
Per abilitare IAP per GKE, devi disporre di quanto segue:
- Un progetto della console Google Cloud con la fatturazione abilitata.
- Un gruppo di una o più istanze GKE, gestito da un bilanciatore del carico HTTPS. Il bilanciatore del carico deve essere creato automaticamente quando crei un oggetto Ingress in un cluster GKE.
- Scopri come creare un Ingress per HTTPS.
- 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 di più su come recuperare l'identità dell'utente.
Attivazione di IAP
Se non hai configurato la schermata per il consenso OAuth del progetto, ti verrà chiesto di farlo. Per configurare la schermata per il consenso OAuth, consulta Configurare la schermata per il consenso OAuth.
Configurare l'accesso IAP
-
Vai alla
pagina Identity-Aware Proxy.
Vai alla pagina di 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.
Se non vedi una risorsa, assicurati che sia stata creata e che il controller di ingresso Compute Engine di BackendConfig sia sincronizzato.
Per verificare che il servizio di backend sia disponibile, esegui il seguente comando gcloud:
gcloud compute backend-services list
- 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 l'IAP, crea un secret di Kubernetes e poi
aggiungi un blocco iap
a BackendConfig.
Creazione di un secret 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) 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 quando il segreto è stato creato correttamente:
secret "my-secret" created
Aggiunta di un blocco iap
a BackendConfig
Per configurare BackendConfig per l'IAP, devi specificare i valori enabled
e secretName
. Per specificare questi valori, assicurati di disporre dell'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:
Per le versioni GKE 1.16.8-gke.3 e successive, utilizza la versione dell'API "cloud.google.com/v1". Se utilizzi una versione precedente di GKE, utilizza "cloud.google.com/v1beta1".
apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: config-default namespace: my-namespace spec: iap: enabled: true oauthclientCredentials: secretName: my-secret
Per attivare l'IAP, devi anche associare le porte di servizio a BackendConfig. Un modo per effettuare questa associazione è impostare tutte le porte per il servizio come predefinite per BackendConfig, 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 visualizzi il messaggio
"no BackendConfig for service port exists
", significa che hai associato correttamente
una porta di servizio a 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 hai fatto riferimento non esiste o non è strutturato correttamente, viene 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 il secret di Kubernetes correttamente 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 correttamente le credenziali OAuth. 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.
Disattivare IAP
Per disattivare l'IAP, devi impostare enabled
su
false
in BackendConfig. Se elimini il blocco IAP
da BackendConfig, le impostazioni rimarranno invariate. Ad esempio, se IAP sono attivati con secretName: my_secret
ed elimini il blocco, IAP rimarranno attivi con le credenziali OAuth memorizzate 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.