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


Este documento explica como solucionar erros comuns relacionados à autenticação de cargas de trabalho para outras cargas de trabalho por meio de mTLS .

Antes de começar

  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar no Compute Engine selecionando uma das seguintes opções:
    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

O diretório de credenciais gerado não existe

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

  1. Certifique-se de que sua VM oferece suporte à autenticação de carga de trabalho para carga de trabalho executando o comando a seguir de 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 um código de erro HTTP 404 com a seguinte mensagem de erro, então 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, crie uma nova VM que dê suporte à autenticação de carga de trabalho para carga de trabalho, usando um dos seguintes métodos:

    2. Se a resposta for um código de erro HTTP 404 com o workload certificate feature not enabled , a VM dá suporte a identidades de carga de trabalho gerenciadas, mas o recurso não está habilitado. Para ativar o recurso na VM, consulte Habilitar identidades de carga de trabalho gerenciadas em VMs existentes .

  2. Verifique se a VM está executando um sistema operacional convidado com o agente convidado do Compute Engine versão 20231103.01 ou mais recente. Use a CLI gcloud 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 logs de serviço para verificar se gce-workload-cert-refresh.timer conseguiu buscar com êxito as credenciais da carga de trabalho e o pacote confiável.

    # 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 arquivo config_status

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

  1. Verifique o conteúdo do arquivo config_status para garantir que o recurso de identidades de carga de trabalho gerenciada esteja ativado. Se o recurso não estiver ativado usando os metadados de VM apropriados, o arquivo de log conterá a mensagem de erro workload certificate feature not enabled .

    Para resolver esse problema, crie uma nova VM que dê suporte à autenticação de carga de trabalho para carga de trabalho, usando um dos seguintes métodos:

  2. Verifique o conteúdo do arquivo config_status para assegurar que não haja erros devido a valores de atributos ausentes ou configuração inválida para a emissão do certificado ou configuração de confiança. Se tais erros existirem, atualize os valores de configuração seguindo as etapas em Atualizar emissão de certificado e configuração confiável .

  3. Certifique-se de que as permissões corretas foram concedidas às identidades de carga de trabalho gerenciadas no pool de identidades de carga de trabalho para acessar os pools de CA 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 pool de CA subordinado.
    • SUBORDINATE_CA_POOL_REGION : a região do pool de CA subordinado.

    A saída 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 seu projeto.
    • POOL_ID é o ID do pool de identidades da carga de trabalho.

    Se você não vir uma saída semelhante ao exemplo anterior, conceda as permissões necessárias conforme descrito em Autorizar identidades de carga de trabalho gerenciadas para solicitar certificados do pool de CAs .

  4. Se o arquivo config_status não contiver mensagens de erro, verifique o valor de iam.googleapis.com/workload-identity no arquivo. 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 que contém o pool de identidades de carga de trabalho gerenciada.
    • POOL_ID é o ID do pool de identidades da carga de trabalho.
    • NAMESPACE_ID é o ID do namespace no pool de identidades 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, você deverá criar uma nova VM com o valor correto, pois o valor da identidade gerenciada só poderá ser atualizado durante a criação da VM.

  5. Se o arquivo config_status não contiver mensagens de erro, certifique-se de que a configuração confiável contenha uma entrada válida para o domínio confiável 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 obter mais informações, consulte Definir a configuração de confiança .

  6. Se o arquivo config_status contiver alguma mensagem de erro com o código de erro INTERNAL_ERROR , entre em contato com o Cloud Customer Care ou com seu Google Cloud entre em contato com a mensagem de erro.

Consultar endpoints do servidor de metadados retorna um erro 404

Se você obtiver uma resposta 404 ao consultar o ponto de extremidade workload-identities ou trust-anchors , certifique-se de que a VM dá suporte às identidades de carga de trabalho gerenciadas executando o seguinte comando de dentro 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 dá suporte a identidades de carga de trabalho gerenciadas. Para resolver o problema, siga um destes procedimentos:

  • Se a resposta for um código de erro HTTP 404 com o workload certificate feature not enabled , então esta VM dá suporte a identidades de carga de trabalho gerenciadas, mas o recurso não está habilitado. Crie uma nova VM com o recurso habilitado ou crie um novo modelo de instância e um novo grupo de instâncias gerenciadas.

  • Certifique-se de que as permissões corretas tenham sido concedidas ao conjunto de identidades de carga de trabalho para acessar os conjuntos de CA 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 pool de CA subordinado.
    • SUBORDINATE_CA_POOL_REGION : a região do pool de CA subordinado.

    A saída deste comando deve conter o seguinte, onde PROJECT_NUMBER é o número do seu projeto e POOL_ID é o ID do pool de identidades 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 sua saída não contiver estes valores, conceda as permissões corretas, conforme descrito em Autorizar identidades de carga de trabalho geridas para solicitar certificados do conjunto de CA.

  • Verifique se 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, então deverá criar um novo VM porque o valor da identidade gerida não pode ser atualizado após a criação do VM.

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