Este documento destina-se a administradores de clusters ou operadores de aplicações que querem configurar o GKE Identity Service em clusters individuais, permitindo que os programadores e outros utilizadores iniciem sessão nos clusters através dos respetivos detalhes de identidade existentes de um fornecedor OpenID Connect (OIDC).
Pré-requisitos
- O seu cluster tem de ser um cluster do GKE nas instalações (VMware ou bare metal), na AWS ou no Azure. A configuração OIDC por cluster não é suportada para clusters anexados nem clusters do GKE.
- Para autenticar através da Google Cloud consola, cada cluster que quer configurar para a autenticação OIDC tem de estar registado na sua frota de projetos.
Antes de começar
- Certifique-se de que o administrador da plataforma lhe deu todas as informações necessárias do artigo Registe o serviço de identidade do GKE junto do seu fornecedor antes de iniciar a configuração, incluindo o ID de cliente e o segredo do serviço de identidade do GKE.
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
, siga estas instruções.
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 projeto onde os clusters estão registados.
Se precisar de estabelecer ligação ao plano de controlo de um cluster do GKE da AWS ou do Azure que esteja fora da sua VPC atual através de um anfitrião bastion, certifique-se de que criou o anfitrião bastion e iniciou um túnel SSH na porta 8118 antes desta configuração. Em seguida, adicione
HTTPS_PROXY=http://localhost:8118
antes dos comandoskubectl
quando seguir este guia. Se usou uma porta diferente ao iniciar o túnel SSH, substitua8118
pela porta selecionada.
Configure clusters
Para configurar os seus clusters de modo a usarem o fornecedor escolhido, o GKE Identity Service precisa que especifique detalhes sobre o fornecedor de identidade, as informações nos tokens JWT que fornece para identificação do utilizador e outras informações facultadas quando regista o GKE Identity Service como uma aplicação cliente.
Por exemplo, se o seu fornecedor criar tokens de identidade com os seguintes campos (entre outros), em que iss
é o URI do fornecedor de identidade, sub
identifica o utilizador e groupList
lista os grupos de segurança aos quais o utilizador pertence:
{ 'iss': 'https://server.example.com' 'sub': 'u98523-4509823' 'groupList': ['developers@example.corp', 'us-east1-cluster-admins@example.corp'] ... }
… a sua configuração terá os seguintes campos correspondentes:
issuerURI: 'https://server.example.com' userClaim: 'sub' groupsClaim: 'groupList' ...
O administrador da plataforma ou quem gere a identidade na sua organização deve fornecer-lhe a maioria das informações de que precisa para criar a configuração.
O GKE Identity Service usa um tipo de recurso personalizado (CRD) do Kubernetes denominado ClientConfig para a configuração do cluster, com campos para todas as informações de que o GKE Identity Service precisa para interagir com o fornecedor de identidade. Cada cluster do GKE tem um recurso ClientConfig denominado default
no espaço de nomes kube-public
que atualiza com os detalhes da configuração, seguindo as instruções abaixo.
Pode ver algumas configurações de exemplo específicas para fornecedores populares em Configurações específicas do fornecedor.
kubectl
Para editar o ClientConfig predefinido, certifique-se de que consegue estabelecer ligação ao cluster
através de kubectl
e execute o seguinte comando:
kubectl --kubeconfig=KUBECONFIG_PATH edit ClientConfigs default -n kube-public
Substitua KUBECONFIG_PATH
pelo caminho para o ficheiro kubeconfig do cluster, por exemplo, $HOME/.kube/config
.
Um editor de texto carrega o recurso ClientConfig do seu cluster. Adicione o objeto spec.authentication.oidc
, conforme mostrado abaixo. Não modifique os dados predefinidos que já foram escritos.
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- name: NAME
oidc:
certificateAuthorityData: CERTIFICATE_STRING
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
deployCloudConsoleProxy: PROXY_BOOLEAN
extraParams: EXTRA_PARAMS
groupsClaim: GROUPS_CLAIM
groupPrefix: GROUP_PREFIX
issuerURI: ISSUER_URI
kubectlRedirectURI: KUBECTL_REDIRECT_URI
scopes: SCOPES
userClaim: USER_CLAIM
userPrefix: USER_PREFIX
enableAccessToken: ENABLE_ACCESS_TOKEN
proxy: PROXY_URL
# Rest of the resource is managed by Google. DO NOT MODIFY.
...
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 do objeto ClientConfig oidc
. A maioria dos campos é opcional. Os campos que tem de adicionar dependem do seu fornecedor de identidade e das opções de configuração escolhidas pelo administrador da plataforma ao configurar o fornecedor para o GKE Identity Service.
Campo | Obrigatória | Descrição | Formato |
---|---|---|---|
nome | sim | O nome que quer usar para identificar esta configuração, normalmente o nome do fornecedor de identidade. Um nome de configuração tem de começar por uma letra, seguida de até 39 letras minúsculas, números ou hífenes, e não pode terminar com um hífen. | String |
certificateAuthorityData | Não | Se fornecido pelo administrador da plataforma, uma string de certificado com codificação PEM para o fornecedor de identidade. Inclua a string resultante em certificateAuthorityData como uma única linha. |
String |
clientID | Sim | O ID de cliente devolvido quando registar o serviço de identidade do GKE junto do seu fornecedor de OIDC. | String |
clientSecret | Não | Segredo partilhado entre a aplicação cliente OIDC e o fornecedor OIDC. | String |
deployCloudConsoleProxy | Não | Especifica se é implementado um proxy que permite que a Google Cloud consola se ligue a um fornecedor de identidade no local que não seja acessível publicamente através da Internet. Por predefinição, esta opção está definida como false . |
Booleano |
extraParams | Não | Parâmetros adicionais de chave=valor a enviar para o fornecedor de identidade, especificados como uma lista separada por vírgulas, por exemplo, `prompt=consent,access_type=offline`. | Lista delimitada por vírgulas |
groupsClaim | Não | A reivindicação JWT (nome do campo) que o seu fornecedor usa para devolver os grupos de segurança de uma conta. | String |
groupPrefix | Não | O prefixo que quer antepor aos nomes dos grupos de segurança para evitar conflitos com os nomes existentes nas suas regras de controlo de acesso se tiver configurações para vários fornecedores de identidade (normalmente, o nome do fornecedor). | String |
issuerURI | Sim | O URI onde os pedidos de autorização são feitos ao seu fornecedor de identidade. O URI tem de usar HTTPS e não deve terminar com uma barra invertida. | String de URL |
kubectlRedirectURI | Sim | O URL de redirecionamento e a porta usados pela CLI gcloud e especificados pelo administrador da plataforma no registo, normalmente no formato http://localhost:PORT/callback . |
String de URL |
âmbitos | Sim | Âmbitos adicionais a enviar para o fornecedor OpenID. Por exemplo, o Microsoft Azure e o Okta
requerem o âmbito offline_access . |
Lista delimitada por vírgulas |
userClaim | Não | A reivindicação JWT (nome do campo) que o seu fornecedor usa para identificar uma conta de utilizador. Se não especificar um valor aqui, o serviço de identidade do GKE usa "sub", que é a reivindicação de ID do utilizador usada por muitos fornecedores. Pode escolher outras reivindicações, como "email" ou "nome", consoante o fornecedor OpenID. As reivindicações que não sejam "email" têm o prefixo do URL do emissor para evitar conflitos de nomenclatura. | String |
userPrefix | Não | O prefixo que quer anteposto às reivindicações do utilizador para evitar conflitos com nomes existentes, se não quiser usar o prefixo predefinido. | String |
enableAccessToken | Não | Se estiver ativado, o GKE Identity Service pode usar o ponto final userinfo do fornecedor de identidade para obter informações de grupos quando um utilizador inicia sessão a partir da linha de comandos. Isto permite-lhe usar grupos de segurança para autorização se tiver um fornecedor (como o Okta) que forneça reivindicações de grupos a partir deste ponto final. Se não estiver definido, considera-se que é false . |
Booleano |
proxy | Não | Endereço do servidor proxy a usar para estabelecer ligação ao fornecedor de identidade, se aplicável. Pode ter de definir esta opção se, por exemplo, o seu cluster estiver numa rede privada e precisar de se ligar a um fornecedor de identidade público. Por exemplo: http://user:password@10.10.10.10:8888 . |
String |
Depois de concluir o ClientConfig, guarde o ficheiro, o que atualiza o ClientConfig no seu cluster. Se cometer erros de sintaxe, é-lhe pedido que volte a editar a configuração para os corrigir.
Configurações específicas do fornecedor
Esta secção fornece orientações de configuração para alguns fornecedores de OIDC populares, incluindo configurações de exemplo que pode copiar e editar com os seus próprios detalhes.
Azure AD
Esta é a configuração predefinida para configurar o GKE Identity Service com o Azure AD. A utilização desta configuração permite que o GKE Identity Service obtenha informações sobre a associação de utilizadores e grupos do Azure AD, e permite-lhe configurar o controlo de acesso baseado em funções (RBAC) do Kubernetes com base em grupos. No entanto, a utilização desta configuração limita a obtenção de aproximadamente 200 grupos por utilizador.
Se precisar de obter mais de 200 grupos por utilizador, consulte as instruções para o Azure AD (avançado).
...
spec:
authentication:
- name: oidc-azuread
oidc:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
extraParams: prompt=consent, access_type=offline
issuerURI: https://login.microsoftonline.com/TENANT_ID/v2.0
kubectlRedirectURI: http://localhost:PORT/callback
scopes: openid,email,offline_access
userClaim: email
# Rest of the resource is managed by Google. DO NOT MODIFY.
...
Substitua o seguinte:
- CLIENT_ID: o ID de cliente devolvido quando registar o serviço de identidade do GKE junto do seu fornecedor.
- CLIENT_SECRET: segredo partilhado entre a aplicação cliente OIDC e o fornecedor OIDC.
- TENANT: o tipo de conta do Azure AD a autenticar. Os valores suportados são o ID do inquilino ou o nome do inquilino para contas pertencentes a um inquilino específico. O nome do inquilino também é conhecido como o domínio principal. Para ver detalhes sobre como encontrar estes valores, consulte o artigo Encontre o ID do inquilino e o nome do domínio principal do Microsoft Azure AD.
- PORT: o número da porta escolhido para o URL de redirecionamento usado pela CLI gcloud, especificado pelo administrador da plataforma no registo.
Azure AD (avançado)
Esta configuração opcional para o Azure AD permite que o serviço de identidade do GKE obtenha informações de utilizadores e grupos sem limite no número de grupos por utilizador, através da API Microsoft Graph.
Para ver informações sobre as plataformas que suportam esta configuração, consulte o artigo Configuração avançada para o Azure AD.
Se precisar de obter menos de 200 grupos por utilizador, recomendamos que use a configuração predefinida com um ponto de ancoragem oidc
no seu ClientConfig. Para mais informações, consulte as instruções
para o Azure AD.
Todos os campos na configuração do exemplo seguinte são obrigatórios.
...
spec:
authentication:
- name: NAME
proxy: PROXY_URL
azureAD:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
tenant: TENANT_ID
kubectlRedirectURI: http://localhost:PORT/callback
groupFormat: GROUP_FORMAT
userClaim: USER_CLAIM
# Rest of the resource is managed by Google. DO NOT MODIFY.
...
Substitua o seguinte:
- NAME: o nome que quer usar para identificar esta configuração, normalmente o nome do fornecedor de identidade. Um nome de configuração tem de começar por uma letra, seguida de até 39 letras minúsculas, números ou hífenes, e não pode terminar com um hífen.
- PROXY_URL: endereço do servidor proxy a usar para estabelecer ligação ao fornecedor de identidade, se aplicável. Pode ter de definir esta opção se, por exemplo, o seu cluster estiver numa rede privada e precisar de se ligar a um fornecedor de identidade público. Por exemplo:
http://user:password@10.10.10.10:8888
. - CLIENT_ID: o ID de cliente devolvido quando registar o serviço de identidade do GKE junto do seu fornecedor.
- CLIENT_SECRET: segredo partilhado entre a aplicação cliente OIDC e o fornecedor OIDC.
- TENANT: o tipo de conta do Azure AD a autenticar. Os valores suportados são o ID do inquilino ou o nome do inquilino para contas pertencentes a um inquilino específico. O nome do inquilino também é conhecido como o domínio principal. Para ver detalhes sobre como encontrar estes valores, consulte o artigo Encontre o ID do inquilino e o nome do domínio principal do Microsoft Azure AD.
- PORT: o número da porta escolhido para o URL de redirecionamento usado pela CLI gcloud, especificado pelo administrador da plataforma no registo.
- GROUP_FORMAT: o formato no qual quer obter informações do grupo. Este campo pode assumir valores correspondentes a
ID
ouNAME
dos grupos de utilizadores. Tenha em atenção que esta definição está atualmente disponível apenas para clusters em implementações do Google Distributed Cloud bare metal. - USER_CLAIM (Opcional): a reivindicação JWT (nome do campo) que o seu fornecedor usa para identificar uma conta. Se não especificar um valor aqui, o GKE Identity Service usa um valor na ordem de "email", "preferred_username" ou "sub" para obter os detalhes do utilizador. Este atributo pode ser usado a partir da versão 1.28 do GKE Enterprise.
Okta
A imagem seguinte mostra como configurar a autenticação usando utilizadores e grupos com o Okta como fornecedor de identidade. Esta configuração permite que o Anthos Identity Service obtenha reivindicações de utilizadores e grupos através de um token de acesso e do ponto final userinfo do Okta.
...
spec:
authentication:
- name: okta
oidc:
clientID: CLIENT_ID
clientSecret: CLIENT_SECRET
cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
enableAccessToken: true
extraParams: prompt=consent
groupsClaim: groups
issuerURI: https://OKTA_ISSUER_URI/
kubectlRedirectURI: http://localhost:PORT/callback
scopes: offline_access,email,profile,groups
userClaim: email
# Rest of the resource is managed by Google. DO NOT MODIFY.
...
Limites de acesso de grupo
Para utilizadores do Okta, o Anthos Identity Service pode obter informações de grupos para utilizadores cujos nomes de grupos, se concatenados, tenham um comprimento inferior a 170 000 carateres. Isto corresponde a uma associação de aproximadamente 650 grupos, tendo em conta o comprimento máximo do grupo do Okta. Se o utilizador for membro de demasiados grupos, a chamada de autenticação falha.
O que se segue?
Depois de aplicar a configuração, continue a configurar o acesso dos utilizadores aos clusters.