L'autenticazione degli utenti di Anthos Service Mesh è una soluzione integrata per l'autenticazione dell'utente finale basata su browser e controllo dell'accesso ai carichi di lavoro di cui è stato eseguito il deployment. Consente l'integrazione con i provider di identità (IdP) esistenti per l'autenticazione degli utenti e utilizza le API Istio e i criteri di autorizzazione per la gestione degli accessi. È un'alternativa facile da usare all'autenticazione JWT (JSON Web Token) Istio.
Un caso d'uso tipico si verifica quando un'organizzazione usa Anthos Service Mesh per ospitare un'applicazione web a cui la forza lavoro può accedere tramite un browser web. Inoltre, l'organizzazione deve utilizzare il proprio provider di identità esistente per gestire le identità degli utenti. L'autenticazione utente di Anthos Service Mesh semplifica l'autenticazione degli utenti mediante un flusso di accesso e consenso OpenID Connect (OIDC) standard basato sul web. Quando l'utente esegue l'autenticazione, Anthos Service Mesh applica i criteri di autorizzazione di Istio e, in caso di autorizzazione riuscita, trasmette l'identità ai carichi di lavoro in un formato di credenziali sicuro.
Come funziona
L'autenticazione utente di Anthos Service Mesh introduce un nuovo componente, authservice
.
Questo componente si integra con il traffico in entrata basato su Envoy come un servizio di autorizzazione esterno che intercetta tutte le richieste in entrata per l'autenticazione. authservice
implementa il lato client del protocollo OIDC
e consente agli utenti di accedere alle applicazioni tramite un browser, in cui gli utenti completano
un flusso interattivo di autenticazione e consenso per stabilire una sessione di breve durata.
authservice
implementa protocolli standard di settore per l'integrazione con qualsiasi provider di identità che può agire come server di autorizzazione OIDC. Quando l'utente viene autenticato, le informazioni sull'entità vengono incapsulate in un RCToken
in formato JWT, firmato da authservice
, che inoltra al livello di autorizzazione Istio in entrata. Questo modello fornisce controllo dell'accesso
perimetrale per il traffico nel mesh. Se l'utente è autorizzato ad accedere a una risorsa, questo RCToken viene inoltrato anche ai microservizi per ottenere le informazioni principali e applicare controllo dell'accesso granulare.
Il seguente diagramma mostra la posizione di authservice
nel mesh e la sua relazione con le altre parti del mesh, come il traffico in entrata, i carichi di lavoro, il browser dell'utente e qualsiasi IdP esistente.
Gli amministratori possono installare authservice
come componente aggiuntivo su un'installazione di Anthos Service Mesh. Se installato, authservice
legge la configurazione dell'endpoint OIDC e le altre impostazioni associate definite nella risorsa personalizzata UserAuth
. L'amministratore può utilizzare le API ExternalAuthorization
Anthos Service Mesh
per configurare auth_server
come filtro in entrata.
Installare il servizio di autenticazione degli utenti
I passaggi seguenti spiegano come configurare authservice
.
Prerequisiti
Segui i passaggi descritti in Installare strumenti dipendenti e convalidare il cluster per:- Installare gli strumenti richiesti
- Scarica
asmcli
- Concedi le autorizzazioni di amministratore del cluster
- Convalida il progetto e il cluster
Segui questi passaggi per assicurarti di soddisfare i prerequisiti.
Personalizzare l'installazione utilizzando l'overlay di autenticazione dell'utente
Per installare il servizio di autenticazione degli utenti, devi personalizzare l'installazione di Anthos Service Mesh per aggiungere un provider di autorizzazione esterno a livello di mesh.
Kpt v1 e versioni successive
Scarica l'overlay di autorizzazione utente di esempio e aggiornalo se sono presenti personalizzazioni nella rete mesh. Come best practice consigliata, conviene mantenere questo file overlay nel controllo del codice sorgente.
curl https://raw.githubusercontent.com/GoogleCloudPlatform/asm-user-auth/v1.1.0/overlay/user-auth-overlay.yaml > user-auth-overlay.yaml
Kpt v1-
Scarica l'overlay di autorizzazione utente di esempio e aggiornalo se sono presenti personalizzazioni nella rete mesh. Come best practice consigliata, conviene mantenere questo file overlay nel controllo del codice sorgente.
curl https://raw.githubusercontent.com/GoogleCloudPlatform/asm-user-auth/v1.0.1/overlay/user-auth-overlay.yaml > user-auth-overlay.yaml
Segui l'installazione di Anthos Service Mesh con overlay per utilizzare uno script fornito da Google per installare Anthos Service Mesh con l'overlay di autenticazione degli utenti. Ad esempio:
./asmcli install \ --project_id "PROJECT_ID" \ --cluster_name "CLUSTER_NAME" \ --cluster_location "CLUSTER_LOCATION" \ --fleet_id FLEET_PROJECT_ID \ --output_dir DIR_PATH \ --enable_all \ --custom_overlay user-auth-overlay.yaml
Il pacchetto di autenticazione degli utenti
kpt
crea unAuthorizationPolicy
per fare riferimento al provider di autorizzazioni esterno specificato dapkg/ext-authz.yaml
.Crea ed etichetta lo spazio dei nomi
asm-user-auth
.kubectl create namespace asm-user-auth kubectl label namespace asm-user-auth istio.io/rev=REVISION --overwrite
Puoi trovare il valore dell'etichetta
REVISION
controllandokubectl get pod -n istio-system -L istio.io/rev
Installa il gateway Istio nello spazio dei nomi
asm-user-auth
.kubectl apply -n asm-user-auth -f DIR_PATH/samples/gateways/istio-ingressgateway
Prepara la configurazione del client OIDC
Imposta la configurazione del client OIDC seguendo questi passaggi. Questa guida utilizza Google come IdP, ma puoi utilizzare qualsiasi IdP che supporti l'autenticazione OIDC.
Nella console Google Cloud, vai ad API e servizi > Credenziali.
Vai a Crea credenziali, quindi scegli ID client OAuth. Se necessario, imposta le opzioni della schermata di consenso OAuth, quindi configura le seguenti opzioni:
- Imposta Tipo di applicazione su Applicazione web.
- Imposta URI di reindirizzamento autorizzato su
https://<your-oidc-redirect-host><your-oidc-redirect-path>
. Ad esempio, per localhost potresti impostarehttps://localhost:8443/_gcp_asm_authenticate
.
Quindi, fai clic su Salva.
Inoltre, salva la configurazione del client OIDC per utilizzarla in un secondo momento.
export OIDC_CLIENT_ID='<your-client-id>' export OIDC_CLIENT_SECRET='<your-client-secret>' export OIDC_ISSUER_URI='https://accounts.google.com' export OIDC_REDIRECT_HOST='https://localhost:8443' export OIDC_REDIRECT_PATH='/_gcp_asm_authenticate'
Ricevi i pacchetti di kpt
Segui questi passaggi per installare la configurazione authservice
consigliata dal repository pubblico. Questi comandi recuperano il container authservice
più recente e lo avviano come pod nello spazio dei nomi asm-user-auth
. Configura inoltre il traffico in entrata per intercettare tutte le richieste.
Kpt v1 e versioni successive
Ottieni il pacchetto kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/asm-user-auth.git/@v1.1.0 .
cd asm-user-auth/
Kpt v1-
Ottieni il pacchetto kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/asm-user-auth.git/@v1.0.1 .
cd asm-user-auth/
Imposta l'URL di reindirizzamento e il secret per il gateway in entrata
OAuth2
richiede un URL di reindirizzamento ospitato su un endpoint con protezione HTTPS. Questi comandi sono a scopo di esempio e semplificano la configurazione generando un certificato autofirmato per il gateway in entrata Istio.
Genera un certificato autofirmato:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem \ -days 365 -nodes -subj '/CN=localhost'
Crea un secret per il gateway in entrata che ospiti il traffico HTTPS:
kubectl create -n asm-user-auth secret tls userauth-tls-cert --key=key.pem \ --cert=cert.pem
Applica le chiavi di crittografia e firma
L'authservice
ha bisogno di due mazzi di chiavi per funzionare correttamente. La prima è una chiave simmetrica per la crittografia e la decriptazione. Questa chiave viene utilizzata per criptare lo stato della sessione prima di impostarlo come cookie.
Il secondo set di chiavi è costituito da una coppia di chiave pubblica/privata. Questa chiave viene utilizzata per firmare le informazioni utente autenticate in formato JWT come RCToken. La chiave pubblica di questa coppia viene pubblicata in un endpoint predefinito che i file collaterali possono utilizzare per convalidare il JWT.
Il pacchetto di autenticazione dell'utente kpt
contiene due chiavi di esempio per una configurazione rapida.
Tuttavia, per generare queste chiavi puoi utilizzare il tuo sistema di gestione delle chiavi preferito.
Prepara la chiave di crittografia di sessione con il formato seguente o utilizza l'esempio del pacchetto, che puoi visualizzare tramite
cat ./samples/cookie_encryption_key.json
.{ "keys":[ { "kty":"oct", "kid":"key-0", "K":"YOUR_KEY", "useAfter": 1612813735 } ] }
Puoi generare una chiave AES di test con il seguente comando:
openssl enc -aes-256-cbc -k mycustomkey -P -md sha1 | grep key
Prepara la chiave di firma RCToken con il seguente formato oppure utilizza l'esempio di pkg, che puoi visualizzare tramite
cat ./samples/rctoken_signing_key.json
.{ "keys":[ { "kty":"RSA", "kid":"rsa-signing-key", "K":"YOUR_KEY", # k contains a Base64 encoded PEM format RSA signing key. "useAfter": 1612813735 # unix timestamp } ] }
Puoi generare una chiave privata RSA a 256 bit di test con il seguente comando:
openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:256
Crea il secret Kubernetes, che
authservice
installerà nel proprio file system.kubectl create secret generic secret-key \ --from-file="session_cookie.key"="./samples/cookie_encryption_key.json" \ --from-file="rctoken.key"="./samples/rctoken_signing_key.json" \ --namespace=asm-user-auth
Eseguire il deployment del servizio di autenticazione degli utenti
I comandi seguenti creano il servizio di autenticazione degli utenti e il deployment nello
spazio dei nomi asm-user-auth
.
Kpt v1 e versioni successive
Imposta i valori necessari per la configurazione dell'autorizzazione utente. L'ID client e il secret sono archiviati come secret di Kubernetes, quindi usiamo Base64 per codificarli. Visita il repository pubblico per visualizzare tutti i setter disponibili.
kpt fn eval pkg --image gcr.io/kpt-fn/apply-setters:v0.2 --truncate-output=false -- \
client-id="$(echo -n ${OIDC_CLIENT_ID} | base64 -w0)" \
client-secret="$(echo -n ${OIDC_CLIENT_SECRET} | base64 -w0)" \
issuer-uri="${OIDC_ISSUER_URI}" \
redirect-host="${OIDC_REDIRECT_HOST}" \
redirect-path="${OIDC_REDIRECT_PATH}"
Kpt v1-
Imposta i valori necessari per la configurazione dell'autorizzazione utente. L'ID client e il secret sono archiviati come secret di Kubernetes, quindi usiamo Base64 per codificarli. Visita Kptfile per visualizzare tutti i setter disponibili.
kpt cfg set pkg anthos.servicemesh.user-auth.oidc.clientID $(echo -n ${OIDC_CLIENT_ID} | base64 -w0)
kpt cfg set pkg anthos.servicemesh.user-auth.oidc.clientSecret $(echo -n ${OIDC_CLIENT_SECRET} | base64 -w0)
kpt cfg set pkg anthos.servicemesh.user-auth.oidc.issuerURI ${OIDC_ISSUER_URI}
kpt cfg set pkg anthos.servicemesh.user-auth.oidc.redirectURIHost ${OIDC_REDIRECT_HOST}
kpt cfg set pkg anthos.servicemesh.user-auth.oidc.redirectURIPath ${OIDC_REDIRECT_PATH}
Applica il pacchetto kpt
:
# Remove the potential alpha version CRD if exists.
kubectl delete crd userauthconfigs.security.anthos.io
kubectl apply -f ./pkg/asm_user_auth_config_v1beta1.yaml
kubectl apply -f ./pkg
authservice
utilizza il CRD UserAuthConfig
per fornire l'autenticazione
dell'utente finale. UserAuthConfig
è configurabile in tempo di esecuzione e puoi
aggiornarlo per modificare il comportamento di authservice
e configurarlo con endpoint
per qualsiasi server di autorizzazione OIDC.
Puoi visualizzare il file in base a cat pkg/user_auth_config.yaml
, contiene i seguenti campi:
Kpt v1 e versioni successive
apiVersion: security.anthos.io/v1beta1
kind: UserAuthConfig
metadata:
name: user-auth-config
namespace: asm-user-auth
spec:
authentication:
oidc:
certificateAuthorityData: "" # kpt-set: ${ca-cert}
issuerURI: "<your issuer uri>" # kpt-set: ${issuer-uri}
proxy: "" # kpt-set: ${proxy}
oauthCredentialsSecret:
name: "oauth-secret" # kpt-set: ${secret-name}
namespace: "asm-user-auth" # kpt-set: ${secret-namespace}
redirectURIHost: "" # kpt-set: ${redirect-host}
redirectURIPath: "/_gcp_asm_authenticate" # kpt-set: ${redirect-path}
scopes: "" # kpt-set: ${scopes}
groupsClaim: "" # kpt-set: ${groups}
outputJWTAudience: "test_audience" # kpt-set: ${jwt-audience}
Kpt v1-
apiVersion: security.anthos.io/v1beta1
kind: UserAuthConfig
metadata:
name: user-auth-config
namespace: asm-user-auth
spec:
authentication:
oidc:
certificateAuthorityData: "" # {"$ref":"#/definitions/io.k8s.cli.setters.anthos.servicemesh.user-auth.oidc.certificateAuthorityData"}
oauthCredentialsSecret:
name: "oauth-secret" # {"$ref":"#/definitions/io.k8s.cli.setters.anthos.servicemesh.user-auth.oidc.oauthCredentialsSecret.name"}
namespace: "asm-user-auth" # {"$ref":"#/definitions/io.k8s.cli.setters.anthos.servicemesh.user-auth.oidc.oauthCredentialsSecret.namespace"}
issuerURI: "<your issuer uri>" # {"$ref":"#/definitions/io.k8s.cli.setters.anthos.servicemesh.user-auth.oidc.issuerURI"}
proxy: "" # {"$ref":"#/definitions/io.k8s.cli.setters.anthos.servicemesh.user-auth.oidc.proxy"}
redirectURIHost: "" # {"$ref":"#/definitions/io.k8s.cli.setters.anthos.servicemesh.user-auth.oidc.redirectURIHost"}
redirectURIPath: "/_gcp_asm_authenticate" # {"$ref":"#/definitions/io.k8s.cli.setters.anthos.servicemesh.user-auth.oidc.redirectURIPath"}
outputJWTAudience: "test_audience"
Per le descrizioni dettagliate dei campi user_auth_config.yaml
, consulta i dettagli di configurazione dell'autenticazione utente.
Eseguire attività post-installazione
Le attività seguenti sono necessarie una volta completati i passaggi di installazione precedenti.
Attivare l'autenticazione utente per le applicazioni
Questa sezione illustra come abilitare l'autenticazione utente, utilizzando httpbin
come esempio.
L'autenticazione utente di Anthos Service Mesh utilizza un criterio di autorizzazione digitato CUSTOM
per attivare il flusso OIDC.
Dopo aver
installato il gateway Istio,
configuralo in modo da gestire il traffico HTTPS utilizzando il certificato TLS userauth-tls-cert
creato in precedenza. Di seguito è riportata la configurazione pkg/gateway.yaml
appena installata.
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: userauth
namespace: asm-user-auth
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- '*'
port:
name: https
number: 443
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: userauth-tls-cert
---
# This ensures the OIDC endpoint has at least some route defined.
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: userauth-oidc
namespace: asm-user-auth
spec:
gateways:
- userauth
hosts:
- '*'
http:
- match:
- uri:
prefix: /status
- uri:
prefix: "your-oidc-redirect-path"
name: user-auth-route
route:
- destination:
host: authservice
port:
number: 10004
Etichetta lo spazio dei nomi
default
per abilitare l'inserimento automatico diistio-proxy
per i deployment.kubectl label namespace default istio.io/rev=REVISION --overwrite
Esegui il deployment di
httpbin
nello spazio dei nomidefault
.kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/httpbin/httpbin.yaml -n default
Aggiorna
httpbin
in modo che utilizzi questo gateway per la gestione del traffico HTTPS e il port forwarding per accedere all'applicazione localmente:kubectl apply -f./samples/httpbin-route.yaml -n default kubectl port-forward service/istio-ingressgateway 8443:443 -n asm-user-auth
Il gateway in entrata sulla porta 8443 verrà inoltrato a
localhost
per rendere l'applicazione accessibile localmente.
Verificare l'autenticazione degli utenti
httpbin
gestisce due percorsi, /ip
è accessibile pubblicamente e /headers
richiede all'utente finale di accedere tramite il proprio IdP configurato.
Verifica di poter accedere direttamente a
/ip
visitandohttps://localhost:8443/ip
.Verifica che sia visualizzata la pagina di accesso OIDC visitando
https://localhost:8443/headers
.Dopo aver eseguito l'accesso, fai clic su Avanti e verifica che il reindirizzamento venga reindirizzato alla pagina
/headers
.
Configura i criteri di autorizzazione
Dopo aver completato la configurazione nei passaggi precedenti, ogni utente verrà reindirizzato tramite un flusso di autenticazione basato sul web. Al termine del flusso, authservice
genererà un RCToken
in formato JWT, che usa per trasmettere le informazioni utente autenticate.
Aggiungi i criteri di autorizzazione Istio in entrata per garantire che venga eseguito un controllo dell'autorizzazione per ogni utente autenticato:
kubectl apply -f ./samples/httpbin-authz.yaml -n asm-user-auth
Il file
httpbin-authz.yaml
configura il gateway in entrata per convalidare il token RC emesso da authservice e concedere l'autorizzazione solo quando il JWT contiene i campi desiderati, ad esempio segmenti di pubblico ed emittenti.Vedi il seguente esempio di criterio di autorizzazione:
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: require-rc-token spec: selector: matchLabels: istio: ingressgateway action: ALLOW rules: - to: - operation: paths: ["/ip"] - to: when: - key: request.auth.claims[iss] values: - authservice.asm-user-auth.svc.cluster.local - key: request.auth.claims[aud] values: - test_audience - key: request.auth.claims[sub] values: - allowed_user_sub_1 # Change this with the "sub" claim in the RC token. Wildcard '*' will match everything.
Configura le impostazioni specifiche per l'ambiente
I passaggi precedenti utilizzano localhost
e un certificato HTTPS autofirmato per la configurazione rapida. Per l'uso in produzione, utilizza il tuo dominio, ad esempio example.com
.
Inoltre, assicurati che certificateAuthorityData
abbia i contenuti previsti per il certificato radice. Ad esempio, se l'IdP è attendibile con i certificati radice del sistema, puoi lasciarlo vuoto. Se esiste un proxy HTTPS che termina la connessione HTTPS, deve essere impostato sul certificato radice del proxy.
Gestisci e ruota le chiavi
authservice
utilizza due coppie di chiavi. Puoi ruotare ogni chiave
in modo indipendente. Tuttavia, prima di ruotare le chiavi, è importante capire come funziona la rotazione.
Entrambe le chiavi sono in formato JSON. Il campo useAfter
specifica il timestamp da quando
la chiave verrà considerata in uso. Durante una rotazione della chiave, devi includere sia le chiavi vecchie che nuove nel JSON. Ad esempio, nel seguente esempio, new-key
verrà utilizzato solo dopo il timestamp 1712813735
.
{
"keys":[
{
"kty":"RSA",
"kid":"old-key",
"K":"...", # k contains a Base64 encoded PEM format RSA signing key.
"useAfter": 1612813735, # unix timestamp
}
{
"kty":"RSA",
"kid":"new-key",
"K":"...", # k contains a Base64 encoded PEM format RSA signing key.
"useAfter": 1712813735, # unix timestamp
}
]
}
Anthos Service Mesh utilizza la chiave simmetrica per criptare i dati della sessione memorizzati nei cookie del browser. Per garantire la validità delle sessioni esistenti, authservice
tenta la decrittografia con tutte le chiavi nel set di chiavi. In rotazione, authservice
utilizzerà la nuova chiave per criptare le nuove sessioni e continuerà a tentare la decrittografia con le chiavi precedenti.
La coppia di chiave pubblica/privata viene utilizzata per firmare RCToken
. La chiave pubblica viene trasmessa ai file collaterali da istiod
per la verifica JWT. È fondamentale che i file collaterali ricevano la nuova chiave pubblica prima che authservice
inizi a utilizzarla per firmare il RCToken
. A tal fine, authservice
inizia a pubblicare la chiave pubblica subito dopo l'aggiunta della chiave, ma attende un tempo significativo prima di iniziare a utilizzarla per firmare RCToken
.
Per riassumere, quando esegui rotazioni delle chiavi consigliamo di:
- Esegui rotazioni delle chiavi regolari o on demand in base alle tue esigenze.
- Nel formato JSON, includi sia la chiave attuale sia quella nuova. Le nuove chiavi devono essere associate a un timestamp futuro. Ti consigliamo di specificare un timestamp almeno un paio d'ore prima dell'ora attuale.
- Monitora e conferma che i servizi siano ancora in stato integro dopo l'utilizzo della nuova chiave. Attendi almeno un giorno dall'utilizzo della nuova chiave prima di andare al passaggio successivo.
- Rimuovi le vecchie chiavi dalle voci JSON. Non sono più necessari.
Dettagli di configurazione dell'autenticazione utente
Nella tabella seguente vengono descritti tutti i campi della CRD:
Nome campo | Descrizione |
---|---|
authentication.oidc |
Questa sezione contiene la configurazione dell'endpoint OIDC e i parametri utilizzati nel flusso OIDC. |
authentication.oidc.certificateAuthorityData |
Questo è il certificato radice SSL del dominio del server di autorizzazione OIDC o del proxy HTTPS, se presente. |
authentication.oidc.oauthCredentialsSecret |
I riferimenti dei secret al secret di tipo Kubernetes Opaque contengono client_id OIDC OAuth2 e client_secret nel payload JSON. |
authentication.oidc.issuerURI |
L'URI da utilizzare come emittente nell'RCToken di output. |
authentication.oidc.proxy |
Server proxy per l'IdP OIDC, se applicabile. Con il formato http://user:password@10.10.10.10:8888. |
authentication.oidc.redirectURIHost |
L'host da utilizzare per l'URI di terminazione OAuth. Se lasci questo campo vuoto, verrà utilizzato l'host dell'URL di destinazione e l'URI di reindirizzamento verrà assemblato dinamicamente. Questo valore può essere utilizzato quando si desidera una sessione SSO di autenticazione utente su un dominio di livello superiore. Ad esempio, per abilitare il servizio SSO tra profile.example.com/ e admin.example.com/, questo valore può essere impostato su example.com. In questo modo, verrà creata una sessione di autorizzazione utente su example.com, che verrà condivisa tra tutti i sottodomini. Nota: se lo stesso mesh (example1.com ed example2.com) gestisce più domini, la funzionalità non può essere utilizzata ed è consigliabile lasciarla vuota. |
authentication.oidc.redirectURIPath |
Il percorso dell'endpoint in cui authservice terminerà il flusso OAuth. Devi registrare questo percorso URI e l'host come URI di reindirizzamento autorizzato nel server di autorizzazione per authentication.oidc.clientID .Inoltre, questo URI deve essere fornito dallo stesso mesh di servizi e in entrata in cui è abilitato authservice . |
authentication.oidc.scopes |
L'ambito OAuth che deve essere richiesto nella richiesta di autenticazione. Elenco separato da virgole di identificatori utilizzati per specificare quali privilegi di accesso vengono richiesti oltre all'ambito "openid", ad esempio "groups,allatclaim". |
authentication.oidc.groupsClaim |
Se idtoken contiene un'attestazione di gruppo, utilizza questo campo per indicarne il nome. Se specificato, il servizio trasmetterà i dati di questa
rivendicazione nell'attestazione groups nell'RCToken di output. Questa dichiarazione deve contenere un elenco di stringhe separate da virgole, ad esempio ["gruppo1", "gruppo2"]. |
authentication.outputJWTAudience |
Il pubblico dell'RCToken generato da authservice . I file collaterali possono convalidare l'RCToken in entrata in base a questo valore del pubblico. |
Deployment multi-cluster
L'autenticazione utente di Anthos Service Mesh supporta il deployment di più cluster. Devi eseguire il deployment dell'autenticazione utente in ogni cluster come descritto sopra. La configurazione dell'autenticazione utente, ad esempio la risorsa personalizzata UserAuth, il client secret OIDC e le chiavi di crittografia, deve essere replicata in ciascun cluster.
Per impostazione predefinita, il gateway in entrata bilancia il carico delle richieste di autenticazione verso una qualsiasi delle istanze authservice
. Puoi utilizzare la regola di destinazione per configurare il gateway in entrata al fine di inviare richieste a authservice
nello stesso cluster, ed eseguire il failover solo agli elementi authservice
di altri cluster.
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: authservice-fail-over
namespace: asm-user-auth
spec:
host: authservice.asm-user-auth.svc.cluster.local
trafficPolicy:
loadBalancer:
localityLbSetting:
enabled: true
failover:
- from: us-east
to: us-west
- from: us-west
to: us-east
Come per l'altra configurazione, questa configurazione deve essere configurata in ogni cluster.
Risolvere i problemi
Accessibilità della rete all'IdP.
Log possibile:
error: TLS handshake failed.
.Verifica eseguendo
curl
dal containeristio-proxy
all'URI dell'emittente dell'IDP. Se non riesce a connettersi, l'utente può controllare le regole firewall o altre configurazioni di rete per il cluster.Certificato CA radice.
Log possibile:
error: The server's TLS certificate did not match expectations.
oerror: TLS handshake failed.
.Assicurati che
certificateAuthorityData
contenga il certificato CA radice corretto. Se non esiste un proxy HTTPS che termina il traffico HTTPS, questo deve contenere il certificato della CA radice dell'IdP. Se invece ce n'è uno, dovrebbe contenere quello del proxy.Configurazione del percorso di reindirizzamento.
Possibile osservazione: si riceve la pagina di errore 404 durante il flusso di autenticazione OIDC.
Autorizzazione utente restituisce l'intestazione "Set-Cookie" senza utilizzare l'attributo path, che per impostazione predefinita il browser utilizza la directory dell'URL della richiesta come percorso del cookie (ambito del cookie relativo al percorso). Consigliamo quindi di non includere "/" nel percorso di reindirizzamento, a meno che non sia intenzionale.
Domande frequenti
Come faccio a eseguire l'upgrade di Anthos Service Mesh con Autenticazione utente abilitata?
Segui il processo di upgrade di Anthos Service Mesh e specifica il file dell'overlay aggiungendo
--custom_overlay user-auth-overlay.yaml
nella riga di comando aasmcli install
.Di quante risorse dobbiamo eseguire il provisioning per
authservice
? E quante richieste al secondo è in grado di gestire?Per impostazione predefinita,
authservice
è configurato con 2, 0 vCPU e 256 Mi di memoria. In questa configurazione,authservice
è in grado di gestire 500 richieste al secondo. Per gestire quantità maggiori di richieste, devi eseguire il provisioning di più CPU, un valore approssimativamente proporzionale alla sua capacità di gestione delle richieste. Puoi anche configurare più repliche di authservice per aumentare la scalabilità orizzontale.