Autenticação de cluster da Identidade da carga de trabalho

A autenticação de cluster da Identidade da carga de trabalho permite criar e proteger clusters para o software do Distributed Cloud somente para bare metal usando tokens de curta duração e a federação de identidade da carga de trabalho. Essa abordagem substitui as chaves de conta de serviço permanentes por tokens de acesso do OAuth 2.0, reduzindo a sobrecarga de manutenção e eliminando os riscos de segurança das credenciais de longa duração.

Só é possível ativar esse recurso ao criar novos clusters. Esse recurso está disponível na versão 1.33 e posteriores e em pré-lançamento nas versões 1.30, 1.31 e 1.32. Não é possível atualizar clusters atuais para usá-lo. Para outras restrições, consulte Limitações.

Como funciona a autenticação de cluster da Identidade da carga de trabalho

As credenciais de curta duração da conta de serviço estão na forma de tokens de acesso OAuth 2.0. Os tokens de acesso expiram após uma hora por padrão. Da mesma forma, os tokens de extração de imagem também expiram após uma hora por padrão.

Por outro lado, o modo com chave, o método padrão para criar e proteger clusters, usa chaves de conta de serviço baixadas. Ao criar um cluster autogerenciado (administrador, híbrido ou independente), especifique o caminho para as chaves baixadas. As chaves são armazenadas como secrets no cluster e em todos os clusters de usuários gerenciados. Por padrão, as chaves de conta de serviço não expiram e são um risco de segurança quando não são gerenciadas corretamente. Para informações sobre como definir um prazo de validade para as chaves da conta de serviço, consulte Prazos de validade para chaves gerenciadas pelo usuário.

A autenticação de cluster da Identidade da carga de trabalho oferece dois benefícios principais em relação ao uso de chaves de conta de serviço:

  • Segurança aprimorada: as chaves de conta de serviço são um risco de segurança quando não são gerenciadas corretamente. Os tokens OAuth 2.0 e a federação de identidade da carga de trabalho são consideradas as práticas recomendadas para chaves de conta de serviço. Para mais informações sobre tokens de conta de serviço, consulte Credenciais de conta de serviço de curta duração. Para mais informações sobre a Federação de identidade da carga de trabalho, consulte Federação de identidade da carga de trabalho.

  • Menor manutenção: as chaves de conta de serviço exigem mais manutenção. A rotação e a proteção regulares dessas chaves podem ser uma carga administrativa significativa.

Antes de começar

Nas seções a seguir, você vai criar contas de serviço e conceder os papéis necessários para a autenticação de cluster da Identidade da carga de trabalho. As instruções de configuração neste documento não substituem as instruções em Configurar recursos do Google Cloud. Elas são necessárias além dos pré-requisitos de instalação do software do Distributed Cloud padrão. As contas de serviço necessárias para a autenticação de cluster da Identidade da carga de trabalho são semelhantes às descritas em Configurar recursos doGoogle Cloud , mas têm nomes exclusivos para não interferir nos clusters que usam as chaves padrão da conta de serviço.

As contas de serviço necessárias para a autenticação de cluster da Identidade da carga de trabalho são diferentes para as ofertas de pré-lançamento e de GA, conforme descrito na tabela a seguir:

1.33 e mais recentes

Conta de serviço Finalidade Papéis
admin-sa Você usa essa conta de serviço para gerar tokens. Cada token tem os privilégios associados aos papéis da conta de serviço. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/iam.workloadIdentityPoolAdmin*
roles/logging.admin
roles/monitoring.admin
roles/resourcemanager.projectIamAdmin
baremetal-gcr O Google Distributed Cloud usa essa conta de serviço para baixar imagens de contêiner do Artifact Registry. Nenhum

*O papel do IAM roles/iam.workloadIdentityPoolAdmin é obrigatório apenas para a versão 1.34 e mais recentes.

1.30-1.32

Conta de serviço Finalidade Papéis
admin-sa Você usa essa conta de serviço para gerar tokens. Cada token tem os privilégios associados aos papéis da conta de serviço. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
baremetal-controller O Agente do Connect usa essa conta de serviço para manter uma conexão entre o cluster e o Google Cloud e para registrar os clusters com uma frota. Essa conta de serviço também atualiza os tokens de atualização da conta de serviço baremetal-gcr. roles/gkehub.admin
roles/monitoring.dashboardEditor
roles/serviceusage.serviceUsageViewer
baremetal-cloud-ops O Agente do Stackdriver usa essa conta de serviço para exportar registros e métricas de clusters para o Cloud Logging e o Cloud Monitoring. roles/kubernetesmetadata.publisher
roles/logging.logWriter
roles/monitoring.dashboardEditor
roles/monitoring.metricWriter
roles/monitoring.viewer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/serviceusage.serviceUsageViewer
roles/stackdriver.resourceMetadata.writer
baremetal-gcr O Google Distributed Cloud usa essa conta de serviço para baixar imagens de contêiner do Artifact Registry. Nenhum

Configurar contas de serviço

As seções a seguir contêm instruções para criar as contas de serviço necessárias e conceder a elas os papéis necessários para a autenticação de cluster da Identidade da carga de trabalho. Para uma lista das contas de serviço e dos papéis obrigatórios, consulte a tabela na seção anterior.

Criar contas de serviço

Para criar as contas de serviço para a autenticação de cluster da Identidade da carga de trabalho, siga estas etapas:

  1. Na estação de trabalho do administrador, faça login na CLI do Google Cloud:

    gcloud auth login
    
  2. Crie as contas de serviço necessárias para a autenticação de cluster da Identidade da carga de trabalho:

    O nome da conta de serviço admin-sa é arbitrário. Você pode mudar o nome se ele causar um conflito no projeto. As outras contas de serviço para a autenticação de cluster da Identidade da carga de trabalho têm nomes predefinidos que podem ser personalizados, se você quiser.

    1.33 e mais recentes

    gcloud iam service-accounts create admin-sa \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-gcr \
        --project=PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do seu projeto doGoogle Cloud .

    1.30-1.32

    ```sh gcloud iam service-accounts create admin-sa
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-controller
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-cloud-ops
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-gcr
    --project=PROJECT_ID ```

    Substitua PROJECT_ID pelo ID do seu projeto doGoogle Cloud .

Adicionar vinculações de políticas de gerenciamento de identidade e acesso a contas de serviço

Siga as etapas abaixo para aplicar as vinculações de política do Identity and Access Management necessárias às novas contas de serviço:

1.33 e mais recentes

  1. Adicione vinculações de política do IAM para os papéis necessários da conta de serviço admin-sa:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/resourcemanager.projectIamAdmin
    

1.30-1.32

  1. Adicione vinculações de política do IAM para os papéis necessários da conta de serviço admin-sa:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.admin
    
  2. Adicione vinculações de política do IAM para os papéis necessários da conta de serviço baremetal-controller:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
  3. Adicione vinculações de política do IAM para os papéis necessários da conta de serviço baremetal-cloud-ops:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/kubernetesmetadata.publisher
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/opsconfigmonitoring.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/stackdriver.resourceMetadata.writer
    
  4. Conceda à conta de serviço baremetal-controller a capacidade de gerar tokens de acesso em nome da conta de serviço baremetal-gcr:

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

Configurar a autenticação

As etapas a seguir configuram o fluxo de autenticação que usa um token de curta duração para autenticar operações de cluster:

  1. Na estação de trabalho do administrador, faça login na CLI do Google Cloud:

    gcloud auth login
    
  2. Na estação de trabalho do administrador, crie e faça o download de uma chave para a conta de serviço admin-sa:

    Essa chave é necessária para autorizar o acesso à conta de serviço admin-sa.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
    

    Substitua TMP_KEY_FILE_PATH pelo caminho, incluindo o nome do arquivo de chave salvo.

  3. Na estação de trabalho do administrador, crie uma variável de ambiente GOOGLE_APPLICATION_CREDENTIALS com o valor da chave da conta de serviço salva:

    export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
    
  4. Na estação de trabalho do administrador, crie uma variável de ambiente GCP_ACCESS_TOKEN com o valor de um token de acesso criado pela conta de serviço admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Por padrão, o token de acesso tem uma vida útil de 1 hora.

  5. Verifique se o token é gerado pela conta de serviço admin-sa com a expiração correta:

    curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
    

    A resposta precisa incluir linhas semelhantes a esta:

    ...
    "exp": "1759512810",
    "expires_in": "3589",
    ...
    

    O valor de expiração está em segundos e precisa ser menor que 3600, o que indica que o token expira em menos de uma hora.

Configurar a federação de identidade da carga de trabalho para clusters

Para fornecer acesso ao Google Cloud com a Federação de Identidade da Carga de Trabalho para GKE, crie uma política de permissão do IAM que conceda acesso a um recurso específico doGoogle Cloud a um principal que corresponda à identidade do seu aplicativo. Nesse caso, a federação de identidade da carga de trabalho concede acesso a operadores específicos no cluster. Para mais informações sobre a Federação de Identidade da Carga de Trabalho para GKE, consulte Federação de Identidade da Carga de Trabalho na documentação do IAM.

1.33 e mais recentes

Para versões de cluster em que a autenticação de cluster da Identidade da carga de trabalho está em GA, use o comando bmctl configure projects para configurar a federação de identidade da carga de trabalho para seus clusters. Esse comando é incorporado às etapas para criar um cluster de administrador e criar um cluster de usuário.

Para evitar a instabilidade do containerd ao usar um espelho de registro para extrair imagens de contêiner para o cluster, adicione a anotação de cluster baremetal.cluster.gke.io/enable-gcr-image-credential-refresh: "false". Essa anotação está disponível para as versões 1.33.200-gke.70 e mais recentes:

---
...
registryMirrors:
  - endpoint: https://198.51.20.1:5000
    caCertPath: /root/ca.crt
    pullCredentialConfigPath: /root/.docker/config.json
    hosts:
      - somehost.io
      - otherhost.io
---
apiVersion: v1
kind: Namespace
metadata:
  name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: admin1
  namespace: cluster-admin1
  annotations:
    baremetal.cluster.gke.io/enable-gcr-image-credential-refresh: "false"
spec:
  type: admin
  anthosBareMetalVersion: 1.33.200-gke.70
  ...

1.30-1.32

Para versões de cluster em que a autenticação de cluster da Identidade da carga de trabalho está em pré-lançamento, é necessário configurar a federação de identidade da carga de trabalho para os clusters manualmente, conforme descrito nas seções a seguir.

Adicionar vinculações de política do IAM para o operador do cluster

Os comandos a seguir concedem à conta de serviço do Kubernetes anthos-cluster-operator a capacidade de imitar a conta de serviço baremetal-controller e interagir com os recursos do Google Cloud em nome do cluster:

  1. Para cada cluster configurado para a autenticação de cluster da Identidade da carga de trabalho (ou planejado para usar a autenticação de cluster da Identidade da carga de trabalho), incluindo o cluster de inicialização, conceda ao anthos-cluster-operator no cluster a capacidade de representar a conta de serviço baremetal-controller:

    No comando abaixo, o principalSet consiste no pool de identidade de carga de trabalho e uma conta de serviço do Kubernetes, anthos-cluster-operator, no namespace kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    

    Substitua:

  2. Verifique as vinculações de políticas para a conta de serviço baremetal-controller:

    gcloud iam service-accounts get-iam-policy \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com
    

    A resposta será assim:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator
      role: roles/iam.workloadIdentityUser
    etag: BwYoN3QLig0=
    version: 1
    

Adicionar vinculações de política do IAM para os operadores do Google Cloud Observability

Os comandos a seguir concedem às seguintes contas de serviço do Kubernetes do Google Cloud Observability a capacidade de imitar a conta de serviço baremetal-cloud-ops e interagir com os recursos do Google Cloud em nome do cluster:

  • cloud-audit-logging
  • gke-metrics-agent
  • kubestore-collector
  • metadata-agent
  • stackdriver-log-forwarder
  1. Para cada cluster configurado para a autenticação de cluster da Identidade da carga de trabalho (ou planejado para usar a autenticação de cluster da Identidade da carga de trabalho), incluindo o cluster de inicialização, conceda aos operadores do Google Cloud Observability no cluster a capacidade de personificar a conta de serviço baremetal-cloud-ops:

    Em cada um dos comandos a seguir, o principalSet consiste no pool de identidade da carga de trabalho e em uma conta de serviço do Kubernetes, como cloud-audit-logging, no namespace kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
  2. Verifique as vinculações de políticas para a conta de serviço baremetal-cloud-ops:

    gcloud iam service-accounts get-iam-policy \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
    

    A resposta será semelhante a esta:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder
      role: roles/iam.workloadIdentityUser
    etag: BwYhT4gL-dY=
    version: 1
    

Criar um cluster de administrador

As etapas para criar um cluster de administrador são um pouco diferentes para as ofertas de pré-lançamento (versões 1.30 a 1.32) e de disponibilidade geral (versões 1.33 e mais recentes). As etapas de GA usam o comando bmctl configure projects para configurar a federação de identidade da carga de trabalho para seus clusters.

1.33 e mais recentes

A diferença mais óbvia na configuração de clusters que usam a autenticação de cluster da Identidade da carga de trabalho é que você não especifica caminhos para chaves de conta de serviço transferidas por download.

  1. Ao preencher as configurações do cluster no arquivo de configuração, deixe os caminhos da chave da conta de serviço na seção de credenciais em branco, conforme mostrado no exemplo abaixo:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. Adicione a anotação baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" ao arquivo de configuração do cluster:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  3. Na estação de trabalho do administrador, atualize a variável de ambiente GCP_ACCESS_TOKEN com um token de acesso recém-recuperado:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Por padrão, o token de acesso tem uma vida útil de 3.600 segundos (1 hora). Quando você usa a autenticação de cluster da Identidade da carga de trabalho, o bmctl verifica o prazo de validade do token. Se a expiração do token estiver dentro de 1.800 segundos (30 minutos), o bmctl vai informar um erro e será encerrado.

  4. Configure a federação de identidade da carga de trabalho para o cluster que você está criando:

    bmctl configure projects --project-id=PROJECT_ID \
        --admin-cluster=ADMIN_CLUSTER_NAME
    
  5. Execute o comando bmctl create cluster para criar o cluster de administrador.

1.30-1.32

A diferença mais óbvia na configuração de clusters que usam a autenticação de cluster da Identidade da carga de trabalho é que você não especifica caminhos para chaves de conta de serviço transferidas por download.

  1. Ao preencher as configurações do cluster no arquivo de configuração, deixe os caminhos da chave da conta de serviço na seção de credenciais em branco, conforme mostrado no exemplo abaixo:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. Na estação de trabalho do administrador, crie e faça o download de uma chave para a conta de serviço admin-sa:

    Essa chave é necessária para autorizar o acesso à conta de serviço admin-sa e você a exclui imediatamente após a autorização da conta de serviço.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
    

    Substitua TMP_KEY_FILE_PATH pelo caminho, incluindo o nome do arquivo de chave salvo.

  3. Autorize o acesso ao Google Cloud com a conta de serviço admin-sa:

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  4. Exclua o arquivo de chave JSON salvo:

    rm TMP_KEY_FILE_PATH
    

    O token de acesso tem vida curta, então geralmente é necessário gerá-lo novamente antes de executar comandos bmctl para operações de cluster, como criar, fazer upgrade ou redefinir um cluster.

  5. Na estação de trabalho do administrador, crie uma variável de ambiente GCP_ACCESS_TOKEN com o valor de um token de acesso criado pela conta de serviço admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
    

    Por padrão, o token de acesso tem uma vida útil de 3.600 segundos (1 hora).

  6. Execute o comando bmctl create cluster para criar o cluster de administrador.

Criar um cluster de usuário

As etapas para criar um cluster de administrador são um pouco diferentes para as ofertas de pré-lançamento (versões 1.30 a 1.32) e de disponibilidade geral (versões 1.33 e mais recentes). As etapas de GA usam o comando bmctl configure projects para configurar a federação de identidade da carga de trabalho para seus clusters.

1.33 e mais recentes

  1. Adicione a anotação baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" ao arquivo de configuração do cluster:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-USER_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: USER_CLUSTER_NAME
      namespace: cluster-USER_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

    O token de acesso é de curta duração, então geralmente é necessário gerá-lo novamente antes de executar comandos bmctl para operações de cluster, como criar, fazer upgrade ou redefinir um cluster.

  2. Na estação de trabalho do administrador, atualize a variável de ambiente GCP_ACCESS_TOKEN com um token de acesso recém-recuperado:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    Por padrão, o token de acesso tem uma vida útil de 3.600 segundos (1 hora).

  3. Configure a federação de identidade da carga de trabalho para o cluster que você está criando:

    bmctl configure projects --project-id=PROJECT_ID \
        --user-clusters=USER_CLUSTER_NAME
    
  4. Use kubectl para implantar o manifesto do cluster de usuário:

    kubectl apply -f USER_CLUSTER_CONFIG \
        --kubeconfig ADMIN_KUBECONFIG
    

Substitua:

  • USER_CLUSTER_CONFIG: o caminho do arquivo de configuração do cluster de usuário.

  • ADMIN_KUBECONFIG: o caminho do arquivo kubeconfig do cluster de administrador.

1.30-1.32

  1. Na estação de trabalho do administrador, crie e faça o download de uma chave para a conta de serviço admin-sa:

    Essa chave é necessária para autorizar o acesso à conta de serviço admin-sa e você a exclui imediatamente após a autorização da conta de serviço.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
    

    Substitua TMP_KEY_FILE_PATH pelo caminho, incluindo o nome do arquivo de chave salvo.

  2. Autorize o acesso ao Google Cloud com a conta de serviço admin-sa:

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  3. Exclua o arquivo de chave JSON salvo:

    rm TMP_KEY_FILE_PATH
    

    O token de acesso tem vida curta, então geralmente é necessário gerá-lo novamente antes de executar comandos bmctl para operações de cluster, como criar, fazer upgrade ou redefinir um cluster.

  4. Na estação de trabalho do administrador, crie uma variável de ambiente GCP_ACCESS_TOKEN com o valor de um token de acesso criado pela conta de serviço admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
    

    Por padrão, o token de acesso tem uma vida útil de 3.600 segundos (1 hora).

  5. Execute o comando bmctl create cluster para criar o cluster de usuário.

Outras operações de cluster

Para clusters que usam a autenticação de cluster da Identidade da carga de trabalho, os seguintes comandos bmctl exigem que você defina a variável de ambiente GCP_ACCESS_TOKEN como um token de acesso válido e ativo:

  • bmctl configure projects
  • bmctl create cluster
  • bmctl register bootstrap
  • bmctl reset cluster
  • bmctl upgrade cluster

O bmctl register bootstrap é compatível com o uso da variável de ambiente GCP_ACCESS_TOKEN para autenticação de cluster da Identidade da carga de trabalho apenas para o Google Distributed Cloud versão 1.34.0 e mais recentes. Para versões anteriores à 1.34.0, é necessário usar arquivos de chave de conta de serviço para autenticar o bmctl register bootstrap.

Se o bmctl detectar que a variável de ambiente GCP_ACCESS_TOKEN foi configurada, ele vai realizar a validação do token:

  • Se o token for válido, o bmctl vai usá-lo para operações de cluster.

  • Se o token não for válido, recupere um novo:

    O token de acesso é de curta duração, então geralmente é necessário gerá-lo novamente antes de executar comandos bmctl para operações de cluster, como criar, fazer upgrade ou redefinir um cluster. Na estação de trabalho do administrador, atualize a variável de ambiente GCP_ACCESS_TOKEN com um token de acesso recém-recuperado:

    1.33 e mais recentes

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    1.30-1.32

    sh export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)

    Por padrão, o token de acesso tem uma vida útil de 3.600 segundos (1 hora). Quando você usa a autenticação de cluster da Identidade da carga de trabalho, o bmctl verifica o prazo de validade do token. Se a expiração do token estiver dentro de 1.800 segundos (30 minutos), o bmctl vai informar um erro e será encerrado.

Personalização

É possível usar contas de serviço com nomes exclusivos para a autenticação de cluster da Identidade da carga de trabalho, desde que elas tenham vinculações para os papéis necessários.

1.33 e mais recentes

Por padrão, a autenticação de cluster da Identidade da carga de trabalho para clusters da versão 1.33 e posteriores usa apenas a conta de serviço baremetal-gcr. Portanto, essa é a única conta de serviço que pode ser personalizada.

  1. Verifique se a conta de serviço que você quer usar tem os papéis identificados na tabela em Antes de começar.

  2. Anote o arquivo de configuração do cluster para especificar o nome personalizado da conta de serviço de autenticação do cluster da Identidade da carga de trabalho:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

Substitua CUSTOM_AR_GSA pelo nome do e-mail da conta de serviço usada pelo Google Distributed Cloud para baixar imagens de contêiner do Artifact Registry.

1.30-1.32

  1. Verifique se as contas de serviço que você quer usar têm os papéis identificados na tabela em Antes de começar.

  2. Anote o arquivo de configuração do cluster para especificar os nomes personalizados das contas de serviço de autenticação do cluster da Identidade da carga de trabalho:

    A especificação de nomes personalizados permite usar contas de serviço atuais. Verifique se os nomes das conta de serviço personalizadas que você especificar são diferentes entre si. Não é possível usar uma única conta de serviço para substituir duas ou mais contas de serviço padrão.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA"
        baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA"
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.30.0-gke.1930
      ...
    

Substitua:

  • CUSTOM_CONTROLLER_GSA: o nome do e-mail da conta de serviço usada pelo agente do Connect para manter uma conexão entre o cluster e o Google Cloude para registrar os clusters.

  • CUSTOM_CLOUD_OPS_GSA: o nome do e-mail da conta de serviço usada pelo agente do Stackdriver para exportar registros e métricas de clusters para o Cloud Logging e o Cloud Monitoring.

  • CUSTOM_AR_GSA: o nome do e-mail da conta de serviço usada pelo Google Distributed Cloud para fazer o download de imagens de contêiner do Artifact Registry.

Limitações

Os recursos e as funcionalidades a seguir não são compatíveis quando você usa a autenticação de cluster da Identidade da carga de trabalho para o software do Google Distributed Cloud somente para bare metal:

  • Como usar um servidor proxy
  • VPC Service Controls
  • Atualize os clusters atuais do modo com chave para usar a autenticação de cluster da Identidade da carga de trabalho.
  • Gerenciamento do ciclo de vida do cluster usando clientes da API GKE On-Prem, como a Google Cloud CLI, o Terraform ou o console do Google Cloud

A seguir