Este documento destina-se a administradores de clusters ou operadores de aplicações que configuram o serviço de identidade do GKE nos respetivos clusters. Indica-lhe como configurar o GKE Identity Service nos seus clusters com o seu fornecedor do Lightweight Directory Access Protocol (LDAP) preferido, incluindo o Microsoft Active Directory. Parte do princípio de que já tem os detalhes de início de sessão do seu fornecedor de LDAP ou o administrador da plataforma, seguindo as instruções em Configure um fornecedor de LDAP para o serviço de identidade do GKE. Para saber mais sobre o funcionamento do serviço de identidade do GKE e outras opções de configuração, consulte a vista geral. Para saber como aceder a um cluster através deste serviço como programador ou outro utilizador do cluster, consulte o artigo Aceda a clusters com o GKE Identity Service. O GKE Identity Service com LDAP pode ser usado com implementações do Google Distributed Cloud no VMware (clusters de utilizadores) e no bare metal apenas.
Antes de começar
- Certifique-se de que tem as seguintes ferramentas de linha de comandos instaladas:
- A versão mais recente da CLI do Google Cloud, que inclui o
gcloud
, a ferramenta de linha de comandos para interagir com o Google Cloud. Se precisar de instalar a CLI do Google Cloud, consulte o guia de instalação. kubectl
para executar comandos em clusters do Kubernetes. Se precisar de instalar okubectl
, consulte o guia de instalação. Se estiver a usar o Cloud Shell como ambiente de shell para interagir com o Google Cloud, estas ferramentas são instaladas automaticamente.
- A versão mais recente da CLI do Google Cloud, que inclui o
- Certifique-se de que inicializou a CLI gcloud para utilização com o seu projeto.
Ao longo desta configuração, pode ter de consultar a documentação do seu servidor LDAP. Os seguintes guias do administrador explicam a configuração de alguns fornecedores de LDAP populares, incluindo onde encontrar as informações necessárias para iniciar sessão no servidor LDAP e configurar os seus clusters:
Preencha o segredo da conta de serviço LDAP
O GKE Identity Service precisa de um segredo da conta de serviço para autenticar no servidor LDAP e obter detalhes do utilizador. Existem dois tipos de contas de serviço permitidas na autenticação LDAP: autenticação básica (através de um nome de utilizador e uma palavra-passe para autenticação no servidor) ou certificado de cliente (através de uma chave privada do cliente e um certificado de cliente). Você ou o administrador da plataforma devem ter estas informações sobre o fornecedor seguindo o artigo Configure um fornecedor LDAP para o GKE Identity Service.
Para disponibilizar as informações de início de sessão do servidor LDAP ao GKE Identity Service, tem de criar um recurso Kubernetes Secret com os detalhes de início de sessão de Configurar um fornecedor LDAP para o GKE Identity Service.
Os exemplos seguintes mostram como configurar segredos para ambos os tipos de contas de serviço. Os exemplos mostram o segredo a ser aplicado ao espaço de nomes anthos-identity-service
.
Segue-se um exemplo de uma configuração de segredo de autenticação básica:
apiVersion: v1 kind: Secret metadata: name: SERVICE_ACCOUNT_SECRET_NAME namespace: "anthos-identity-service" type: kubernetes.io/basic-auth # Make sure the type is correct data: username: USERNAME # Use a base64-encoded username password: PASSWORD # Use a base64-encoded password
onde, SERVICE_ACCOUNT_SECRET_NAME é o nome que escolheu para este Secret. Substitua os valores do nome de utilizador e da palavra-passe pelo nome de utilizador e pela palavra-passe que obteve no passo anterior. USERNAME é um nome de utilizador codificado em base64 PASSWORD é uma palavra-passe codificada em base64
Segue-se um exemplo de uma configuração de segredo do certificado de cliente:
apiVersion: v1 kind: Secret metadata: name: SERVICE_ACCOUNT_SECRET_NAME namespace: anthos-identity-service type: kubernetes.io/tls # Make sure the type is correct data: # the data is abbreviated in this example tls.crt: | MIIC2DCCAcCgAwIBAgIBATANBgkqh ... tls.key: | MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...
Substitua SERVICE_ACCOUNT_SECRET_NAME pelo nome que escolheu para este Secret. Substitua os valores da chave e do certificado TLS pelos valores da chave e do certificado codificados que obteve no passo anterior.
Os exemplos mostram o segredo a ser aplicado ao espaço de nomes anthos-identity-service
, que é a nossa abordagem recomendada. Isto deve-se ao facto de, por predefinição, o GKE Identity Service ter autorização para ler segredos em anthos-identity-service
. Se quiser usar outro espaço de nomes, altere os metadados no segredo e, em seguida, adicione uma nova política de RBAC para conceder autorização ao serviço de identidade do GKE para ler segredos nesse espaço de nomes, da seguinte forma:
--- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: NAMESPACE name: ais-secret-reader-role rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get","list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: ais-secret-reader-role-binding namespace: NAMESPACE roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: ais-secret-reader-role subjects: - kind: ServiceAccount name: default namespace: anthos-identity-service ---
Configure o cluster
O GKE Identity Service usa um tipo de recurso personalizado
especial do Kubernetes (CRD) para configurar os seus clusters denominado ClientConfig
, com campos para
informações sobre o fornecedor de identidade e os parâmetros de que precisa para devolver
informações do utilizador. A configuração ClientConfig
também inclui o nome e o espaço de nomes do Secret que criou e aplicou na secção anterior, o que permite ao GKE Identity Service autenticar-se no servidor LDAP.
Para aplicar a configuração ao cluster, edite o objeto predefinido do KRM do tipo clientconfig
no espaço de nomes kube-public
:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-public edit clientconfig default
Substitua USER_CLUSTER_KUBECONFIG
pelo caminho para o ficheiro kubeconfig do cluster. Se existirem vários contextos no kubeconfig, é usado o contexto atual. Pode ter de repor o contexto atual para o cluster correto antes de executar o comando.
O exemplo seguinte mostra o formato da configuração ClientConfig
:
apiVersion: authentication.gke.io/v2alpha1 kind: ClientConfig metadata: name: default namespace: kube-public spec: authentication: - name: NAME_STRING ldap: host: HOST_NAME certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA connectionType: CONNECTION_TYPE serviceAccountSecret: name: SERVICE_ACCOUNT_SECRET_NAME namespace: NAMESPACE type: SECRET_FORMAT user: baseDN: BASE_DN filter: FILTER identifierAttribute: IDENTIFIER_ATTRIBUTE loginAttribute: LOGIN_ATTRIBUTE group: baseDN: BASE_DN filter: FILTER identifierAttribute: IDENTIFIER_ATTRIBUTE
Pode configurar vários fornecedores de identidade no seu ClientConfig
de acordo com os seus requisitos. Isto simplifica a gestão e oferece flexibilidade, permitindo-lhe configurar vários métodos de autenticação num recurso de configuração unificado. O exemplo seguinte ClientConfig
define vários fornecedores de identidade na ordem necessária de precedência da autenticação.
apiVersion: v1
items:
- apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
...
spec:
authentication:
- aws:
region: us-west-2
name: AWS Login
- ldap:
...
- saml:
...
- azureAD:
...
- oidc:
name: Okta OIDC
...
-oidc:
name: Google OIDC
...
A tabela seguinte descreve os campos no ClientConfig
CRD:
Campo | Obrigatória | Descrição | Formato |
---|---|---|---|
nome | sim | Um nome para identificar esta configuração LDAP | de string |
anfitrião | sim | Nome do anfitrião ou endereço IP do servidor LDAP. A porta é opcional e a predefinição é 389, se não for especificada. Por exemplo, ldap.server.example.com ou 10.10.10.10:389 .
|
de string |
certificateAuthorityData | Obrigatório para determinados tipos de ligação LDAP | Contém um certificado da autoridade de certificação em formato PEM codificado em Base64 para o servidor LDAP. Tem de ser fornecido apenas para ligações ldaps e startTLS .
|
de string |
connectionType | sim | Tipo de ligação LDAP a usar quando se liga ao servidor LDAP. A predefinição é startTLS . O modo insecure só deve ser usado para desenvolvimento, uma vez que toda a comunicação com o servidor é feita em texto simples.
|
de string |
serviceAccountSecret | |||
nome | sim | Nome do segredo do Kubernetes que armazena as credenciais da conta de serviço LDAP. | de string |
espaço de nome | sim | Espaço de nomes do segredo do Kubernetes que armazena as credenciais da conta de serviço LDAP. | de string |
escrever | sim | Define o formato do segredo da conta de serviço para suportar diferentes tipos de segredos. Se especificou basic-auth na configuração do segredo, deve ser basic . Caso contrário, deve ser tls . Se não for especificado, o fuso horário predefinido é basic .
|
de string |
utilizador | |||
baseDN | sim | A localização da subárvore no diretório LDAP para pesquisar entradas de utilizadores. | de string |
filtrar | não | Filtro opcional a aplicar quando pesquisa o utilizador. Isto pode ser usado para restringir ainda mais as contas de utilizador autorizadas a iniciar sessão. Se não for especificado, o fuso horário predefinido é (objectClass=User) .
|
de string |
identifierAttribute | não | Determina que atributo usar como identidade do utilizador após a autenticação.
Isto é diferente do campo loginAttribute para permitir que os utilizadores iniciem sessão com um nome de utilizador, mas que o respetivo identificador real seja um endereço de email ou um nome distinto (DN) completo. Por exemplo, definir loginAttribute
como sAMAccountName e identifierAttribute como userPrincipalName
permitiria que um utilizador iniciasse sessão como bsmith , mas as políticas de RBAC reais para o utilizador seriam escritas como bsmith@example.com .
Recomendamos a utilização de userPrincipalName , uma vez que este valor é exclusivo para cada utilizador. Se não for especificado, a predefinição é userPrincipalName .
|
de string |
loginAttribute | não | O nome do atributo que corresponde ao nome de utilizador introduzido. É usado para encontrar o utilizador na base de dados LDAP, por exemplo, (<LoginAttribute>=<username>) , e é combinado com o campo de filtro opcional. A predefinição é userPrincipalName .
|
de string |
group (Campo opcional) | |||
baseDN | sim | A localização da subárvore no diretório LDAP para pesquisar entradas de grupos. | de string |
filtrar | não | Filtro opcional a usar quando pesquisar grupos aos quais um utilizador pertence. Isto pode ser usado para fazer a correspondência explícita apenas de determinados grupos, de modo a reduzir a quantidade de grupos devolvidos para cada utilizador. A predefinição é (objectClass=Group) .
|
de string |
identifierAttribute | não | O nome de identificação de cada grupo ao qual um utilizador pertence. Por exemplo, se esta opção estiver definida como distinguishedName , os RBACs e outras expetativas de grupos devem ser escritos como DNs completos. Se não for especificado, a predefinição é distinguishedName .
|
de string |
O que se segue?
Depois de aplicar a configuração, continue a configurar o acesso dos utilizadores aos clusters com o GKE Identity Service.