Utilizza provider di identità esterni per l'autenticazione su GKE


In questa pagina viene spiegato come configurare un provider di identità esterno eseguire l'autenticazione nei cluster Google Kubernetes Engine (GKE).

Panoramica

Identity Service per GKE estende le soluzioni di identità esistenti per l'autenticazione nei tuoi cluster GKE. Con supporto per OpenID Connect (OIDC), puoi gestire l'accesso ai cluster Kubernetes utilizzando procedure nella tua organizzazione per creare, abilitare e disabilitare le procedure . Identity Service per GKE è limitato ai provider di identità OIDC.

Prima di iniziare

  • In questo argomento si presuppone che tu abbia familiarità con i seguenti concetti relativi all'autenticazione e a OpenID:

  • I sistemi headless non sono supportati. Viene utilizzato un flusso di autenticazione basato su browser per richiedere il consenso e autorizzare il tuo account utente.

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Attiva l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine .
  • Se vuoi utilizzare Google Cloud CLI per questa attività, install e poi initialize con gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.

Chi utilizza Identity Service per GKE

Le attività in questo documento riguardano te se rientri in una delle seguenti categorie:

  • Amministratore del cluster: crea uno o più cluster utente e creare file di configurazione dell'autenticazione per gli sviluppatori che utilizzano cluster.

  • Sviluppatore: esegue carichi di lavoro su uno o più cluster e utilizza OIDC per l'autenticazione.

Come funziona

Per configurare e utilizzare Identity Service per GKE su GKE gli amministratori del cluster possono:

  1. Abilita Identity Service for GKE su un cluster.
  2. Configura Identity Service per GKE.
  3. Crea un criterio RBAC per il cluster.

Dopo che gli amministratori del cluster avranno configurato Identity Service per GKE, sviluppatori possono accedere e autenticarsi al cluster.

Abilita Identity Service for GKE su un cluster

Questa sezione è rivolta agli amministratori di cluster.

Per impostazione predefinita, Identity and Access Management (IAM) è configurato come provider di identità per l'autenticazione basata sul cluster. Se vuoi utilizzare OIDC con provider di identità di terze parti, puoi abilitare Identity Service for GKE su cluster nuovi o esistenti utilizzando con Google Cloud CLI.

Abilita Identity Service for GKE in un nuovo cluster

Per creare un cluster con Identity Service for GKE abilitato, esegui 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 seguente comando

gcloud container clusters update CLUSTER_NAME \
    --enable-identity-service

Sostituisci CLUSTER_NAME con il nome del tuo cluster.

Oggetti Kubernetes creati da Identity Service for GKE

La seguente tabella descrive gli oggetti Kubernetes creati al momento dell'abilitazione Identity Service for 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 creata in cluster privato o con un criterio di rete rigoroso, è interno al cluster Virtual Private Cloud.
Creato nello spazio dei nomi anthos-identity-service.
gke-oidc-service ClusterIP
Facilita la comunicazione tra 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 a gke-oidc-envoy LoadBalancer. Comunica con gke-oidc-service per la convalida di identità. Agisce da proxy per il server API Kubernetes e si spaccia per gli utenti durante la trasmissione delle richieste al server API.
Creato nello spazio dei nomi anthos-identity-service.
gke-oidc-service Deployment
Convalida i token di identità e fornisce una convalida del webhook di ammissione per ClientConfig risorse.
Creato nello spazio dei nomi anthos-identity-service.
gke-oidc-operator Deployment
Riconcilia la configurazione del client e il gke-oidc-envoy LoadBalancer.
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 LoadBalancer.
Creato nello spazio dei nomi anthos-identity-service
default ClientConfig CRD
Contiene parametri OIDC come metodo di autenticazione preferito, identità configurazione del provider e mappature delle attestazioni di utenti e gruppi. Utilizzata per la convalida del token di identità. Utilizzato dagli amministratori del cluster per la configurazione le impostazioni OIDC prima della distribuzione agli sviluppatori.
Creato nello spazio dei nomi kube-public

Configura Identity Service per GKE

Questa sezione è rivolta agli amministratori di cluster.

Puoi configurare i parametri di Identity Service per GKE scaricando e Modifica di default ClientConfig.

  1. Scarica ClientConfig default:

    kubectl get clientconfig default -n kube-public -o yaml > client-config.yaml
    
  2. Aggiorna la sezione spec.authentication con le tue impostazioni preferite:

    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 PEEM per il provider OIDC. Questo campo può essere utile se il tuo provider OIDC utilizza certificati autofirmati. Identity Service per GKE include un insieme di root pubblici per impostazione predefinita.
    • EXTRA_PARAMS: parametri coppia chiave-valore aggiuntivi per 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.
    • ISSUER_URI: l'URL per inviare l'autorizzazione OIDC richieste, come https://example.com/adfs. Il server API Kubernetes utilizza questo URL per scoprire le chiavi pubbliche per la verifica dei token. L'URI deve utilizzano HTTPS. Per Cloud Identity, utilizza https://accounts.google.com.
    • KUBECTL_REDIRECT_URL: l'URL di reindirizzamento che kubectl oidc login utilizza per l'autorizzazione. Si tratta tipicamente formato http://localhost:PORT/callback, dove PORT è una porta al di sopra di 1024 che sarà disponibili sulle workstation per sviluppatori, ad esempio http://localhost:10000/callback. Devi registrare l'URL con 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 all'istanza 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 nel reclamo email.
    • USER: la rivendicazione dell'utente dal token di identità.
    • GROUPS: l'attestazione del gruppo dal token di identità.
    • USER_PREFIX: prefisso anteposto alle rivendicazioni dell'utente a per evitare conflitti con i nomi esistenti. Per impostazione predefinita, il prefisso di un emittente aggiunto al parametro userID fornito al server API Kubernetes (a meno che il reclamo dell'utente è email). L'identificatore utente risultante è ISSUER_URI#USER. Ti consigliamo di utilizzare una ma puoi disabilitarlo impostando Da USER_PREFIX a -.
    • GROUP_PREFIX: prefisso anteposto alle rivendicazioni del gruppo per evitare conflitti con i nomi esistenti. Ad esempio, se hai due gruppi denominati foobar, aggiungi un prefisso gid-. Il gruppo risultante è gid-foobar.
  3. Applica la configurazione aggiornata:

    kubectl apply -f client-config.yaml
    

    Dopo aver applicato questa configurazione, Identity Service for GKE viene eseguito all'interno del tuo cluster e gestisce le richieste dietro il carico gke-oidc-envoy con il bilanciatore del carico di rete passthrough esterno regionale. L'indirizzo IP nel campo spec.server deve essere l'indirizzo IP del bilanciatore del carico. Se modifichi il campo spec.server, kubectl potrebbero non riuscire.

  4. Crea una copia del file di configurazione client-config.yaml:

    cp client-config.yaml login-config.yaml
    
  5. Aggiorna il file di configurazione login-config.yaml con clientSecret nella sezione spec.authentication.oidc.

    clientSecret: CLIENT_SECRET
    

    Sostituisci CLIENT_SECRET con il secret condiviso tra l'applicazione client OIDC e il provider OIDC.

  6. Distribuisci il file login-config.yaml aggiornato ai tuoi sviluppatori.

Configura Identity Service per GKE su cluster con criteri rigorosi

Configurare Identity Service per GKE in modo che funzioni come previsto sui cluster con criteri di rete rigorosi, come i cluster privati, seguenti:

  1. Aggiungere una regola firewall per la porta TCP 15000 per consentire al piano di controllo per comunicare con il webhook di convalida ClientConfig.
  2. Se gke-oidc-envoy viene creato come bilanciatore del carico interno, espanderla sul tuo VPC.
  3. Se hai criteri che negano il traffico all'interno del cluster, aggiungi una regola firewall per la porta TCP 8443 per consentire a gke-oidc-envoy per comunicare con il deployment gke-oidc-service.

Identity Service per GKE versione 0.2.20 e successive non utilizza Porta TCP 15000. Se la versione del componente è 0.2.20 o in seguito, non dovrai aggiungere una regola firewall per la porta 15000. Per controllare 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 Identity Service per GKE, puoi aggiungere annotazioni e proprietà, come un indirizzo IP statico, all'gke-oidc-envoy con il bilanciatore del carico di rete passthrough esterno regionale. Per modificare il servizio gke-oidc-envoy, esegui questo comando :

kubectl edit service gke-oidc-envoy -n anthos-identity-service

Consulta la documentazione su come configurare il bilanciamento del carico TCP/UDP per GKE.

Crea un criterio RBAC per il cluster

Questa sezione è rivolta agli amministratori di cluster.

Gli amministratori possono utilizzare Controllo controllo dell'accesso basato su ruoli (RBAC) di Kubernetes per concedere l'accesso a utenti del cluster autenticati. Per configurare RBAC per devi concedere ruoli RBAC a ogni sviluppatore. Per concedere alle risorse in uno specifico spazio dei nomi, crei Ruolo 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.

  1. Salva il seguente manifest ClusterRole come secret-viewer-cluster-role.yaml. Una persona a cui viene concesso questo ruolo può recupera, guarda ed elenca 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"]
    
  2. Applica il manifest ClusterRole:

    kubectl apply -f secret-viewer-cluster-role.yaml
    
  3. Salva il seguente manifest ClusterRoleBinding come secret-viewer-cluster-role-binding.yaml. L'associazione concede secret-viewer a un nome utente definito nella 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 da spec.authentication.oidc.issuerURI nel file di configurazione del client.
    • USER: l'identificatore utente nel token sotto il nome della rivendicazione configurato in spec.authentication.oidc.userClaim nel file di configurazione del client.
  4. Applica il manifest ClusterRoleBinding:

    kubectl apply -f secret-viewer-cluster-role-binding.yaml
    

Accedi ed esegui l'autenticazione nel cluster

Questa sezione è rivolta agli sviluppatori.

Quando ricevi il file di configurazione OIDC dall'amministratore, puoi eseguire l'autenticazione nei cluster.

  1. Scarica il file login-config.yaml fornito da amministratore.

  2. Installa l'SDK Google Cloud CLI, che offre un'interfaccia OIDC separata di strumento di authoring. Puoi installarlo eseguendo questo comando:

    gcloud components install kubectl-oidc
    
  3. Autentica nel tuo cluster:

    kubectl oidc login --cluster=CLUSTER_NAME --login-config=login-config.yaml
    

    Si apre un browser web per completare il processo di autenticazione.

  4. Dopo l'autenticazione, puoi eseguire i comandi kubectl, ad esempio:

    kubectl get pods
    

Disabilita Identity Service per GKE

Questa sezione è rivolta agli amministratori di cluster.

Puoi disabilitare Identity Service per GKE con gcloud CLI. Per disabilitare Identity Service per GKE, esegui il comando seguente:

gcloud container clusters update CLUSTER_NAME \
    --no-enable-identity-service

Passaggi successivi