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:
-
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.
- 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
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"
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:
Se a resposta for um código de erro
HTTP 404
com a mensagem de erroworkload 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.
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.
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.
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 erroworkload 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:
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.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.
Se o ficheiro
config_status
não contiver mensagens de erro, verifique o valor deiam.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.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 SPIFFEPOOL_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.Se o ficheiro
config_status
contiver mensagens de erro com o código de erroINTERNAL_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 erroworkload 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.