Risoluzione dei problemi di identità e autorizzazione

Questo documento fornisce indicazioni sulla risoluzione dei problemi di identità e autorizzazione.

Mantenere aggiornato gcloud anthos auth

Puoi evitare molti problemi comuni verificando che i componenti dell'installazione gcloud anthos auth siano aggiornati.

Ci sono due parti da verificare, perché il comando gcloud anthos auth prevede una logica nel componente principale gcloud e in un componente anthos-auth pacchettizzato separatamente.

Aggiorna gcloud:

gcloud components update

Aggiorna anthos-auth:

gcloud components install anthos-auth

Configurazione del provider non valida

Se la configurazione del tuo provider di identità non è valida, verrà visualizzata una schermata di errore del provider di identità dopo aver fatto clic su ACCESSO. 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 essere un account diverso da quello che usi per accedere a Google Cloud Console.

Token di aggiornamento mancante

Il seguente problema si verifica quando il server di autorizzazione richiede il consenso, ma il parametro di autenticazione richiesto non è stato fornito.

Error: missing 'RefreshToken' field in 'OAuth2Token' in credentials struct

Per risolvere questo problema, nel file di configurazione del cluster aggiungi prompt=consent nel campo authentication.oidc.extraParams. Quindi, genera nuovamente il file di autenticazione del client.

Token di aggiornamento scaduto

Questo problema si verifica quando il token di aggiornamento nel file kubeconfig è scaduto:

Unable to connect to the server: Get {DISCOVERY_ENDPOINT}: x509:
    certificate signed by unknown authority

Per risolvere il problema, esegui di nuovo il comando login.

gkectl create-login-config non riesce a recuperare clientconfig

Questo problema si verifica quando il file kubeconfig passato a gkectl create-login-config non è associato a un cluster utente o se la risorsa personalizzata ClientConfig non viene visualizzata durante la creazione del cluster.

Error getting clientconfig using KUBECONFIG

Per risolvere il problema, assicurati di avere il file kubeconfig corretto per il cluster utente. Quindi controlla se l'oggetto ClientConfig è nel cluster:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG  get clientconfig default -n kube-public

gkectl create-login-config non riesce a causa di un nome di cluster duplicato

Questo problema si verifica se tenti di scrivere i dati di configurazione dell'accesso contenenti un nome cluster già esistente nel file di destinazione. Ogni file di configurazione dell'accesso deve contenere nomi di cluster univoci.

error merging with file MERGE_FILE because MERGE_FILE contains a
  cluster with the same name as the one read from KUBECONFIG. Please write to
  a new output file

Per risolvere questo problema, utilizza il flag --output per specificare un nuovo file di destinazione.

Se non fornisci --output, questi dati di configurazione dell'accesso vengono scritti in un file denominato kubectl-anthos-config.yaml nella directory corrente.

L'accesso all'autenticazione gcloud anthos non riesce con proxyconnect tcp

Questo problema si verifica quando si verifica un errore nelle configurazioni delle variabili di ambiente https_proxy o HTTPS_PROXY. Se è presente un elemento https:// specificato nelle variabili di ambiente, le librerie client HTTP GoLang potrebbero non riuscire se il proxy è configurato per gestire le connessioni HTTPS utilizzando altri protocolli, ad esempio SOCK5.

Possibile messaggio di errore:

proxyconnect tcp: tls: first record does not look like a TLS handshake

Per risolvere questo problema, modifica le variabili di ambiente https_proxy e HTTPS_PROXY in modo da omettere https:// prefix. Su Windows, modifica le variabili di ambiente del sistema. Ad esempio, cambia il valore della variabile di ambiente https_proxy da https://webproxy.example.com:8000 a webproxy.example.com:8000.

L'accesso al cluster non riesce quando viene utilizzato kubeconfig generato da gcloud anthos auth login

Questo problema si verifica quando il server API Kubernetes non è in grado di autorizzare l'utente. Ciò può verificarsi se i RBAC appropriati sono mancanti o errati oppure si è verificato un errore nella configurazione OIDC per il cluster.

Unauthorized

Per risolvere il problema:

  1. Nel file kubeconfig generato da gcloud anthos auth login, copia il valore di id-token.

    kind: Config
    …
    users:
    — name: …
      user:
        auth-provider:
          config:
            id-token: xxxxyyyy
    
  2. Installa jwt-cli ed esegui:

    jwt ID_TOKEN
    
  3. Verifica la configurazione OIDC.

    Il file authentication.oidc nel file di configurazione del cluster utente contiene i campi group e username, che vengono utilizzati per impostare i flag --oidc-group-claim e --oidc-username-claim nel server API Kubernetes. Quando viene presentato al server API, il token viene inoltrato ad Anthos Identity Service, che restituisce i valori group-claim e username-claim estratti al server AIP. Il server API utilizza la risposta per verificare che l'utente o il gruppo corrispondente disponga delle autorizzazioni corrette.

    Verifica che le dichiarazioni impostate per group e user nella sezione authentication.oidc del file di configurazione del cluster siano presenti nel token ID.

  4. Controlla i RBAC che sono stati applicati.

    Verifica che sia presente un RBAC con le autorizzazioni corrette per l'utente specificato da username-claim o da uno dei gruppi elencati group-claim del passaggio precedente. Il nome dell'utente o del gruppo nell'RBAC deve avere come prefisso il valore usernameprefix o groupprefix specificato nel file di configurazione del cluster utente.

    Tieni presente che se usernameprefix è vuoto e username è un valore diverso da email, il prefisso viene impostato su issuerurl# per impostazione predefinita. Per disattivare i prefissi nome utente, imposta usernameprefix su -.

    Per ulteriori informazioni sui prefissi utente e gruppo, consulta l'articolo sull'autenticazione con OIDC.

    Tieni presente che il server API di Kubernetes tratta una barra rovesciata come un carattere di escape. Pertanto, se il nome dell'utente o del gruppo contiene \\, il server API lo legge come un singolo \ durante l'analisi del token ID. Di conseguenza, l'associazione dei ruoli RBAC applicata per questo utente o gruppo deve contenere solo una singola barra rovesciata o potrebbe essere visualizzato un errore Unauthorized.

    File di configurazione del cluster:

    oidc:
      ...
      username: "unique_name"
      usernameprefix: "-"
      group: "group"
      groupprefix: "oidc:"
    

    Token ID:

    {
      ...
      "email": "cluster-developer@example.com",
      "unique_name": "EXAMPLE\\cluster-developer",
      "group": [
        "Domain Users",
        "EXAMPLE\\developers"
      ],
    ...
    }
    

    Le seguenti associazioni RBAC concedono a questo gruppo e all'utente il ruolo pod-reader cluster. Nota la singola barra nel campo del nome invece di una doppia barra:

    ClusterRoleBinding di gruppo:

    apiVersion:
    kind: ClusterRoleBinding
    metadata:
      name: example-binding
    subjects:
    — kind: Group
      name: "oidc:EXAMPLE\developers"
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: pod-reader
      apiGroup: rbac.authorization.k8s.io
    

    ClusterRoleBinding utente:

    apiVersion:
    kind: ClusterRoleBinding
    metadata:
      name: example-binding
    subjects:
    — kind: User
      name: "EXAMPLE\cluster-developer"
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: pod-reader
      apiGroup: rbac.authorization.k8s.io
    
  5. Controlla i log del server API di Kubernetes.

    Se il plug-in OIDC configurato nel server API Kubernetes non si avvia correttamente, il server API restituisce un errore Unauthorized quando viene visualizzato il token ID. Per verificare se si sono verificati problemi con il plug-in OIDC nel server API, esegui:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs statefulset/kube-apiserver -n USER_CLUSTER_NAME