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

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

Para mais informações, consulte Resolver problemas de federação de identidade da carga de trabalho.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. Com isso, você confirma sua identidade para acesso a Google Cloud serviços e APIs do. Para executar códigos ou amostras de um ambiente de desenvolvimento local, faça a autenticação no Compute Engine com um destes métodos:
    1. Instale a Google Cloud CLI. Após a instalação, inicialize a Google Cloud CLI executando o seguinte comando:

      gcloud init

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

    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 instância de computação oferece suporte à autenticação de carga de trabalho para carga de trabalho usando uma das seguintes interfaces para confirmar se as identidades de carga de trabalho gerenciadas estão ativadas:

    Console

    1. No console do Google Cloud , acesse a página Instâncias de VM.

      Acessar instâncias de VM

    2. Na coluna Nome da página Instâncias de VM, clique no nome da instância para conferir mais detalhes sobre ela.

    3. Na seção Segurança e acesso da página Detalhes, verifique se "Certificados de identidade da carga de trabalho" tem o valor "Ativado".

    gcloud

    Para conferir se o recurso de identidades de carga de trabalho gerenciadas está ativado para uma instância de computação, use o comando gcloud alpha compute instances describe.

    gcloud alpha compute instances describe INSTANCE_NAME \
        --zone=ZONE \
        --format="table(name,zone,identityCertificate)"
    

    Substitua:

    • INSTANCE_NAME: o nome da instância.

    • ZONE: a zona em que a instância está localizada.

    REST

    Para conferir os detalhes de uma instância de computação, faça uma GET solicitação ao instances.get método. Ao anexar um parâmetro de consulta $fields à solicitação, você pode restringir a saída apenas aos campos de interesse.

    GET https://compute.googleapis.com/compute/alpha/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME$fields=name,identityCertificate,identity
    

    Substitua:

    • PROJECT_ID: o ID do projeto em que a instância está localizada.

    • ZONE: a zona em que a instância está localizada.

    • INSTANCE_NAME: o nome da instância.

  2. Analise os valores da instância para identityCertificate e identity.

  3. Se a propriedade identityCertificate estiver definida como false, essa instância de computação não oferece suporte a esse recurso.

    Para resolver esse problema, crie uma nova instância que ofereça suporte à autenticação de carga de trabalho para carga de trabalho. Para mais detalhes, consulte Ativar identidades de cargas de trabalho gerenciadas em VMs que já existem.

  4. 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 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 INSTANCE_NAME | grep "GCE Agent Started"
    

    Substitua INSTANCE_NAME pelo nome da instância de computação.

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

  5. Verifique os registros de serviço para conferir se o timer do sistema 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 usando os valores apropriados, o arquivo de registro vai conter a mensagem de erro workload certificate feature not enabled.

    Para resolver esse problema, crie uma nova instância de computação que ofereça 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 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/name/locations/global/workloadIdentityPools/POOL_ID/*
      -
      role: roles/privateca.poolReader
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/name/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 instância de computação com o valor correto, porque o valor da identidade gerenciada só pode ser atualizado durante a criação da instância.

  5. Se o config_status arquivo 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 à instância de computação. 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 Google Cloud contato informando a mensagem de erro.