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
- 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.
- Nella barra del titolo della console Google Cloud, fai clic su Attiva Cloud Shell (
).
- 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
- Apri un'altra scheda nella finestra di navigazione in incognito.
- Vai all'indirizzo console.cloud.google.com.
- Fai clic sull'icona dell'utente nell'angolo in alto a destra dello schermo, quindi fai clic su Aggiungi account.
- 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.
-
Dopo aver eseguito l'accesso come Nomeutente 2, nel menu di navigazione (
), fai clic su Kubernetes Engine > Cluster.
-
Assicurati che l'ID progetto del lab sia selezionato nella parte superiore della pagina.
Tieni presente che l'opzione per creare un cluster è disabilitata.

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.
- Torna alla scheda Console Google Cloud di Nomeutente 1.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 1.
-
Nel menu di navigazione (
), fai clic su IAM e amministrazione > IAM.
-
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.
-
Nota che attualmente Nomeutente 2 dispone del ruolo Visualizzatore, che fornisce l'accesso in lettura a tutte le risorse del progetto.
-
Fai clic su AGGIUNGI UN ALTRO RUOLO per aggiungere un'altra selezione del menu a discesa per i ruoli.
-
Nella casella del menu a discesa Seleziona un ruolo, scegli Kubernetes Engine > Amministratore cluster Kubernetes Engine.
-
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.
- Torna alla scheda Console Google Cloud di Nomeutente 2.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 2.
- Dopo aver eseguito l'accesso come Nomeutente 2, nel 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.
-
Fai clic su Crea per avviare la creazione di un cluster GKE.
-
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.
-
Imposta il nome del cluster su standard-cluster-1, se questo non è il valore predefinito.
-
Conferma che sia selezionato un cluster a livello di zona anziché a livello di regione.
-
Scegli la zona per il cluster, se non è l'opzione predefinita.
-
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.
- 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.
- Torna alla scheda Console Google Cloud di Nomeutente 1.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 1.
-
Nel menu di navigazione (
), fai clic su IAM e amministrazione > Account di servizio.
-
Nella console IAM, fai clic sulla riga corrispondente alservice account predefinito di Compute Engine per selezionarla.
-
Fai clic su Autorizzazione per aprire il riquadro delle informazioni sulle autorizzazioni.
-
Nella pagina Autorizzazione, fai clic su Concedi accesso.
Sul lato destro della finestra si aprirà il riquadro delle informazioni sulle autorizzazioni.
- Digita il nome utente per Nomeutente 2 nella casella Nuove entità. Puoi copiare questo nome dalla pagina dei dettagli del lab.
- Nel riquadro Seleziona un ruolo, assicurati che sia selezionato Account di servizio > Utente account di servizio.
- 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.
- Torna alla scheda Console Google Cloud di Nomeutente 2.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 2.
-
Dopo aver eseguito l'accesso come Nomeutente 2, nel menu di navigazione (
), fai clic su Kubernetes Engine > Cluster. Potresti dover aggiornare il browser web.
-
Fai clic su Crea per avviare la creazione di un cluster GKE.
-
Fai clic su Passa al cluster Standard e conferma la stessa operazione nel popup successivo.
-
Imposta il nome del cluster su standard-cluster-1, se questo non è il valore predefinito.
-
Conferma che sia selezionato un cluster a livello di zona anziché a livello di regione.
-
Scegli la zona per il cluster, se non è l'opzione predefinita.
-
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
- Torna alla scheda Console Google Cloud di Nomeutente 1.
Nota: assicurati di essere nella scheda Console Google Cloud di Nomeutente 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
- Configura il completamento per lo strumento a riga di comando kubectl:
source <(kubectl completion bash)
- 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.
- Crea e apri un file denominato
psa-workload.yaml
con nano utilizzando questo comando:
nano psa-workload.yaml
- 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
-
Premi Ctrl+O e poi Invio per salvare il file modificato.
-
Premi Ctrl+X per uscire dall'editor di testo nano.
-
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
- Verifica che il deployment del pod sia andato a buon fine:
kubectl get pods --namespace=baseline-ns -l=app=nginx
- 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.
-
Nella barra del titolo della console Google Cloud, digita Esplora log nel campo Cerca, quindi fai clic su Esplora log nei risultati di ricerca.
-
Nel campo Query specifica quanto segue:
resource.type="k8s_cluster"
protoPayload.response.reason="Forbidden"
protoPayload.resourceName="core/v1/namespaces/restricted-ns/pods/nginx"
-
Fai clic su Esegui query.
-
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.
- Su Cloud Shell, esegui questo comando:
gcloud container clusters update $my_cluster --zone $my_zone --start-credential-rotation
- Immetti
Y
per continuare.
- 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.
- 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.
- 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
-
Immetti Y
per continuare.
-
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.