Protezione delle app e delle risorse GKE con IAP

Questa pagina spiega come proteggere un'istanza di Google Kubernetes Engine (GKE) con Identity-Aware Proxy (IAP).

Per proteggere le risorse non su Google Cloud, consulta Protezione di app e risorse on-premise.

Panoramica

IAP è integrato tramite Ingress per GKE. Questa integrazione consente di controllare l'accesso dei dipendenti a livello di risorsa invece di utilizzare una VPN.

In un cluster GKE, il traffico in entrata è gestito da Bilanciamento del carico HTTP(S), un componente di Cloud Load Balancing. Il bilanciatore del carico HTTP(S) è in genere configurato dal controller Kubernetes Ingress. Il controller Ingress riceve informazioni di configurazione da un oggetto Kubernetes Ingress associato a uno o più oggetti Service. Ogni oggetto Service contiene informazioni di routing utilizzate per indirizzare una richiesta in arrivo a un pod e a una porta specifici.

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 risorse personalizzate (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 oggetto BackendConfig contiene informazioni di configurazione specifiche per Cloud Load Balancing e consente di definire una configurazione separata per ogni servizio di backend di bilanciamento del carico HTTP(S).

Prima di iniziare

Per abilitare IAP per GKE, devi disporre di:

  • Un progetto della console Google Cloud con 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.
  • Un nome di dominio registrato all'indirizzo del bilanciatore del carico.
  • Il codice dell'app per verificare che tutte le richieste abbiano un'identità.

Abilitazione di IAP in corso...

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.

Configurazione dell'accesso IAP

  1. Vai alla sezione Pagina Identity-Aware Proxy.
    Vai alla pagina Identity-Aware Proxy
  2. Seleziona il progetto che vuoi proteggere con IAP.
  3. 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 il controller in entrata BackendConfig Compute Engine è sincronizzato.

    Per verificare che il servizio di backend sia disponibile, esegui questo comando Comando gcloud:

    gcloud compute backend-services list
  4. Nel riquadro laterale a destra, fai clic su Aggiungi entità.
  5. 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.

  6. Seleziona Cloud IAP > Utente applicazione web con protezione IAP dall'elenco a discesa Ruoli.
  7. Fai clic su Salva.

Configurazione di BackendConfig

Per configurare BackendConfig per IAP, crea un secret Kubernetes 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 e altri oggetti Kubernetes kubectl a interfaccia a riga di comando. 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 IAP, devi specificare enabled e secretName e i relativi valori. Per specificare questi valori, assicurati che disponi dell'autorizzazione compute.backendServices.update e aggiungere iap in BackendConfig. In questo blocco, my-secret è il nome del secret Kubernetes che hai creato in precedenza:

Per GKE versione 1.16.8-gke.3 e successive, utilizza la versione API "cloud.google.com/v1". Se utilizzi una versione precedente di GKE, usa "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

Devi inoltre associare le porte dei servizi a BackendConfig per attivare IAP. 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 la risorsa secretName a cui fai riferimento non esiste o non è strutturata verrà visualizzato correttamente 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 avere creato il secret di Kubernetes correttamente, come descritto sezione precedente.
  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. Per risolvere questo errore, assicurati di avere creato le credenziali OAuth in modo corretto. Inoltre, assicurati di aver fatto riferimento alle chiavi client_id e client_secret corrette nel file JSON che hai 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 l'IAP, devi impostare enabled su false in BackendConfig. Se elimini l'IAP da BackendConfig, le impostazioni verranno mantenute. Ad esempio, se IAP è attivato con secretName: my_secret ed elimini il blocco, poi IAP verrà comunque attivato con le credenziali OAuth archiviate in my_secret.

Passaggi successivi