Resolver problemas de autenticação entre cargas de trabalho


Neste documento, explicamos como solucionar erros comuns relacionados à autenticação de cargas de trabalho com outras cargas de trabalho por mTLS.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.
    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

O diretório de credenciais geradas não existe

Se você receber um erro informando que o diretório /var/run/secrets/workload-spiffe-credentials não existe, faça isto:

  1. Verifique se a VM é compatível com a autenticação entre cargas de trabalho executando o seguinte comando dentro da VM.

    curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    
    1. Se a resposta for o código do erro HTTP 404 com a mensagem a seguir, a VM não é compatível com esse recurso.

      The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status
      was not found on this server.  That's all we know.
      

      Para resolver esse problema, crie uma nova VM compatível com autenticação entre cargas de trabalho usando um dos seguintes métodos:

    2. Se a resposta for o código do erro HTTP 404 com a mensagem workload certificate feature not enabled, a VM é compatível com identidades das cargas de trabalho gerenciadas, mas o recurso não está ativado. Para ativar o recurso na VM, consulte Ativar identidades das cargas de trabalho gerenciadas em VMs que já existem.

  2. Verifique se a VM está executando um SO convidado com o agente convidado do Compute Engine versão 20231103.01 ou mais recente. Use a gcloud CLI para visualizar a saída da porta serial e determinar a versão atual do agente convidado do Compute Engine:

    gcloud compute instances get-serial-port-output VM_NAME | grep "GCE Agent Started"
    

    Substitua VM_NAME pelo nome da VM.

    Para atualizar o agente convidado do Compute Engine, consulte Como atualizar o ambiente convidado.

  3. Verifique os registros de serviço para conferir se o gce-workload-cert-refresh.timer conseguiu buscar as credenciais das cargas de trabalho e o pacote de confiança.

    # View timer logs to see when the gce-workload-cert-refresh.timer last ran
    journalctl -u gce-workload-cert-refresh.timer
    
    # View service logs from gce-workload-cert-refresh.service
    journalctl -u gce-workload-cert-refresh.service
    

O diretório de credenciais geradas contém apenas o arquivo config_status

O diretório de credenciais geradas, /var/run/secrets/workload-spiffe-credentials, pode conter apenas o config_status por vários motivos. Use as etapas a seguir para resolver esse problema.

  1. Verifique o conteúdo do arquivo config_status para confirmar se o recurso de identidades das cargas de trabalho gerenciadas está ativado. Se o recurso não estiver ativado com os metadados de VM apropriados, o arquivo de registros conterá a mensagem de erro workload certificate feature not enabled.

    Para resolver esse problema, crie uma nova VM compatível com a autenticação entre cargas de trabalho usando um dos seguintes métodos:

  2. Verifique o conteúdo do arquivo config_status para confirmar se não há erros devido a valores de atributo ausentes ou configurações inválidas para a emissão de certificados ou a configuração de confiança. Se houver esses erros, atualize os valores de configuração conforme as etapas em Atualizar a emissão de certificados e a configuração de confiança.

  3. Verifique se as permissões corretas foram concedidas às identidades das cargas de trabalho gerenciadas no pool de Identidade da carga de trabalho para acessar os pools de AC subordinada. Use o comando a seguir:

    gcloud privateca pools get-iam-policy SUBORDINATE_CA_POOL_ID \
       --location=SUBORDINATE_CA_POOL_REGION \
    

    Substitua:

    • SUBORDINATE_CA_POOL_ID: o ID do pool de AC subordinada.
    • SUBORDINATE_CA_POOL_REGION: a região do pool de AC subordinada.

    A saída desse comando terá o seguinte conteúdo:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      -
      role: roles/privateca.poolReader
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      role: roles/privateca.workloadCertificateRequester
    

    No exemplo anterior, ocorre o seguinte:

    • PROJECT_NUMBER é o número do projeto.
    • POOL_ID é o ID do pool de Identidade da carga de trabalho.

    Se a saída não for semelhante ao exemplo anterior, conceda as permissões necessárias conforme descrito em Autorizar identidades das cargas de trabalho gerenciadas para solicitar certificados do pool de AC.

  4. Se o arquivo config_status não contiver mensagens de erro, verifique o valor de iam.googleapis.com/workload-identity dentro do arquivo. O valor precisa ter a seguinte correspondência:

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

    No exemplo anterior, ocorre o seguinte:

    • PROJECT_NUMBER é o número do projeto que contém o pool de Identidade da carga de trabalho gerenciada.
    • POOL_ID é o ID do pool de Identidade da carga de trabalho.
    • NAMESPACE_ID é o ID do namespace no pool de Identidade da carga de trabalho.
    • MANAGED_IDENTITY_ID é o ID da identidade da carga de trabalho gerenciada.

    Se o valor de iam.googleapis.com/workload-identity estiver incorreto, será necessário criar uma nova VM com o valor correto, porque o valor da identidade gerenciada só pode ser atualizado durante a criação da VM.

  5. Se o arquivo config_status não contiver mensagens de erro, verifique se a configuração de confiança contém uma entrada válida para o domínio de confiança SPIFFE POOL_ID.global.PROJECT_NUMBER.workload.id.goog, que corresponde ao domínio de confiança SPIFFE na identidade gerenciada atribuída à VM. Para mais informações, consulte Definir a configuração de confiança.

  6. Se o arquivo config_status contiver mensagens de erro com o código INTERNAL_ERROR, fale com o Cloud Customer Care ou seu contato do Google Cloud informando a mensagem de erro.

Consultar endpoints do servidor de metadados retorna um erro 404

Se você receber uma resposta 404 ao consultar o endpoint workload-identities ou trust-anchors, verifique se a VM é compatível com as identidades das cargas de trabalho gerenciadas executando o seguinte comando dentro da VM:

curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
  • Se a resposta for o código do erro HTTP 404 com a seguinte mensagem de erro:

      The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status
      was not found on this server.  That's all we know.
    

    A VM não é compatível com as identidades das cargas de trabalho gerenciadas. Para resolver esse problema, realize uma destas ações:

  • Se a resposta for o código do erro HTTP 404 com a mensagem workload certificate feature not enabled, a VM é compatível com as identidades das cargas de trabalho gerenciadas, mas o recurso não está ativado. Crie uma nova VM com o recurso ativado ou crie um novo modelo de instância e um grupo gerenciado de instâncias.

  • Verifique se as permissões corretas foram concedidas ao pool de Identidade da carga de trabalho para acessar os pools de AC subordinada. Para isso, execute o seguinte comando:

    gcloud privateca pools get-iam-policy SUBORDINATE_CA_POOL_ID \
      --location=SUBORDINATE_CA_POOL_REGION
    

    Substitua:

    • SUBORDINATE_CA_POOL_ID: o ID do pool de AC subordinada.
    • SUBORDINATE_CA_POOL_REGION: a região do pool de AC subordinada.

    A saída desse comando terá o conteúdo a seguir, em que PROJECT_NUMBER é o número do projeto e POOL_ID é o ID do pool de Identidade da carga de trabalho.

    bindings:
    - members:
    - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
    - role: roles/privateca.poolReader
    - members:
    - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
    - role: roles/privateca.workloadCertificateRequester
    

    Se a saída não contiver esses valores, conceda as permissões corretas conforme descrito em Autorizar identidades das cargas de trabalho gerenciadas ao solicitar certificados do pool de AC.

  • Verifique se o valor iam.googleapis.com/workload-identity está correto e tem a seguinte correspondência:

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

    Se o valor não corresponder, crie uma nova VM, porque o valor da identidade gerenciada não pode ser atualizado após a criação da VM.

  • Verifique se a configuração de confiança contém uma entrada válida para o domínio de confiança SPIFFE POOL_ID.global.PROJECT_NUMBER.workload.id.goog, que corresponde ao domínio de confiança SPIFFE na identidade gerenciada atribuída à VM.