Questa pagina spiega come configurare un provider di identità esterno per autenticarsi nei cluster Google Kubernetes Engine (GKE).
Panoramica
Identity Service for GKE estende le tue soluzioni di identità esistenti per l'autenticazione ai tuoi cluster GKE. Con il supporto di OpenID Connect (OIDC), puoi gestire l'accesso ai cluster Kubernetes utilizzando le procedure standard della tua organizzazione per creare, attivare e disattivare gli account utente. Identity Service for GKE è limitato ai provider di identità OIDC.
Prima di iniziare
Prima di leggere questa pagina, assicurati di conoscere i seguenti concetti di autenticazione e OpenID:
I sistemi headless non sono supportati. Viene utilizzato un flusso di autenticazione basato su browser per chiederti il consenso e autorizzare il tuo account utente.
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
Chi utilizza Identity Service for GKE
Le attività descritte in questo documento si applicano a te se sei:
Amministratori dei cluster: crea uno o più cluster utente e crea file di configurazione dell'autenticazione per gli sviluppatori che utilizzano i cluster.
Sviluppatori: esegui carichi di lavoro su uno o più cluster e utilizza OIDC per l'autenticazione.
Come funziona
Per configurare e utilizzare Identity Service per GKE nel tuo cluster GKE, gli amministratori del cluster devono svolgere i seguenti passaggi:
- Abilita Identity Service per GKE su un cluster.
- Configura Identity Service for GKE.
- Crea un criterio RBAC per il cluster.
Dopo che gli amministratori del cluster hanno configurato Identity Service per GKE, gli sviluppatori possono accedere e autenticarsi nel cluster.
Abilita Identity Service per GKE su un cluster
Questa sezione è rivolta agli amministratori del cluster.
Per impostazione predefinita, Identity and Access Management (IAM) è configurato come provider di identità per l'autenticazione del cluster. Se vuoi utilizzare OIDC con provider di identità di terze parti, puoi attivare Identity Service per GKE su cluster nuovi o esistenti utilizzando Google Cloud CLI.
Abilita Identity Service per GKE in un nuovo cluster
Per creare un cluster con Identity Service for GKE abilitato, esegui il seguente comando:
gcloud container clusters create CLUSTER_NAME \
--enable-identity-service
Sostituisci CLUSTER_NAME
con il nome del nuovo cluster.
Abilita Identity Service per GKE su un cluster esistente
Per abilitare Identity Service per GKE in un cluster esistente, esegui il seguente comando
gcloud container clusters update CLUSTER_NAME \
--enable-identity-service
Sostituisci CLUSTER_NAME
con il nome del cluster.
Oggetti Kubernetes creati da Identity Service for GKE
La tabella seguente descrive gli oggetti Kubernetes creati quando attivi Identity Service per GKE su un cluster:
Oggetti Kubernetes | |
---|---|
anthos-identity-service |
Namespace Utilizzato per i deployment di Identity Service for GKE. |
kube-public |
Namespace Utilizzato per il file di configurazione del client default . |
gke-oidc-envoy |
LoadBalancer L'endpoint per le richieste OIDC. Esterno per impostazione predefinita. Se creato in un cluster senza endpoint IP esterno, l'endpoint è interno al Virtual Private Cloud del cluster. Creato nello spazio dei nomi anthos-identity-service . |
gke-oidc-service |
ClusterIP Facilita la comunicazione tra il deployment gke-oidc-envoy
e il deployment gke-oidc-service .Creato nello spazio dei nomi anthos-identity-service . |
gke-oidc-envoy |
Deployment Esegue un proxy esposto al gke-oidc-envoy
bilanciatore del carico. Comunica con gke-oidc-service per convalidare
i token di identità. Agisce da proxy per il server API Kubernetes e
finge di essere gli utenti
quando inoltra le richieste al server API.Creato nello spazio dei nomi anthos-identity-service . |
gke-oidc-service |
Deployment Convalida i token di identità e fornisce un webhook di ammissione con convalida per le risorse ClientConfig .Creato nello spazio dei nomi anthos-identity-service . |
gke-oidc-operator |
Deployment Riconcilia la configurazione del client e il bilanciatore del carico gke-oidc-envoy . Creato nello spazio dei nomi anthos-identity-service . |
gke-oidc-certs |
Secret Contiene l'autorità di certificazione (CA) del cluster e i certificati TLS per il LoadBalancer. Creato nello spazio dei nomi anthos-identity-service |
default |
ClientConfig CRD Contiene i parametri OIDC, come il metodo di autenticazione preferito, la configurazione del provider di identità e le mappature delle attestazioni di utenti e gruppi. Utilizzato per la convalida del token di identità. Utilizzato dagli amministratori del cluster per configurare le impostazioni OIDC prima della distribuzione agli sviluppatori. Creato nello spazio dei nomi kube-public |
Configurare Identity Service for GKE
Questa sezione è rivolta agli amministratori del cluster.
Puoi configurare i parametri di Identity Service for GKE scaricando e
modificando default
ClientConfig.
Scarica il file ClientConfig
default
:kubectl get clientconfig default -n kube-public -o yaml > client-config.yaml
Aggiorna la sezione
spec.authentication
con le impostazioni che preferisci:apiVersion: authentication.gke.io/v2alpha1 kind: ClientConfig metadata: name: default namespace: kube-public spec: name: cluster-name server: https://192.168.0.1:6443 authentication: - name: oidc oidc: clientID: CLIENT_ID certificateAuthorityData: OIDC_PROVIDER_CERTIFICATE extraParams: EXTRA_PARAMS issuerURI: ISSUER_URI cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc kubectlRedirectURI: KUBECTL_REDIRECT_URL scopes: SCOPES userClaim: USER groupsClaim: GROUPS userPrefix: USER_PREFIX groupPrefix: GROUP_PREFIX
Sostituisci quanto segue:
CLIENT_ID
: l'ID dell'applicazione client che effettua richieste di autenticazione al provider OIDC.OIDC_PROVIDER_CERTIFICATE
: (Facoltativo) un certificato PEM per il provider OIDC. Questo campo potrebbe essere utile se il tuo provider OIDC utilizza certificati autofirmati. Identity Service for GKE include per impostazione predefinita un insieme di radici pubbliche.EXTRA_PARAMS
: parametri coppia chiave-valore aggiuntivi da inviare al provider OIDC.- Per autorizzare i gruppi, utilizza
resource=token-groups-claim
. - Per autenticare Microsoft Azure e Okta, utilizza
prompt=consent
. - Per Cloud Identity, utilizza
prompt=consent,access_type=offline
.
- Per autorizzare i gruppi, utilizza
ISSUER_URI
: l'URL per inviare richieste di autorizzazione OIDC, ad esempiohttps://example.com/adfs
. Il server API Kubernetes utilizza questo URL per scoprire le chiavi pubbliche per la verifica dei token. L'URI deve utilizzare HTTPS. Per Cloud Identity, utilizzahttps://accounts.google.com
.KUBECTL_REDIRECT_URL
: l'URL di reindirizzamento utilizzato dakubectl oidc login
per l'autorizzazione. In genere è nel formatohttp://localhost:PORT/callback
, dovePORT
è qualsiasi porta superiore a1024
che sarà disponibile sulle workstation degli sviluppatori, ad esempiohttp://localhost:10000/callback
. Devi registrare l'URL con il tuo fornitore OIDC come URL di reindirizzamento autorizzato per l'applicazione client. Se utilizzi l'identità Google come provider OIDC, consulta Impostare un URI di reindirizzamento per istruzioni.SCOPES
: gli ambiti aggiuntivi da inviare al provider OIDC.- Microsoft Azure e Okta richiedono l'ambito
offline_access
. - Per Cloud Identity, utilizza
openid, email
per ottenere token ID che contengono l'indirizzo email nella rivendicazioneemail
.
- Microsoft Azure e Okta richiedono l'ambito
USER
: l'affermazione utente dal token di identità.GROUPS
: l'affermazione del gruppo dal token di identità.USER_PREFIX
: prefisso anteposto alle attestazioni degli utenti per evitare conflitti con i nomi esistenti. Per impostazione predefinita, un prefisso dell'emittente viene aggiunto aluserID
assegnato al server API Kubernetes (a meno che la rivendicazione utente non siaemail
). L'identificatore utente risultante èISSUER_URI#USER
. Ti consigliamo di utilizzare un prefisso, ma puoi disattivarlo impostandoUSER_PREFIX
su-
.GROUP_PREFIX
: prefisso anteposto alle attestazioni dei gruppi per evitare conflitti con i nomi esistenti. Ad esempio, se hai due gruppi denominatifoobar
, aggiungi un prefissogid-
. Il gruppo risultante ègid-foobar
.
Applica la configurazione aggiornata:
kubectl apply -f client-config.yaml
Dopo aver applicato questa configurazione, Identity Service per GKE viene eseguito all'interno del cluster e gestisce le richieste dietro il bilanciatore del carico
gke-oidc-envoy
. L'indirizzo IP nel campospec.server
deve essere l'indirizzo IP del bilanciatore del carico. Se modifichi il campospec.server
, i comandikubectl
potrebbero non riuscire.Crea una copia del file di configurazione
client-config.yaml
:cp client-config.yaml login-config.yaml
Aggiorna il file di configurazione
login-config.yaml
con l'impostazioneclientSecret
nella sezionespec.authentication.oidc
.clientSecret: CLIENT_SECRET
Sostituisci
CLIENT_SECRET
con il secret condiviso tra l'applicazione client OIDC e il provider OIDC.Distribuisci il file
login-config.yaml
aggiornato agli sviluppatori.
Configurare Identity Service for GKE su cluster con criteri rigidi
Per configurare Identity Service per GKE in modo che funzioni come previsto nei cluster con criteri di rete rigidi, segui questi passaggi:
- Aggiungi una regola firewall per la porta TCP
15000
per consentire al tuo control plane di comunicare con il webhook di convalidaClientConfig
. - Se
gke-oidc-envoy
viene creato come bilanciatore del carico interno, esponilo nel tuo VPC. - Se hai criteri che negano il traffico all'interno del cluster,
aggiungi una regola firewall per la porta TCP
8443
per consentire al deploymentgke-oidc-envoy
di comunicare con il deploymentgke-oidc-service
.
Il componente Identity Service per GKE versione 0.2.20 e successive non utilizza la porta TCP 15000
. Se la versione del componente è 0.2.20 o successiva, non è necessario aggiungere una regola del firewall per la porta 15000
. Per controllare la versione del componente, esegui il seguente comando:
kubectl describe deployment gke-oidc-envoy -n anthos-identity-service \
| grep "components.gke.io/component-name: gke-oidc" -A1
Aggiungere proprietà personalizzate al bilanciatore del carico
Dopo aver configurato Identity Service for GKE, puoi aggiungere proprietà e annotazioni personalizzate, ad esempio un indirizzo IP statico, al bilanciatore del carico gke-oidc-envoy
. Per modificare il servizio gke-oidc-envoy
, esegui questo comando:
kubectl edit service gke-oidc-envoy -n anthos-identity-service
Consulta Parametri del servizio LoadBalancer per ulteriori informazioni sulla configurazione del bilanciamento del carico TCP/UDP per GKE.
Crea un criterio RBAC per il cluster
Questa sezione è rivolta agli amministratori del cluster.
Gli amministratori possono utilizzare il controllo dell'controllo dell'accesso basato su ruoli (RBAC) di Kubernetes per concedere l'accesso agli utenti del cluster autenticati. Per configurare il RBAC per il tuo cluster, devi concedere i ruoli RBAC a ogni sviluppatore. Per concedere accesso alle risorse in un determinato spazio dei nomi, crea un ruolo e un RoleBinding. Per concedere l'accesso alle risorse di un intero cluster, crea un ClusterRole e un ClusterRoleBinding.
Ad esempio, prendiamo in considerazione un utente che deve visualizzare tutti gli oggetti Secret nel cluster. I passaggi che seguono concedono a questo utente i ruoli RBAC richiesti.
Salva il seguente manifest ClusterRole come
secret-viewer-cluster-role.yaml
. Una persona a cui è stato concesso questo ruolo può recuperare, guardare ed elencare qualsiasi secret nel cluster.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-viewer rules: - apiGroups: [""] # The resource type for which access is granted resources: ["secrets"] # The permissions granted by the ClusterRole verbs: ["get", "watch", "list"]
Applica il manifest ClusterRole:
kubectl apply -f secret-viewer-cluster-role.yaml
Salva il seguente manifest ClusterRoleBinding come
secret-viewer-cluster-role-binding.yaml
. La definizione del binding assegna il ruolosecret-viewer
a un nome utente definito nel file di configurazione del client.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: people-who-view-secrets subjects: - kind: User name: ISSUER_URI#USER apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-viewer apiGroup: rbac.authorization.k8s.io
Sostituisci quanto segue:
ISSUER_URI
: l'URI dell'emittente daspec.authentication.oidc.issuerURI
nel file di configurazione del client.USER
: l'identificatore utente nel token sotto il nome del claim configurato inspec.authentication.oidc.userClaim
nel file di configurazione del client.
Applica il manifest ClusterRoleBinding:
kubectl apply -f secret-viewer-cluster-role-binding.yaml
Accedi e autenticati nel cluster
Questa sezione è rivolta agli sviluppatori.
Quando ricevi il file di configurazione OIDC dall'amministratore, puoi autenticarti nei tuoi cluster.
Scarica il file
login-config.yaml
fornito dall'amministratore.Installa l'SDK Google Cloud CLI, che offre un componente OIDC distinto. Per installarlo, esegui il seguente comando:
gcloud components install kubectl-oidc
Esegui l'autenticazione nel cluster:
kubectl oidc login --cluster=CLUSTER_NAME --login-config=login-config.yaml
Si apre un browser web per completare la procedura di autenticazione.
Dopo l'autenticazione, puoi eseguire i comandi
kubectl
, ad esempio:kubectl get pods
Disabilitare Identity Service per GKE
Questa sezione è rivolta agli amministratori del cluster.
Puoi disattivare Identity Service for GKE con la gcloud CLI. Per disattivare Identity Service per GKE, esegui il seguente comando:
gcloud container clusters update CLUSTER_NAME \
--no-enable-identity-service
Passaggi successivi
- Scopri di più sul deployment dei carichi di lavoro.
- Scopri di più su OpenID Connect.
- Scopri di più su ambiti e rivendicazioni.