Autenticação de cluster do Workload Identity

Este documento descreve como configurar e usar a autenticação de cluster de identidade de carga de trabalho para o Google Distributed Cloud (apenas software) em bare metal. Em vez de chaves de contas de serviço, a autenticação de clusters de identidade da carga de trabalho usa tokens de curta duração e a federação de identidades da carga de trabalho para criar e proteger os seus clusters. As credenciais de curta duração para a conta de serviço estão no formato de chaves de acesso OAuth 2.0. As chaves de acesso expiram após 1 hora por predefinição. Da mesma forma, os tokens de obtenção de imagens também expiram após 1 hora por predefinição.

Por outro lado, o modo com chave, o método padrão para criar e proteger clusters, usa chaves de contas de serviço transferidas. Quando cria um cluster autogerido (administrador, híbrido ou autónomo), especifica o caminho para as chaves transferidas. As chaves são, em seguida, armazenadas como segredos no cluster e em quaisquer clusters de utilizadores geridos. Por predefinição, as chaves de contas de serviço não expiram e representam um risco de segurança se não forem geridas corretamente. Para ver informações sobre a definição de um prazo de validade para as chaves de conta de serviço, consulte o artigo Prazos de validade das chaves geridas pelo utilizador.

A autenticação de cluster do Workload Identity oferece duas vantagens principais em relação à utilização de chaves de contas de serviço:

  • Segurança melhorada: as chaves de contas de serviço representam um risco de segurança se não forem geridas corretamente. Os tokens OAuth 2.0 e a federação de identidades da carga de trabalho são considerados alternativas de práticas recomendadas às chaves de contas de serviço. Para mais informações sobre tokens de contas de serviço, consulte o artigo Credenciais de contas de serviço de curta duração. Para mais informações sobre a federação de identidades da carga de trabalho, consulte o artigo Federação de identidades da carga de trabalho.

  • Manutenção reduzida: as chaves de contas de serviço requerem mais manutenção. Alternar e proteger regularmente estas chaves pode ser um encargo administrativo significativo.

A autenticação de cluster de identidade de carga de trabalho foi introduzida para pré-visualização com o lançamento 1.30 e está em GA para o lançamento 1.33 e superior. A autenticação de cluster do Workload Identity só pode ser ativada quando cria novos clusters. Não pode configurar um cluster existente para usar a autenticação de cluster de identidade de carga de trabalho durante uma atualização ou uma atualização principal. Para ver restrições adicionais, consulte a secção Limitações.

Esta página destina-se a administradores, arquitetos e operadores que configuram, monitorizam e gerem o ciclo de vida da infraestrutura tecnológica subjacente. Para saber mais sobre as funções comuns e as tarefas de exemplo que referimos no Google Cloud conteúdo, consulte o artigo Funções de utilizador e tarefas comuns do GKE.

Antes de começar

Nas secções seguintes, cria contas de serviço e concede as funções necessárias para a autenticação de clusters de identidade da carga de trabalho. As instruções de configuração neste documento não substituem as instruções em Configurar Google Cloud recursos. São necessárias além dos pré-requisitos de instalação apenas de software padrão do Google Distributed Cloud. As contas de serviço necessárias para a autenticação de cluster de identidade de carga de trabalho são semelhantes às contas de serviço descritas em Configurar Google Cloud recursos, mas têm nomes únicos, pelo que não interferem com os clusters que usam as chaves da conta de serviço predefinidas.

As contas de serviço necessárias para a autenticação de clusters de identidade de carga de trabalho diferem para as ofertas de pré-visualização e DG, conforme descrito na tabela seguinte:

1.33 e posterior

Conta de serviço Finalidade Funções
admin-sa Use esta conta de serviço para gerar tokens. Cada token tem os privilégios associados às funções da conta de serviço. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
roles/resourcemanager.projectIamAdmin
baremetal-gcr O Google Distributed Cloud usa esta conta de serviço para transferir imagens de contentores do Artifact Registry. Nenhum

1,30-1,32

Conta de serviço Finalidade Funções
admin-sa Use esta conta de serviço para gerar tokens. Cada token tem os privilégios associados às funções da conta de serviço. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
baremetal-controller O Connect Agent usa esta conta de serviço para manter uma ligação entre o seu cluster e Google Cloud e para registar os seus clusters com uma frota. Esta conta de serviço também atualiza os tokens da conta de serviço baremetal-gcr. roles/gkehub.admin
roles/monitoring.dashboardEditor
roles/serviceusage.serviceUsageViewer
baremetal-cloud-ops O agente do Stackdriver usa esta conta de serviço para exportar registos 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 esta conta de serviço para transferir imagens de contentores do Artifact Registry. Nenhum

Configure contas de serviço

As secções seguintes contêm instruções para criar as contas de serviço necessárias e conceder-lhes as funções necessárias para a autenticação de clusters de identidade de carga de trabalho. Para ver uma lista das contas de serviço e das respetivas funções necessárias, consulte a tabela na secção anterior.

Crie contas de serviço

Para criar as contas de serviço para a autenticação de cluster de identidade da carga de trabalho, siga estes passos:

  1. Na estação de trabalho de administração, inicie sessão na CLI Google Cloud:

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

    O nome da conta de serviço admin-sa é arbitrário. Pode alterar o nome se causar um conflito no seu projeto. As outras contas de serviço para a autenticação de cluster de identidade de carga de trabalho têm nomes predeterminados que podem ser personalizados, se quiser.

    1.33 e posterior

    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 projetoGoogle Cloud .

    1,30-1,32

    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 projetoGoogle Cloud .

Adicione associações de políticas de gestão de identidade e de acesso para contas de serviço

Siga estes passos para aplicar as associações de políticas de gestão de identidade e de acesso necessárias às novas contas de serviço:

1.33 e posterior

  1. Adicione associações de políticas IAM para as funções necessárias para a admin-sa conta de serviço:

    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 associações de políticas IAM para as funções necessárias para a admin-sa conta de serviço:

    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 associações de políticas IAM para as funções necessárias para a baremetal-controller conta de serviço:

    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 associações de políticas IAM para as funções necessárias para a baremetal-cloud-ops conta de serviço:

    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 chaves 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
    

Configure a autenticação

Os passos seguintes 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 de administração, inicie sessão na CLI Google Cloud:

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

    Esta 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 ficheiro, do ficheiro de chave transferido.

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

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

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

    Por predefinição, o token de acesso tem uma duração de 1 hora.

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

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

    A resposta deve incluir linhas semelhantes às seguintes:

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

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

Configure a federação de identidades de cargas de trabalho para os seus clusters

Para conceder Google Cloud acesso com a federação de identidade da força de trabalho para o GKE, cria uma política de autorização do IAM que concede acesso a um Google Cloud recurso específico a um principal que corresponde à identidade da sua aplicação. Neste caso, a Workload Identity Federation concede acesso a operadores específicos no cluster. Para mais informações sobre a federação de identidade da carga de trabalho para o GKE, consulte o artigo Federação de identidade da carga de trabalho na documentação do IAM.

1.33 e posterior

Para versões de clusters em que a autenticação de clusters do Workload Identity está em disponibilidade geral, usa o comando bmctl configure projects para configurar a federação de identidade da força de trabalho para os seus clusters. Este comando está incorporado nos passos para criar um cluster de administrador e criar um cluster de utilizador.

1,30-1,32

Para versões de clusters em que a autenticação de clusters do Workload Identity está em pré-visualização, tem de configurar manualmente a Workload Identity Federation para os seus clusters, conforme descrito nas secções seguintes.

Adicione vinculações de políticas IAM para o operador do cluster

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

  1. Para cada cluster configurado para a autenticação de cluster do Workload Identity (ou planeado para usar a autenticação de cluster do Workload Identity), incluindo o cluster de arranque, conceda anthos-cluster-operator no cluster a capacidade de se fazer passar pela conta de serviço baremetal-controller:

    No comando seguinte, o principalSet consiste no Workload Identity Pool e numa conta de serviço do Kubernetes, anthos-cluster-operator, no espaço de nomes 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 o seguinte:

  2. Valide as associações de políticas da conta de serviço baremetal-controller:

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

    A resposta deve ser semelhante à seguinte:

    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
    

Adicione associações de políticas IAM para os operadores do Google Cloud Observability

Os seguintes comandos concedem às contas de serviço do Kubernetes do Google Cloud Observability a capacidade de usar a identidade da baremetal-cloud-opsconta de serviço Google Cloud e interagir com recursos 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 de identidade de carga de trabalho (ou planeado para usar a autenticação de cluster de identidade de carga de trabalho), incluindo o cluster de arranque, conceda aos operadores do Google Cloud Observability no cluster a capacidade de se fazerem passar pela conta de serviço baremetal-cloud-ops:

    Em cada um dos seguintes comandos, o principalSet consiste no Workload Identity Pool e numa conta de serviço do Kubernetes, como cloud-audit-logging, no espaço de nomes 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. Valide as associações de políticas da conta de serviço baremetal-cloud-ops:

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

    A resposta deve ser semelhante à seguinte:

    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
    

Crie um cluster de administrador

Os passos para criar um cluster de administrador diferem ligeiramente para as ofertas de pré-visualização (versões 1.30 a 1.32) e GA (versões 1.33 e superiores). Os passos do GA usam o comando bmctl configure projects para configurar a Workload Identity Federation para os seus clusters.

1.33 e posterior

A diferença de configuração de cluster mais óbvia para clusters que usam a autenticação de cluster de identidade de carga de trabalho é que não especifica caminhos para chaves de conta de serviço transferidas.

  1. Quando preencher as definições do cluster no ficheiro de configuração, deixe os caminhos das chaves da conta de serviço em branco na secção de credenciais, conforme mostrado no exemplo seguinte:

    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 ficheiro 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 uma chave de acesso recentemente obtida:

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

    Por predefinição, a chave de acesso tem uma duração de 3600 segundos (1 hora). Quando usa a autenticação de cluster de identidade de carga de trabalho, o bmctl verifica a hora de expiração do token. Se a expiração do token estiver dentro de 1800 segundos (30 minutos), bmctl comunica um erro e sai.

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

    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 de configuração de cluster mais óbvia para clusters que usam a autenticação de cluster de identidade de carga de trabalho é que não especifica caminhos para chaves de conta de serviço transferidas.

  1. Quando preencher as definições do cluster no ficheiro de configuração, deixe os caminhos das chaves da conta de serviço em branco na secção de credenciais, conforme mostrado no exemplo seguinte:

    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 transfira uma chave para a conta de serviço:admin-sa

    Esta chave é necessária para autorizar o acesso da conta de serviço admin-sa e deve eliminá-la 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 ficheiro, do ficheiro de chave transferido.

  3. Autorize o acesso a 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. Elimine o ficheiro de chave JSON transferido:

    rm TMP_KEY_FILE_PATH
    

    O token de acesso tem uma duração curta, pelo que normalmente tem de o regenerar antes de executar comandos bmctl para operações de cluster, como criar, atualizar ou repor um cluster.

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

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

    Por predefinição, a chave de acesso tem uma duração de 3600 segundos (1 hora).

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

Crie um cluster de utilizadores

Os passos para criar um cluster de administrador diferem ligeiramente para as ofertas de pré-visualização (versões 1.30 a 1.32) e GA (versões 1.33 e superiores). Os passos do GA usam o comando bmctl configure projects para configurar a Workload Identity Federation para os seus clusters.

1.33 e posterior

  1. Adicione a anotação baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" ao ficheiro 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 tem uma duração curta, pelo que normalmente tem de o regenerar antes de executar comandos bmctl para operações de cluster, como criar, atualizar ou repor um cluster.

  2. Na estação de trabalho do administrador, atualize a variável de ambiente GCP_ACCESS_TOKEN com uma chave de acesso recentemente obtida:

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

    Por predefinição, a chave de acesso tem uma duração de 3600 segundos (1 hora).

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

    bmctl configure projects --project-id=PROJECT_ID \
        --user-clusters=USER_CLUSTER_NAME
    
  4. Use kubectl para implementar o manifesto do cluster de utilizadores:

    kubectl apply -f USER_CLUSTER_CONFIG \
        --kubeconfig ADMIN_KUBECONFIG
    

Substitua o seguinte:

  • USER_CLUSTER_CONFIG: o caminho do ficheiro de configuração do cluster de utilizadores.

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

1,30-1,32

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

    Esta chave é necessária para autorizar o acesso da conta de serviço admin-sa e deve eliminá-la 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 ficheiro, do ficheiro de chave transferido.

  2. Autorize o acesso a 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. Elimine o ficheiro de chave JSON transferido:

    rm TMP_KEY_FILE_PATH
    

    O token de acesso tem uma duração curta, pelo que normalmente tem de o regenerar antes de executar comandos bmctl para operações de cluster, como criar, atualizar ou repor um cluster.

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

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

    Por predefinição, a chave de acesso tem uma duração de 3600 segundos (1 hora).

  5. Execute o comando bmctl create cluster para criar o cluster de utilizadores.

Outras operações de cluster

Para clusters que usam a autenticação de cluster de identidade de carga de trabalho, os seguintes comandos bmctl requerem que a variável de ambiente GCP_ACCESS_TOKEN seja definida como um token de acesso válido e ativo:

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

Se bmctl detetar que a variável de ambiente GCP_ACCESS_TOKEN foi definida, executa a validação do token:

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

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

    O token de acesso tem uma duração curta, pelo que normalmente tem de o regenerar antes de executar comandos bmctl para operações de cluster, como criar, atualizar ou repor um cluster. Na estação de trabalho do administrador, atualize a variável de ambiente GCP_ACCESS_TOKEN com um token de acesso recuperado recentemente:

    1.33 e posterior

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

    1,30-1,32

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

    Por predefinição, a chave de acesso tem uma duração de 3600 segundos (1 hora). Quando usa a autenticação de cluster de identidade de carga de trabalho, o bmctl verifica a hora de expiração do token. Se a expiração do token estiver dentro de 1800 segundos (30 minutos), bmctl comunica um erro e sai.

Personalização

Pode usar contas de serviço com nomes únicos para a autenticação de clusters de identidade de carga de trabalho, desde que tenham associações para as funções necessárias.

1.33 e posterior

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

  1. Certifique-se de que a conta de serviço que quer usar tem as funções identificadas na tabela em Antes de começar.

  2. Anote o ficheiro de configuração do cluster para especificar o nome personalizado da conta de serviço de autenticação do cluster de 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 email da conta de serviço usada pelo Google Distributed Cloud para transferir imagens de contentores do Artifact Registry.

1,30-1,32

  1. Certifique-se de que as contas de serviço que quer usar têm as funções identificadas na tabela em Antes de começar.

  2. Anote o ficheiro de configuração do cluster para especificar os nomes personalizados das contas de serviço do serviço de autenticação de cluster do Workload Identity:

    A especificação de nomes personalizados permite-lhe usar contas de serviço existentes. Certifique-se de que os nomes das contas de serviço personalizadas que especificar são distintos entre si. Não suportamos a utilização de uma única conta de serviço para substituir duas ou mais das contas de serviço predefinidas.

    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 o seguinte:

  • CUSTOM_CONTROLLER_GSA: o nome do email da conta de serviço usada pelo agente Connect para manter uma ligação entre o seu cluster e o Google Cloud, e para registar os seus clusters.

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

  • CUSTOM_AR_GSA: o nome do email da conta de serviço usada pelo Google Distributed Cloud para transferir imagens de contentores do Artifact Registry.

Limitações

As seguintes funcionalidades e capacidades não são suportadas quando usa a autenticação de cluster de identidade de carga de trabalho para o Google Distributed Cloud (apenas software) em hardware simples:

  • Usar um servidor proxy
  • VPC Service Controls
  • Atualize os clusters do modo com chave existentes para usar a autenticação de cluster do Workload Identity
  • Gestão do ciclo de vida do cluster através de clientes da API GKE On-Prem, como a Google Cloud CLI, o Terraform ou a Google Cloud consola

O que se segue?