Resolva problemas de autenticação de carga de trabalho para carga de trabalho


Este documento explica como resolver problemas comuns relacionados com a autenticação de cargas de trabalho noutras cargas de trabalho através de mTLS.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:
    1. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

O diretório de credenciais gerado não existe

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

  1. Certifique-se de que a sua VM suporta a autenticação de carga de trabalho para carga de trabalho executando o seguinte comando a partir do interior da VM.

    curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    
    1. Se a resposta for um código de erro HTTP 404 com a seguinte mensagem de erro, significa que esta VM não suporta esta funcionalidade.

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

      Para resolver o problema, crie uma nova VM que suporte a autenticação de carga de trabalho para carga de trabalho através de um dos seguintes métodos:

    2. Se a resposta for um código de erro HTTP 404 com a mensagem de erro workload certificate feature not enabled, significa que a VM suporta identidades de carga de trabalho geridas, mas a funcionalidade não está ativada. Para ativar a funcionalidade na VM, consulte o artigo Ative identidades de cargas de trabalho geridas em VMs existentes.

  2. Certifique-se de que a VM está a executar um SO convidado com o agente convidado do Compute Engine versão 20231103.01 ou mais recente. Use a CLI gcloud para ver a saída da porta série para 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 o artigo Atualizar o ambiente convidado.

  3. Verifique os registos de serviço para confirmar que o gce-workload-cert-refresh.timer conseguiu obter com êxito as credenciais da carga 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 gerado contém apenas o ficheiro config_status

O diretório de credenciais gerado, /var/run/secrets/workload-spiffe-credentials, pode conter apenas o config_status por vários motivos. Siga os passos seguintes para resolver este problema.

  1. Verifique o conteúdo do ficheiro config_status para garantir que a funcionalidade de identidades de carga de trabalho geridas está ativada. Se a funcionalidade não estiver ativada através dos metadados de VM adequados, o ficheiro de registo contém a mensagem de erro workload certificate feature not enabled.

    Para resolver este problema, crie uma nova VM que suporte a autenticação de carga de trabalho para carga de trabalho através de um dos seguintes métodos:

  2. Verifique o conteúdo do ficheiro config_status para garantir que não existem erros devido a valores de atributos em falta ou a uma configuração inválida para a emissão do certificado ou a configuração de confiança. Se existirem erros deste tipo, atualize os valores de configuração seguindo os passos em Atualize a configuração de confiança e emissão de certificados.

  3. Certifique-se de que as autorizações corretas foram concedidas às identidades de carga de trabalho geridas no conjunto do Workload Identity para aceder aos conjuntos de AC subordinados. Use o seguinte comando:

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

    Substitua o seguinte:

    • SUBORDINATE_CA_POOL_ID: o ID do conjunto de AC subordinado.
    • SUBORDINATE_CA_POOL_REGION: a região do conjunto de AC subordinado.

    O resultado deste comando deve conter o seguinte:

    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:

    • PROJECT_NUMBER é o número do projeto.
    • POOL_ID é o ID do Workload Identity Pool.

    Se não vir um resultado semelhante ao exemplo anterior, conceda as autorizações necessárias, conforme descrito no artigo Autorize identidades de cargas de trabalho geridas a pedir certificados ao conjunto de ACs.

  4. Se o ficheiro config_status não contiver mensagens de erro, verifique o valor de iam.googleapis.com/workload-identity no ficheiro.O valor deve corresponder ao seguinte:

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

    No exemplo anterior:

    • PROJECT_NUMBER é o número do projeto do projeto que contém o Workload Identity Pool gerido.
    • POOL_ID é o ID do Workload Identity Pool.
    • NAMESPACE_ID é o ID do espaço de nomes no Workload Identity Pool.
    • MANAGED_IDENTITY_ID é o ID da identidade da carga de trabalho gerida.

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

  5. Se o ficheiro config_status não contiver mensagens de erro, certifique-se de que 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 gerida atribuída à VM. Para mais informações, consulte o artigo Defina a configuração de confiança.

  6. Se o ficheiro config_status contiver mensagens de erro com o código de erro INTERNAL_ERROR, contacte o apoio técnico ao cliente do Google Cloud ou o seu Google Cloud contacto com a mensagem de erro.

A consulta de pontos finais do servidor de metadados devolve um erro 404

Se receber uma resposta 404 ao consultar o ponto final workload-identities ou trust-anchors, certifique-se de que a VM suporta as identidades de workload geridas executando o seguinte comando a partir da VM:

curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
  • Se a resposta for um código de 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 suporta identidades de cargas de trabalho geridas. Para resolver o problema, faça uma das seguintes ações:

  • Se a resposta for um código de erro HTTP 404 com a mensagem de erro workload certificate feature not enabled, significa que esta VM suporta identidades de carga de trabalho geridas, mas a funcionalidade não está ativada. Crie uma nova VM com a funcionalidade ativada ou crie um novo modelo de instância e um grupo de instâncias gerido.

  • Certifique-se de que foram concedidas as autorizações corretas ao conjunto do Workload Identity para aceder aos conjuntos de AC subordinados executando o seguinte comando:

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

    Substitua o seguinte:

    • SUBORDINATE_CA_POOL_ID: o ID do conjunto de ACs subordinadas.
    • SUBORDINATE_CA_POOL_REGION: a região do conjunto de AC subordinado.

    O resultado deste comando deve conter o seguinte, em que PROJECT_NUMBER é o número do projeto e POOL_ID é o ID do Workload Identity Pool.

    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 o resultado não contiver estes valores, conceda as autorizações corretas, conforme descrito no artigo Autorize identidades de carga de trabalho geridas a pedir certificados ao conjunto de ACs.

  • Certifique-se de que o valor iam.googleapis.com/workload-identity está correto e corresponde ao seguinte:

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

    Se o valor não corresponder, tem de criar uma nova VM porque não é possível atualizar o valor da identidade gerida após a criação da VM.

  • Certifique-se de que 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 gerida atribuída à VM.