Configurar o mTLS de back-end usando a identidade gerenciada da carga de trabalho

Neste documento, explicamos como configurar uma identidade de carga de trabalho gerenciada no serviço de back-end de um balanceador de carga. Depois de atribuir uma identidade gerenciada, o balanceador de carga e os back-ends podem se autenticar mutuamente usando o mTLS de back-end.

Para configurar o mTLS de back-end usando uma identidade de carga de trabalho gerenciada, faça o seguinte:

  1. Configure um pool de autoridade certificadora (CA) do Certificate Authority Service para emitir certificados X.509 para identidades de cargas de trabalho gerenciadas.
  2. Configure um domínio de confiança criando um pool de identidade da carga de trabalho com um namespace, uma identidade gerenciada, uma política de comprovação, um recurso de configuração de emissão de certificado inline e um recurso de configuração de confiança inline.1
  3. Vincule a AC ao pool de identidades da carga de trabalho usando a configuração de emissão de certificado inline.
  4. Autorize que identidades das cargas de trabalho gerenciadas solicitem certificados do pool de ACs.
  5. Crie o balanceador de carga e anexe a identidade gerenciada ao serviço de back-end.

1 Você precisa criar uma configuração de confiança inline somente se o balanceador de carga e os back-ends estiverem em domínios de confiança diferentes. Para este exemplo, o balanceador de carga e os back-ends fazem parte do mesmo domínio de confiança. Portanto, a configuração do recurso de configuração de confiança inline é opcional.

Para criar uma identidade gerenciada para os back-ends, consulte Visão geral das identidades de cargas de trabalho gerenciadas.

Antes de começar

  1. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  2. Leia o documento Visão geral do mTLS de back-end com identidades de cargas de trabalho gerenciadas.

  3. Saiba mais sobre a emissão de certificados usando o Certificate Authority Service.

  4. Enable the IAM, Certificate Authority Service, Compute Engine, Certificate Manager, and Network Security APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable iam.googleapis.com privateca.googleapis.com compute.googleapis.com certificatemanager.googleapis.com  networksecurity.googleapis.com

  5. Configure a CLI do Google Cloud para usar o projeto adicionado à lista de permissões para faturamento e cota.

    gcloud config set billing/quota_project PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto que foi adicionado à lista de permissões para a visualização da identidade da carga de trabalho gerenciada.

  6. Crie uma identidade gerenciada para o back-end. Para saber mais, consulte Visão geral das identidades de cargas de trabalho gerenciadas.

Funções exigidas

Para receber as permissões necessárias para criar identidades de cargas de trabalho gerenciadas e provisionar certificados de identidade de carga de trabalho gerenciada, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Configurar o serviço de AC para emitir certificados para identidades de cargas de trabalho gerenciadas

É possível usar pools de CA para configurar uma CA raiz. O pool de ACs emite os certificados X.509 para identidades gerenciadas de carga de trabalho.

Criar o pool de CAs raiz

Crie o pool de CAs raiz no nível Enterprise usando o comando gcloud privateca pools create. Esse nível é destinado à emissão de certificados de longa duração e de baixo volume.

gcloud privateca pools create ROOT_CA_POOL_ID \
    --location=REGION \
    --project=PROJECT_ID \
    --tier=enterprise

Substitua:

  • ROOT_CA_POOL_ID: um ID exclusivo para o pool de ACs raiz

  • REGION: a região em que o pool de ACs raiz está localizado

  • PROJECT_ID: o ID do projeto;

Para saber mais sobre pools de ACs, consulte Criar um pool de ACs.

Crie uma AC raiz:

Crie uma AC raiz no pool de AC raiz usando o comando gcloud privateca roots create.

Para criar uma CA raiz, execute o seguinte comando:

gcloud privateca roots create ROOT_CA_ID \
    --pool=ROOT_CA_POOL_ID \
    --subject="CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \
    [--key-algorithm="KEY_ALGORITHM"] \
    --max-chain-length=1 \
    --location=REGION \
    --project=PROJECT_ID \
    --auto-enable

Substitua:

  • ROOT_CA_ID: um nome exclusivo para a CA raiz. O nome da CA pode ter até 64 caracteres e precisa conter apenas caracteres alfanuméricos minúsculos e maiúsculos, sublinhados ou hifens. O nome da AC precisa ser exclusivo na região.
  • ROOT_CA_POOL_ID: o ID do pool de ACs raiz.
  • ROOT_CA_CN: o nome comum da CA raiz
  • ROOT_CA_ORGANIZATION: a organização da CA raiz.
  • KEY_ALGORITHM: o algoritmo a ser usado para criar uma chave do Cloud KMS. Essa sinalização é opcional. Se você não incluir essa flag, o algoritmo de chave será rsa-pkcs1-4096-sha256 por padrão.
  • REGION: a região em que o pool de ACs raiz está localizado.
  • PROJECT_ID: o ID do projeto;

Para saber mais sobre uma AC raiz, consulte Criar uma AC raiz.

Criar identidades de carga de trabalho gerenciada

Ao usar identidades de carga de trabalho gerenciadas,o Google Cloud pode provisionar e gerenciar automaticamente certificados X.509 do Certificate Authority Service. As identidades de carga de trabalho são definidas em um pool de identidades de carga de trabalho e organizadas em limites administrativos chamados namespaces.

Criar um pool de identidade da carga de trabalho

É preciso criar um pool no modo TRUST_DOMAIN para criar identidades de carga de trabalho gerenciadas. Para criar um pool de identidades de cargas de trabalho para identidades de cargas de trabalho gerenciadas, use o gcloud iam workload-identity-pools create comando.

gcloud iam workload-identity-pools create WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --mode="TRUST_DOMAIN"

Substitua WORKLOAD_IDENTITY_POOL_ID pelo ID exclusivo do pool. O ID precisa ter entre 4 e 32 caracteres, conter apenas caracteres alfanuméricos minúsculos e traços, além de começar e terminar com um caractere alfanumérico. Depois de criar um pool de identidades de cargas de trabalho, não é possível alterar o ID dele.

Para verificar se o pool de identidades de cargas de trabalho foi criado no modo TRUST_DOMAIN, use o gcloud iam workload-identity-pools describecomando .

gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
    --location="global"

O resultado será assim:

mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE

Esta saída inclui os seguintes valores:

  • PROJECT_NUMBER: o número do projetoGoogle Cloud
  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidades da carga de trabalho

Criar um namespace

O comando gcloud iam workload-identity-pools namespaces create permite criar um namespace em um pool de identidades de cargas de trabalho.

gcloud iam workload-identity-pools namespaces create NAMESPACE_ID \
    --workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
    --location="global"

Substitua:

  • NAMESPACE_ID: o ID exclusivo do namespace. O ID precisa ter entre 2 e 63 caracteres, conter apenas caracteres alfanuméricos minúsculos e traços, além de começar e terminar com um caractere alfanumérico. Depois de criar um namespace, não é possível mudar o ID dele.
  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidades da carga de trabalho que você criou anteriormente.

Criar uma identidade de carga de trabalho gerenciada

O comando gloud iam workload-identity-pools managed-identities create permite criar uma identidade de carga de trabalho gerenciada em um namespace de pool de identidades de cargas de trabalho.

gcloud iam workload-identity-pools managed-identities create MANAGED_IDENTITY_ID \
    --namespace="NAMESPACE_ID" \
    --workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
    --location="global"

Substitua:

  • MANAGED_IDENTITY_ID: o ID exclusivo da identidade gerenciada. O ID precisa ter entre 2 e 63 caracteres, conter apenas caracteres alfanuméricos minúsculos e traços, além de começar e terminar com um caractere alfanumérico. Depois de criar uma identidade de carga de trabalho gerenciada, não é possível mudar o ID dela.
  • NAMESPACE_ID: o ID do namespace que você criou anteriormente.
  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidades da carga de trabalho que você criou anteriormente.

O ID da identidade da carga de trabalho gerenciada é o identificador SPIFFE, que é formatado da seguinte maneira:

spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Criar uma política de atestado

Neste exemplo, uma política de atestado contém uma regra que verifica se o serviço de back-end faz parte de um projeto específico. Se a verificação da política de atestado for aprovada, o IAM vai solicitar um certificado X.509 para a identidade gerenciada do serviço de autoridade de certificação.

Para criar uma política de atestado, execute o seguinte comando para adicionar uma regra de atestado.

gcloud iam workload-identity-pools managed-identities add-attestation-rule MANAGED_IDENTITY_ID \
    --namespace=NAMESPACE_ID \
    --workload-identity-pool=WORKLOAD_IDENTITY_POOL_ID \
    --google-cloud-resource='//compute.googleapis.com/projects/PROJECT_NUMBER/type/BackendService/*' \
    --location=global

Substitua:

  • MANAGED_IDENTITY_ID: o ID exclusivo da identidade gerenciada. O ID precisa ter entre 2 e 63 caracteres, conter apenas caracteres alfanuméricos minúsculos e traços, além de começar e terminar com um caractere alfanumérico. Depois de criar uma identidade de carga de trabalho gerenciada, não é possível mudar o ID dela.
  • NAMESPACE_ID: o ID do namespace que você criou anteriormente.
  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de Identidade da carga de trabalho que você criou anteriormente.
  • PROJECT_NUMBER: o número do projeto Google Cloud .

Criar uma configuração de emissão de certificado inline

Para vincular uma AC a um pool de identidades de carga de trabalho, o pool precisa ter uma configuração de emissão de certificado inline.

Para configurar uma configuração de emissão de certificado inline, crie um arquivo de configuração formatado em JSON (cic.json). O formato do arquivo é semelhante ao seguinte:

{
  "inlineCertificateIssuanceConfig": {
      "caPools": {
        "REGION": "projects/PROJECT_NUMBER/locations/REGION/caPools/ROOT_CA_POOL_ID",
      },
      ["lifetime": "CERTIFICATE_LIFETIME"],
      ["rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE],
      ["keyAlgorithm": "ALGORITHM"]
  }
}

Substitua:

  • REGION: a região em que a CA está localizada.

  • PROJECT_NUMBER: o número do projeto. Para receber o número do projeto especificado pela variável PROJECT_ID, execute o seguinte comando:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  • ROOT_CA_POOL_ID: o ID do pool de ACs raiz.

  • CERTIFICATE_LIFETIME: ciclo de vida dos certificados de carga de trabalho emitidos pelo pool de CA em segundos. Por exemplo: 86400s (para 24 horas). CERTIFICATE_LIFETIME precisa ser um valor entre 24 horas e 30 dias. Se CERTIFICATE_LIFETIME não for especificado, a duração padrão do certificado será de 24 horas. CERTIFICATE_LIFETIME é opcional.

  • ROTATION_WINDOW_PERCENTAGE: a porcentagem do ciclo de vida do certificado em que uma renovação é acionada. O valor de ROTATION_WINDOW_PERCENTAGE precisa estar entre 50 e 80. O padrão é 50. ROTATION_WINDOW_PERCENTAGE é opcional.

  • ALGORITHM: o algoritmo de criptografia usado para gerar a chave privada. Os valores válidos para ALGORITHM são ECDSA_P256 (padrão), ECDSA_P384, RSA_2048, RSA_3072 e RSA_4096. ALGORITHM é opcional.

Criar uma configuração de confiança inline

Neste exemplo de configuração, o balanceador de carga e o back-end fazem parte do mesmo domínio de confiança e compartilham o mesmo certificado raiz. Como resultado, a configuração da configuração de confiança inline é opcional. A raiz de confiança comum é usada para criar uma cadeia de confiança e verificar a identidade das cargas de trabalho no domínio de confiança.

Hierarquia de recursos de identidade da carga de trabalho gerenciada.
Hierarquia de recursos de identidade gerenciada da carga de trabalho (clique para ampliar).

Por padrão, as cargas de trabalho no mesmo domínio de confiança podem se autenticar mutuamente usando identidades gerenciadas de carga de trabalho. Se você quiser que cargas de trabalho em domínios de confiança diferentes se autentiquem mutuamente, declare explicitamente a relação de confiança no pool de identidades de carga de trabalho. Para fazer isso, crie uma configuração de confiança inline que reconheça e aceite certificados de outros domínios de confiança.

Para criar uma configuração de confiança inline, faça o seguinte:

  1. Faça o download dos certificados.

    gcloud privateca pools get-ca-certs ROOT_CA_POOL_ID \
        --output-file=CERTIFICATE_PATH \
        --location=REGION
    

    Substitua:

    • ROOT_CA_POOL_ID: o ID do pool de ACs raiz
    • CERTIFICATE_PATH: o caminho para a saída do certificado codificado em PEM
    • REGION: a região do pool de ACs raiz
  2. Crie um arquivo de configuração formatado em JSON (tc.json) que contenha a configuração de confiança inline, com certificados formatados em PEM.

    O arquivo será parecido com este:

    {
      "inlineTrustConfig": {
        "additionalTrustBundles": {
          "TRUST_DOMAIN_NAME1": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----"
              }
            ]
          },
          "TRUST_DOMAIN_NAME2": {
            "trustAnchors": [
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL3\n-----END CERTIFICATE-----"
              },
              {
                  "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL4\n-----END CERTIFICATE-----"
              }
            ]
          }
        }
      }
    }
    

    Substitua:

    • TRUST_DOMAIN_NAME: o domínio de confiança pode ser qualquer domínio de confiança (como "example.com"), incluindo outro (ou até mesmo o mesmo) domínio de confiança do pool de identidades da carga de trabalho.

      Para um domínio de confiança do pool de identidades da carga de trabalho, o nome do domínio de confiança é formatado da seguinte maneira:

      WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog
      

      No formato, substitua o seguinte:

      • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidade da carga de trabalho
      • PROJECT_NUMBER: o número do projeto que contém o pool de Identidade da carga de trabalho
    • CERTIFICATE_MATERIAL: o certificado de CA formatado em PEM confiável para emitir certificados no domínio de confiança. O comando a seguir pode ser usado para codificar um arquivo de certificado no formato PEM em uma string de uma linha:

      cat trust-anchor.pem | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g'
      

Vincular a CA ao pool de identidades da carga de trabalho

Depois de criar a hierarquia de AC e uma configuração de emissão de certificados para a AC, é possível vincular a AC ao pool de identidades da carga de trabalho. Para vincular a AC ao pool de identidades da carga de trabalho, atualize o pool de identidades da carga de trabalho com a configuração de emissão de certificado da AC. Em seguida, você pode verificar se o pool foi atualizado.

Atualizar o pool de identidades da carga de trabalho

Para vincular uma AC ao pool de identidades da carga de trabalho, atualize o pool com a configuração de emissão de certificado da AC. Em seguida, verifique se o pool foi atualizado.

Para atualizar o pool, execute o seguinte comando:

gcloud iam workload-identity-pools update WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --inline-certificate-issuance-config-file=CIC_JSON_FILE_PATH \
    [--inline-trust-config-file=TC_JSON_FILE_PATH] \
    --project=PROJECT_ID

Substitua:

  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidade da carga de trabalho.

  • CIC_JSON_FILE_PATH: o caminho para o arquivo de configuração formatado em JSON (cic.json) da configuração de emissão de certificado inline que você criou anteriormente.

  • TC_JSON_FILE_PATH: o caminho para o arquivo de configuração no formato JSON (tc.json) da configuração de confiança inline que você criou anteriormente. Se as cargas de trabalho forem autenticadas em diferentes domínios de confiança, especifique esse arquivo. Caso contrário, omita --inline-trust-config.

Verificar se o pool de identidades da carga de trabalho foi atualizado

Para verificar se o pool de identidades de cargas de trabalho foi atualizado com a configuração de emissão de certificado e a configuração de confiança, execute o seguinte comando:

gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
    --location="global" \
    --project=PROJECT_ID

Substitua:

  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidade da carga de trabalho.

  • PROJECT_ID: o ID do projeto;

O resultado será assim:

inlineCertificateIssuanceConfig:
    caPools:
      REGION: projects/PROJECT_NUMBER/locations/REGION1/caPools/ROOT_CA_POOL_ID
    keyAlgorithm: ALGORITHM
    lifetime: CERTIFICATE_LIFETIME
    rotationWindowPercentage: ROTATION_WINDOW_PERCENTAGE
inlineTrustConfig:
    additionalTrustBundles:
      TRUST_DOMAIN_NAME1:
          trustAnchors:
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL1
            -----END CERTIFICATE-----
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL2
            -----END CERTIFICATE-----
      TRUST_DOMAIN_NAME2:
          trustAnchors:
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL3
            -----END CERTIFICATE-----
          - pemCertificate: |-
            -----BEGIN CERTIFICATE-----
            CERTIFICATE_MATERIAL4
            -----END CERTIFICATE-----
mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE

Esta saída inclui os seguintes valores:

  • PROJECT_NUMBER: o número do projeto.
  • REGION: a região em que o pool de ACs raiz está localizado
  • ROOT_CA_POOL_ID: o ID do pool de ACs raiz
  • ALGORITHM: o algoritmo de criptografia usado para gerar a chave privada
  • CERTIFICATE_LIFETIME: a vida útil, em segundos, dos certificados de carga de trabalho emitidos pelo pool de CAs.
  • ROTATION_WINDOW_PERCENTAGE: a porcentagem do ciclo de vida do certificado em que uma renovação é acionada.
  • TRUST_DOMAIN_NAME: o domínio de confiança pode ser qualquer domínio de confiança (como "example.com"), incluindo outro (ou até mesmo o mesmo) domínio de confiança do pool de identidades da carga de trabalho.
  • CERTIFICATE_MATERIAL: o certificado de CA formatado em PEM confiável para emitir certificados no domínio de confiança.
  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidades da carga de trabalho

Se inlineCertificateIssuanceConfig ou inlineTrustConfig não estiverem presentes na saída, verifique se você configurou corretamente a gcloud CLI para usar o projeto certo para faturamento e cota. Talvez seja necessário atualizar para uma versão mais recente da CLI gcloud.

Autorizar que identidades das cargas de trabalho gerenciadas solicitem certificados do pool de ACs

Depois de vincular a AC ao pool de identidades da carga de trabalho, você precisa autorizar as identidades de carga de trabalho gerenciadas a solicitar certificados do pool de AC.

  1. Conceda o papel de requerente de certificado da carga de trabalho do serviço de CA (roles/privateca.workloadCertificateRequester) ao domínio de confiança. Essa função autoriza o domínio de confiança a solicitar certificados das cadeias de certificados do CA Service.

    gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.workloadCertificateRequester \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \
        --project=PROJECT_ID
    

    Substitua:

    • ROOT_CA_POOL_ID: o ID do pool de ACs raiz
    • REGION: a região do pool de ACs raiz
    • PROJECT_NUMBER: o número do projeto.

      Para receber PROJECT_NUMBER de PROJECT_ID, execute o seguinte comando:

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
      
    • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidade da carga de trabalho

    • PROJECT_ID: o ID do projeto;

  2. Conceda o papel de leitor do pool de serviços de CA (roles/privateca.poolReader) ao domínio de confiança. Essa função autoriza o domínio de confiança a receber os certificados X.509 assinados das cadeias de certificados da AC.

    gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \
        --location=REGION \
        --role=roles/privateca.poolReader \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \
        --project=PROJECT_ID
    

    Substitua:

    • ROOT_CA_POOL_ID: o ID do pool de ACs raiz
    • REGION: a região do pool de ACs raiz
    • PROJECT_NUMBER: o número do projeto.
    • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidade da carga de trabalho
    • PROJECT_ID: o ID do projeto;

Crie o balanceador de carga e atribua a identidade gerenciada ao serviço de back-end.

A identidade gerenciada só pode ser atribuída ao criar o serviço de back-end.

As etapas nesta seção se referem apenas à atribuição de uma identidade gerenciada ao serviço de back-end do balanceador de carga. Isso faz parte da configuração de back-end do balanceador de carga.

Para configurar um balanceador de carga de aplicativo externo global, siga as etapas em Configurar um balanceador de carga de aplicativo externo global com back-ends de grupos de instâncias de VM. Na etapa em que você está configurando o serviço de back-end do balanceador de carga, faça o seguinte:

Console

  1. No console do Google Cloud , acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Na seção Configuração de back-end, adicione os detalhes relevantes para criar um serviço de back-end.

  3. Expanda a seção Configurações avançadas.

  4. Na seção Autenticação de back-end, selecione a opção Identidade gerenciada.

  5. Para atribuir uma identidade gerenciada ao serviço de back-end, no campo Identidade gerenciada, insira a identidade gerenciada da carga de trabalho que você criou antes.

  6. Clique em Criar.

  7. Siga as etapas descritas em Configurar o balanceador de carga para concluir a configuração.

gcloud

  1. Para atribuir uma identidade gerenciada ao serviço de back-end, adicione a flag --identity ao usar o comando gcloud beta compute backend-services create.

    gcloud beta compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTPS \
        --health-checks=HEALTH_CHECK_NAME \
        --identity='//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID' \
        --global
    

    Substitua:

    • BACKEND_SERVICE_NAME: o nome do serviço de back-end.
    • HEALTH_CHECK_NAME: o nome da verificação de integridade.
    • WORKLOAD_IDENTITY_POOL_ID: ID do pool de identidades da carga de trabalho
    • PROJECT_NUMBER: o número do projeto.
    • NAMESPACE_ID: o ID do namespace
    • MANAGED_IDENTITY_ID: o ID da identidade gerenciada

Recursos criados automaticamente

Depois que uma identidade gerenciada é configurada no serviço de back-end do balanceador de carga, os seguintes recursos são criados automaticamente pela identidade gerenciada da carga de trabalho:

  • Configuração de autenticação de back-end: anexada ao serviço de back-end do balanceador de carga
  • Certificado de identidade gerenciada do Gerenciador de certificados: anexado à configuração de autenticação de back-end
  • Configuração de confiança do Gerenciador de certificados: anexada à configuração de autenticação de back-end

As seções a seguir estão relacionadas à verificação da configuração para conferir se os recursos criados automaticamente foram configurados.

Verificar a configuração

Verifique sua configuração para saber se os recursos criados automaticamente foram configurados.

Os recursos criados automaticamente têm um prefixo mi, o que indica que o recurso foi criado pela identidade de carga de trabalho gerenciada.

Verificar a criação da configuração de autenticação de back-end e da identidade gerenciada

Para verificar a criação da configuração de autenticação de back-end e da identidade gerenciada, use o comando gcloud beta compute backend-services describe para descrever o serviço de back-end.

gcloud beta compute backend-services describe BACKEND_SERVICE_NAME --global

O resultado será assim:

affinityCookieTtlSec: 0
connectionDraining:
  drainingTimeoutSec: 0
creationTimestamp: '2025-11-06T02:15:43.680-08:00'
description: ''
enableCDN: false
fingerprint: lTZwas8aylg=
healthChecks:
- https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/healthChecks/HEALTH_CHECK_NAME
id: '719352032'
kind: compute#backendService
loadBalancingScheme: EXTERNAL_MANAGED
name: BACKEND_SERVICE_NAME
port: 80
portName: PORT_NAME
protocol: HTTPS
selfLink: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
sessionAffinity: NONE
timeoutSec: 30
tlsSettings:
  authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/mi-bac-423b651f-d549-4a9f-a4f2-g2bcaa7108bd
  identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Esta saída inclui os seguintes valores:

  • PROJECT_ID: o ID do projeto;
  • HEALTH_CHECK_NAME: o nome da verificação de integridade.
  • BACKEND_SERVICE_NAME: o nome do serviço de back-end
  • PORT_NAME: o nome da porta
  • REGION: a região em que o pool de ACs raiz está localizado
  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidades da carga de trabalho
  • PROJECT_NUMBER: o número do projeto.
  • NAMESPACE_ID: o ID do namespace
  • MANAGED_IDENTITY_ID: o ID da identidade gerenciada

A configuração de autenticação de back-end é criada automaticamente e anexada ao campo backendService.tlsSettings.authenticationConfig. A configuração de autenticação de back-end que começa com o prefixo mi é chamada de MI_BACKEND_AUTHENTICATION_CONFIG_ID na seção a seguir.

A identidade da carga de trabalho gerenciada também está anexada ao campo backendService.tlsSettings.identity. Ele tem o seguinte formato:

//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Verificar a criação do certificado de identidade gerenciada do Certificate Manager e a configuração de confiança do Certificate Manager

Para verificar se o certificado de identidade gerenciada do Certificate Manager e a configuração de confiança do Certificate Manager estão anexados ao recurso de configuração de autenticação de back-end, use o comando gcloud network-security backend-authentication-configs describe.

gcloud network-security backend-authentication-configs describe MI_BACKEND_AUTHENTICATION_CONFIG_ID \
    --location=global

O resultado será assim:

clientCertificate: projects/PROJECT_NUMBER/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d
createTime: '2025-11-06T10:15:56.237734973Z'
etag: xwyxl1VYVoh4QIwf3nhKhAVXgcuOqoN7xdqAiS8Esvs
name: projects//locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd
trustConfig: projects/PROJECT_NUMBER/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
updateTime: '2025-11-06T10:16:01.964275141Z'

O clientCertificate e o trustConfig são criados automaticamente pela identidade da carga de trabalho gerenciada e anexados ao recurso de configuração de autenticação de back-end.

O clientCertificate que começa com o prefixo mi é chamado de MI_CLIENT_CERTIFICATE_ID na seção a seguir.

O trustConfig que começa com o prefixo mi é chamado de MI_TRUST_CONFIG_ID na seção a seguir.

Verificar se o certificado do Certificate Manager é um certificado de identidade gerenciada

Para conferir os detalhes do certificado de identidade gerenciada do Gerenciador de certificados, use o comando gcloud certificate-manager certificates describe.

gcloud certificate-manager certificates describe MI_CLIENT_CERTIFICATE_ID

O resultado será assim:

createTime: '2025-11-06T10:15:46.187892797Z'
expireTime: '2025-11-07T22:55:47Z'
extendedKeyUsage:
  clientAuth: true
managedIdentity:
  identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
  state: ACTIVE
name: projects/PROJECT_ID/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d
pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----
scope: CLIENT_AUTH
updateTime: '2025-11-06T10:15:49.427339950Z'
usedBy:
- name: //networksecurity.googleapis.com/projects/PROJECT_NUMBER/locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd

Esta saída inclui os seguintes valores:

  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidades da carga de trabalho
  • PROJECT_NUMBER: o número do projeto.
  • NAMESPACE_ID: o ID do namespace
  • MANAGED_IDENTITY_ID: o ID da identidade gerenciada
  • CERTIFICATE_MATERIAL: o X.509-SVID em um formato codificado em PEM.

O certificado de identidade gerenciada do Certificate Manager tem uma propriedade managedIdentity, que o identifica como um certificado de identidade gerenciada. O recurso de certificado da identidade gerenciada do Certificate Manager armazena o X.509-SVID em um formato codificado em PEM.

O escopo do certificado de identidade gerenciada do Certificate Manager é CLIENT_AUTH, o que indica que ele é usado como um certificado de cliente no mTLS de back-end.

Verifique se o ID do SPIFFE faz parte do SAN no X.509-SVID.

O SVID X.509 contém o ID do SPIFFE codificado como um URI no campo SAN. Esse ID SPIFFE corresponde à identidade gerenciada no pool de identidades da carga de trabalho.

Para imprimir um formato legível do certificado, execute o seguinte comando:

openssl x509 -text -noout \
<<< "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----"

A saída será semelhante a esta (abreviada):

Certificate:
    Data:
        Version: 3 (0x2)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: O = example.com, CN = Example CA
        Validity
            Not Before: Nov  6 10:15:48 2025 GMT
            Not After : Nov  7 10:15:47 2025 GMT
        Subject:
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
        X509v3 extensions:
            X509v3 Subject Alternative Name: critical
                URI:spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

Esta saída inclui os seguintes valores:

  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidades da carga de trabalho
  • PROJECT_NUMBER: o número do projeto.
  • NAMESPACE_ID: o ID do namespace
  • MANAGED_IDENTITY_ID: o ID da identidade gerenciada

Verifique se a configuração de confiança do Certificate Manager contém o campo spiffeTrustStore.

A configuração de confiança do Gerenciador de certificados contém um campo chamado spiffeTrustStores. O campo spiffeTrustStores contém o pacote de confiança associado ao domínio de confiança do pool de identidade da carga de trabalho (representado por WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog na saída) e outros pacotes de confiança especificados pelo campo additionalTrustBundles na configuração de confiança inline do pool de identidade da carga de trabalho.

Para conferir os detalhes da configuração de confiança do Gerenciador de certificados, use o comando gcloud certificate-manager trust-configs describe.

gcloud certificate-manager certificates describe MI_TRUST_CONFIG_ID

Substitua MI_TRUST_CONFIG_ID pela configuração de confiança criada automaticamente pela identidade gerenciada.

No exemplo de saída a seguir, o host example.com é o domínio de confiança adicional a que a confiança é estendida.

createTime: '2025-11-06T10:15:50.048030758Z'
etag: kDoKfm5W6Il2HPvduKZWpuYpyrKrNVq4jqMEICE-6rQ
name: projects/PROJECT_ID/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
spiffeTrustStores:
  example.com:
    trustAnchors:
    - pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----
  WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog:
    trustAnchors:
    - pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----
updateTime: '2025-11-07T08:25:15.760754841Z'

Esta saída inclui os seguintes valores:

  • PROJECT_ID: o ID do projeto;
  • CERTIFICATE_MATERIAL: o certificado de CA formatado em PEM confiável para emitir certificados no domínio de confiança.
  • WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidades da carga de trabalho
  • PROJECT_NUMBER: o número do projeto.
  • MANAGED_IDENTITY_ID: o ID da identidade gerenciada

Para saber mais sobre a configuração de confiança do Gerenciador de certificados, consulte Configuração de confiança do Gerenciador de certificados.

A seguir