Neste documento, descrevemos como configurar o provisionamento automático e o gerenciamento do ciclo de vida de identidades das cargas de trabalho gerenciadas para o Compute Engine. Configure pools de ACs para emitir certificados usando o Certificate Authority Service (AC), que é um serviço do Google Cloud altamente disponível e escalonável que simplifica e automatiza a implantação, o gerenciamento e a segurança dos serviços de AC. Cada VM é provisionada com credenciais X.509 do pool de AC configurado. Essas credenciais podem ser usadas para estabelecer conexões mTLS.
Antes de começar
- Revise a documentação sobre a visão geral das identidades das cargas de trabalho gerenciadas.
Ative a API Compute Engine, se ainda não tiver feito isso:
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão com o papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão com o papel de Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.gcloud services enable compute.googleapis.com
Funções exigidas
Para receber as permissões necessárias para criar VMs que usam certificados de identidade da 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:
- Admin da instância do Compute (v1) (
roles/compute.instanceAdmin.v1) - Usuário da conta de serviço (
roles/iam.serviceAccountUser)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Visão geral
Com as identidades das cargas de trabalho gerenciadas para o Compute Engine, é possível implementar comunicações mutuamente autenticadas e criptografadas entre duas VMs do Compute Engine. Os aplicativos de carga de trabalho em execução nas VMs configuradas podem usar as credenciais X.509 para o mTLS por VM. O agente convidado alterna automaticamente esses certificados mTLS e atualiza as credenciais na VM.
Ao usar identidades de carga de trabalho gerenciadas, é possível administrar a identidade das suas cargas de trabalho de maneira centralizada. É possível autorizar as VMs do Compute Engine a receberem uma identidade da carga de trabalho com base em atributos principais, como o ID da instância, o nome da instância ou a conta de serviço anexada. Para que as cargas de trabalho sejam atestadas, o administrador ou desenvolvedor de computação precisa criar instâncias de VM para a carga de trabalho com um nome de instância, ID de instância, nome da conta de serviço ou ID da conta de serviço correspondente.
As identidades de cargas de trabalho gerenciadas estão em conformidade com o padrão de código aberto Secure Production Identity Framework for Everyone (SPIFFE).
Os IDs do SPIFFE para cargas de trabalho do Google Cloud estão no seguinte formato:
spiffe://<TRUST_DOMAIN/ns/NAMESPACE/sa/WORKLOAD_ID.
O TRUST_DOMAIN corresponde a um pool de identidades da carga de trabalho do
Identity and Access Management (IAM).
As identidades de carga de trabalho gerenciadas são definidas em um pool de Identidade da carga de trabalho, que atua como um contêiner de nível superior para armazenar identidades de carga de trabalho que têm um limite de confiança comum. Em um pool de Identidade da carga de trabalho, as identidades são organizadas em limites administrativos chamados de namespaces. Para que uma carga de trabalho receba uma identidade gerenciada, é necessário definir políticas de atestado para autorizá-la. Uma política de atestado de carga de trabalho garante que apenas cargas de trabalho confiáveis possam declarar uma identidade gerenciada.
Para usar identidades de carga de trabalho gerenciada nos aplicativos, execute as tarefas a seguir:
Administrador de segurança:
- Crie identidades das cargas de trabalho gerenciadas em um pool de Identidade da carga de trabalho.
- Defina a política de atestado da carga de trabalho.
- Configure o Certificate Authority Service para emitir certificados para identidades das cargas de trabalho gerenciadas.
- Autorize que identidades das cargas de trabalho gerenciadas solicitem certificados do pool de AC.
- Defina a configuração de emissão de certificados e confiança no pool de Identidade da carga de trabalho.
Administrador de computação:
- Configurar instâncias para usar identidades de carga de trabalho para instâncias individuais do Compute Engine
- Acesse as credenciais das cargas de trabalho em uma instância do Linux.
Configurar identidades das cargas de trabalho gerenciadas no Identity and Access Management
Siga as instruções em Configurar autenticação de identidades das cargas de trabalho gerenciadas.
Essas instruções detalham como concluir as seguintes ações:
- Crie um pool de identidade da carga de trabalho.
- Criar namespaces no pool de Identidade da carga de trabalho. Você usa os namespaces para criar limites administrativos para suas identidades das cargas de trabalho gerenciadas, por exemplo, um namespace para cada um dos aplicativos que pertencem à sua organização.
- Criar uma identidade da carga de trabalho gerenciada em um namespace no pool de Identidade da carga de trabalho. Por exemplo, é possível criar um namespace para um aplicativo e criar identidades gerenciadas nesse namespace para os microsserviços compatíveis com esse aplicativo.
- Opcional: crie uma conta de serviço para criar regras de atestado com base no ID da conta de serviço.
- Criar uma política de atestado da carga de trabalho que permita que sua carga de trabalho receba credenciais da identidade da carga de trabalho gerenciada. As VMs do Compute Engine podem ser autorizadas a receber uma identidade de carga de trabalho gerenciada com base em atributos principais, como o ID ou o nome da instância ou a conta de serviço anexada.
- Configure o Certificate Authority Service para emitir certificados para
identidades de cargas de trabalho gerenciadas:
- Configurar o pool de CAs raiz
- Configurar as CAs subordinadas
- Autorizar o pool de identidades da carga de trabalho gerenciada a solicitar certificados do pool de ACs
Ativar identidades das cargas de trabalho gerenciadas para instâncias de computação individuais
É possível ativar identidades gerenciadas de carga de trabalho para uma instância de computação ao criar a instância ou atualizando a configuração de uma instância atual.
Criar instâncias com identidades das cargas de trabalho gerenciadas ativadas
Ao criar uma instância de computação, para ativar o recurso de identidades de carga de trabalho gerenciadas para a instância, faça o seguinte:
- Se o atestado da instância para a identidade da carga de trabalho for baseado em uma conta de serviço, especifique essa conta.
Inclua as flags
--identitye--identity-certificate
gcloud
Use o comando gcloud compute instances create
para criar uma instância.
Se você estiver usando uma conta de serviço para atestado, inclua as informações dela ao criar a instância.
É possível adicionar outras linhas ao comando para configurar a instância, como tipo de máquina e imagem, em vez de usar os valores padrão. Para mais informações, consulte Criar e iniciar uma instância de VM.
gcloud compute instances create INSTANCE_NAME \ --zone=INSTANCE_ZONE \ --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --identity=TRUST_DOMAIN/ns/NAMESPACE/sa/WORKLOAD_IDENTIFIER \ --identity-certificate \ ...
Substitua:
INSTANCE_NAME: um nome exclusivo para a instância. Para detalhes sobre nomes válidos de instâncias, consulte Nomear recursos.INSTANCE_ZONE: a zona em que a instância será criada.SERVICE_ACCOUNT_NAME: o nome da conta de serviço que tem permissão para receber a identidade gerenciada da carga de trabalho.PROJECT_ID: o ID do projeto em que a conta de serviço foi criada.TRUST_DOMAIN: o ID do domínio de confiança, no seguinte formato:$POOL_ID.global.$PROJECT_NUMBER.workload.id.goog
O valor do domínio de confiança usa os seguintes marcadores:
POOL_ID: o nome do pool de identidade da carga de trabalhoPROJECT_NUMBER: o número do projeto em que o pool de identidades da carga de trabalho foi criado
NAMESPACE: o nome do namespace que contém a política de atestado da carga de trabalho que autoriza a carga de trabalho a declarar uma identidade de carga de trabalho gerenciada.WORKLOAD_IDENTIFIER: o nome da identidade gerenciada da carga de trabalho criada no namespace do pool de identidade da carga de trabalho
Ative o provisionamento automático de identidades gerenciadas de carga de trabalho usando o agente convidado atualizando a configuração no arquivo de configuração do agente convidado.
Ativar identidades das cargas de trabalho gerenciadas em instâncias atuais
Para ativar identidades das cargas de trabalho gerenciadas em uma instância de computação, atualize a instância para configurar o seguinte:
- Se o atestado da instância para a identidade da carga de trabalho for baseado em uma conta de serviço e a instância ainda não tiver uma conta de serviço anexada, crie e anexe uma conta de serviço à instância.
- Ative o recurso usando a flag
--identity-certificatee especifique qual identidade gerenciada de carga de trabalho usar com a flag--identity. Reinicie a VM.
gcloud
Use o comando gcloud compute instances update
para atualizar a configuração de uma instância.
Se a instância ainda não tiver uma conta de serviço anexada, anexe a conta de serviço à instância.
Atualize a configuração de uma instância que já existe para ativar identidades das cargas de trabalho gerenciadas.
gcloud compute instances update INSTANCE_NAME \ --zone=ZONE \ --identity-certificate \ --identity=TRUST_DOMAIN/ns/NAMESPACE/sa/WORKLOAD_IDENTIFIER
Substitua:
INSTANCE_NAME: o nome da instância;ZONE: a zona em que a instância está localizada.TRUST_DOMAIN: o ID do domínio de confiança, no seguinte formato:none $POOL_ID.global.$PROJECT_NUMBER.workload.id.goog
O valor do domínio de confiança usa os seguintes marcadores de posição: *
POOL_ID: o nome do pool de identidades da carga de trabalho *PROJECT_NUMBER: o número do projeto em que o pool de identidades da carga de trabalho foi criado +NAMESPACE: o nome do namespace que contém a política de atestado da carga de trabalho que autoriza a carga de trabalho a declarar uma identidade da carga de trabalho gerenciada +WORKLOAD_IDENTIFIER: o nome da identidade da carga de trabalho gerenciada que foi criada no namespace do pool de identidades da carga de trabalhoAtive o provisionamento automático de identidades de carga de trabalho gerenciadas usando o agente convidado atualizando a configuração no arquivo de configuração do agente convidado.
Pare a VM.
gcloud compute instances stop INSTANCE_NAME \ --zone=ZONE
Substitua:
INSTANCE_NAME: o nome da instância;ZONE: a zona em que a instância está localizada.
Inicie a VM.
gcloud compute instances start INSTANCE_NAME \ --zone=ZONE
Substitua:
INSTANCE_NAME: o nome da instância;ZONE: a zona em que a instância está localizada.
Acessar credenciais das cargas de trabalho em uma VM do Linux
Depois de criar e iniciar uma instância de computação que usa identidades gerenciadas da carga de trabalho, a infraestrutura do Google Cloud (incluindo o agente convidado) provisiona e gerencia automaticamente a rotação das credenciais da instância.
Os certificados de carga de trabalho, incluindo a chave privada e os pacotes de confiança, são
colocados em um diretório específico no sistema de arquivos da VM: /var/run/secrets/workload-spiffe-credentials. Os aplicativos podem ler diretamente os certificados, a chave privada e o pacote de confiança do sistema de arquivos para estabelecer conexões mTLS.
O agente convidado do Compute Engine no SO convidado executa um job de atualização da carga de trabalho e, se necessário, cria o diretório /var/run/secrets/workload-spiffe-credentials. As permissões do diretório estão definidas como 0755 (rwxr-xr-x).
O diretório contém os seguintes arquivos criados com as permissões 0644 (rw-r--r--):
private_key.pem: uma chave privada formatada por PEM.certificates.pem: um pacote de certificados X.509 formatados por 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 por PEM para usar como âncoras de confiança ao validar certificados de peerings.spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.googconfig_status: um arquivo de registro que contém mensagens de erro.
Como atualizar as credenciais e o pacote de confiança
O plano de controle do Compute Engine alterna de maneira automática e periódica as credenciais das identidades das cargas de trabalho gerenciadas e as âncoras de confiança.
Se os aplicativos usarem o sistema de arquivos para acessar as credenciais das cargas de trabalho e o pacote de confiança, o agente convidado do Compute Engine atualizará automaticamente as credenciais e o pacote de confiança, por exemplo, quando os certificados mTLS forem alternados.
Atualizar a emissão de certificados e a configuração de confiança
É possível modificar a configuração de emissão de certificados e a configuração de confiança em uma VM que usa identidades das cargas de trabalho gerenciadas.
Atualizar as configurações do pool de Identidade da carga de trabalho para um conjunto de VMs
Para atualizar a configuração de emissão de certificados e a configuração de confiança em um conjunto de VMs, atualize o pool de identidades da carga de trabalho. Use o comando gcloud iam workload-identity-pools update, conforme mostrado no exemplo a seguir:
gcloud iam workload-identity-pools update WORKLOAD_IDENTITY_POOL_ID \
--location="global" \
--inline-certificate-issuance-config-file=CIC_JSON_FILE_PATH \
--inline-trust-config-file=TC_JSON_FILE_PATH \
--project=PROJECT_ID
Substitua:
WORKLOAD_IDENTITY_POOL_ID: o ID do pool de identidade da carga de trabalhoCIC_JSON_FILE_PATH: o caminho para o novo arquivo de configuração de emissão de certificado formatado em JSON (cic.json).TC_JSON_FILE_PATH: opcional. O caminho para o novo arquivo de configuração de confiança no formato JSON (tc.json). Se as cargas de trabalho forem autenticadas em diferentes domínios de confiança, especifique esse arquivo. Caso contrário, omita a configuração--inline-trust-config.PROJECT_ID: o nome do projeto Google Cloud .
As atualizações na configuração de emissão de certificados e na configuração de confiança do pool de identidades da carga de trabalho são lançadas gradualmente nas VMs e MIGs do Compute Engine que participam do pool de identidades da carga de trabalho.
Resolver problemas
Para encontrar métodos para diagnosticar e resolver erros comuns relacionados à recuperação de credenciais das cargas de trabalho, consulte a documentação Resolver problemas de autenticação entre cargas de trabalho.
Para resolver problemas com pools ou políticas de atestado mal configurados, consulte os registros de auditoria dos pools de identidade da carga de trabalho.
A seguir
- Saiba mais sobre os seguintes conceitos: