Este documento descreve como os administradores de clusters ou os operadores de aplicações podem configurar clusters para suportar a autenticação através de um fornecedor OpenID Connect (OIDC) de terceiros.
Limitações
Tem de usar um tipo de cluster que suporte OIDC.
Antes de começar
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Depois de inicializar a CLI gcloud, atualize-a e instale os componentes necessários:
gcloud components update gcloud components install kubectl
- Certifique-se de que o administrador da plataforma lhe deu todas as informações de fornecedor de que precisa. Para mais informações, consulte o artigo Partilhe os detalhes do fornecedor de identidade.
- Para fazer a autenticação através da Google Cloud consola, registe cada cluster que quer configurar na sua frota de projetos. Para mais informações, consulte o artigo Vista geral da criação de frotas.
- Para se ligar ao plano de controlo de um cluster da AWS ou do Azure que esteja fora da sua rede VPC atual através de um anfitrião de bastion, certifique-se de que criou o anfitrião de bastion e iniciou um túnel SSH na porta
8118. Quando executar comandoskubectlneste documento, adicioneHTTPS_PROXY=http://localhost:PORTantes dos comandos, ondePORTé o número da porta que usou quando iniciou o túnel SSH. - Para clusters do GKE no Google Cloud, registe os clusters na sua frota.
Configure clusters
Para configurar a autenticação num cluster através do OIDC, adicione as seguintes informações a um recurso personalizado do Kubernetes denominado ClientConfig:
- Informações sobre o seu fornecedor de identidade, como um ID de cliente e um segredo.
- Informações sobre os tokens da Web JSON (JWTs) que o seu fornecedor de identidade usa para autenticação.
- Quaisquer âmbitos ou parâmetros adicionais que sejam exclusivos do seu fornecedor de identidade.
Para mais informações sobre as informações de que precisa do administrador da plataforma ou de quem gere a identidade na sua organização, consulte o artigo Partilhe os detalhes do fornecedor de identidade.
O cluster usa os campos no recurso personalizado ClientConfig para
interagir com o seu fornecedor de identidade. Cada cluster tem um ClientConfig denominado default no namespace kube-public. Os campos específicos que modifica dependem do seu Fornecedor de identidade.
Para editar o default ClientConfig, certifique-se de que consegue estabelecer ligação ao cluster
kubectl e, em seguida, execute o seguinte comando:
kubectl --kubeconfig=KUBECONFIG_PATH edit ClientConfigs default -n kube-public
Substitua KUBECONFIG_PATH pelo caminho para o ficheiro kubeconfig do seu 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 no exemplo seguinte. Não modifique
nenhum dado predefinido que já tenha sido escrito.
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- name: NAME
oidc:
certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
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.
Por exemplo, considere os seguintes campos de token de identidade:
{
'iss': 'https://server.example.com'
'sub': 'u98523-4509823'
'groupList': ['developers@example.corp', 'us-east1-cluster-admins@example.corp']
# Multiple lines are omitted here
}
Neste exemplo, iss é o URI do fornecedor de identidade, sub identifica o utilizador e groupList indica os grupos de segurança aos quais o utilizador pertence. Este exemplo
mostra apenas uma amostra dos campos que o token real pode ter.
Para o token de exemplo anterior, atualize os seguintes campos no objeto spec.authentication.oidc do ClientConfig:
issuerURI: 'https://server.example.com'
userClaim: 'sub'
groupsClaim: 'groupList'
# Multiple lines are omitted here
Pode adicionar várias configurações de fornecedores de identidade OIDC, LDAP e SAML à mesma ClientConfig. O cluster tenta autenticar-se com cada configuração pela ordem em que são definidas e para após a primeira autenticação bem-sucedida. O exemplo ClientConfig seguinte define vários fornecedores de identidade numa ordem específica:
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- aws:
region: us-west-2
name: AWS Login
- ldap:
# Multiple lines are omitted here.
- saml:
# Multiple lines are omitted here.
- azureAD:
# Multiple lines are omitted here.
- oidc:
name: Okta OIDC
# Multiple lines are omitted here.
- oidc:
name: Google OIDC
# Multiple lines are omitted here.
Campos OIDC de ClientConfig
A tabela seguinte descreve os campos do objeto ClientConfig oidc. Os campos que tem de adicionar dependem dos tokens do seu fornecedor de identidade e da forma como o administrador da plataforma configurou o fornecedor.
| 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 do Fornecedor de identidade. | 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 valor predefinido é "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 cluster 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 estabelecer ligação a um fornecedor de identidade público. Por exemplo: http://user:password@10.10.10.10:8888. |
String |
Depois de editar o ClientConfig, guarde o ficheiro para atualizar o ClientConfig do seu cluster. Se cometer erros de sintaxe, é apresentada uma mensagem para os corrigir e guardar o ficheiro.
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.
Microsoft Entra ID
Esta é a configuração predefinida para configurar um cluster para autenticação com o Microsoft Entra ID. A utilização desta configuração permite que o cluster obtenha informações sobre a associação de utilizadores e grupos do Microsoft Entra ID e permite 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 Microsoft Entra ID (avançado).
# Multiple lines are omitted here.
spec:
authentication:
- name: oidc-entraid
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
# Multiple lines are omitted here. Do not modify any pre-filled data.
Substitua o seguinte:
- CLIENT_ID: o ID de cliente do Microsoft Entra ID.
- CLIENT_SECRET: segredo partilhado entre a aplicação cliente OIDC e o fornecedor OIDC.
- TENANT_ID: o tipo de conta do Microsoft Entra ID 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 Entra.
- PORT: o número da porta escolhido para o URL de redirecionamento usado pela CLI gcloud, especificado pelo administrador da plataforma no registo.
Microsoft Entra ID (avançado)
Esta configuração opcional para o Microsoft Entra ID permite ao cluster obter 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 Microsoft Entra ID.
Se precisar de obter menos de 200 grupos por utilizador, recomendamos que use a configuração predefinida com um elemento oidc no seu ClientConfig. Para mais informações, consulte as instruções
para o Microsoft Entra ID.
Todos os campos na configuração do exemplo seguinte são obrigatórios.
# Multiple lines are omitted here.
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
# Multiple lines are omitted here. Do not modify any pre-filled data.
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 estabelecer ligação a um fornecedor de identidade público. Por exemplo:
http://user:password@10.10.10.10:8888. - CLIENT_ID: o ID de cliente do Microsoft Entra ID.
- CLIENT_SECRET: segredo partilhado entre a aplicação cliente OIDC e o fornecedor OIDC.
- TENANT: o tipo de conta do Microsoft Entra 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 Entra.
- 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
IDouNAMEdos grupos de utilizadores. Tenha em atenção que esta definição só está disponível 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 cluster 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.
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 cluster obtenha reivindicações de utilizadores e grupos através de um token de acesso e do ponto final userinfo do Okta.
# Multiple lines are omitted here.
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
# Multiple lines are omitted here. Do not modify any pre-filled data.
Limites de acesso de grupo
Para utilizadores do Okta, o cluster 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.