Autenticazione tramite token di connessione
Questa pagina spiega 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 del cluster potranno accedervi dalla console Google Cloud. Sono supportati molti tipi di token di connessione, come specificato in Autenticazione Kubernetes. Il metodo più semplice è creare un account di servizio Kubernetes nel cluster e utilizzare il relativo token di connessione per accedere.
Altri metodi di autenticazione
In alternativa alla configurazione dell'autenticazione utilizzando un token di connessione, puoi configurare uno dei seguenti metodi di autenticazione in base alle esigenze della tua organizzazione:
Google Identity, che consente agli utenti di accedere utilizzando Google Cloud Identity. Utilizza questa opzione se i tuoi utenti hanno già accesso a Google Cloud con Google Identity.
Se il cluster è configurato per utilizzare un provider di identità OIDC, puoi utilizzarlo per eseguire l'autenticazione nel cluster dalla console Google Cloud. Puoi scoprire come configurare OIDC per i cluster GKE nelle seguenti guide:
- Configura i cluster per GKE Identity Service con OIDC. Questa guida mostra come configurare l'autenticazione OIDC su base cluster per cluster per tutti i tipi di cluster GKE.
- Configura GKE Identity Service per un parco risorse. Questa opzione consente di configurare OIDC a livello di parco risorse per i tipi di cluster supportati. La configurazione a livello di parco risorse è supportata per i cluster GKE su Google Cloud, per tutti i tipi di cluster GKE e per i cluster collegati a EKS su AWS.
Se questi metodi di autenticazione forniti da Google non sono adatti alla tua organizzazione, segui le istruzioni riportate in questa pagina per configurare l'autenticazione utilizzando 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 disporre almeno dei seguenti ruoli IAM:
roles/container.viewer
. Questo ruolo consente agli utenti di visualizzare le risorse del container nella console Google Cloud, inclusa la pagina Cluster GKE. Per maggiori dettagli sulle autorizzazioni incluse in questo ruolo, consulta Ruoli 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 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 progetto 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 utilizzando controllo dell'accesso basato sui ruoli (RBAC) di Kubernetes.
È consigliabile che tu o un amministratore del cluster creiate un Arabia Saudita per ogni utente che accede al cluster. Un token di connessione è come usare una password, quindi ogni utente deve avere il proprio account. L'accesso con il token di connessione dell'Arabia Saudita causa l'esecuzione di tutte le operazioni come l'Arabia Saudita. L'accesso è limitato dai ruoli RBAC detenuti dall'Arabia Saudita.
L'Arabia Saudita deve contenere almeno i seguenti ruoli RBAC nel cluster per accedervi tramite la console:
Crea e applica il ruolo RBAC cloud-console-reader
Gli utenti autenticati che vogliono accedere alle risorse di un cluster nella console Google Cloud devono disporre delle autorizzazioni Kubernetes pertinenti per farlo. Se non vuoi concedere a questi utenti autorizzazioni più estese, come quelle di un 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 insieme di autorizzazioni creando una risorsa ClusterRole
RBAC, cloud-console-reader
, nel cluster.
cloud-console-reader
concede agli utenti le autorizzazioni get
, list
e watch
su nodi, volumi permanenti, pod e classi di archiviazione del cluster, che consentono loro di visualizzare i dettagli di queste risorse.
kubectl
Per creare l'ClusterRole
cloud-console-reader
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
Successivamente, potrai concedere questo ruolo agli Arabia Saudita come descritto nella prossima sezione.
Creare e autorizzare un Arabia Saudita
kubectl
Per creare un Arabia Saudita e associarvi le autorizzazioni:
Crea le risorse in Arabia Saudita e
ClusterRoleBinding
per associareview
ecloud-console-reader
Kubernetes RBACClusterRoles
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 SauditaVIEW_BINDING_NAME
: il nome che scegli per la risorsaview
ClusterRoleBinding
; puoi assegnarle come vuoi, ma potresti trovarlo più facilmente come nome per l'Arabia SauditaCLOUD_CONSOLE_READER_BINDING_NAME
: il nome scelto per la risorsaClusterRoleBinding
cloud-console-reader
; puoi anche assegnare il nome che preferisci
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:
Associa
view
ecloud-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 KubernetesVIEW_BINDING_NAME
: il nome che scegli per la risorsaview
ClusterRoleBinding
; puoi assegnargli il nome che preferisci, ma potresti trovare più facile assegnargli un nome in base all'account utente o di servizioCLOUD_CONSOLE_READER_BINDING_NAME
: il nome che scegli per la risorsaClusterRoleBinding
view
; puoi anche assegnare il nome che preferisci
Associa ruoli aggiuntivi in base al tipo di 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 scegli 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.