Este documento descreve como configurar o aprovisionamento automático e a gestão do ciclo de vida das identidades de cargas de trabalho geridas para o Compute Engine. Configura os conjuntos de ACs para emitir certificados através do serviço de autoridade de certificação (AC), que é um serviço de alta disponibilidade e escalável Trusted Cloud by S3NS que simplifica e automatiza a implementação, a gestão e a segurança dos serviços de AC. Cada VM é aprovisionada com credenciais X.509 do conjunto de AC configurado. Em seguida, pode usar estas credenciais para estabelecer ligações mTLS.
Com as identidades de cargas de trabalho geridas para o Compute Engine, pode implementar comunicações encriptadas e autenticadas mutuamente entre quaisquer duas VMs do Compute Engine. As aplicações de carga de trabalho executadas nas VMs configuradas podem usar as credenciais X.509 para mTLS por VM. Estes certificados mTLS são automaticamente rodados e geridos por si pelo serviço de autoridade de certificação.
Antes de começar
Peça acesso à pré-visualização da identidade de carga de trabalho gerida.
Configure a CLI gcloud.
Instale a CLI Google Cloud e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada. Depois de iniciar sessão, inicialize a CLI gcloud executando o seguinte comando:
gcloud init
Configure a CLI do Google Cloud para usar o projeto na lista de autorizações para faturação e quota.
gcloud config set billing/quota_project PROJECT_ID
Substitua
PROJECT_ID
pelo ID do projeto que foi adicionado à lista de autorizações para a pré-visualização da identidade da carga de trabalho gerida.- Reveja a vista geral das identidades de cargas de trabalho geridas na documentação.
Enable the Compute Engine API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin
), which contains the
serviceusage.services.enable
permission. Learn how to grant
roles.
gcloud services enable compute.googleapis.com
Funções necessárias
Para receber as autorizações de que precisa para criar VMs que usam certificados de identidade de carga de trabalho geridos para autenticação noutras cargas de trabalho, peça ao seu administrador que lhe conceda as seguintes funções da IAM no projeto:
-
Administrador de instâncias do Compute (v1) (
roles/compute.instanceAdmin.v1
) -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
)
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Vista geral
Para usar identidades de carga de trabalho geridas para as suas aplicações, tem de realizar as seguintes tarefas:
Administrador de segurança:
- Crie identidades de cargas de trabalho geridas num Workload Identity Pool.
- Defina a política de atestação da carga de trabalho.
- Configure o serviço de autoridade de certificação para emitir certificados para identidades de cargas de trabalho geridas.
- Autorize identidades de cargas de trabalho geridas a pedir certificados ao conjunto da AC.
- Defina a configuração de confiança e emissão de certificados.
Administrador de computação:
- Obtenha o ficheiro de configuração para carregar os metadados do parceiro.
- Ative identidades de cargas de trabalho geridas para cargas de trabalho em execução no Compute Engine:
- Aceda às credenciais da carga de trabalho numa VM do Linux.
Configure identidades de cargas de trabalho geridas na Gestão de identidade e de acesso
Siga as instruções em Configurar a autenticação de identidades de cargas de trabalho geridas .
Estas instruções detalham como concluir o seguinte:
- Crie um Workload Identity Pool.
- Crie espaços de nomes no Workload Identity Pool. Use os espaços de nomes para criar limites administrativos para as identidades de carga de trabalho geridas, por exemplo, um espaço de nomes para cada uma das aplicações pertencentes à sua organização.
- Crie uma identidade do fluxo de trabalho gerida num espaço de nomes no Workload Identity Pool. Por exemplo, pode criar um espaço de nomes para uma aplicação e criar identidades geridas nesse espaço de nomes para os microsserviços que suportam essa aplicação.
- Crie uma conta de serviço. As VMs do Compute Engine podem ser autorizadas a receber uma identidade de carga de trabalho gerida com base na conta de serviço anexada à VM. Trusted Cloud by S3NS
- Crie uma política de atestação de carga de trabalho que permita a emissão de credenciais para a identidade de carga de trabalho gerida. Para receber credenciais para a identidade da carga de trabalho gerida, a carga de trabalho tem de estar num projeto especificado e ter a conta de serviço anexada.
- Configure o serviço de autoridade de certificação para emitir certificados para identidades de carga de trabalho geridas:
- Configure o conjunto de ACs de raiz
- Configure as ACs subordinadas
- Autorize identidades de cargas de trabalho geridas a pedir certificados ao conjunto de ACs
Obtenha o ficheiro de configuração para carregar os metadados do parceiro
O administrador de segurança cria um ficheiro JSON que contém o seguinte:
- A configuração da identidade da carga de trabalho
- A configuração de emissão de certificados
- A configuração de confiança
Este ficheiro deve ter o nome CONFIGS.json
. Use este ficheiro quando criar um modelo de instância para MIGs ou quando criar uma VM individual.
O ficheiro CONFIGS.json
deve ser semelhante ao seguinte:
{ "wc.compute.googleapis.com": { "entries": { "certificate-issuance-config": { "primary_certificate_authority_config": { "certificate_authority_config": { "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID" } }, "key_algorithm": "rsa-2048" }, "trust-config": { "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": { "trust_anchors": [{ "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID" }] } } } }, "iam.googleapis.com": { "entries": { "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID" } } }
Ative identidades de cargas de trabalho geridas para um grupo de instâncias geridas (MIG)
Um grupo de instâncias geridas (GIG) é um grupo de instâncias de máquinas virtuais (VMs) que trata como uma única entidade. Cada VM num MIG é criada através de um modelo de instância. Para permitir que as VMs no MIG usem identidades de carga de trabalho geridas, especifique a configuração no modelo de instância.
Crie um modelo de instância
Crie um modelo de instância com a funcionalidade de identidades de carga de trabalho geridas ativada. Em seguida, use este modelo para criar um grupo de instâncias gerido (MIG).
gcloud
Use o comando gcloud beta compute instance-templates create
para criar um novo modelo de instância que ative as identidades de cargas de trabalho geridas.
gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \ --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --metadata enable-workload-certificate=true \ --partner-metadata-from-file CONFIGS.json
Pode adicionar flags adicionais quando criar o modelo de instância para personalizar as VMs que cria, como especificar o tipo de máquina e a imagem, em vez de usar os valores predefinidos.
Substitua o seguinte:
- INSTANCE_TEMPLATE_NAME: o nome do novo modelo.
- SERVICE_ACCOUNT_NAME: o nome da conta de serviço que tem autorização para receber a identidade gerida.
- PROJECT_ID: o ID do projeto onde a conta de serviço foi criada.
- CONFIGS.json: o ficheiro de configuração que contém a configuração de emissão de certificados, a configuração de confiança e a identidade de carga de trabalho gerida.
Para mais informações, consulte o artigo Crie modelos de instâncias.
Crie um grupo de instâncias gerido a partir do modelo
Crie um grupo de instâncias geridas que use um modelo de instância que ative as identidades de cargas de trabalho geridas. Para ver detalhes sobre como criar o modelo de instância, consulte o artigo Crie um modelo de instância.
gcloud
Crie um MIG com o modelo de instância e o comando gcloud compute instance-groups managed create
.
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --size=SIZE \ --template=INSTANCE_TEMPLATE_NAME \ --zone=ZONE
Substitua o seguinte:
- INSTANCE_GROUP_NAME: um ID exclusivo para o grupo de instâncias geridas. Para ver detalhes sobre nomes válidos, consulte o artigo Nomeie recursos.
- SIZE: o tamanho do grupo de instâncias geridas
- INSTANCE_TEMPLATE_NAME: o nome do modelo de instância a usar quando criar VMs no GIG.
- ZONE: a zona na qual criar as VMs
Para ver informações detalhadas sobre como criar MIGs, consulte o artigo Cenários básicos para criar grupos de instâncias geridas (MIGs)
Ative identidades de cargas de trabalho geridas para VMs individuais
Pode ativar identidades de carga de trabalho geridas para uma VM quando cria a VM ou atualizando os metadados do parceiro para uma VM existente.
Crie VMs com identidades de carga de trabalho geridas ativadas
Quando cria uma VM, para ativar a funcionalidade de identidades de cargas de trabalho geridas para a VM, tem de fazer o seguinte:
- Especifique uma conta de serviço para a VM usar
- Defina o atributo de metadados
enable-workload-certificate
comotrue
Especifique as informações de configuração de emissão de certificados e de configuração de confiança como metadados de parceiros.
gcloud
Use o comando gcloud beta compute instances create
para criar uma nova VM. Use o ficheiro CONFIGS.json
fornecido pelo seu administrador de segurança ou criado seguindo as instruções em Crie um ficheiro de configuração para carregar os metadados do parceiro.
Crie uma VM com a funcionalidade de identidades de cargas de trabalho geridas ativada.
gcloud beta compute instances create INSTANCE_NAME \ --zone=INSTANCE_ZONE \ --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --metadata enable-workload-certificate=true \ --partner-metadata-from-file CONFIGS.json
Pode adicionar linhas adicionais ao comando para configurar a VM, como o tipo de máquina e a imagem, em vez de usar os valores predefinidos. Para mais informações, consulte o artigo Crie e inicie uma instância de VM.
Substitua o seguinte:
- INSTANCE_NAME: um nome exclusivo para a VM. Para ver detalhes sobre os nomes de instâncias válidos, consulte o artigo Atribua nomes aos recursos.
- INSTANCE_ZONE: a zona na qual criar a VM.
- SERVICE_ACCOUNT_NAME: o nome da conta de serviço que tem autorização para receber a identidade gerida.
- PROJECT_ID: o ID do projeto onde a conta de serviço foi criada.
- CONFIGS.json: o nome do ficheiro de configuração que contém a configuração de emissão de certificados, a configuração de confiança e a configuração de identidade da carga de trabalho gerida.
Ative identidades de cargas de trabalho geridas em VMs existentes
Para ativar identidades de cargas de trabalho geridas para uma VM existente, atualize a VM para configurar o seguinte:
- Se a VM ainda não tiver uma conta de serviço anexada, crie e anexe uma conta de serviço à VM.
- Defina o atributo de metadados
enable-workload-certificate
comotrue
. - Especifique as informações de configuração de confiança e emissão de certificados como metadados de parceiros.
Reinicie a VM.
gcloud
Esta tarefa usa o ficheiro CONFIGS.json
fornecido pelo administrador de segurança ou criado seguindo as instruções em Crie um ficheiro de configuração para carregar os metadados do parceiro.
Se a VM ainda não tiver uma conta de serviço anexada, anexe a conta de serviço à VM.
Atualize os metadados de uma VM existente para ativar as identidades de carga de trabalho geridas.
gcloud beta compute instances add-metadata VM_NAME \ --zone=ZONE \ --metadata enable-workload-certificate=true
Substitua o seguinte:
- VM_NAME: o nome da VM
- ZONE: a zona onde a VM está localizada
Atualize a configuração de uma VM existente para adicionar o ficheiro de configuração.
gcloud beta compute instances update VM_NAME \ --zone=ZONE \ --partner-metadata-from-file CONFIGS.json
Substitua o seguinte:
- VM_NAME: o nome da VM
- ZONE: a zona onde a VM está localizada
- CONFIGS.json: o ficheiro de configuração que contém a configuração de emissão de certificados, a configuração de confiança e a identidade de carga de trabalho gerida.
Parar a VM.
gcloud beta compute instances stop VM_NAME \ --zone=ZONE
Substitua o seguinte:
- VM_NAME: o nome da VM
- ZONE: a zona onde a VM está localizada.
Inicie a VM.
gcloud beta compute instances start VM_NAME \ --zone=ZONE
Substitua o seguinte:
- VM_NAME: o nome da VM
- ZONE: a zona onde a VM está localizada.
Aceda às credenciais da carga de trabalho numa VM do Linux
Depois de configurar com êxito a autenticação de carga de trabalho para carga de trabalho através do mTLS, pode aceder às credenciais emitidas na sua VM.
Existem duas formas de aceder às credenciais do Workload Identity gerido do Compute Engine e ao pacote de confiança associado:
- O sistema de ficheiros na VM
- O servidor de metadados do Compute Engine
Aceder às credenciais da carga de trabalho e ao pacote de confiança através do sistema de ficheiros na VM
Este método coloca as credenciais X.509 e o pacote de confiança num caminho específico no sistema de ficheiros da VM. As aplicações podem ler diretamente as credenciais e o pacote de confiança do sistema de ficheiros. Para ver exemplos de como obter as credenciais, consulte os seguintes exemplos no GitHub:
A VM tem de executar a versão 20231103.01 ou posterior do agente convidado do Compute Engine. Use o seguinte comando para verificar a versão do agente convidado do Compute Engine na sua VM:
gcloud beta compute instances get-serial-port-output INSTANCE_NAME \ --zone=ZONE | grep "GCE Agent Started"
Se a versão do agente convidado for inferior a 20231103.01, pode atualizá-la seguindo as instruções em Atualizar o ambiente convidado.
Para disponibilizar as credenciais de carga de trabalho e o pacote de confiança no sistema de ficheiros de uma VM, conclua os seguintes passos:
Instale ou atualize o agente convidado do Compute Engine para a versão 20231103.01 ou posterior. O agente convidado faz o seguinte:
- Recupera automaticamente as credenciais e o pacote de confiança do servidor de metadados do Compute Engine.
- Garante escritas atómicas no sistema de ficheiros enquanto atualiza o certificado X.509 e a chave privada correspondente.
- Atualiza automaticamente as credenciais e o pacote de confiança, por exemplo, quando os certificados mTLS são rodados.
Depois de instalar ou atualizar o agente convidado do Compute Engine no SO convidado, a tarefa de atualização da carga de trabalho cria o diretório
/var/run/secrets/workload-spiffe-credentials
e define as autorizações do diretório como0755 (rwxr-xr-x)
.O diretório contém os seguintes ficheiros criados com autorizações
0644 (rw-r--r--)
:private_key.pem
: uma chave privada formatada em PEMcertificates.pem
: um pacote de certificados X.509 em formato PEM que podem ser apresentados a outras VMs como a cadeia de certificados de cliente ou usados como uma cadeia de certificados de servidor.ca_certificates.pem
: um pacote de certificados X.509 formatados em PEM para usar como âncoras de confiança ao validar os certificados de pares.spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog
config_status
: um ficheiro de registo que contém mensagens de erro.
As aplicações podem ler os certificados, a chave privada e o pacote de confiança diretamente do sistema de ficheiros para estabelecer ligações mTLS.
Aceda às credenciais da carga de trabalho e ao pacote de confiança através do servidor de metadados
Uma aplicação em execução numa VM do Compute Engine pode consultar diretamente os pontos finais do servidor de metadados e obter as credenciais e o pacote de confiança. A aplicação é responsável por verificar periodicamente os pontos finais do servidor de metadados para novas credenciais e atualizações do pacote de confiança.
O servidor de metadados do Compute Engine expõe três pontos finais HTTP para permitir a utilização da funcionalidade de identidades de cargas de trabalho geridas por aplicações em execução na VM.
gce-workload-certificates/config-status
: um ponto final que contenha erros nos valores de configuração fornecidos através dos metadados da VM.gce-workload-certificates/workload-identities
: um ponto final de identidades geridas pelo plano de controlo do Compute Engine. Este ponto final contém o certificado X.509 e a chave privada para o domínio de confiança da VM.gce-workload-certificates/trust-anchors
: um ponto final que contém um conjunto de certificados fidedignos para a validação da cadeia de certificados X.509 de pares.
Para saber mais sobre como consultar os metadados de uma instância de VM, consulte o artigo Acerca dos metadados de VMs.
Para aceder às credenciais da carga de trabalho e ao pacote de confiança através do servidor de metadados, a sua aplicação deve fazer o seguinte:
Consulte o ponto final
gce-workload-certificates/config-status
. Certifique-se de que o código de resposta HTTP é200
e que a resposta não contém errospartnerMetadataConfigsErrors
. Se existirem esses erros, atualize a configuração adequada com valores válidos seguindo os passos abordados em Atualize a configuração de confiança e emissão de certificados.Para verificar o valor, pode executar o seguinte comando na VM:
curl "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
O ponto final
config-status
devolve uma resposta JSON com a seguinte estrutura:{ "partnerMetadataConfigsErrors": { "errors": { // A map of errors keyed by attribute name. "ATTRIBUTE_NAME" : "ERROR_DETAILS", ... } } }
Consulte o ponto final
gce-workload-certificates/workload-identities
. Certifique-se de que o código de resposta HTTP é200
. O ponto final devolve uma resposta JSON com a seguinte estrutura:{ "workloadCredentials": { // Credentials for the VM's trust domains "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID": { "certificatePem" : "X.509 certificate or certificate chain", "privateKeyPem" : "Private for X.509 leaf certificate" } } }
Extraia o
certificatePem
e oprivateKeyPem
. É fundamental que ambos os valores sejam lidos da mesma resposta para evitar a incompatibilidade entre a chave privada e pública, caso as identidades da carga de trabalho geridas tenham sido atualizadas pela infraestrutura do Compute Engine.Consulte o ponto final
gce-workload-certificates/trust-anchors
. Certifique-se de que o código de resposta HTTP é200
. A resposta só contém as âncoras de confiança para o domínio de confiança SPIFFE, se especificado. Caso contrário, a consulta devolve um erro. O ponto finaltrust-anchors
devolve uma resposta JSON com a seguinte estrutura:{ "trustAnchors": { // Trust bundle for the VM's trust domains "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": { "trustAnchorsPem" : "Trust bundle containing the X.509 roots certificates" } } }
O conteúdo de
trustAnchorsPem
contém o pacote de fidedignidade que pode ser usado para autenticar credenciais X.509 de pares quando estabelecer uma ligação mTLS.
Atualizar as credenciais e o pacote de confiança
O plano de controlo do Compute Engine roda automaticamente as credenciais de identidade da carga de trabalho gerida e as âncoras de confiança periodicamente.
Se as suas aplicações usarem o sistema de ficheiros para aceder às credenciais da carga de trabalho e ao conjunto fidedigno, o agente convidado do Compute Engine atualiza automaticamente as credenciais e o conjunto fidedigno, por exemplo, quando os certificados mTLS são rodados.
Se as suas aplicações consultarem o servidor de metadados, as aplicações em execução numa VM têm de consultar periodicamente os pontos finais do servidor de metadados para obter o conjunto mais recente de credenciais da identidade da carga de trabalho gerida e o pacote de confiança. Se não o fizer, pode danificar as aplicações devido à expiração do certificado ou a alterações ao pacote de confiança, o que pode fazer com que o estabelecimento da ligação mTLS falhe. A Google recomenda que as aplicações consultem o servidor de metadados para obter as credenciais do Workload Identity gerido e o pacote de confiança a cada 5 minutos.
Atualize a configuração de confiança e emissão de certificados
Pode modificar a configuração de emissão de certificados e a configuração fidedigna para uma VM que use identidades de cargas de trabalho geridas.
Atualize o modelo de instância de um grupo de instâncias geridas
Para atualizar os valores de configuração de emissão de certificados e de configuração de confiança num modelo de instância, tem de criar um novo modelo com os novos valores. Por conseguinte, a atualização da configuração de emissão de certificados e da configuração de confiança para grupos de instâncias geridos (MIGs) existentes não é suportada.
Atualize VMs do Compute Engine individuais
Para atualizar a configuração de emissão de certificados e a configuração de confiança, atualize o conteúdo do ficheiro CONFIGS.json
e use o comando gcloud beta compute instances update
para aplicar as atualizações:
gcloud beta compute instances update INSTANCE_NAME \ --partner-metadata-from-file FILENAME.json
Substitua o seguinte:
- INSTANCE_NAME: o nome da VM para a qual está a atualizar os valores de configuração
- FILENAME: O nome do ficheiro de configuração modificado, por exemplo,
CONFIGS.json
Resolver problemas
Para encontrar métodos de diagnóstico e resolução de erros comuns relacionados com a obtenção de credenciais de cargas de trabalho, consulte a documentação Resolva problemas de autenticação de carga de trabalho para carga de trabalho.
O que se segue?
- Saiba mais acerca dos seguintes conceitos: