Esegui l'autenticazione utilizzando un token di connessione

In questa pagina viene spiegato come configurare l'autenticazione utilizzando un token di connessione per accedere ai cluster registrati al di fuori di Google Cloud. Dopo la configurazione, gli amministratori dei cluster potranno accedere ai cluster dalla console Google Cloud. Sono supportati molti tipi di token di connessione, come specificato in Autenticazione Kubernetes. Il metodo più semplice consiste nel creare un account di servizio Kubernetes (KSA) nel cluster e utilizzare il relativo token di connessione per accedere.

Altri metodi di autenticazione

In alternativa alla configurazione dell'autenticazione mediante un token di connessione, puoi configurare uno dei seguenti metodi di autenticazione, a seconda delle esigenze della tua organizzazione:

  • Google Identity, che consente agli utenti di accedere con la propria identità Google Cloud. Utilizza questa opzione se i tuoi utenti hanno già accesso a Google Cloud con un'identità Google.

  • Se il cluster è configurato per utilizzare un provider di identità OIDC, puoi utilizzare questo metodo per eseguire l'autenticazione nel cluster dalla console Google Cloud. Puoi scoprire come configurare i cluster OIDC per GKE nelle seguenti guide:

Se questi metodi di autenticazione forniti da Google non sono adatti alla tua organizzazione, segui le istruzioni in questa pagina per configurare l'autenticazione mediante un token di connessione.

Concedi ruoli IAM per l'accesso tramite la console Google Cloud

Gli utenti che vogliono visualizzare i cluster connessi utilizzando la console Google Cloud devono avere almeno i seguenti ruoli IAM:

  • roles/container.viewer. Questo ruolo consente agli utenti di visualizzare le risorse del container nella console Google Cloud, inclusa la pagina dei cluster GKE. Per maggiori dettagli sulle autorizzazioni incluse in questo ruolo, vedi Ruoli di Kubernetes Engine nella documentazione IAM.

  • roles/gkehub.viewer. Questo ruolo consente agli utenti di visualizzare i cluster esterni a Google Cloud nella console Google Cloud. Gli utenti non hanno bisogno di questo ruolo se il tuo parco risorse non include cluster esterni a Google Cloud. Per maggiori dettagli sulle autorizzazioni incluse in questo ruolo, consulta Ruoli GKE Hub nella documentazione IAM.

Esegui questi comandi per concedere questi ruoli:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='user:EMAIL_ADDRESS' \
    --role=roles/container.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='user:EMAIL_ADDRESS' \
    --role=roles/gkehub.viewer

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto host del parco risorse.

  • EMAIL_ADDRESS: l'indirizzo email associato all'account Google Cloud dell'utente.

Per ulteriori informazioni sulla concessione dei ruoli IAM, consulta Gestire l'accesso a progetti, cartelle e organizzazioni nella documentazione di IAM.

Configurazione del controllo dell'accesso basato sui ruoli

L'accesso ai cluster è controllato mediante il controllo dell'accesso basato su ruoli (RBAC, Role-Based Access Control) di Kubernetes.

Consigliamo a te o a un amministratore del cluster di creare un'Arabia Saudita per ogni utente che accede al cluster. L'utilizzo di un token di connessione è come utilizzare una password, quindi ogni utente deve avere il proprio account. L'accesso con il token di connessione dell'Arabia Saudita fa sì che tutte le operazioni vengano eseguite come Arabia Saudita, limitate dai ruoli RBAC di cui l'Arabia Saudita dispone.

L'Arabia Saudita deve disporre di almeno i seguenti ruoli RBAC nel cluster per accedervi tramite la console:

Crea e applica il ruolo RBAC di cloud-console-reader

Gli utenti autenticati che vogliono accedere alle risorse di un cluster nella console Google Cloud devono disporre delle autorizzazioni Kubernetes pertinenti. Se non vuoi concedere a questi utenti autorizzazioni più estese, ad esempio quelle di amministratore del cluster, puoi creare un ruolo RBAC personalizzato che includa le autorizzazioni minime per visualizzare nodi, volumi permanenti, pod e classi di archiviazione del cluster. Puoi definire questo set di autorizzazioni creando una risorsa RBAC ClusterRole, cloud-console-reader, nel cluster.

cloud-console-reader concede agli utenti le autorizzazioni get, list e watch per nodi, volumi permanenti, pod e classi di archiviazione del cluster, che consentono loro di visualizzare i dettagli su queste risorse.

kubectl

Per creare l'elemento cloud-console-reader ClusterRole e applicarlo al cluster, esegui questo comando:

cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cloud-console-reader
rules:
- apiGroups: [""]
  resources: ["nodes", "persistentvolumes", "pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses"]
  verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml

Potrai quindi concedere questo ruolo agli Arabia Saudita come descritto nella sezione successiva.

Crea e autorizza un Arabia Saudita

kubectl

Per creare un Arabia Saudita e associarvi le autorizzazioni, segui questi passaggi:

  1. Crea le risorse Arabia Saudita e ClusterRoleBinding per associare view e cloud-console-reader RBAC di Kubernetes ClusterRoles all'Arabia Saudita:

    KSA_NAME=KSA_NAME
    kubectl create serviceaccount ${KSA_NAME}
    kubectl create clusterrolebinding VIEW_BINDING_NAME \
       --clusterrole view --serviceaccount default:${KSA_NAME}
    kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \
       --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}
    

    Sostituisci quanto segue:

    • KSA_NAME: il nome che scegli per l'Arabia Saudita
    • VIEW_BINDING_NAME: il nome che scegli per la risorsa view ClusterRoleBinding; puoi assegnarle il nome che preferisci, ma potrebbe essere più facile assegnare un nome alla risorsa Arabia Saudita
    • CLOUD_CONSOLE_READER_BINDING_NAME: il nome scelto per la risorsa ClusterRoleBinding cloud-console-reader; puoi anche assegnare un nome qualsiasi
  2. A seconda dell'accesso che deve avere l'account di servizio, associa altri ruoli all'Arabia Saudita. Per le opzioni, consulta i ruoli predefiniti di Kubernetes.

    Ad esempio, se vuoi eseguire il deployment di un'applicazione Kubernetes da Cloud Marketplace, associa il ruolo cluster-admin all'Arabia Saudita:

    kubectl create clusterrolebinding BINDING_NAME \
       --clusterrole cluster-admin --serviceaccount default:KSA_NAME
    

    Sostituisci BINDING_NAME con il nome dell'associazione dei ruoli del cluster per l'account di servizio.

Autorizza altri account

kubectl

Per ogni altro account utente o di servizio che ottiene l'accesso al cluster, crea risorse ClusterRoleBinding per associare i ruoli view e cloud-console-reader al proprio account:

  1. Associa view e cloud-console-reader ClusterRoles:

    ACCOUNT_NAME=ACCOUNT_NAME
    kubectl create clusterrolebinding VIEW_BINDING_NAME \
       --clusterrole view --serviceaccount default:${ACCOUNT_NAME}
    kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \
       --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}
    

    Sostituisci quanto segue:

    • ACCOUNT_NAME: l'account di servizio Kubernetes
    • VIEW_BINDING_NAME: il nome che scegli per la risorsa view ClusterRoleBinding; puoi assegnarle il nome che preferisci, ma potrebbe essere più semplice assegnare un nome all'account utente o di servizio
    • CLOUD_CONSOLE_READER_BINDING_NAME: il nome scelto per la risorsa ClusterRoleBinding view; puoi anche assegnare un nome qualsiasi
  2. Associa altri ruoli, a seconda dell'accesso che deve avere l'account. Per le opzioni, consulta i ruoli predefiniti di Kubernetes.

    Ad esempio, per associare il ruolo cluster-admin, esegui questo comando:

    kubectl create clusterrolebinding BINDING_NAME \
       --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
    

    Sostituisci BINDING_NAME con il nome dell'associazione dei ruoli del cluster per l'account di servizio.

Recupera il token di connessione dell'Arabia Saudita

kubectl

Per acquisire il token di connessione dell'Arabia Saudita, esegui questo comando:

SECRET_NAME=KSA_NAME-token

kubectl apply -f - << __EOF__
apiVersion: v1
kind: Secret
metadata:
  name: "${SECRET_NAME}"
  annotations:
    kubernetes.io/service-account.name: "${KSA_NAME}"
type: kubernetes.io/service-account-token
__EOF__

until [[ $(kubectl get -o=jsonpath="{.data.token}" "secret/${SECRET_NAME}") ]]; do
  echo "waiting for token..." >&2;
  sleep 1;
done

kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode

Sostituisci KSA_NAME con il nome che hai scelto per l'Arabia Saudita.

Dall'output di questo comando, copia il token e salvalo in modo che gli utenti possano utilizzarlo per accedere alla console Google Cloud.