Configurar clusters para o serviço de identidade do GKE com SAML

Este documento é destinado a administradores de cluster ou operadores de aplicativos que querem configurar o GKE Identity Service em clusters individuais, permitindo que desenvolvedores e outros usuários façam login nos clusters com os detalhes de identidade deles de um provedor de Linguagem de marcação para autorização de segurança (SAML). Para usar este guia, é necessário ter lido a Visão geral do serviço de identidade do GKE. As instruções neste documento presumem que o sGKE Identity Service já tenha sido registrado com seu provedor de identidade como um aplicativo cliente.

Antes de começar

  • Verifique se o administrador da plataforma forneceu todas as informações necessárias em Registrar o serviço de identidade do GKE no seu provedor antes de iniciar a configuração.
  • Verifique se você tem as seguintes ferramentas de linha de comando instaladas:

    • Usar a versão 466.0.0 da Google Cloud CLI ou uma versão mais recente, que inclui gcloud, a ferramenta de linha de comando para interagir com o Google Cloud. Se você precisar instalar a Google Cloud CLI, consulte o guia de instalação.
    • kubectl para executar comandos em clusters do Kubernetes. Se precisar instalar kubectl, siga instructions.

    Se você estiver usando o Cloud Shell como ambiente shell para interagir com o Google Cloud, essas ferramentas estarão instaladas.

  • Verifique se você inicializou a CLI gcloud para uso com o projeto em que os clusters estão registrados.

Configurar o cluster

O serviço de identidade do GKE usa um tipo especial de recurso personalizado (CRD, na sigla em inglês) do Kubernetes para configurar os clusters, chamado ClientConfig, com campos para informações sobre o provedor de identidade e os parâmetros necessários para retornar informações do usuário.

kubectl

Para editar o ClientConfig padrão, verifique se é possível se conectar ao cluster usando kubectl e execute o seguinte comando:

kubectl --kubeconfig=KUBECONFIG_PATH edit ClientConfigs default -n kube-public

Substitua KUBECONFIG_PATH pelo caminho para o arquivo kuneconfig do cluster, por exemplo, $HOME/.kube/config.

Um editor de texto carrega o recurso ClientConfig do cluster. Adicione o objeto saml conforme indicado no snippet.

apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
 name: default
 namespace: kube-public
spec:
  authentication:
  - name: NAME
   saml:
     idpEntityID: ENTITY_ID
     idpSingleSignOnURI: SIGN_ON_URI
     idpCertificateDataList: IDP_CA_CERT
     userAttribute: USER_ATTRIBUTE
     groupsAttribute: {'<var name="user attribute">GROUPS_ATTRIBUTE</var>'}}
     userPrefix: USER_PREFIX
     groupPrefix: GROUP_PREFIX
     attributeMapping:
       ATTRIBUTE_KEY_1 : ATTRIBUTE_CEL_EXPRESSION_1
       ATTRIBUTE_KEY_2 : ATTRIBUTE_CEL_EXPRESSION_2
  certificateAuthorityData: CERTIFICATE_STRING
  preferredAuthentication: PREFERRED_AUTHENTICATION
  server: <>

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

A tabela a seguir descreve os campos do objeto saml do ClientConfig. Os campos que você precisa adicionar dependem do seu provedor de identidade e das opções de configuração escolhidas pelo administrador da plataforma ao configurar o provedor para o serviço de identidade do GKE.

Campo Obrigatório Descrição Formato
Nome Sim O nome que você quer usar para identificar essa configuração, normalmente o nome do provedor de identidade. O nome de configuração precisa começar com uma letra seguida por até 39 letras minúsculas, números ou hifens, mas não pode terminar com um hífen. String
idpEntityID Sim O ID da entidade SAML do provedor de SAML, especificado em um formato de URI. Por exemplo, https://www.idp.com/saml. String do URL
idpSingleSignOnURI sim O endpoint de SSO do provedor de SAML, especificado em um formato de URI. Por exemplo, https://www.idp.com/saml/sso. String do URL
idpCertificateDataList Sim Corresponde aos certificados do provedor de identidade usados para verificar a resposta SAML. Esses certificados precisam ser codificados em base64 padrão e formatados em PEM. Apenas dois certificados são aceitos no máximo para facilitar a rotação de certificados do provedor de identidade. String
userAttribute Não Nome do atributo na resposta SAML que contém o nome de usuário. String
groupsAttribute Não Nome do atributo na resposta SAML que contém as informações do grupo do usuário. String
userPrefix Não O prefixo que você quer anexar às declarações de usuários para evitar conflitos com nomes existentes, caso não queira usar o prefixo padrão. String
groupPrefix Não O prefixo que será anexado aos nomes dos grupos de segurança. Isso evita conflitos com nomes atuais nas suas regras de controle de acesso se você tiver configurações para vários provedores de identidade (geralmente o nome do provedor). String
attributeMapping Não O mapeamento de atributos de usuário adicionais. String
certificateAuthorityData Não Se fornecida pelo administrador da plataforma, é uma string de certificado codificada em PEM para o provedor de identidade. Inclua a string resultante em certificateAuthorityData como uma única linha. String
preferredAuthentication Não Nome do método de autenticação preferido configurado no cluster. String

Depois de concluir o ClientConfig, salve o arquivo, que atualiza o ClientConfig no cluster. Se você tiver cometido erros de sintaxe, será solicitado que edite novamente a configuração para corrigi-los.

A seguir

Depois que a configuração for aplicada, defina o acesso do usuário a clusters.