Resolva problemas do fornecedor de OIDC

Este documento fornece orientações de resolução de problemas para problemas do fornecedor de identidade OIDC e AzureAD no GKE Identity Service.

Formatação incorreta do certificado

Este problema ocorre quando o valor do certificado tem erros de formatação. Os problemas de formatação podem corresponder a valores de certificados que não estão codificados em base64 e a valores que estão codificados em base64, mas estão incorretos. O problema também pode surgir se o certificado não for assinado por uma autoridade de certificação de raiz ou se não for fornecida uma cadeia de confiança formatada corretamente.

Mensagens de erro

Seguem-se alguns exemplos de mensagens de erro para cenários em que o formato do certificado está incorreto:

  • Certificado que não está codificado em base64: Failed creating HTTP client to fetch the Discovery URI "<Discovery-document URI>" with error: Unable to decode data field, the value should be Base64 encoded

  • Certificado que não está formatado corretamente ou está codificado em base64, mas está incorreto: Unable to connect to 'https://example.com', encountered the following error: Problem with the SSL CA cert (path? access rights?). Details: error setting certificate verify locations: CAfile: /tmp/example.pem CApath: none (The certificate could not be read, this is most likely because it's empty or contains a formatting error. Please check your configuration.)

  • Certificado que não está formatado corretamente ou está codificado em base64, mas está incorreto: Failed fetching the Discovery URI "<Discovery-document URI>" with error: Unable to load TLS certificates.

Solução

Pode resolver os problemas de uma das seguintes formas:

  • O valor do certificado que fornece no ClientConfig deve ser uma string codificada em Base64 e uma string formatada em PEM. Para mais informações, consulte o artigo Codifique certificados da AC.
  • Se o seu fornecedor não usar certificados assinados por uma autoridade de certificação de raiz, tem de configurar o GKE Identity Service com uma cadeia de confiança de certificados. Para mais informações, consulte o artigo Certificados intermédios.

Valor do certificado incorreto

Este problema ocorre quando o certificado tem um valor que não corresponde. Neste caso, a formatação dos certificados está correta, mas não corresponde ao servidor. Também pode indicar que não existiam certificados na configuração.

Um valor de certificado pode ser considerado incorreto em qualquer um dos seguintes cenários:

  • É partilhado um valor de certificado incorreto no ClientConfig. Um valor de certificado está incorreto quando o issuer do certificado do servidor não corresponde ao subject do certificado configurado.
  • O certificado no ClientConfig não é uma string codificada em base64.
  • A cadeia de certificados não é fornecida quando são usados certificados intermédios para emitir o certificado do servidor.

Mensagem de erro

Seguem-se exemplos de mensagens de erro para cenários em que existe uma incompatibilidade no valor do certificado:

  • A cadeia de certificados não está completa ou não corresponde ao servidor: SSL peer certificate was not OK. Details: SSL certificate problem: unable to get local issuer certificate

  • A cadeia de certificados não está completa (corresponde a uma cadeia parcial inválida que não começa na raiz ou não é contígua): Failed fetching the Discovery URI "<Discovery-document URI>" with error: The server's TLS certificate did not match expectations.

  • A cadeia de certificados é válida, mas não corresponde ao servidor OIDC: AIS was expecting the server to have a different certificate

  • A cadeia de certificados é válida, mas não corresponde ao servidor OIDC: Failed fetching the Discovery URI "<Discovery-document URI>" with error: The server's TLS certificate did not match expectations.

Solução

O valor do certificado que fornece no ClientConfig tem de incluir uma cadeia de certificados formatada corretamente que corresponda ao fornecedor de identidade. Para mais informações sobre como formatar e codificar certificados, consulte o artigo Codifique certificados da AC.

Os comandos kubectl falham quando usa um ficheiro kubeconfig gerado pelo comando gcloud anthos auth login

Quando usa o comando gcloud anthos auth login com o OIDC em máquinas Windows para gerar um ficheiro kubeconfig para acesso ao cluster, os comandos kubectl podem falhar com a seguinte mensagem de erro: The command line is too long. Este problema ocorre especificamente em sistemas Windows e não afeta máquinas Linux que usam o mesmo ficheiro kubeconfig. A causa subjacente está relacionada com o tamanho do token de autenticação gerado pelo Azure Active Directory (Azure AD) quando um utilizador pertence a um grande número de grupos (aproximadamente 70 a 200 grupos, consoante os comprimentos dos nomes dos grupos).

Este token grande faz com que a execução de kubectl comandos falhe porque excede o comprimento máximo da linha de comandos permitido pelo Windows, que é de 8191 carateres.

Mensagem de erro

$ kubectl --kubeconfig test-kubeconfig.yml get nodes

The command line is too long.
The command line is too long.
E0102 11:02:29.115256 24320 memcache.go:265] couldn't get current server API group list: Get "https://10.35.0.86:443/api?timeout=32s": getting credentials: exec: executable gcloud failed with exit code 1
The command line is too long.
E0102 11:02:29.350238 24320 memcache.go:265] couldn't get current server API group list: Get "https://10.35.0.86:443/api?timeout=32s": getting credentials: exec: executable gcloud failed with exit code 1
The command line is too long.
E0102 11:02:30.062811 24320 memcache.go:265] couldn't get current server API group list: Get "https://10.35.0.86:443/api?timeout=32s": getting credentials: exec: executable gcloud failed with exit code 1
Unable to connect to the server: getting credentials: exec: executable gcloud failed with exit code 1

Solução

Para resolver este problema, faça o seguinte:

  • Atualize para a versão 1.28 ou posterior do cluster do GKE

    Se estiver a executar uma versão do cluster do GKE anterior à 1.28, recomendamos que atualize para a versão suportada.

  • Reduza as subscrições de grupos do utilizador afetado

    Reduzir o número de grupos aos quais o utilizador de autenticação pertence abaixo do limite problemático (aproximadamente 70 grupos) pode resolver o problema.

  • Aumente as associações a grupos do utilizador afetado

    A funcionalidade do Microsoft Entra ID tem um limite para o número de grupos emitidos num token. Ter entre 70 e 200 associações a grupos pode causar problemas de autenticação. No entanto, pode resolver os problemas do fornecedor de identidade aumentando o número de associações a grupos além deste limite. Devido ao comportamento deste limite, o Azure AD omite grupos do id_token quando o número de subscrições se torna excessivamente grande, o que impede que a linha de comandos se torne demasiado longa e, assim, resolve os problemas do fornecedor de identidade. Reveja a documentação do Microsoft Entra ID para confirmar o limite e ver mais detalhes.