arrow_back

Implementing Role-Based Access Control with Google Kubernetes Engine

Accedi Partecipa
Accedi a oltre 700 lab e corsi

Implementing Role-Based Access Control with Google Kubernetes Engine

Lab 1 ora 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

In questo lab creerai spazi dei nomi all'interno di un cluster GKE, poi utilizzerai il controllo degli accessi basato su ruoli per consentire agli utenti non amministratori di lavorare con i pod in uno spazio dei nomi specifico.

Obiettivi

In questo lab imparerai a:

  • Creare spazi dei nomi per consentire agli utenti di controllare l'accesso alle risorse del cluster
  • Creare ruoli e RoleBinding per controllare l'accesso all'interno di uno spazio dei nomi
Nota: per questo lab, è stato eseguito il provisioning di due nomi utente disponibili nella finestra di dialogo Dettagli connessione.

Nel lab faremo riferimento a questi account come Nomeutente 1 e Nomeutente 2.

Attività 1: crea spazi dei nomi per consentire agli utenti di accedere alle risorse del cluster

Accedi alla console Google Cloud usando le credenziali del primo utente

  1. In una finestra di navigazione in incognito, accedi a Google Cloud Console 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 Attiva Cloud Shell).
  3. Quando richiesto, fai clic su Continua.

Non è necessario attendere l'avvio di Cloud Shell. Puoi passare immediatamente all'attività successiva.

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

Accedi alla console Google Cloud usando le credenziali del secondo utente

  1. Apri un'altra scheda nella finestra di navigazione in incognito.
  2. Vai alla pagina 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.
  5. Nella barra del titolo della console Google Cloud, fai clic su Attiva Cloud Shell (Icona Attiva Cloud Shell).
  6. Quando richiesto, fai clic su Continua.

Non è necessario attendere l'avvio di Cloud Shell. Puoi passare immediatamente all'attività successiva.

Connettiti al cluster GKE del lab

  1. Torna alla scheda della console Google Cloud di Nomeutente 1.
Nota: assicurati di essere nella scheda della console Google Cloud di Nomeutente 1.
  1. In Cloud Shell, digita questo comando per impostare la variabile di ambiente per il nome della zona e del cluster.
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
  1. In Cloud Shell, inserisci questo comando per clonare il repository del lab nella sessione di Cloud Shell del lab:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. Crea un soft link da utilizzare come scorciatoia alla directory di lavoro:
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
  1. Passa alla directory che contiene i file di esempio per questo lab:
cd ~/ak8s/RBAC/

Crea uno spazio dei nomi

È stato creato per te un file manifest denominato my-namespace.yaml, che crea un nuovo spazio dei nomi chiamato production.

apiVersion: v1 kind: Namespace metadata: name: production
  1. Elenca gli spazi dei nomi attualmente presenti nel cluster utilizzando questo comando:
kubectl get namespaces

Output:

NAME STATUS AGE default Active 17m kube-node-lease Active 17m kube-public Active 17m kube-system Active 17m
  1. In Cloud Shell, esegui il comando seguente per creare il nuovo spazio dei nomi:
kubectl create -f ./my-namespace.yaml
  1. Utilizza il comando seguente per verificare se lo spazio dei nomi è stato creato:
kubectl get namespaces

Output:

NAME STATUS AGE default Active 6m kube-node-lease Active 6m kube-public Active 6m kube-system Active 6m production Active 4s

Il nuovo spazio dei nomi verrà visualizzato in fondo all'elenco.

  1. Puoi visualizzare i dettagli di uno spazio dei nomi esistente eseguendo il questo comando:
kubectl describe namespaces production

Output:

Name: production Labels: Annotations: Status: Active Resource Quotas Name: gke-resource-quotas Resource Used Hard -------- --- --- count/ingresses.extensions 0 100 count/jobs.batch 0 5k pods 0 1500 services 0 500 No LimitRange resource.

Crea una risorsa in uno spazio dei nomi

Se non specifichi lo spazio dei nomi di un pod, verrà utilizzato lo spazio "default". In questa attività dovrai specificare la posizione dello spazio dei nomi appena creato durante la creazione di un nuovo pod. È stato creato per te un semplice file manifest denominato my-pod.yaml, che crea un pod contenente un container nginx.

apiVersion: v1 kind: Pod metadata: name: nginx labels: name: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
  1. In Cloud Shell, esegui il comando seguente per creare la risorsa nello spazio dei nomi chiamato production:
kubectl apply -f ./my-pod.yaml --namespace=production

In alternativa, lo spazio dei nomi può anche essere specificato nel file yaml. In tal caso, è necessario inserire il campo namespace: production nella sezione metadata:.

Ad esempio:

apiVersion: v1 kind: Pod metadata: name: nginx labels: name: nginx namespace: production spec: containers: - name: nginx image: nginx ports: - containerPort: 80
  1. Prova a utilizzare questo comando per visualizzare il pod:
kubectl get pods

Output:

No resources found in default namespace.

Il pod non è visualizzato perché kubectl ha controllato lo spazio dei nomi default invece dello spazio dei nomi creato da te.

  1. Esegui di nuovo il comando, specificando questa volta il nuovo spazio dei nomi:
kubectl get pods --namespace=production

Output:

NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 20s

A questo punto dovresti vedere il pod che hai appena creato.

Fai clic su Controlla i miei progressi per verificare l'obiettivo.

Crea lo spazio dei nomi e il pod

Attività 2: informazioni su ruoli e RoleBinding

In questa attività creerai un ruolo personalizzato di esempio, quindi creerai un RoleBinding che assegna a Nomeutente 2 il ruolo di editor nello spazio dei nomi production.

Il ruolo è definito nel file pod-reader-role.yaml che ti è stato fornito. Questo file manifest definisce un ruolo denominato pod-reader che fornisce le autorizzazioni di creazione, recupero, elenco e visualizzazione per gli oggetti Pod nello spazio dei nomi production. Tieni presente che questo ruolo non può eliminare pod.

kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: production name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["create", "get", "list", "watch"]

Crea un ruolo personalizzato

Per creare un ruolo, il tuo account deve disporre delle autorizzazioni concesse nel ruolo da assegnare. Per gli amministratori di cluster, questa operazione può essere eseguita facilmente creando la seguente associazione dei ruoli per concedere al tuo account utente il ruolo cluster-admin.

  1. Per concedere i privilegi di amministratore di cluster all'account Nomeutente 1, esegui il comando seguente, sostituendo [EMAIL_NOMEUTENTE_1] con l'indirizzo email dell'account Nomeutente 1:
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user [EMAIL_NOMEUTENTE_1]

Esempio di output:

kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user gcpstaging28307_student@qwiklabs.net
  1. In Cloud Shell, esegui il comando seguente per creare il ruolo:
kubectl apply -f pod-reader-role.yaml
  1. Per elencare i ruoli e verificare che il nuovo ruolo sia stato creato, esegui il comando seguente:
kubectl get roles --namespace production

Output:

NAME AGE pod-reader 3m

Crea un RoleBinding

Il ruolo viene utilizzato per assegnare privilegi, ma da solo non esegue alcuna operazione. Il ruolo deve essere associato a un utente e a un oggetto tramite un oggetto RoleBinding.

Il file manifest username2-editor-binding.yaml crea un oggetto RoleBinding chiamato username2-editor che associa il secondo utente del lab al ruolo pod-reader creato in precedenza. Questo ruolo può creare e visualizzare pod, ma non può eliminarli.

kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: username2-editor namespace: production subjects: - kind: User name: [EMAIL_NOMEUTENTE_2] apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io

Questo file contiene un segnaposto, [EMAIL_NOMEUTENTE_2], che devi sostituire con l'indirizzo email di Nomeutente 2 prima che possa essere utilizzato.

  1. In Cloud Shell, crea una variabile di ambiente che contenga l'indirizzo email completo di Nomeutente 2:
export USER2=[EMAIL_NOMEUTENTE_2]

Esempio di output:

export USER2=gcpstaginguser68_student@qwiklabs.net
  1. In Cloud Shell, utilizza sed per sostituire il segnaposto nel file con il valore della variabile di ambiente:
sed -i "s/\[EMAIL_NOMEUTENTE_2\]/${USER2}/" username2-editor-binding.yaml
  1. In Cloud Shell, esegui il comando seguente per verificare che la modifica sia stata apportata correttamente:
cat username2-editor-binding.yaml

Ora la sezione subjects dovrebbe essere simile alla seguente.

Esempio di output:

subjects: - kind: User name: gcpstaginguser68_student@qwiklabs.net apiGroup: rbac.authorization.k8s.io

Applicherai questo RoleBinding in un secondo momento.

Controlla l'accesso

Ora verificherai se Nomeutente 2 può creare un pod nello spazio dei nomi production utilizzando Nomeutente 2 per creare un pod con il file manifest production-pod.yaml. Il file manifest esegue il deployment di un pod semplice con un singolo container nginx.

apiVersion: v1 kind: Pod metadata: name: production-pod labels: name: production-pod namespace: production spec: containers: - name: production-pod image: nginx ports: - containerPort: 8080

Poiché si tratta di un account utente separato, è necessario preparare una seconda volta l'ambiente Cloud Shell in modo che tu possa accedere al cluster e ai file di esempio del repository del lab.

  1. Torna alla scheda della console Google Cloud di Nomeutente 2.
Nota: assicurati di essere nella scheda della console Google Cloud di Nomeutente 2.
  1. Nella sessione di Cloud Shell di Nomeutente 2, digita questo comando per impostare la variabile di ambiente per il nome della zona e del cluster:
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
  1. In Cloud Shell, inserisci questo comando per clonare il repository del lab nella sessione di Cloud Shell del lab:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. Crea un soft link da utilizzare come scorciatoia alla directory di lavoro:
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
  1. Passa alla directory che contiene i file di esempio per questo lab:
cd ~/ak8s/RBAC/
  1. Verifica se Nomeutente 2 riesce a vedere lo spazio dei nomi production utilizzando il seguente comando:
kubectl get namespaces

Output:

NAME STATUS AGE default Active 29m kube-node-lease Active 29m kube-public Active 29m kube-system Active 29m production Active 23m

Lo spazio dei nomi production viene visualizzato in fondo all'elenco, quindi possiamo continuare.

  1. In Cloud Shell, esegui il comando seguente per creare la risorsa nello spazio dei nomi chiamato production:
kubectl apply -f ./production-pod.yaml

Questo comando non riuscirà, con l'indicazione che Nomeutente 2 non dispone dell'autorizzazione corretta per creare pod. A questo punto, Nomeutente 2 dispone solo delle autorizzazioni di visualizzazione con le quali ha iniziato il lab, perché non hai ancora associato alcun altro ruolo all'account. Ora cambierai questa situazione.

  1. Torna alla scheda della console Google Cloud di Nomeutente 1.
Nota: assicurati di essere nella scheda della console Google Cloud di Nomeutente 1.
  1. Nella sessione di Cloud Shell di Nomeutente 1, esegui questo comando per creare il RoleBinding che concede a Nomeutente 2 il ruolo pod-reader, che include l'autorizzazione per creare pod nello spazio dei nomi production:
kubectl apply -f username2-editor-binding.yaml
  1. Nella sessione di Cloud Shell di Nomeutente 1, esegui il comando seguente per cercare la nuova associazione dei ruoli:
kubectl get rolebinding

Output:

No resources found in default namespace.

L'associazione dei ruoli non compare perché kubectl ha visualizzato i risultati relativi allo spazio dei nomi default.

  1. Nella sessione di Cloud Shell di Nomeutente 1, esegui il seguente comando specificando lo spazio dei nomi production:
kubectl get rolebinding --namespace production

Output:

NAME AGE username2-editor 23s
  1. Torna alla scheda della console Google Cloud di Nomeutente 2.
Nota: assicurati di essere nella scheda della console Google Cloud di Nomeutente 2.
  1. Nella sessione di Cloud Shell di Nomeutente 2, esegui questo comando per creare la risorsa nello spazio dei nomi chiamato production:
kubectl apply -f ./production-pod.yaml

Questa operazione dovrebbe avere esito positivo, perché ora Nomeutente 2 dispone dell'autorizzazione di creazione di pod nello spazio dei nomi production.

  1. Verifica che il deployment del pod sia stato eseguito correttamente nello spazio dei nomi production utilizzando il comando seguente:
kubectl get pods --namespace production

Output:

NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 16m production-pod 1/1 Running 0 20s

Dovresti vedere il pod che hai appena creato.

  1. Verifica che solo le autorizzazioni RBAC specifiche concesse dal ruolo pod-reader siano attive per Nomeutente 2 provando a eliminare production-pod.
kubectl delete pod production-pod --namespace production

Questa operazione non riuscirà perché Nomeutente 2 non dispone dell'autorizzazione di eliminazione dei pod.

Fai clic su Controlla i miei progressi per verificare l'obiettivo.

Ruoli e associazioni dei ruoli

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.

Copyright 2020 Google LLC Tutti i diritti riservati. Google e il logo Google sono marchi di Google LLC. Tutti gli altri nomi di società e prodotti sono marchi delle rispettive società a cui sono associati.

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.