Questa pagina mostra come utilizzare OpenID Connect (OIDC) con Active Directory Federation Services (AD FS) per configurare l'autenticazione per i cluster utente GKE On-Prem.
Per una panoramica del flusso di autenticazione, consulta Autenticazione. Per informazioni sull'utilizzo di provider OpenID diversi da AD FS, consulta la pagina relativa all'autenticazione con OpenID Connect.
Panoramica
GKE On-Prem supporta OpenID Connect (OIDC) come uno dei meccanismi di autenticazione per interagire con il server API di un cluster utente. Con OIDC, puoi gestire l'accesso ai cluster Kubernetes utilizzando le procedure standard nella tua organizzazione per creare, abilitare e disabilitare gli account dei dipendenti.
Un dipendente può utilizzare il flusso di autenticazione OIDC in due modi:
Un dipendente può utilizzare
kubectl
per avviare un flusso OIDC. Per rendere questo flusso automatico, GKE On-Prem fornisce il plug-in Kubectl per OIDC, un plug-in kubectl.Un dipendente può utilizzare Google Cloud Console per avviare un flusso di autenticazione OIDC.
In questo esercizio configurerai entrambe le opzioni: kubectl
e
Google Cloud Console. Puoi utilizzare una serie di procedure guidate di gestione di AD FS per configurare il tuo server AD FS e il tuo database di dipendenti AD.
Prima di iniziare
Questo argomento presuppone che tu abbia dimestichezza con OAuth 2.0 e OpenID Connect. Questo argomento presuppone che tu conosca gli ambiti e le rivendicazioni di OpenID.
Questo argomento riguarda le aziende che dispongono della seguente infrastruttura:
- L'azienda utilizza Active Directory (AD) per il suo database di dipendenti.
- L'azienda esegue un server AD Directory FS (Active Directory Federation Services).
- Il server AD FS funge da provider OpenID.
Download del plug-in Kubectl per OIDC
Questa sezione è rivolta agli amministratori e ai dipendenti che vogliono utilizzare il plug-in Kubect per OIDC.
Scarica il plug-in e imposta le autorizzazioni di accesso:
Linux
gsutil cp gs://gke-on-prem-release/oidc-plugin/v1.1alpha/linux_amd64/kubectl-oidc . chmod +x kubectl-oidc
Windows
gsutil cp gs://gke-on-prem-release/oidc-plugin/v1.1alpha/windows_amd64/kubectl-oidc .
macOS
gsutil cp gs://gke-on-prem-release/oidc-plugin/v1.1alpha/darwin_amd64/kubectl-oidc . chmod +x kubectl-oidc
Installare il plug-in
Installa il plug-in spostando il file eseguibile in qualunque percorso del PATH
. Il file eseguibile deve essere denominato kubectl-oidc
. Per saperne di più, consulta Installare i plug-in kubectl.
Creazione di un URL di reindirizzamento per il plug-in Kubectl per OIDC
Questa sezione è rivolta agli amministratori.
Nel stabilire una relazione con il server AD FS, devi specificare un URL di reindirizzamento che il server AD FS può utilizzare per restituire i token ID al plug-in Kubectl per OIDC. Il plug-in Kubectl per OIDC viene eseguito sulla macchina locale di ciascun dipendente e rimane in ascolto sulla porta che preferisci. Scegli un numero di porta superiore a 1024 adatto a questo scopo. L'URL di reindirizzamento è quindi:
http://localhost:[PORT]/callback
dove [PORT] è il tuo numero di porta.
Quando configuri il server AD FS, specifica http://localhost:[PORT]/callback come uno degli URL di reindirizzamento.
Configurare un URL di reindirizzamento per la console Google Cloud
Questa sezione è rivolta agli amministratori.
Oltre ad avere un URL di reindirizzamento per il plug-in Kubectl per OIDC, è necessario un URL di reindirizzamento per la console Google Cloud. L'URL di reindirizzamento per la console Google Cloud è:
https://console.cloud.google.com/kubernetes/oidc
Quando configuri il server AD FS, specifica https://console.cloud.google.com/kubernetes/oidc come uno degli URL di reindirizzamento.
Configurazione di AD FS
Le sezioni seguenti spiegano come configurare AD FS per GKE On-Prem.
Impostazione degli URL di reindirizzamento
Apri il riquadro di gestione di AD FS.
Seleziona Gruppi di applicazioni > Azioni > Aggiungi un gruppo di applicazioni.
Seleziona Server Application (Applicazione server). Inserisci un nome e una descrizione a tua scelta. Fai clic su Next (Avanti).
Inserisci i tuoi due URL di reindirizzamento. Ti verrà assegnato un ID client. Ecco come il server AD FS identifica il plug-in Kubectl per la console OIDC e Google Cloud. Salva l'ID client per un utilizzo futuro.
Seleziona Genera un secret condiviso. Il plug-in Kubectl per OIDC e Google Cloud Console utilizza questo secret per l'autenticazione nel server AD FS. Salva il segreto per usarlo in un secondo momento.
(Facoltativo) Configurare i gruppi di sicurezza
Nella gestione di AD FS, seleziona Affidabilità parte del gruppo > Aggiungi un nuovo trust del gruppo di attendibilità.
Seleziona Rivendicazioni sensibili e fai clic su Inizia.
Seleziona Inserisci manualmente i dati relativi all'attendibilità del soggetto.
Inserisci un nome visualizzato.
Salta i due passaggi successivi.
Inserisci un identificatore di attendibilità parte. Suggerimento:
token-groups-claim
.In Criterio di controllo dell'accesso, seleziona Consenti tutti. Ciò significa che tutti i dipendenti condividono le informazioni sul proprio gruppo di sicurezza con il plug-in Kubectl per OIDC e la console Google Cloud.
Fai clic su Fine.
Mappatura degli attributi LDAP alle denominazioni delle rivendicazioni
Nella gestione di AD FS, seleziona Fiducia delle parti attendibili > Modifica criterio di emissione delle rivendicazioni.
Seleziona Invia attributi LDAP come rivendicazioni, quindi fai clic su Avanti.
In Nome regola rivendicazione, inserisci
groups
.In Archivio attributi, seleziona Active Directory.
Nella tabella, per Attributo LDAP, seleziona:
- AD FS 5.0 e versioni successive: Gruppi di token qualificati per nome di dominio
- Versioni AD FS precedenti alla 5.0: Gruppi di token - Nomi qualificati
In Tipo di rivendicazione in uscita, seleziona:
- AD FS 5.0 e versioni successive: gruppo
- Versioni AD FS precedenti alla 5.0: gruppi
Fai clic su Fine e poi su Applica.
Registrazione del plug-in Kubectl per OIDC e Google Cloud Console con AD FS
Apri una finestra di PowerShell in modalità Amministratore e inserisci questo comando:
Grant-AD FSApplicationPermission ` -ClientRoleIdentifier "[CLIENT_ID]" ` -ServerRoleIdentifier [SERVER_ROLE_IDENTIFIER] ` -ScopeName "allatclaims", "openid"
dove:
[CLIENT_ID] è l'ID client ottenuto in precedenza.
[SERVER_ROLE_IDENTIFIER] è l'identificatore della rivendicazione inserito in precedenza. Ricorda che l'identificatore suggerito è
token-groups-claim
.
Completamento della specifica oidc nel file di configurazione del cluster
Questa sezione è dedicata ai dipendenti che vogliono creare un cluster configurato per l'utilizzo di OIDC.
Prima di creare un cluster utente, generi un file di configurazione GKE On-Prem utilizzando gkectl create-config
. La configurazione include la seguente specifica oidc
. Compila
oidc
con valori specifici del tuo provider:
oidc: issuerurl: clientid: clientsecret: username: usernameprefix: group: groupprefix: scopes: extraparams: usehttpproxy: capath:
issuerurl
: obbligatorio. URL del tuo provider OpenID, ad esempiohttps://example.com/adfs
. Le applicazioni client, come il plug-in Kubectl per OIDC e la console Google Cloud, inviano le richieste di autorizzazione a questo URL. Il server API Kubernetes utilizza questo URL per rilevare le chiavi pubbliche per la verifica dei token. È necessario utilizzare HTTPS.clientid
: obbligatorio. ID dell'applicazione client che invia richieste di autenticazione al provider OpenID. Sia il plug-in Kubectl per OIDC che Google Cloud Console utilizzano questo ID.clientsecret
: facoltativo. Secret per l'applicazione client. Sia il plug-in Kubectl per OIDC che Google Cloud Console utilizzano questo secret.username
: facoltativo. Attestazione JWT da utilizzare come nome utente. L'impostazione predefinita èsub
, che dovrebbe essere un identificatore univoco dell'utente finale. Puoi scegliere altre rivendicazioni, comeemail
oname
, a seconda del provider OpenID. Tuttavia, le rivendicazioni diverse daemail
sono precedute dall'URL dell'emittente per evitare conflitti di denominazione con altri plug-in.usernameprefix
: facoltativo. Prefisso anteposto alle rivendicazioni dei nomi utente per evitare conflitti con i nomi esistenti. Se non fornisci questo campo eusername
è un valore diverso daemail
, il prefisso viene impostato automaticamente suissuerurl#
. Puoi utilizzare il valore-
per disattivare tutti i prefissi.group
: facoltativo. JWT afferma che il provider utilizzerà per restituire i tuoi gruppi di sicurezza.groupprefix
: facoltativo. Prefisso anteposto alle rivendicazioni del gruppo per evitare conflitti con i nomi esistenti. Ad esempio, dato un gruppofoobar
e un prefissogid-
,gid-foobar
.scopes
: facoltativo. Ambiti aggiuntivi da inviare al provider OpenID come elenco delimitato da virgole.extraparams
: facoltativo. Parametri delle coppie chiave-valore aggiuntivi da inviare al provider OpenID sotto forma di elenco delimitato da virgole.- Per un elenco dei parametri di autenticazione, consulta Parametri URI di autenticazione.
- Per un elenco dei parametri di autenticazione di Microsoft Azure, vedi Inviare la richiesta di accesso.
- Se stai autorizzando un gruppo, passa in
resource=token-groups-claim
. - Se il server di autorizzazione richiede il consenso, trasmetti
prompt=consent
.
usehttpproxy
: facoltativo. Specifica se eseguire il deployment di un proxy inverso nel cluster per consentire all'agente Connect di accedere al provider OIDC on-premise per l'autenticazione degli utenti. Il valore deve essere una stringa:"true"
o"false"
.capath
: facoltativo. Percorso del certificato dell'autorità di certificazione (CA) che ha emesso il certificato web del tuo provider di identità. Questo valore potrebbe non essere necessario. Ad esempio, se il certificato del tuo provider di identità è stato emesso da una CA pubblica ben conosciuta, non devi fornire un valore qui.
Esempio: autorizzare utenti e gruppi
Molti provider codificano le proprietà di identificazione utente, come email e User-ID, in un token. Tuttavia, queste proprietà presentano rischi impliciti per i criteri di autenticazione:
- Gli ID utente possono rendere difficili la lettura e l'audit dei criteri.
- Le email possono creare sia un rischio di disponibilità (se un utente modifica la loro email principale) sia potenzialmente un rischio per la sicurezza (se un'email può essere riassegnata).
Pertanto, è una best practice utilizzare i criteri di gruppo, poiché un ID di gruppo può essere sia persistente sia più facile da controllare.
Supponiamo che il tuo provider crei token di identità che includano i seguenti campi:
{ 'iss': 'https://server.example.com' 'sub': 'u98523-4509823' 'groupList: ['developers@example.corp', 'us-east1-cluster-admins@example.corp'] ... }Dato questo formato di token, devi inserire le specifiche del tuo file di configurazione
oidc
in questo modo:
issueruri: 'https://server.example.com' username: 'sub' usernameprefix: 'uid-' group: 'groupList' groupprefix: 'gid-' extraparams: 'resource=token-groups-claim' ...
Dopo aver creato il cluster utente, puoi utilizzare il controllo dell'accesso basato sui ruoli (RBAC) di Kubernetes per concedere l'accesso con privilegi agli utenti autenticati. Ad esempio, puoi creare un ClusterRole che conceda ai suoi utenti l'accesso di sola lettura ai Secret del cluster, quindi creare una risorsa ClusterRoleBinding per associare il ruolo al gruppo autenticato:
ClusterRole
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-reader rules: - apiGroups: [""] # The resource type for which access is granted resources: ["secrets"] # The permissions granted by the ClusterRole verbs: ["get", "watch", "list"]
ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: read-secrets-admins subjects: # Allows anyone in the "us-east1-cluster-admins" group to # read Secrets in any namespace within this cluster. - kind: Group name: gid-us-east1-cluster-admins # Name is case sensitive apiGroup: rbac.authorization.k8s.io # Allows this specific user to read Secrets in any # namespace within this cluster - kind: User name: uid-u98523-4509823 apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-reader apiGroup: rbac.authorization.k8s.io
Salvataggio del certificato della CA del server API Kubernetes in corso...
Questa sezione è dedicata ai dipendenti che hanno creato un cluster utente e ora vogliono utilizzare il plug-in Kubectl per OIDC.
Il cluster utente dispone di un server API Kubernetes. Inoltre, il file kubeconfig del tuo cluster utente archivia il certificato della CA che ha emesso un certificato al server API Kubernetes. Il certificato della CA è il valore codificato in base 64 del campo certificate-authority-data
. Devi decodificare questo valore e memorizzarlo in un file locale, ad esempio server-ca-cert
:
cat [USER_CLUSTER_KUBECONFIG] | grep certificate-authority-data | awk '{ print $2}' | base64 --decode > server-ca-cert
Generazione del file di configurazione dell'autenticazione client
Questa sezione è dedicata ai dipendenti che hanno creato un cluster utente e ora vogliono utilizzare il plug-in Kubectl per OIDC.
Per generare un file di configurazione dell'autenticazione client, inserisci questo comando:Linux
kubectl oidc client-config \ --issuer-uri [ISSUER_URI] \ --redirect-uri [REDIRECT_URL] \ --client-id [CLIENT_ID] \ --client-secret [CLIENT_SECRET] \ --scopes "[CUSTOM_SCOPES]" \ --cluster-name [USER_CLUSTER_NAME] \ --server [CLUSTER_URL] \ --server-ca-file [SERVER_CA_CERT] \ --issuer-ca-file [PROVIDER_CA_CERT] \ --extra-params [KEY]=[VALUE], ... # e.g. --extra-params "resource=token-groups-claim" > client-config.yaml
dove:
- [ISSUER_URI] è l'URI dell'emittente.
- [REDIRECT_URL] è l'URL di reindirizzamento per il plug-in Kubectl per OIDC
- [CLIENT_ID] è l'ID client del plug-in Kubectl per OIDC.
- [CLIENT_SECRET] è il client secret per il plug-in Kubectl per OIDC.
- [USER_CLUSTER_NAME] è il nome del tuo cluster utente.
- [CLUSTER_URL] è l'URL del server API Kubernetes del cluster utente.
- [SERVER_CA_FILE] è il percorso del certificato della CA che ha emesso un certificato al server API Kubernetes. Questo è il file del certificato che hai creato nella sezione precedente.
- [PROVIDER_CA_CERT] è il percorso del certificato della CA che ha firmato il certificato del provider OpenID. Corrisponde al valore di
oidc:cacert
nel file di configurazione del cluster. - [CUSTOM_SCOPES] è l'elenco separato da virgole dei tuoi ambiti personalizzati per i gruppi di sicurezza. Corrisponde al valore
oidc:scopes
nel file di configurazione del cluster. --extra-params [KEY]=[VALUE], ...
è un elenco di coppie chiave-valore delimitati da virgole da includere nelle richieste di autorizzazione al provider OpenID.- Per un elenco dei parametri di autenticazione, consulta Parametri URI di autenticazione.
- Se stai autorizzando un gruppo, passa in
resource=token-groups-claim
. - Se il server di autorizzazione richiede il consenso, trasmetti
prompt=consent
.
PowerShell
kubectl oidc client-config ` --issuer-uri [ISSUER_URI] ` --redirect-uri [REDIRECT_URL] ` --client-id [CLIENT_ID] ` --client-secret [CLIENT_SECRET] ` --scopes "[CUSTOM_SCOPES]" ` --cluster-name [USER_CLUSTER_NAME] ` --server [CLUSTER_URL] ` --server-ca-file [SERVER_CA_CERT] ` --issuer-ca-file [PROVIDER_CA_CERT] ` --extra-params [KEY]=[VALUE] > client-config.yaml
dove:
- [ISSUER_URI] è l'URI dell'emittente.
- [REDIRECT_URL] è l'URL di reindirizzamento per il plug-in Kubectl per OIDC
- [CLIENT_ID] è l'ID client del plug-in Kubectl per OIDC.
- [CLIENT_SECRET] è il client secret per il plug-in Kubectl per OIDC.
- [USER_CLUSTER_NAME] è il nome del tuo cluster utente.
- [CLUSTER_URL] è l'URL del server API Kubernetes del cluster utente.
- [SERVER_CA_FILE] è il percorso del certificato della CA che ha emesso un certificato al server API Kubernetes. Questo è il file del certificato che hai creato nella sezione precedente.
- [PROVIDER_CA_CERT] è il percorso del certificato della CA che ha firmato il certificato del provider OpenID. Corrisponde al valore di
oidc:cacert
nel file di configurazione del cluster. - [CUSTOM_SCOPES] è l'elenco separato da virgole dei tuoi ambiti personalizzati per i gruppi di sicurezza. Corrisponde al valore
oidc:scopes
nel file di configurazione del cluster. --extra-params [KEY]=[VALUE], ...
è un elenco di coppie chiave-valore delimitati da virgole da includere nelle richieste di autorizzazione al provider OpenID.- Per un elenco dei parametri di autenticazione di Google, consulta la sezione Parametri URI di autenticazione.
- Per un elenco dei parametri di autenticazione di Microsoft Azure, vedi Inviare la richiesta di accesso.
- Se stai autorizzando un gruppo, passa in
resource=token-groups-claim
. - Se il server di autorizzazione richiede il consenso, trasmetti
prompt=consent
.
Questo comando genera un file di configurazione dell'autenticazione client denominato
client-config.yaml
. Non modificare manualmente questo file.
Autenticazione rispetto a un cluster utente utilizzando il plug-in Kubectl per OIDC
Questa sezione è dedicata ai dipendenti che hanno creato un cluster utente e ora vogliono utilizzare il plug-in Kubectl per OIDC.
-
Inizializza il plug-in utilizzando il file
client-config.yaml
:kubectl oidc login --clientconfig-file=client-config.yaml --user [NAME] \ --kubeconfig [KUBECONFIG_OUTPUT_PATH]
dove:
- [NAME] è il tuo nome utente.
- [KUBECONFIG_OUTPUT_PATH] è il percorso del file kubeconfig in cui il plug-in Kubectl per OIDC archivia le credenziali.
kubectl oidc login
avvia un browser in cui puoi inserire le tue credenziali.Il file kubeconfig fornito ora contiene un token ID che kubectl può utilizzare per l'autenticazione nel server API Kubernetes nel cluster utente.
Nota: gli utenti Windows potrebbero dover eseguire il comando come
kubectl-oidc.exe
login anzichékubectl oidc login
. -
Verifica che l'autenticazione sia andata a buon fine eseguendo qualsiasi comando
kubectl
. Ad esempio:kubectl get nodes --kubeconfig [KUBECONFIG_OUTPUT_PATH]
Utilizzo di OIDC con la console Google Cloud
Questa sezione è dedicata ai dipendenti che hanno creato un cluster utente e ora vogliono utilizzare Google Cloud Console per eseguire l'autenticazione a fronte del cluster.
-
Verifica che il cluster sia configurato per OIDC.
-
Verifica che il cluster sia stato registrato con Google Cloud, automaticamente durante la creazione del cluster o manualmente.
-
Visita la pagina Cluster Kubernetes nella console Google Cloud.
-
Nell'elenco dei cluster, individua il cluster GKE On-Prem e fai clic su Accedi.
-
Seleziona Autenticazione con il provider di identità configurato per il cluster e fai clic su ACCEDI.
Si aprirà il provider di identità, dove potresti dover accedere o concedere il consenso alla console Google Cloud per accedere al tuo account. Si aprirà quindi la pagina Cluster Kubernetes in Google Cloud Console.
Riepilogo
La tua azienda esegue un server AD FS che funge da provider OpenID. Il tuo provider OpenID conosce le tue due applicazioni client: il plug-in Kubectl per OIDC e la console Google Cloud. Il tuo provider OpenID sa che le applicazioni client possono richiedere gli ambiti openid
e allatclaims
.
Nella versione AD FS precedente alla 5.0, l'attributo LDAP Token-Groups Qualified Names
nel database AD è mappato alla rivendicazione groups
nel tuo provider OpenID. Nella versione 5.0 e successive, l'attributo è Token-Groups Qualified by Domain name
. Il provider restituisce i token che includono l'ID del dipendente, l'ID dell'emittente, la rivendicazione openid
e groups
. La rivendicazione groups
(Group
in 5.0) elenca i
gruppi di sicurezza a cui appartiene un dipendente.
Risoluzione dei problemi di OIDC in GKE On-Prem
Configurazione non valida
Se la console Google Cloud non riesce a leggere la configurazione OIDC dal cluster, il pulsante ACCESSO viene disabilitato.
Configurazione del provider non valida
Se la configurazione del provider di identità non è valida, verrà visualizzata una schermata di errore dal provider di identità dopo aver fatto clic su ACCEDI. Segui le istruzioni specifiche del provider per configurare correttamente il provider o il cluster.
Autorizzazioni non valide
Se completi il flusso di autenticazione, ma continui a non vedere i dettagli del cluster, assicurati di aver concesso le autorizzazioni RBAC corrette all'account che hai utilizzato con OIDC. Tieni presente che potrebbe trattarsi di un account diverso da quello che utilizzi per accedere a Google Cloud Console.
Error: missing 'RefreshToken' field in 'OAuth2Token' in credentials struct
Potresti visualizzare questo errore se il server di autorizzazione richiede il consenso, ma non è stato fornito il parametro di autenticazione richiesto. Fornisci il parametro prompt=consent
al campo oidc: extraparams
del file di configurazione di GKE On-Prem e rigenera il file di autenticazione client con il flag --extra-params prompt=consent
.
Passaggi successivi
Leggi la panoramica dell'autenticazione con OpenID Connect in GKE On-Prem.
Scopri di più su OAuth 2.0.
Scopri di più su OpenID Connect.
Scopri di più su ambiti e rivendicazioni.
Scopri di più sulle rivendicazioni personalizzate nei token ID.