Questa pagina mostra come configurare l'autenticazione ai cluster Google Kubernetes Engine (GKE) da provider di identità esterni (IdP).
Questa pagina è rivolta agli amministratori e agli operatori della piattaforma e agli amministratori di identità e account che utilizzano un IdP esterno che supporta OpenID Connect (OIDC) o Security Assertion Markup Language (SAML) 2.0.
Prima di leggere questa pagina, assicurati di avere familiarità con i seguenti concetti di autenticazione e OpenID:
Metodi di autenticazione IdP esterno in GKE
Consigliato: federazione delle identità per la forza lavoro
La federazione delle identità per la forza lavoro è una funzionalità IAM che ti consente di autenticarti su Google Cloud da qualsiasi IdP esterno che supporti OIDC o SAML 2.0. La federazione delle identità per la forza lavoro non richiede alcuna installazione all'interno del cluster, funziona con i cluster Autopilot e i cluster Standard ed è integrata in Google Cloud. Per maggiori dettagli, consulta la documentazione di IAM sulla federazione delle identità per la forza lavoro.
Non consigliato: servizio di identità per GKE (deprecato)
Solo nei cluster GKE Standard, GKE supporta anche Identity Service for GKE. Servizio di identità per GKE è limitato agli IdP OIDC e installa componenti aggiuntivi nel cluster. GKE consiglia vivamente di utilizzare la federazione delle identità della forza lavoro anziché il servizio di identità per GKE. Tieni presente anche una limitazione nota di Identity Service for GKE che impedisce la scalabilità automatica.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Per utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Considerazioni
I sistemi headless non sono supportati né con la federazione delle identità per la forza lavoro né con il servizio di identità per GKE. Un flusso di autenticazione basato su browser ti chiede il consenso e l'autorizzazione del tuo account utente.
Utilizza la federazione delle identità per la forza lavoro in GKE
Per utilizzare la federazione delle identità per la forza lavoro nei cluster GKE, segui questi passaggi:
- Configura la federazione delle identità per la forza lavoro per la tua organizzazione e l'IdP esterno. Per istruzioni, consulta Configura la federazione delle identità per la forza lavoro.
- Configura l'accesso dal tuo IdP esterno alla console della federazione delle identità per la forza lavoro Google Cloud . Per maggiori dettagli, consulta Configura l'accesso degli utenti alla console (federata).
Configura l'accesso degli utenti utilizzando uno dei seguenti meccanismi di autorizzazione:
Chiedi agli utenti di accedere ai cluster completando i seguenti passaggi:
- Accedi a gcloud CLI con l'identità federata.
- Configura kubectl per l'autenticazione in un cluster specifico eseguendo
gcloud container clusters get-credentials.
Configura l'accesso degli utenti ai cluster utilizzando RBAC
Google Cloud utilizza gli identificatori di entità per identificare gli utenti nei tuoi pool di identità della forza lavoro. Puoi fare riferimento a questi identificatori delle entità nelle policy RBAC di Kubernetes o nelle policy IAM per concedere autorizzazioni a singoli utenti o a gruppi di utenti. Con RBAC, non puoi fare riferimento ad altre asserzioni personalizzate contenute nei token IdP. RBAC supporta gli identificatori dei principali solo per utenti e gruppi.
La seguente tabella mostra esempi di identificatori di entità per singoli utenti e per gruppi:
| Identità | Identificatore entità |
|---|---|
| Utente singolo | principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_IDENTITY_POOL/subject/SUBJECT_ATTRIBUTE_VALUE Sostituisci quanto segue:
Ad esempio: principal://iam.googleapis.com/locations/global/workforcePools/full-time-employees/subject/amal@example.com |
| Tutti gli utenti di un gruppo | principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_IDENTITY_POOL/group/GROUP_NAME Sostituisci quanto segue:
Ad esempio: principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/group/sre |
Per ogni identificatore di entità supportato dalla federazione delle identità per la forza lavoro, consulta Rappresenta gli utenti del pool di forza lavoro nelle policy IAM.
L'esempio seguente mostra come concedere l'accesso di sola lettura a livello di cluster ai secret a qualsiasi entità nel pool di forza lavoro full-time-employees che fa parte del gruppo sre nel token IdP.
Salva il seguente manifest ClusterRole come
secret-viewer-cluster-role.yaml:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-viewer rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"]Qualsiasi entità a cui associ questo ClusterRole può visualizzare i secret.
Salva il seguente manifest ClusterRoleBinding come
secret-viewer-cluster-role-binding.yaml:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: users-view-secrets subjects: - kind: Group name: principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/group/sre apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-viewer apiGroup: rbac.authorization.k8s.ioQuesto ClusterRoleBinding concede il ClusterRole
secret-viewera qualsiasi utente che fa parte del grupposre.Esegui il deployment di ClusterRole e ClusterRoleBinding:
kubectl apply -f secret-viewer-cluster-role.yaml kubectl apply -f secret-viewer-cluster-role-binding.yaml
Accedi ed esegui l'autenticazione nel cluster
- Chiedi all'utente di accedere utilizzando Google Cloud CLI.
L'utente può configurare kubectl per l'autenticazione nel cluster utilizzando quanto segue:
gcloud container clusters get-credentials
Utilizza Identity Service for GKE
Per configurare e utilizzare il servizio di identità per GKE sul tuo cluster GKE in modalità Standard, gli amministratori del cluster devono:
- Abilita Identity Service for GKE su un cluster.
- Configura il servizio di identità per GKE.
- Crea una policy RBAC per il tuo cluster.
Dopo che gli amministratori del cluster hanno configurato Identity Service for GKE, gli sviluppatori possono accedere ed eseguire l'autenticazione nel cluster.
Oggetti Kubernetes creati da Identity Service per GKE
La tabella seguente descrive gli oggetti Kubernetes creati quando attivi il servizio di identità per GKE su un cluster:
| Oggetti Kubernetes | |
|---|---|
anthos-identity-service |
NamespaceUtilizzato per i deployment del servizio di identità per GKE. |
kube-public |
NamespaceUtilizzato per il file di configurazione del client default. |
gke-oidc-envoy |
LoadBalancerL'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. Creata nello spazio dei nomi anthos-identity-service. |
gke-oidc-service |
ClusterIPFacilita la comunicazione tra il deployment gke-oidc-envoy e il deployment gke-oidc-service.Creata nello spazio dei nomi anthos-identity-service. |
gke-oidc-envoy |
DeploymentEsegue un proxy esposto al bilanciatore del carico gke-oidc-envoy. Comunica con gke-oidc-service per convalidare i token di identità. Agisce come proxy per il server API Kubernetes e
simula l'identità degli utenti
quando trasmette le richieste al server API.Creata nello spazio dei nomi anthos-identity-service. |
gke-oidc-service |
DeploymentConvalida i token di identità e fornisce un webhook di ammissione di convalida per le risorse ClientConfig.Creata nello spazio dei nomi anthos-identity-service. |
gke-oidc-operator |
DeploymentRiconcilia la configurazione del client e il bilanciatore del carico gke-oidc-envoy. Creata nello spazio dei nomi anthos-identity-service. |
gke-oidc-certs |
SecretContiene l'autorità di certificazione (CA) del cluster e i certificati TLS per LoadBalancer. Creato nello spazio dei nomi anthos-identity-service |
default |
ClientConfig CRDContiene 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 |
Abilita Identity Service for GKE su un 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 abilitare il servizio di identità per GKE su cluster nuovi o esistenti utilizzando Google Cloud CLI.
Abilita il servizio di identità per GKE su 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 for GKE su un cluster esistente
Per abilitare Identity Service for GKE su un cluster esistente, esegui il seguente comando:
gcloud container clusters update CLUSTER_NAME \
--enable-identity-service
Sostituisci CLUSTER_NAME con il nome del tuo cluster.
Configura il servizio di identità per GKE
Puoi configurare i parametri del servizio di identità per GKE scaricando e modificando ClientConfig default.
Scarica il ClientConfig
default:kubectl get clientconfig default -n kube-public -o yaml > client-config.yamlAggiorna la sezione
spec.authenticationcon 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_PREFIXSostituisci 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 per GKE include un insieme di root pubbliche per impostazione predefinita.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 a cui inviare le richieste di autorizzazione OIDC, ad esempiohttps://example.com/adfs. Il server API Kubernetes utilizza questo URL per rilevare 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 loginper l'autorizzazione. In genere, il formato èhttp://localhost:PORT/callback, dovePORTè una porta maggiore di1024che sarà disponibile sulle workstation degli sviluppatori, ad esempiohttp://localhost:10000/callback. Devi registrare l'URL presso il tuo provider OIDC come URL di reindirizzamento autorizzato per l'applicazione client. Se utilizzi Google Identity come provider OIDC, leggi Imposta 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, emailper ottenere token ID che contengono l'indirizzo email nell'attestazioneemail.
- Microsoft Azure e Okta richiedono l'ambito
USER: l'attestazione utente dal token di identità.GROUPS: l'attestazione del gruppo dal token di identità.USER_PREFIX: prefisso anteposto alle attestazioni utente per evitare conflitti con i nomi esistenti. Per impostazione predefinita, un prefisso dell'emittente viene aggiunto auserIDassegnato al server API Kubernetes (a meno che la rivendicazione dell'utente non siaemail). L'identificatore dell'utente risultante èISSUER_URI#USER. Ti consigliamo di utilizzare un prefisso, ma puoi disattivarlo impostandoUSER_PREFIXsu-.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.yamlDopo aver applicato questa configurazione, il servizio di identità 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.serverdeve essere l'indirizzo IP del bilanciatore del carico. Se modifichi il campospec.server, i comandikubectlpotrebbero non riuscire.Crea una copia del file di configurazione
client-config.yaml:cp client-config.yaml login-config.yamlAggiorna il file di configurazione
login-config.yamlcon l'impostazioneclientSecretnella sezionespec.authentication.oidc.clientSecret: CLIENT_SECRETSostituisci
CLIENT_SECRETcon il secret condiviso tra l'applicazione client OIDC e il provider OIDC.Distribuisci il file
login-config.yamlaggiornato ai tuoi sviluppatori.
Configura Identity Service for GKE su cluster con policy rigorose
Per configurare il servizio di identità per GKE in modo che funzioni come previsto sui cluster con policy di rete rigorose, segui questi passaggi:
- Aggiungi una regola firewall per la porta TCP
15000per consentire al control plane di comunicare con il webhook di convalidaClientConfig. - Se
gke-oidc-envoyviene creato come bilanciatore del carico interno, esponilo nel VPC. - Se hai policy che negano il traffico all'interno del cluster, aggiungi una regola firewall per la porta TCP
8443per consentire al deploymentgke-oidc-envoydi comunicare con il deploymentgke-oidc-service.
La versione 0.2.20 e successive del componente Identity Service for GKE non utilizza la porta TCP 15000. Se la versione del componente è 0.2.20 o successiva, non è necessario aggiungere una regola firewall per la porta 15000. Per controllare la versione del componente, esegui questo comando:
kubectl describe deployment gke-oidc-envoy -n anthos-identity-service \
| grep "components.gke.io/component-name: gke-oidc" -A1
Aggiungi proprietà personalizzate al bilanciatore del carico
Dopo aver configurato il servizio di identità per GKE, puoi aggiungere annotazioni e proprietà 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
Per saperne di più sulla configurazione del bilanciamento del carico TCP/UDP per GKE, consulta i parametri del servizio LoadBalancer.
Crea una policy RBAC per il cluster
Gli amministratori possono utilizzare il controllo controllo dell'accesso basato su ruoli (RBAC) di Kubernetes per concedere l'accesso agli utenti del cluster autenticati. Per configurare RBAC per il tuo cluster, devi concedere i ruoli RBAC per ogni sviluppatore. Per concedere l'accesso alle risorse in un determinato spazio dei nomi, crea un Role e un RoleBinding. Per concedere l'accesso alle risorse in un intero cluster, crea un ClusterRole e un ClusterRoleBinding.
Ad esempio, considera un utente che deve visualizzare tutti gli oggetti Secret nel cluster. I passaggi seguenti concedono i ruoli RBAC richiesti a questo utente.
Salva il seguente manifest ClusterRole come
secret-viewer-cluster-role.yaml. Una persona a cui viene concesso questo ruolo può ottenere, controllare 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.yamlSalva il seguente manifest ClusterRoleBinding come
secret-viewer-cluster-role-binding.yaml. L'associazione concede il ruolosecret-viewera 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.ioSostituisci quanto segue:
ISSUER_URI: l'URI emittente dispec.authentication.oidc.issuerURInel file di configurazione del client.USER: l'identificatore dell'utente nel token con il nome della rivendicazione configurato inspec.authentication.oidc.userClaimnel file di configurazione del client.
Applica il manifest ClusterRoleBinding:
kubectl apply -f secret-viewer-cluster-role-binding.yaml
Accedi ed esegui l'autenticazione nel cluster
In qualità di sviluppatore che riceve il file di configurazione OIDC dall'amministratore, puoi autenticarti nei tuoi cluster.
Scarica il file
login-config.yamlfornito dall'amministratore.Installa l'SDK Google Cloud CLI, che offre un componente OIDC separato. Puoi installarlo eseguendo questo comando:
gcloud components install kubectl-oidcEsegui l'autenticazione nel cluster:
kubectl oidc login --cluster=CLUSTER_NAME --login-config=login-config.yamlSi apre un browser web per completare la procedura di autenticazione.
Dopo l'autenticazione, puoi eseguire i comandi
kubectl, ad esempio:kubectl get pods
Disabilita Identity Service for GKE
Puoi disabilitare Identity Service for GKE con gcloud CLI. Per disabilitare il servizio di identità per GKE, esegui questo comando:
gcloud container clusters update CLUSTER_NAME \
--no-enable-identity-service
Limitazioni note
Il componente gke-oidc-envoy, responsabile dell'autenticazione nel cluster utilizzando il servizio di identità per GKE, ha un numero fisso di repliche. Ciò significa che non esegue la scalabilità automatica per gestire l'aumento del traffico. Nei cluster regionali, viene eseguito il deployment di questo componente con tre repliche.
Non puoi scalare direttamente il deployment gke-oidc-envoy. Ti consigliamo vivamente di eseguire la migrazione alla federazione delle identità per la forza lavoro per una soluzione scalabile e più solida.
Passaggi successivi
- Scopri di più sulla federazione delle identità per la forza lavoro.
- Scopri di più sul deployment dei workload.