Este documento descreve como configurar o provisionamento automático e o gerenciamento do ciclo de vida de identidades de carga de trabalho gerenciadas para o Compute Engine. Você configura pools de CA para emitir certificados usando o Certificate Authority Service (CA) , que é um serviço altamente disponível e escalável. Google Cloud serviço que simplifica e automatiza a implantação, o gerenciamento e a segurança dos serviços da CA. Cada VM é provisionada com credenciais X.509 do pool de CA configurado. Essas credenciais podem então ser usadas para estabelecer conexões mTLS.
Com identidades de carga de trabalho gerenciadas para o Compute Engine, você pode implementar comunicações mutuamente autenticadas e criptografadas entre quaisquer duas VMs do Compute Engine. Os aplicativos de carga de trabalho em execução nas VMs configuradas podem usar as credenciais X.509 para mTLS por VM. Esses certificados mTLS são alternados e gerenciados automaticamente para você pelo Certificate Authority Service.
Antes de começar
Solicite acesso à visualização da identidade da carga de trabalho gerenciada .
Configure a CLI do Google Cloud.
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.
Configure a CLI do Google Cloud para usar o projeto permitido para faturamento e cota.
gcloud config set billing/quota_project PROJECT_ID
Substitua
PROJECT_ID
pelo ID do projeto que foi adicionado à lista de permissões para a visualização da identidade da carga de trabalho gerenciada.- Revise a documentação de visão geral das identidades de carga de trabalho gerenciada .
-
Enable the Compute Engine API:
gcloud services enable compute.googleapis.com
Funções obrigatórias
Para obter as permissões necessárias para criar VMs que usam certificados de identidade de carga de trabalho gerenciada para autenticação em outras cargas de trabalho, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
- Administrador de instância do Compute (v1) (
roles/compute.instanceAdmin.v1
) - Usuário da conta de serviço (
roles/iam.serviceAccountUser
)
Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .
Você também poderá obter as permissões necessárias por meio de funções personalizadas ou outras funções predefinidas .
Visão geral
Para usar identidades de carga de trabalho gerenciadas para seus aplicativos, você deve executar as seguintes tarefas:
Administrador de segurança :
- Crie identidades de carga de trabalho gerenciadas em um pool de identidades de carga de trabalho.
- Defina a política de atestado de carga de trabalho .
- Configure o Serviço de Autoridade de Certificação para emitir certificados para identidades de carga de trabalho gerenciadas .
- Autorize identidades de carga de trabalho gerenciadas para solicitar certificados do pool de CA.
- Defina a configuração de confiança e emissão de certificado .
Administrador de computação :
- Obtenha o arquivo de configuração para fazer upload dos metadados do parceiro .
- Ative identidades de carga de trabalho gerenciadas para cargas de trabalho em execução no Compute Engine:
- Acesse credenciais de carga de trabalho em uma VM Linux .
Configurar identidades de carga de trabalho gerenciadas no Identity and Access Management
Siga as instruções em Configurar autenticação de identidades de carga de trabalho gerenciada .
Estas instruções detalham como concluir o seguinte:
- Crie um pool de identidades de carga de trabalho.
- Crie namespaces no pool de identidades da carga de trabalho. Você usa os namespaces para criar limites administrativos para suas identidades de carga de trabalho gerenciadas, por exemplo, um namespace para cada um dos aplicativos de propriedade de sua organização.
- Crie uma identidade de carga de trabalho gerenciada em um namespace no pool de identidades de carga de trabalho. Por exemplo, você pode criar um namespace para um aplicativo e criar identidades gerenciadas nesse namespace para os microsserviços que dão suporte a esse aplicativo.
- Crie uma conta de serviço. As VMs do Compute Engine podem ser autorizadas a receber uma identidade de carga de trabalho gerenciada com base no Google Cloud conta de serviço anexada à VM.
- Crie uma política de atestado de carga de trabalho que permita que sua carga de trabalho receba credenciais para a identidade de carga de trabalho gerenciada. Para emitir credenciais para a identidade da carga de trabalho gerenciada, a carga de trabalho deve estar dentro de um 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 gerenciadas:
- Configurar o pool de CA raiz
- Configurar as CAs subordinadas
- Autorizar identidades de carga de trabalho gerenciadas para solicitar certificados do pool de autoridades de certificação
Obtenha o arquivo de configuração para fazer upload dos metadados do parceiro
O administrador de segurança cria um arquivo JSON que contém o seguinte:
- A configuração da identidade da carga de trabalho
- A configuração de emissão do certificado
- A configuração de confiança
Este arquivo deve ser denominado CONFIGS.json
. Você usa esse arquivo ao criar um modelo de instância para MIGs ou ao criar uma VM individual.
O arquivo 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" } } }
Habilitar identidades de carga de trabalho gerenciadas para um grupo de instâncias gerenciadas (MIG)
Um grupo de instâncias gerenciadas (MIG) é um grupo de instâncias de máquinas virtuais (VM) que você trata como uma entidade única. Cada VM em um MIG é criada usando um modelo de instância. Para permitir que as VMs no MIG usem identidades de carga de trabalho gerenciadas, especifique a configuração no modelo de instância.
Crie um modelo de instância
Crie um modelo de instância com o recurso de identidades de carga de trabalho gerenciadas habilitado. Em seguida, use este modelo para criar um grupo gerenciado de instâncias (MIG).
gcloud
Use o comando gcloud beta compute instance-templates create
para criar um novo modelo de instância que habilite identidades de carga de trabalho gerenciadas.
gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \ --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --metadata enable-workload-certificate=true \ --partner-metadata-from-file CONFIGS.json
Você pode adicionar sinalizações adicionais ao criar o modelo de instância para personalizar as VMs que ele cria, como especificar o tipo de máquina e a imagem, em vez de usar os valores padrão.
Substitua o seguinte:
- INSTANCE_TEMPLATE_NAME : o nome do novo modelo.
- SERVICE_ACCOUNT_NAME : o nome da conta de serviço que tem permissão para receber a identidade gerenciada.
- PROJECT_ID : o ID do projeto onde a conta de serviço foi criada.
- CONFIGS.json : o arquivo de configuração que contém a configuração de emissão de certificado, a configuração de confiança e a identidade da carga de trabalho gerenciada.
Para obter mais informações, consulte Criar modelos de instância .
Crie um grupo gerenciado de instâncias a partir do modelo
Crie um grupo de instâncias gerenciadas que use um modelo de instância que habilite as identidades de carga de trabalho gerenciada. Para obter detalhes sobre como criar o modelo de instância, consulte Criar um modelo de instância .
gcloud
Crie um MIG usando 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 gerenciado de instâncias. Para obter detalhes sobre nomes válidos, consulte Recursos de nomes .
- SIZE : o tamanho do grupo de instâncias gerenciadas
- INSTANCE_TEMPLATE_NAME : o nome do modelo de instância a ser usado ao criar VMs no MIG.
- ZONE : a zona para criar as VMs
Para obter informações detalhadas sobre a criação de MIGs, consulte Cenários básicos para a criação de grupos de instâncias gerenciadas (MIGs)
Habilitar identidades de carga de trabalho gerenciadas para VMs individuais
Você pode habilitar identidades de carga de trabalho gerenciadas para uma VM ao criar a VM ou atualizando os metadados do parceiro para uma VM existente.
Criar VMs com identidades de carga de trabalho gerenciadas habilitadas
Ao criar uma VM, para ativar o recurso de identidades de carga de trabalho gerenciadas para a VM, você deve fazer o seguinte:
- Especifique uma conta de serviço para a VM usar
- Configure o atributo de metadados
enable-workload-certificate
comotrue
Especifique as informações de configuração de emissão de certificado e de configuração confiável como metadados do parceiro .
gcloud
Use o comando gcloud beta compute instances create
para criar uma nova VM. Use o arquivo CONFIGS.json
fornecido pelo administrador de segurança ou criado seguindo as instruções em Criar um arquivo de configuração para fazer upload dos metadados do parceiro .
Crie uma VM com o recurso de identidades de carga de trabalho gerenciada habilitado.
gcloud beta compute instances create INSTANCE_NAME \ --zone=INSTANCE_ZONE \ --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --metadata enable-workload-certificate=true \ --partner-metadata-from-file CONFIGS.json
Você pode adicionar linhas adicionais ao comando para configurar a VM, como tipo de máquina e imagem, em vez de usar os valores padrão. Para obter mais informações, consulte Criar e iniciar uma instância de VM .
Substitua o seguinte:
- INSTANCE_NAME : um nome exclusivo para a VM. Para obter detalhes sobre nomes de instância válidos, consulte Nomear recursos .
- INSTANCE_ZONE : a zona na qual criar a VM.
- SERVICE_ACCOUNT_NAME : o nome da conta de serviço que tem permissão para receber a identidade gerenciada.
- PROJECT_ID : o ID do projeto onde a conta de serviço foi criada.
- CONFIGS.json : o nome do arquivo de configuração que contém a configuração de emissão de certificado, a configuração de confiança e a configuração de identidade da carga de trabalho gerenciada.
Habilitar identidades de carga de trabalho gerenciadas em VMs existentes
Para ativar identidades de carga de trabalho gerenciadas 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.
- Configure o atributo de metadados
enable-workload-certificate
comotrue
. - Especifique as informações de configuração de emissão de certificado e de configuração confiável como metadados do parceiro .
Reinicie a VM.
gcloud
Esta tarefa usa o arquivo CONFIGS.json
fornecido pelo administrador de segurança ou criado seguindo as instruções em Criar um arquivo de configuração para fazer upload dos 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 identidades de carga de trabalho gerenciadas.
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 arquivo 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 arquivo de configuração que contém a configuração de emissão de certificado, a configuração de confiança e a identidade da carga de trabalho gerenciada.
Pare 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.
Acessar credenciais de carga de trabalho em uma VM Linux
Depois de configurar com êxito a carga de trabalho para autenticação de carga de trabalho usando mTLS, você poderá acessar as credenciais emitidas em sua VM.
Há duas maneiras de acessar as credenciais de identidade da carga de trabalho gerenciada do Compute Engine e o pacote confiável associado:
- O sistema de arquivos na VM
- O servidor de metadados do Compute Engine
Acesse as credenciais da carga de trabalho e o pacote confiável usando o sistema de arquivos na VM
Este método coloca as credenciais X.509 e o pacote confiável em um caminho específico dentro do sistema de arquivos da VM. Os aplicativos podem ler diretamente as credenciais e o pacote confiável do sistema de arquivos. Para obter exemplos de como recuperar as credenciais, consulte os seguintes exemplos no GitHub:
A VM precisa executar o agente convidado do Compute Engine versão 20231103.01 ou posterior. 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, será possível atualizá-lo seguindo as instruções em Atualizando o ambiente convidado .
Para disponibilizar as credenciais da carga de trabalho e o pacote confiável no sistema de arquivos de uma VM, conclua as etapas a seguir:
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 confiável do servidor de metadados do Compute Engine.
- Garante gravações atômicas no sistema de arquivos enquanto atualiza o certificado X.509 e a chave privada correspondente.
- Atualiza automaticamente as credenciais e o pacote confiável, por exemplo, quando os certificados mTLS são alternados.
Depois de instalar ou atualizar o agente convidado do Compute Engine no sistema operacional convidado, o trabalho de atualização da carga de trabalho cria o diretório
/var/run/secrets/workload-spiffe-credentials
e define as permissões do diretório como0755 (rwxr-xr-x)
.O diretório contém os seguintes arquivos criados com permissões
0644 (rw-r--r--)
:-
private_key.pem
: uma chave privada formatada em PEM -
certificates.pem
: um pacote de certificados X.509 formatados em PEM que podem ser apresentados a outras VMs como a cadeia de certificados do cliente ou usados como uma cadeia de certificados do 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 arquivo de log contendo mensagens de erro.
-
Os aplicativos podem ler os certificados, a chave privada e o pacote confiável diretamente do sistema de arquivos para estabelecer conexões mTLS.
Acesse as credenciais da carga de trabalho e o pacote confiável usando o servidor de metadados
Um aplicativo em execução em uma VM do Compute Engine pode consultar diretamente os endpoints do servidor de metadados e recuperar as credenciais e o pacote confiável. O aplicativo é responsável por verificar periodicamente os terminais do servidor de metadados em busca de novas credenciais e atualizações no pacote confiável.
O servidor de metadados do Compute Engine expõe três endpoints HTTP para permitir o uso do recurso de identidades de carga de trabalho gerenciadas por aplicativos executados dentro da VM.
-
gce-workload-certificates/config-status
: um endpoint que contém erros nos valores de configuração fornecidos por meio dos metadados da VM. -
gce-workload-certificates/workload-identities
: um endpoint de identidades gerenciadas pelo plano de controle do Compute Engine. Este endpoint contém o certificado X.509 e a chave privada do domínio confiável da VM. -
gce-workload-certificates/trust-anchors
: um endpoint que contém um conjunto de certificados confiáveis para validação da cadeia de certificados peer X.509.
Para saber mais sobre como consultar os metadados de uma instância de VM, consulte Sobre metadados de VM .
Para acessar as credenciais da carga de trabalho e o pacote confiável usando o servidor de metadados, seu aplicativo deve fazer o seguinte:
Consulte o endpoint
gce-workload-certificates/config-status
. Certifique-se de que o código de resposta HTTP seja200
e que a resposta não contenha errospartnerMetadataConfigsErrors
. Se tais erros existirem, atualize a configuração apropriada com valores válidos seguindo as etapas discutidas em Atualizar emissão de certificado e configuração confiável .Para verificar o valor, você 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 endpoint
config-status
retorna uma resposta JSON com a seguinte estrutura:{ "partnerMetadataConfigsErrors": { "errors": { // A map of errors keyed by attribute name. "ATTRIBUTE_NAME" : "ERROR_DETAILS", ... } } }
Consulte o endpoint
gce-workload-certificates/workload-identities
. Certifique-se de que o código de resposta HTTP seja200
. O endpoint retorna 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 na mesma resposta para evitar incompatibilidade entre a chave privada e pública, caso as identidades da carga de trabalho gerenciada sejam atualizadas pela infraestrutura do Compute Engine.Consulte o endpoint
gce-workload-certificates/trust-anchors
. Certifique-se de que o código de resposta HTTP seja200
. A resposta conterá apenas as âncoras de confiança para o domínio de confiança SPIFFE, se especificado. Caso contrário, a consulta retornará um erro. O endpointtrust-anchors
retorna 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 confiável que pode então ser usado para autenticar credenciais X.509 de peer ao estabelecer uma conexão mTLS.
Atualizando as credenciais e o pacote confiável
O plano de controle do Compute Engine alterna automaticamente as credenciais de identidade da carga de trabalho gerenciada e as âncoras de confiança periodicamente.
Se seus aplicativos usarem o sistema de arquivos para acessar as credenciais da carga de trabalho e o pacote confiável, o agente convidado do Compute Engine atualizará automaticamente as credenciais e o pacote confiável, por exemplo, quando os certificados mTLS forem alternados.
Se seus aplicativos consultarem o servidor de metadados, os aplicativos em execução em uma VM deverão consultar periodicamente os pontos de extremidade do servidor de metadados para obter o conjunto mais recente de credenciais de identidade de carga de trabalho gerenciada e o pacote confiável. Não fazer isso pode interromper os aplicativos devido à expiração do certificado ou alterações no pacote confiável, o que pode causar falha no estabelecimento da conexão mTLS. O Google recomenda que os aplicativos consultem o servidor de metadados em busca das credenciais de identidade da carga de trabalho gerenciada e do pacote confiável a cada cinco minutos.
Atualizar emissão de certificado e configuração de confiança
Você pode modificar a configuração de emissão de certificado e a configuração de confiança para uma VM que usa identidades de carga de trabalho gerenciadas.
Atualizar o modelo de instância de um grupo gerenciado de instâncias
Para atualizar a configuração de emissão de certificado e os valores de configuração confiável em um modelo de instância, é necessário criar um novo modelo com os novos valores. Portanto, não há suporte para atualizar a configuração de emissão de certificado e a configuração de confiança para grupos de instâncias gerenciadas (MIGs) existentes.
Atualizar VMs individuais do Compute Engine
Para atualizar a configuração de emissão de certificado e a configuração de confiança, atualize o conteúdo do arquivo 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 você está atualizando os valores de configuração
- FILENAME : O nome do arquivo de configuração modificado, por exemplo
CONFIGS.json
Solucionar problemas
Para encontrar métodos para diagnosticar e resolver erros comuns relacionados à recuperação de credenciais de carga de trabalho, consulte a documentação Solucionar problemas de carga de trabalho para autenticação de carga de trabalho .
O que vem a seguir
- Saiba mais sobre os seguintes conceitos: