Configure a gateway Connect com identidades de terceiros

Este guia destina-se aos administradores da plataforma que precisam de configurar o gateway Connect num projeto que contenha utilizadores que não tenham identidades Google e não pertençam ao Google Workspace. Neste guia, estas identidades são denominadas "identidades de terceiros". Antes de ler este guia, deve conhecer os conceitos descritos na vista geral do gateway Connect. Para autorizar contas Google individuais, consulte o artigo Configurar o gateway Connect. Para obter apoio técnico do Google Groups, consulte o artigo Configurar o gateway Connect com o Google Groups.

A configuração neste guia permite que os utilizadores iniciem sessão em clusters da frota através da CLI Google Cloud, da gateway Connect e da consola Google Cloud .

Tipos de clusters suportados

Pode configurar o controlo de acesso com identidades de terceiros através do gateway Connect para os seguintes tipos de clusters registados:

Se precisar de atualizar clusters no local para usar esta funcionalidade, consulte os artigos Atualize um cluster para o VMWare e Atualize clusters em hardware simples.

Se tiver um exemplo de utilização para ambientes de clusters do GKE que não os indicados acima, contacte o apoio técnico ao cliente do Google Cloud ou a equipa do gateway Connect.

Como funciona

Conforme descrito na vista geral, os utilizadores podem estar a usar fornecedores de identidade que não são o Google Workspace nem o Cloud ID. Ao usar a Workforce Identity Federation, os utilizadores podem usar os respetivos fornecedores de identidade externos, como o Okta ou o Azure Active Directory, para acederem aos respetivos clusters através do Connect Gateway. Ao contrário das Contas Google, os utilizadores externos são representados por um principal da gestão de identidade e acesso (IAM) que segue o formato:

principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE
  • O WORKFORCE_POOL_ID é o nome do Workforce Pool que contém o fornecedor de identidade de terceiros relevante.

  • O SUBJECT_VALUE é o mapeamento da identidade de terceiros para um assunto da Google.

Para grupos de terceiros, o principal do IAM segue o formato:

principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_VALUE

O diagrama seguinte mostra um fluxo típico de um utilizador de terceiros que se autentica e executa comandos num cluster com este serviço ativado. Para que este fluxo seja bem-sucedido, tem de ser aplicada uma política de controlo de acesso baseado em funções (RBAC) no cluster para o utilizador ou um grupo.

Para utilizadores individuais, tem de existir no cluster uma política de RBAC que use o nome principal de IAM completo do utilizador.

Se usar a funcionalidade de grupo, tem de existir uma política de CABF que use o nome principal completo do IAM no cluster para um grupo que:

  1. Contém o utilizador alice@example.com como membro.

  2. Está incluído num mapeamento para um fornecedor de identidade num grupo do Workforce que se encontra na organização do Google Cloud de Alice.

Diagrama que mostra o fluxo de identidade de terceiros do gateway

  1. O utilizador alice@example.com inicia sessão no gcloud com a respetiva identidade de terceiros, através do início de sessão de terceiros baseado no navegador. Para usar o cluster a partir da linha de comandos, o utilizador obtém o gateway do cluster kubeconfig, conforme descrito em Usar o gateway do Connect.
  2. O utilizador envia um pedido executando um comando kubectl ou abrindo as páginas Workloads ou Object Browser do Google Kubernetes Engine na consola Google Cloud .
  3. O pedido é recebido pela gateway do Connect, que processa a autenticação de terceiros através da federação de identidades da força de trabalho.
  4. O gateway Connect executa uma verificação de autorização com o IAM.
  5. O serviço Connect encaminha o pedido para o agente Connect em execução no cluster. O pedido é acompanhado das informações de credenciais do utilizador para utilização na autenticação e autorização no cluster.
  6. O agente Connect encaminha o pedido para o servidor da API Kubernetes.
  7. O servidor da API Kubernetes encaminha o pedido para o serviço de identidade do GKE, que valida o pedido.
  8. O GKE Identity Service devolve as informações de utilizadores e grupos de terceiros ao servidor da API Kubernetes. O servidor da API Kubernetes pode, então, usar estas informações para autorizar o pedido com base nas políticas RBAC configuradas do cluster.

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, a ferramenta de linha de comandos para interagir com o Google Cloud.
    • A ferramenta de linha de comandos do Kubernetes, kubectl, para interagir com os seus clusters.

    Se estiver a usar o Cloud Shell como ambiente de shell para interagir com o Google Cloud, estas ferramentas são instaladas automaticamente.

  • Certifique-se de que inicializou a CLI gcloud para utilização com o seu projeto.

  • Este guia pressupõe que tem roles/owner no seu projeto. Se não for proprietário do projeto, pode precisar de autorizações adicionais para executar alguns dos passos de configuração.

  • Para clusters fora Google Cloud, o GKE Identity Service tem de chamar as APIs Google a partir do seu cluster para concluir a autenticação. Verifique se a sua política de rede exige que o tráfego de saída passe por um proxy.

Configure mapeamentos de atributos de identidade de terceiros através da identidade da força de trabalho

Certifique-se de que existe um Workforce Pool e um fornecedor de identidade configurados para a sua Google Cloud organização seguindo as instruções correspondentes ao seu fornecedor de identidade:

Ativar APIs

Para adicionar a gateway ao seu projeto, ative a API Connect gateway e as respetivas APIs de dependência necessárias. Se os seus utilizadores só quiserem autenticar-se em clusters através da Google Cloud consola, não precisa de ativar a connectgateway.googleapis.com, mas tem de ativar as APIs restantes.

gcloud services enable --project=PROJECT_ID  \
connectgateway.googleapis.com \
gkeconnect.googleapis.com \
gkehub.googleapis.com \
cloudresourcemanager.googleapis.com

Configure o serviço de identidade do GKE

A funcionalidade de compatibilidade com identidades de terceiros do gateway usa o serviço de identidade do GKE para obter informações de associação a grupos da Google. Pode saber mais sobre o GKE Identity Service no artigo Apresentamos o GKE Identity Service.

Se estiver a usar clusters do GKE com o gateway, não precisa de configurar o serviço de identidade do GKE para usar o suporte de identidade de terceiros. Em alternativa, siga as instruções em Configure os Grupos Google para o CABF e continue para Conceda funções do IAM para conceder acesso a clusters através do gateway.

Se estiver a usar clusters anexados do GKE com a gateway, o GKE Identity Service não é necessário para o suporte de identidades de terceiros. Siga as instruções para o tipo de cluster escolhido para configurar o suporte de identidade de terceiros:

Certifique-se de que o serviço de identidade do GKE está instalado

O GKE Identity Service está instalado por predefinição em clusters do GKE a partir da versão 1.7 (embora o suporte de identidade de terceiros exija a versão 1.13 ou superior). Pode confirmar se está instalado corretamente no cluster executando o seguinte comando:

kubectl --kubeconfig CLUSTER_KUBECONFIG get all -n anthos-identity-service

Substitua CLUSTER_KUBECONFIG pelo caminho para o kubeconfig do cluster.

Configure o apoio técnico de identidades de terceiros para grupos

Se o seu cluster ou frota já estiver configurado para suporte do Google Groups, não existem passos adicionais e pode avançar para Conceda funções do IAM a utilizadores e grupos externos.

Se estiver a usar o Google Distributed Cloud no VMware ou no bare metal, a forma como configura o GKE Identity Service determina como tem de configurar a funcionalidade de grupos de terceiros.

Se estiver a usar o GKE Identity Service pela primeira vez, pode optar por configurar o suporte de grupos de terceiros através das APIs Fleet (recomendado) ou através do kubectl.

Se não for a primeira vez que usa o GKE Identity Service, tenha em atenção uma das seguintes situações:

  • Se já configurou o serviço de identidade do GKE para outro fornecedor de identidade ao nível da frota, a funcionalidade de grupos de terceiros é ativada por predefinição. Consulte a secção Frota abaixo para ver mais detalhes e qualquer configuração adicional de que possa precisar.
  • Se já configurou o serviço de identidade do GKE para outro fornecedor de identidade por cluster, consulte a secção Kubectl abaixo para ver instruções sobre como atualizar a configuração para a funcionalidade de grupos de terceiros.

Fleet

Pode usar a Google Cloud consola ou a linha de comandos para configurar o acesso a grupos de terceiros através das APIs Fleet Feature.

Consola

Se ainda não configurou o GKE Identity Service para uma frota, siga as instruções em Configure clusters for GKE Identity Service.

Selecione clusters e atualize a configuração

  1. Na Google Cloud consola, aceda à página Gestor de funcionalidades.

    Aceda ao Gestor de funcionalidades

  2. Clique em Detalhes no painel Serviço de identidade. São apresentados os detalhes do cluster do seu projeto.

  3. Clique em Atualizar serviço de identidade para abrir o painel de configuração.

  4. Selecione os clusters que quer configurar. Pode escolher clusters individuais ou especificar que quer que todos os clusters sejam configurados com a mesma configuração de identidade.

  5. Na secção Configurar fornecedores de identidade, pode optar por manter, adicionar, atualizar ou remover um fornecedor de identidade.

  6. Clique em Continuar para avançar para o passo de configuração seguinte. Se tiver selecionado, pelo menos, um cluster elegível para esta configuração, é apresentada a secção Autenticação Google.

  7. Selecione Ativar para ativar a autenticação Google para os clusters selecionados. Se precisar de aceder ao fornecedor de identidade da Google através de um proxy, introduza os detalhes do proxy.

  8. Clique em Atualizar configuração. Isto aplica a configuração de identidade nos clusters selecionados.

gcloud

Se ainda não tiver configurado o GKE Identity Service para uma frota, siga as instruções em Configure clusters for GKE Identity Service. Especifique apenas a seguinte configuração no ficheiro auth-config.yaml:

spec:
  authentication:
  - name: google-authentication-method
    google:
      disable: false

Configurar o acesso de grupos de terceiros através de um proxy

Se precisar de aceder ao fornecedor de identidade através de um proxy, use um campo proxy no seu ficheiro auth-config.yaml. 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. Tem de adicionar esta configuração, mesmo que já tenha configurado o GKE Identity Service para outro fornecedor.

Para configurar o proxy, veja como pode atualizar a secção authentication do ficheiro de configuração existente auth-config.yaml.

  spec:
    authentication:
    - name: authentication-method
      google:
        disable: false
      proxy: PROXY_URL

onde

  • disable (opcional) indica se quer ativar ou desativar a funcionalidade de grupos de terceiros para clusters. Este valor está predefinido como false. Se quiser recusar esta funcionalidade, pode defini-la como verdadeira.

  • PROXY_URL (opcional) é o endereço do servidor proxy para estabelecer ligação à identidade Google. Por exemplo: http://user:password@10.10.10.10:8888

Aplique a configuração

Para aplicar a configuração a um cluster, execute o seguinte comando:

gcloud container fleet identity-service apply \
--membership=CLUSTER_NAME \
--config=/path/to/auth-config.yaml

onde

CLUSTER_NAME é o nome de subscrição exclusivo do cluster na frota.

Depois de aplicada, esta configuração é gerida pelo controlador do GKE Identity Service. Todas as alterações locais feitas à configuração do cliente do GKE Identity Service são reconciliadas pelo controlador com a configuração especificada nesta configuração.

Kubectl

Para configurar o cluster para usar o GKE Identity Service com a funcionalidade de grupos de terceiros, tem de atualizar o GKE Identity Service do cluster ClientConfig. Este é um tipo de recurso personalizado (CRD) do Kubernetes usado para a configuração do cluster. Cada cluster tem um recurso ClientConfig denominado default no espaço de nomes kube-public que atualiza com os detalhes da configuração.

Para editar a configuração, use o seguinte comando.

kubectl --kubeconfig CLUSTER_KUBECONFIG -n kube-public edit clientconfig default

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.

Segue-se um exemplo de como pode atualizar o ClientConfig com um novo método de autenticação com uma configuração do tipo google para ativar a funcionalidade de grupos de terceiros. Se o campo internalServer estiver vazio, certifique-se de que está definido como https://kubernetes.default.svc, conforme mostrado abaixo.

spec:
  authentication:
  - google:
      audiences:
      - "CLUSTER_IDENTIFIER"
    name: google-authentication-method
    proxy: PROXY_URL
  internalServer: https://kubernetes.default.svc

onde

CLUSTER_IDENTIFIER (obrigatório) indica os detalhes da subscrição do seu cluster. Pode aceder aos detalhes da associação do cluster através do comando:

kubectl --kubeconfig CLUSTER_KUBECONFIG get memberships membership -o yaml

onde

CLUSTER_KUBECONFIG é o caminho para o ficheiro kubeconfig do cluster. Na resposta, consulte o campo spec.owner.id para obter os detalhes de associação do cluster.

Segue-se um exemplo de resposta que mostra os detalhes de associação de um cluster:

id: //gkehub.googleapis.com/projects/123456789/locations/global/memberships/xy-ab12cd34ef

que corresponde ao seguinte formato: //gkehub.googleapis.com/projects/PROJECT_NUMBER/locations/global/memberships/MEMBERSHIP

Conceda funções IAM a utilizadores e grupos de terceiros

As identidades de terceiros precisam das seguintes Google Cloud funções adicionais para interagir com clusters ligados através do gateway:

  • roles/gkehub.gatewayAdmin. Esta função permite que os utilizadores acedam à API do gateway Connect.
    • Se os utilizadores apenas precisarem de acesso só de leitura a clusters ligados, pode usar o roles/gkehub.gatewayReader.
    • Se os utilizadores precisarem de acesso de leitura/escrita a clusters associados, podem usar o roles/gkehub.gatewayEditor.
  • roles/gkehub.viewer. Esta função permite que os utilizadores vejam as associações de clusters registadas.

As instruções seguintes mostram como adicionar as funções necessárias a identidades individuais e grupos mapeados:

Identidades únicas

Para conceder as funções necessárias a uma única identidade para o projeto PROJECT_ID, execute o seguinte comando:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role=GATEWAY_ROLE \
    --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role=roles/gkehub.viewer \
    --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"

onde

  • PROJECT_ID: é o ID do projeto.
  • GATEWAY_ROLE é um de roles/gkehub.gatewayAdmin, roles/gkehub.gatewayReader ou gkehub.gatewayEditor.
  • WORKFORCE_POOL_ID: é o ID do Workload Identity Pool.
  • SUBJECT_VALUE: é a identidade do utilizador.

Grupos

Para conceder as funções necessárias a todas as identidades num grupo específico para o projeto PROJECT_ID, execute o seguinte comando:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role=GATEWAY_ROLE \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --role=roles/gkehub.viewer \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"

onde

  • PROJECT_ID: é o ID do projeto.
  • GATEWAY_ROLE é um de roles/gkehub.gatewayAdmin, roles/gkehub.gatewayReader ou gkehub.gatewayEditor.
  • WORKFORCE_POOL_ID: é o ID do Workforce Pool.
  • GROUP_ID: é um grupo na reivindicação google.groups mapeada.

Consulte a configuração do seu Fornecedor de identidade listado em Configure mapeamentos de terceiros com a identidade da força de trabalho para mais personalizações, como especificar atributos de departamento, ao aplicar a política de RBAC.

Pode saber mais sobre a concessão de autorizações e funções do IAM em Conceder, alterar e revogar o acesso a recursos.

Configure políticas de controlo de acesso baseado em funções (CABF)

Por último, o servidor da API Kubernetes de cada cluster tem de poder autorizar comandos kubectl que chegam através do gateway do utilizador e dos grupos de terceiros especificados. Para cada cluster, tem de adicionar uma política de autorizações RBAC que especifique as autorizações que o sujeito tem no cluster.

Os sujeitos nas políticas de RBAC têm de usar o mesmo formato que as associações de IAM, com utilizadores de terceiros a começar por principal://iam.googleapis.com/ e grupos de terceiros a começar por principalSet://iam.googleapis.com/. Se o serviço de identidade do GKE não estiver configurado para o cluster, precisa de políticas de roubo de identidade, além de funções/funções de cluster para um utilizador de terceiros. Nesse caso, siga estes passos de configuração do RBAC, adicionando o principal de terceiros que começa por principal://iam.googleapis.com/ como utilizador.

O exemplo seguinte mostra como conceder cluster-adminautorizações aos membros de um grupo de terceiros num cluster onde o serviço de identidade do GKE está configurado. Em seguida, pode guardar o ficheiro de política como /tmp/admin-permission.yaml e aplicá-lo ao cluster associado ao contexto atual.

cat <<EOF > /tmp/admin-permission.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gateway-cluster-admin-group
subjects:
- kind: Group
  name: "principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
EOF
# Apply permission policy to the cluster.
kubectl apply --kubeconfig=KUBECONFIG_PATH -f /tmp/admin-permission.yaml

Pode saber mais sobre a especificação de autorizações RBAC em Usar a autorização RBAC.

O que se segue?