Configurar a identidade e a segurança usando o OIDC

Esta página é destinada a operadores de infraestrutura.

Nesta página, descrevemos como ativar a autenticação no Anthos Management Center usando o OpenID Connect (fornecedor de OIDC). O OIDC é uma camada de autenticação criada com base no OAuth 2.0 que especifica uma API HTTP RESTful e usa JSON como formato de dados.

O OIDC permite usar o provedor de identidade atual para gerenciar a autenticação de usuário e grupo. Use o OIDC para gerenciar o acesso a um cluster do Kubernetes com os procedimentos padrão da organização para criar, ativar e desativar contas de funcionários.

Antes de começar

Antes de configurar o OIDC, você precisa do seguinte:

  1. O nome de domínio usado para acessar o Centro de gerenciamento, fornecido pelo operador de infraestrutura, por exemplo: anthos.example.com.
  2. Um provedor OIDC, como o Microsoft Active Directory Federation Services (ADFS), o SSO do Google ou o Keycloak. O cluster e o navegador precisam se conectar ao provedor OIDC. O provedor OIDC não precisa se conectar novamente ao cluster. Se você não tiver um provedor OIDC, consulte Como autenticar com o Keycloak para instalar um. O Keycloak serve apenas para fins de demonstração e não é recomendado para um ambiente de produção.

Criar perfis de identidade

Os perfis de identidade contêm a configuração necessária para usar um provedor de identidade para autenticação. As etapas a seguir são usadas para criar um perfil de identidade:

  1. No console do Centro de gerenciamento, abra o menu Identidade e acesso.

  2. Na guia Identidade, clique em Configurar o Anthos Identity Service (OIDC).

  3. No campo Nome do perfil, atribua um nome de perfil fácil de usar. Esse é o nome ao qual o perfil é referenciado.

  4. Insira o URL do provedor OIDC, o ID do cliente e a chave secreta do cliente doseu provedor de OIDC.

  5. Defina o campo Declaração de nome de usuário. A declaração de nome de usuário é aquela que está no token do OIDC e que tem o nome de usuário. Por exemplo, se a declaração do nome de usuário for email, os usuários serão identificados pelo campo de usuário no token OIDC.

    Ao definir essa declaração, verifique se ela está nos escopos solicitados.

  6. Defina o campo Prefixo do nome de usuário. O prefixo do nome de usuário é usado para distinguir usuários de diferentes provedores de identidade. O prefixo do usuário também precisa ser incluído ao atribuir permissões RBAC aos usuários.

    Por exemplo, se a declaração do nome de usuário for email e o prefixo do usuário for prefix-, os usuários serão identificados como prefix-sally@example.com. O usuário é sally@example.com e o prefixo prefix- é prefixado no usuário para distinguir os diferentes provedores de identidade.

  7. Defina o campo Declaração de grupos. No Anthos em execução no modo desconectado, o padrão é groups. Consulte Vinculações de papéis para mais informações sobre a vinculação de grupos a papéis.

  8. Defina o campo Prefixo do grupo. O prefixo do grupo é usado para distinguir grupos de diferentes provedores de identidade. O prefixo do grupo também precisa ser incluído ao atribuir permissões do RBAC a grupos.

    Por exemplo, se a declaração do grupo for groups e o prefixo do grupo for groupprefix-, os grupos serão identificados como groupprefix-group. O grupo é group e o prefixo groupprefix- é prefixado no grupo. Recomendamos a inserção de um separador no final do prefixo, conforme descrito na configuração do prefixo de nome de usuário na etapa 6.

  9. (Opcional) Defina o campo Escopos se os escopos não forem openid email profile.

    Os escopos são os identificadores usados para especificar quais privilégios de acesso solicitar no token de ID:

    • openid é obrigatório para o OIDC.
    • profile inclui as declarações profile padrão do usuário.
    • email geralmente inclui as declarações email e email_verified.
  10. Se o provedor de OIDC, como o SSO do Google, exigir parâmetros adicionais, defina o campo Parâmetros extras.

    Por exemplo, o campo Parâmetros extras pode ser definido como prompt=consent,access_type=offline para exibir uma tela de consentimento todas as vezes, antes de solicitar a autorização dos escopos de acesso.

  11. Se a conexão HTTPS com a página do /.well-known/openid-configuration ou a página JWKS do seu provedor de OIDC for protegida por um certificado não confiável (por exemplo, um certificado autoassinado), você precisará preencher o campo Certificado do fornecedor OIDC com o certificado HTTPS usado pelo seu provedor de OIDC.

    • Codifique o certificado codificado por PEM do provedor OIDC em base64. Para criar a string, codifique o certificado, incluindo cabeçalhos, em base64. Inclua a string resultante em uma única linha.

    • Exemplo: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tC...k1JSUN2RENDQWFT==

    • Consulte Como autenticar com o Keycloak para ver um exemplo de como configurar esse campo.

  12. Clique em Enviar e retorne à guia Identidade e acesso.

  13. Registre o URL de callback com o provedor OIDC.

Para criar outros perfis de identidade, clique em Adicionar na guia Perfil de identidade.

Aplicar perfis de identidade ao cluster de administrador

Os perfis de identidade precisam ser aplicados aos clusters depois de criados.

  1. Na guia Perfil de identidade, clique em Aplicar a clusters.

    Aplicar perfil ao cluster de administrador

  2. Clique na guia Cluster de administrador. Na lista suspensa Perfil, selecione o nome do perfil criado anteriormente. É possível selecionar vários perfis para aplicar ao cluster.

    Página de perfil do OIDC

  3. Verifique o nome de domínio do perfil. Esse é o nome de domínio mapeado para o perfil de provedor de identidade. Os usuários não autenticados que tentarem acessar caminhos no domínio serão direcionados para fazer login com esse provedor de identidade. Esse nome de domínio é atribuído pelo operador da infraestrutura.

    Cada perfil precisa receber um nome de domínio diferente, se mais de um perfil for aplicado de cada vez.

    Consulte Configurar nome de domínio para acessar a Central de gerenciamento para detalhes sobre como configurar um nome de domínio.

  4. Digite um nome de usuário inicial que receberá os direitos de acesso de administrador da plataforma (por exemplo, alice@example.com, bob@example.com). O nome de usuário deve ser prefixado com o prefixo do usuário definido no perfil. Por exemplo, se o prefixo for prefix-, o nome de usuário no campo Administrador da plataforma inicial deve ser semelhante a prefix-alice@example.com. Veja mais detalhes sobre administradores de plataformas e autorização em Papéis de autorização.

  5. Aplique as configurações e aguarde alguns minutos para que as configurações sejam aplicadas e os serviços sejam reiniciados.

Agora você pode acessar o Centro de gerenciamento com seu nome de domínio. Se você não estiver conectado, será redirecionado ao seu provedor de OIDC para fazer login.

Configurar o OIDC pela API

Em vez de configurar o OIDC pelo Centro de gerenciamento, você também pode configurá-lo pela API. Para configurar a autenticação do OIDC, você precisa configurar o CRD ClientConfig do cluster de administrador com detalhes de autenticação. Para fazer isso, crie um arquivo contendo o seguinte conteúdo (por exemplo, admin-cluster-oidc-config.yaml):

spec:
  authentication:
  - name: CONFIGURATION_NAME
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      # The URI to redirect users going through the OAuth flow using cloud
      # console.
      # This is a required parameter not supported by Anthos private mode, so
      # a dummy value is required.
      cloudConsoleRedirectURI: http://cloud.console.not.enabled
      extraParams: EXTRA_PARAMS
      issuerURI: ISSUER_URI
      # The redirect URL that kubectl uses for authorization.
      kubectlRedirectURI: http://localhost:9879/callback
      scopes: SCOPES
      userClaim: USER_CLAIM
      groupsClaim: GROUPS_CLAIM
      certificateAuthorityData: CERT_AUTHORITY_DATA

Substitua:

  • CONFIGURATION_NAME: o nome da configuração do OIDC a ser criada.
  • CLIENT_ID: o ID do aplicativo cliente que faz solicitações de autenticação para o provedor OpenID.
  • CLIENT_SECRET: secret para o aplicativo cliente.
  • EXTRA_PARAMS: parâmetros de chave-valor extras (separados por vírgulas) para enviar ao provedor OpenID.
  • ISSUER_URI: URL para onde as solicitações de autorização são enviadas para o OpenID.
  • SCOPES: escopos adicionais (separados por vírgulas) para enviar ao provedor OpenID.
  • USER_CLAIM: a declaração do JWT a ser usada como nome de usuário. É possível escolher outras declarações, como e-mail ou nome, dependendo do provedor OpenID. No entanto, as declarações diferentes de e-mail são prefixadas com o URL do emissor para evitar conflitos de nomenclatura.
  • GROUPS_CLAIM: nome da declaração no token de ID do OIDC que contém as informações do grupo do usuário.
  • CERT_AUTHORITY_DATA: um certificado opcional codificado em PEM codificado em base64 para o provedor OIDC. Remova-o se não for necessário. Para criar a string, codifique o certificado, incluindo cabeçalhos, em base64. Inclua a string resultante em certificateAuthorityData como uma única linha.

Depois de editar o arquivo com a configuração desejada, execute o seguinte comando:

kubectl patch --kubeconfig=ADMIN_KUBECONFIG clientconfig default -n kube-public \
  --type=merge --patch "$(cat OIDC_CONFIG)"

Substitua:

  • ADMIN_KUBECONFIG: o caminho até o arquivo kubeconfig do cluster de administrador.
  • OIDC_CONFIG: caminho para o arquivo de configuração que você criou.

Faça login com o OIDC no servidor da API Kubernetes do cluster de administrador

Os usuários podem fazer o download de admin-actl-auth-login-config.yaml na página Identidade e acesso após a configuração do OIDC.

  1. Na página "Identidade e acesso", clique na guia Identidade e na guia Cluster.

  2. Encontre o cluster admin e clique em Ver detalhes de configuração.

  3. Clique em Fazer o download da configuração de login para fazer o download da configuração usada para fazer login com a identidade do cluster do administrador no servidor da API Kubernetes.

    Botão de download da configuração do AIS

  4. O arquivo de saída admin-actl-auth-login-config.yaml contém a configuração necessária para que os usuários se autentiquem com o cluster de administrador. Compartilhe admin-actl-auth-login-config.yaml com usuários confiáveis que precisam acessar o cluster.

  5. Depois de adquirir admin-actl-auth-login-config.yaml, os usuários podem fazer login usando o comando actl auth login. Quando os usuários fazem login por meio de um navegador, um kubeconfig é produzido. Os usuários podem usar esse novo arquivo para acessar o cluster usando as credenciais federadas:

    # Where to store the new kubeconfig
    export ADMIN_OIDC_KUBECONFIG=$(pwd)/admin-oidc-kubeconfig
    
    actl auth login --login-config=admin-actl-auth-login-config.yaml --cluster=admin \
      --kubeconfig=${ADMIN_OIDC_KUBECONFIG} \
      --preferred-auth="CONFIGURATION_NAME"
    

    Substitua CONFIGURATION_NAME pelo nome do perfil de identidade para autenticação.

  6. Agora, os usuários podem usar ${ADMIN_OIDC_KUBECONFIG} para acessar recursos no cluster do administrador. Por exemplo:

    kubectl get pods -n anthos-management-center --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
    
  7. ${ADMIN_OIDC_KUBECONFIG} também pode ser usado para autenticar comandos da CLI do actl. Por exemplo:

    actl platform management-center describe --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
    

Redefinir configuração de autenticação

Se um administrador de plataforma perder o acesso ao Centro de gerenciamento devido a um erro nas configurações de autenticação, execute o seguinte comando para redefinir a autenticação do OIDC para a configuração original e conseguir o novo URL de acesso para o Centro de gerenciamento.

actl auth reset --kubeconfig=ADMIN_KUBECONFIG

# Get the new access URL to management center.
actl platform management-center describe --kubeconfig=ADMIN_KUBECONFIG

A seguir