arrow_back

Protezione di Google Kubernetes Engine con IAM e i criteri di sicurezza dei pod

Accedi Partecipa
Accedi a oltre 700 lab e corsi

Protezione di Google Kubernetes Engine con IAM e i criteri di sicurezza dei pod

Lab 1 ora 30 minuti universal_currency_alt 5 crediti show_chart Introduttivi
info Questo lab potrebbe incorporare strumenti di AI a supporto del tuo apprendimento.
Accedi a oltre 700 lab e corsi

Panoramica

Potrai controllare l'accesso ai cluster GKE tramite IAM. Dovrai creare un criterio di sicurezza dei pod per limitare la creazione dei pod con privilegi, quindi verificherai questo criterio. Eseguirai anche la rotazione di credenziali e indirizzo IP.

Nota: per questo lab verrà utilizzata la modalità GKE Standard. Il lab esamina i criteri di sicurezza dei pod e non è possibile creare criteri che eseguono l'override delle impostazioni di sicurezza integrate in GKE Autopilot.

Obiettivi

In questo lab imparerai a:

  • Utilizzare IAM per controllare l'accesso a GKE
  • Creare e utilizzare criteri di sicurezza dei pod per controllare la creazione dei pod
  • Eseguire la rotazione di credenziali e indirizzo IP
Nota: per questo lab, Google Cloud Skills Boost ti ha fornito due nomi utente disponibili nella finestra di dialogo Dettagli connessione.

In questo lab, faremo riferimento a questi account come Nomeutente 1 e Nomeutente 2.

Attività 1: utilizza i ruoli IAM per concedere l'accesso amministrativo a tutti i cluster GKE del progetto

Accedi alla console Google Cloud usando le credenziali del primo utente

  1. In una finestra di navigazione in incognito, accedi alla console Google Cloud come di consueto con l'account Nomeutente 1 fornito in Qwiklabs. Tieni presente che entrambi i nomi utente utilizzano la stessa password.
  2. Nella barra del titolo della console Google Cloud, fai clic su Attiva Cloud Shell (Icona di Cloud Shell).
  3. Fai clic su Continua.

Dopo il provisioning, viene visualizzato il prompt di Cloud Shell.

Nota: se esci dall'account Nomeutente 1, l'account Nomeutente 2 potrebbe essere eliminato da Google Cloud Skills Boost. Mantieni quindi l'accesso a Nomeutente 1 fino al termine del lab.

Accedi alla console Google Cloud e inizia l'esplorazione usando le credenziali del secondo utente

  1. Apri un'altra scheda nella finestra di navigazione in incognito.
  2. Vai all'indirizzo console.cloud.google.com.
  3. Fai clic sull'icona dell'utente nell'angolo in alto a destra dello schermo, quindi fai clic su Aggiungi account.
  4. Accedi alla console Google Cloud con l'account Nomeutente 2 fornito. Tieni sempre presente che entrambi i nomi utente utilizzano la stessa password.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 2.
  1. Dopo aver eseguito l'accesso come Nomeutente 2, nel menu di navigazione (Icona menu di navigazione), fai clic su Kubernetes Engine > Cluster.

  2. Assicurati che l'ID progetto del lab sia selezionato nella parte superiore della pagina.

Tieni presente che l'opzione per creare un cluster è disabilitata.

Finestra di dialogo dei cluster Kubernetes con il messaggio che indica che l'utente richiede l'autorizzazione container.cluster.create per questa azione

Nota: Nomeutente 2 attualmente ha accesso al progetto, ma dispone solo del ruolo Visualizzatore che rende visibili tutte le risorse del progetto in modalità di sola lettura.

Assegna il ruolo IAM Amministratore di GKE a Nomeutente 2

In questo modo, concedi a Nomeutente 2 l'autorizzazione per creare un cluster GKE e per eseguire il deployment dei carichi di lavoro, utilizzando i ruoli originari per concedere a un utente le autorizzazioni per amministrare tutti i cluster GKE e gestire le risorse all'interno di questi cluster nel progetto. L'account Nomeutente 1 dispone dei diritti di proprietà del progetto e lo utilizzerai per concedere altri diritti a Nomeutente 2.

  1. Torna alla scheda Console Google Cloud di Nomeutente 1.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 1.
  1. Nel menu di navigazione (Icona menu di navigazione), fai clic su IAM e amministrazione > IAM.

  2. Nella Console IAM, individua la riga corrispondente a Nomeutente 2, quindi fai clic sull'icona a forma di matita all'estremità destra della riga per modificare le autorizzazioni dell'utente.

  3. Nota che attualmente Nomeutente 2 dispone del ruolo Visualizzatore, che fornisce l'accesso in lettura a tutte le risorse del progetto.

  4. Fai clic su AGGIUNGI UN ALTRO RUOLO per aggiungere un'altra selezione del menu a discesa per i ruoli.

  5. Nella casella del menu a discesa Seleziona un ruolo, scegli Kubernetes Engine > Amministratore cluster Kubernetes Engine.

  6. Fai clic su SALVA.

Nota: Nomeutente 2 dispone ora dell'accesso per amministrare tutti i cluster GKE nel progetto e per gestire le risorse all'interno di questi cluster.

Se questo livello di accesso è troppo ampio per la tua organizzazione, puoi limitare l'autorità dell'utente all'interno di un cluster GKE utilizzando il controllo degli accessi basato sui ruoli di Kubernetes.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Assegna il ruolo IAM Amministratore di GKE a Nomeutente 2

Verifica l'accesso di Nomeutente 2

Ora dovrai verificare il tuo lavoro usando Nomeutente 2 per creare un cluster GKE.

  1. Torna alla scheda Console Google Cloud di Nomeutente 2.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 2.
  1. Dopo aver eseguito l'accesso come Nomeutente 2, nel menu di navigazione (Icona menu di navigazione), fai clic su Kubernetes Engine > Cluster.

A questo punto, dovresti vedere che è stata abilitata l'opzione per creare un cluster. Per visualizzare le modifiche potrebbe essere necessario aggiornare la scheda del browser web per Nomeutente 2.

  1. Fai clic su Crea per avviare la creazione di un cluster GKE.

  2. Fai clic su Passa al cluster Standard e conferma la stessa operazione nel popup successivo.

Ricorda: per questo lab è necessario utilizzare la modalità GKE Standard.
  1. Imposta il nome del cluster su standard-cluster-1, se questo non è il valore predefinito.

  2. Conferma che sia selezionato un cluster a livello di zona anziché a livello di regione.

  3. Scegli la zona per il cluster, se non è l'opzione predefinita.

  4. Lascia invariati gli altri valori predefiniti e fai clic su Crea.

Viene avviato il provisioning del cluster, ma il processo ha presto esito negativo.

Nota: si tratta dell'esito previsto per questo passaggio del lab.
  1. Per visualizzare il messaggio di errore, fai clic sull'icona di notifica nella barra degli strumenti nella parte superiore dello schermo.

Nomeutente 2 ancora non dispone di alcuni diritti necessari per il deployment di un cluster, perché GKE utilizza le istanze di Google Cloud Compute Engine per i nodi.

Per eseguire il deployment di un cluster GKE, a un utente deve essere assegnato anche il ruolo iam.serviceAccountUser per il service account predefinito di Compute Engine.

Concedi il ruolo IAM ServiceAccountUser a Nomeutente 2

Ora utilizzerai IAM per concedere a Nomeutente 2 il ruolo iam.serviceAccountUser in modo che Nomeutente 2 possa eseguire correttamente il deployment di un cluster GKE.

  1. Torna alla scheda Console Google Cloud di Nomeutente 1.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 1.
  1. Nel menu di navigazione (Icona menu di navigazione), fai clic su IAM e amministrazione > Account di servizio.

  2. Nella console IAM, fai clic sulla riga corrispondente alservice account predefinito di Compute Engine per selezionarla.

  3. Fai clic su Autorizzazione per aprire il riquadro delle informazioni sulle autorizzazioni.

  4. Nella pagina Autorizzazione, fai clic su Concedi accesso.

Sul lato destro della finestra si aprirà il riquadro delle informazioni sulle autorizzazioni.

  1. Digita il nome utente per Nomeutente 2 nella casella Nuove entità. Puoi copiare questo nome dalla pagina dei dettagli del lab.
  2. Nel riquadro Seleziona un ruolo, assicurati che sia selezionato Account di servizio > Utente account di servizio.
  3. Fai clic su Salva.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Concedi il ruolo IAM Utente account di servizio a Nomeutente 2

Verifica che Nomeutente 2 possa creare un cluster GKE

Ora dovrai verificare il tuo lavoro usando Nomeutente 2 per creare un cluster GKE.

  1. Torna alla scheda Console Google Cloud di Nomeutente 2.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 2.
  1. Dopo aver eseguito l'accesso come Nomeutente 2, nel menu di navigazione (Icona menu di navigazione), fai clic su Kubernetes Engine > Cluster. Potresti dover aggiornare il browser web.

  2. Fai clic su Crea per avviare la creazione di un cluster GKE.

  3. Fai clic su Passa al cluster Standard e conferma la stessa operazione nel popup successivo.

  4. Imposta il nome del cluster su standard-cluster-1, se questo non è il valore predefinito.

  5. Conferma che sia selezionato un cluster a livello di zona anziché a livello di regione.

  6. Scegli la zona per il cluster, se non è l'opzione predefinita.

  7. Lascia invariati gli altri valori predefiniti e fai clic su Crea.

Nota: devi attendere alcuni minuti per il completamento del deployment del cluster.

Il deployment del cluster verrà eseguito correttamente questa volta.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Crea un cluster GKE

Attività 2: definisci e utilizza l'ammissione di sicurezza del pod

PodSecurity è un controller di ammissione Kubernetes che ti consente di applicare gli standard di sicurezza dei pod ai pod in esecuzione sui tuoi cluster GKE. Gli standard di sicurezza dei pod sono criteri di sicurezza predefiniti che coprono le esigenze di alto livello della sicurezza dei pod in Kubernetes. Questi criteri variano da altamente permissivi ad altamente restrittivi.

In questa attività potrai creare un criterio di sicurezza dei pod che consente la creazione di pod senza privilegi nello spazio dei nomi predefinito del cluster. I pod senza privilegi non consentono agli utenti di eseguire il codice come root e hanno accesso limitato ai dispositivi nell'host.

Creerai un ClusterRole che può essere utilizzato in un'associazione di ruolo che associa il criterio agli account che richiedono la possibilità di eseguire il deployment dei pod con accesso senza privilegi.

Gli utenti che richiedono la possibilità di eseguire il deployment di pod con privilegi possono ottenere l'accesso al PSP integrato fornito per consentire agli utenti amministratori di eseguire il deployment dei pod dopo l'attivazione dei criteri di sicurezza dei pod.

Una volta configurati i componenti, attiverai il controller PodSecurityPolicy, che applica questi criteri, e verificherai l'impatto che hanno su utenti con privilegi diversi.

Connettiti al cluster GKE

  1. Torna alla scheda Console Google Cloud di Nomeutente 1.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 1.
  1. In Cloud Shell, digita questo comando per creare variabili di ambiente per il nome del cluster e della zona Google Cloud utilizzati per creare il cluster per questo lab:
export my_zone={{{project_0.default_zone | ZONE }}} export my_cluster=standard-cluster-1
  1. Configura il completamento per lo strumento a riga di comando kubectl:
source <(kubectl completion bash)
  1. Configura l'accesso al tuo cluster per kubectl:
gcloud container clusters get-credentials $my_cluster --zone $my_zone

Applica gli standard di sicurezza dei pod utilizzando PodSecurity

Per utilizzare il controller di ammissione PodSecurity, devi applicare standard di sicurezza Pod specifici in modalità specifiche a spazi dei nomi specifici

Crea nuovi spazi dei nomi

Crea spazi dei nomi nel tuo cluster:

kubectl create ns baseline-ns kubectl create ns restricted-ns

Questo comando crea i seguenti spazi dei nomi:

  • baseline-ns: per i carichi di lavoro permissivi
  • restricted-ns: per i carichi di lavoro con restrizioni elevate

Utilizza le etichette per applicare i criteri di sicurezza

Applica i seguenti standard di sicurezza dei pod:

  • baseline: applica a baseline-ns in modalità warn
  • restricted: applica a restricted-ns in modalità enforce
kubectl label --overwrite ns baseline-ns pod-security.kubernetes.io/warn=baseline kubectl label --overwrite ns restricted-ns pod-security.kubernetes.io/enforce=restricted

Questi comandi ottengono i seguenti risultati:

  • I carichi di lavoro nello spazio dei nomi baseline-ns che violano il criterio baseline sono consentiti e il client visualizza un messaggio di avviso.
  • I carichi di lavoro nello spazio dei nomi restricted-ns che violano il criterio restricted vengono rifiutati e GKE aggiunge una voce agli audit log.

Verifica che le etichette siano state aggiunte:

kubectl get ns --show-labels

L'output è simile al seguente:

baseline-ns Active 74s kubernetes.io/metadata.name=baseline-ns,pod-security.kubernetes.io/warn=baseline restricted-ns Active 18s kubernetes.io/metadata.name=restricted-ns,pod-security.kubernetes.io/enforce=restricted default Active 57m kubernetes.io/metadata.name=default kube-public Active 57m kubernetes.io/metadata.name=kube-public kube-system Active 57m kubernetes.io/metadata.name=kube-system

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Crea spazi dei nomi ed etichette

Testa i criteri configurati

Per verificare che il controller di ammissione PodSecurity funzioni come previsto, distribuisci un carico di lavoro che violi i criteri restricted e baseline per entrambi gli spazi dei nomi. Il manifest di esempio seguente esegue il deployment di un container nginx che consente l'escalation dei privilegi.

  1. Crea e apri un file denominato psa-workload.yaml con nano utilizzando questo comando:
nano psa-workload.yaml
  1. Una volta aperto nano, incolla il seguente codice nel file psa-workload.yaml:
apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx securityContext: privileged: true
  1. Premi Ctrl+O e poi Invio per salvare il file modificato.

  2. Premi Ctrl+X per uscire dall'editor di testo nano.

  3. Applica il manifest allo spazio dei nomi baseline-ns:

kubectl apply -f psa-workload.yaml --namespace=baseline-ns

L'output è simile al seguente:

Warning: would violate PodSecurity "baseline:latest": privileged (container "nginx" must not set securityContext.privileged=true) pod/nginx created

Il criterio baseline consente al pod di eseguire il deployment nello spazio dei nomi

  1. Verifica che il deployment del pod sia andato a buon fine:
kubectl get pods --namespace=baseline-ns -l=app=nginx
  1. Applica il manifest allo spazio dei nomi restricted-ns:
kubectl apply -f psa-workload.yaml --namespace=restricted-ns

L'output è simile al seguente:

Error from server (Forbidden): error when creating "workload.yaml": pods "nginx" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "nginx" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "nginx" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "nginx" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "nginx" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")

Il pod non esegue il deployment nello spazio dei nomi. Viene aggiunta una voce di controllo nel log.

Fai clic su Controlla i miei progressi per verificare l'obiettivo. Applica il manifest allo spazio dei nomi 'restricted-ns'

Visualizza le violazioni dei criteri negli audit log

Le violazioni dei criteri nelle modalità audit ed enforce sono registrate negli audit log per il cluster. Puoi visualizzare questi log utilizzando Esplora log nella console Google Cloud.

  1. Nella barra del titolo della console Google Cloud, digita Esplora log nel campo Cerca, quindi fai clic su Esplora log nei risultati di ricerca.

  2. Nel campo Query specifica quanto segue:

resource.type="k8s_cluster" protoPayload.response.reason="Forbidden" protoPayload.resourceName="core/v1/namespaces/restricted-ns/pods/nginx"
  1. Fai clic su Esegui query.

  2. Nella sezione Risultati delle query espandere la voce di log degli elementi vietati. I dettagli sono simili ai seguenti:

{ ... protoPayload: { @type: "type.googleapis.com/google.cloud.audit.AuditLog" authenticationInfo: {1} authorizationInfo: [1] methodName: "io.k8s.core.v1.pods.create" request: {6} requestMetadata: {2} resourceName: "core/v1/namespaces/restricted-ns/pods/nginx" response: { @type: "core.k8s.io/v1.Status" apiVersion: "v1" code: 403 details: {2} kind: "Status" message: "pods "nginx" is forbidden: violates PodSecurity "restricted:latest": privileged (container "nginx" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "nginx" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "nginx" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "nginx" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "nginx" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")" metadata: {0} reason: "Forbidden" status: "Failure" } serviceName: "k8s.io" status: {2} } receiveTimestamp: "2022-12-01T19:19:25.353235326Z" resource: {2} timestamp: "2022-12-01T19:19:21.469360Z" }

(Facoltativo) Attività 3: esegui la rotazione di credenziali e indirizzo IP

Esegui la rotazione di IP e credenziali sul cluster. È consigliabile farlo con regolarità per ridurre la durata delle credenziali. Anche se esistono comandi separati per ruotare l'IP e le credenziali di gestione, la rotazione delle credenziali comporta anche la rotazione dell'IP.

  1. Su Cloud Shell, esegui questo comando:
gcloud container clusters update $my_cluster --zone $my_zone --start-credential-rotation
  1. Immetti Y per continuare.
  2. Lascia aperto Cloud Shell fino al completamento dell'operazione.

Dopo che il comando è stato completato in Cloud Shell, il cluster avvierà il processo per aggiornare ciascuno dei nodi. Questo processo può richiedere fino a 15 minuti per il tuo cluster. Il processo aggiorna automaticamente anche la voce kubeconfig per l'utente corrente.

  1. Ora il master del cluster gestisce temporaneamente il nuovo indirizzo IP oltre all'indirizzo originale.

Nota: prima di completare il processo di rotazione, devi aggiornare il file kubeconfig su qualsiasi altro sistema che utilizzi kubectl o un'API di accesso al master per evitare di perdere l'accesso.

  1. Per completare le attività di rotazione delle credenziali, esegui questo comando:
gcloud container clusters update $my_cluster --zone $my_zone --complete-credential-rotation

Questa operazione permette di finalizzare i processi di rotazione e rimuove l'indirizzo IP del cluster originale.

Nota: se la rotazione delle credenziali non viene completata e restituisce un messaggio di errore, esegui questo comando: gcloud container clusters upgrade $my_cluster --node-pool=default-pool --zone $my_zone
  1. Immetti Y per continuare.

  2. Dopo che il cluster è stato aggiornato correttamente, esegui nuovamente questo comando:

gcloud container clusters update $my_cluster --zone $my_zone --complete-credential-rotation

Termina il lab

Una volta completato il lab, fai clic su Termina lab. Google Cloud Skills Boost rimuove le risorse che hai utilizzato ed esegue la pulizia dell'account.

Avrai la possibilità di inserire una valutazione in merito alla tua esperienza. Seleziona il numero di stelle applicabile, inserisci un commento, quindi fai clic su Invia.

Il numero di stelle corrisponde alle seguenti valutazioni:

  • 1 stella = molto insoddisfatto
  • 2 stelle = insoddisfatto
  • 3 stelle = esperienza neutra
  • 4 stelle = soddisfatto
  • 5 stelle = molto soddisfatto

Se non vuoi lasciare un feedback, chiudi la finestra di dialogo.

Per feedback, suggerimenti o correzioni, utilizza la scheda Assistenza.

Prima di iniziare

  1. I lab creano un progetto e risorse Google Cloud per un periodo di tempo prestabilito
  2. I lab hanno un limite di tempo e non possono essere messi in pausa. Se termini il lab, dovrai ricominciare dall'inizio.
  3. In alto a sinistra dello schermo, fai clic su Inizia il lab per iniziare

Utilizza la navigazione privata

  1. Copia il nome utente e la password forniti per il lab
  2. Fai clic su Apri console in modalità privata

Accedi alla console

  1. Accedi utilizzando le tue credenziali del lab. L'utilizzo di altre credenziali potrebbe causare errori oppure l'addebito di costi.
  2. Accetta i termini e salta la pagina di ripristino delle risorse
  3. Non fare clic su Termina lab a meno che tu non abbia terminato il lab o non voglia riavviarlo, perché il tuo lavoro verrà eliminato e il progetto verrà rimosso

Questi contenuti non sono al momento disponibili

Ti invieremo una notifica via email quando sarà disponibile

Bene.

Ti contatteremo via email non appena sarà disponibile

Un lab alla volta

Conferma per terminare tutti i lab esistenti e iniziare questo

Utilizza la navigazione privata per eseguire il lab

Utilizza una finestra del browser in incognito o privata per eseguire questo lab. In questo modo eviterai eventuali conflitti tra il tuo account personale e l'account Studente, che potrebbero causare addebiti aggiuntivi sul tuo account personale.