Acerca dos metadados de VMs


Cada instância de máquina virtual (VM) armazena os respetivos metadados num servidor de metadados. A sua VM tem automaticamente acesso à API do servidor de metadados sem autorização adicional. O Compute Engine mantém as chaves e os valores de metadados para as suas VMs e projetos em diretórios. Cada diretório armazena entradas de metadados sob a forma de pares de chave/valor. Alguns diretórios contêm subdiretórios.

Este documento oferece uma vista geral dos metadados de VMs e explica os tipos e as propriedades dos metadados de VMs.

Usos dos metadados de VMs

As secções seguintes descrevem alguns cenários em que pode usar entradas de metadados para gerir as suas VMs.

Scripts de arranque e encerramento

O servidor de metadados é particularmente útil quando usado em combinação com scripts de arranque e encerramento, porque pode usar o servidor de metadados para obter informações únicas sobre uma VM de forma programática, sem autorização adicional.

Por exemplo, pode escrever um script de arranque que obtenha o par chave-valor de metadados para o IP externo de uma VM e usar esse IP no seu script para configurar uma base de dados. Uma vez que as chaves de metadados predefinidas do Compute Engine são iguais em todas as VMs, pode reutilizar o script sem ter de o atualizar para cada VM. Isto ajuda a criar código menos frágil para as suas aplicações.

Manutenção do anfitrião

O servidor de metadados fornece informações sobre a opção de agendamento de uma VM no diretório de metadados scheduling/ através da chave maintenance-event. Pode usar estes valores de metadados para receber uma notificação quando um evento de manutenção estiver prestes a ocorrer, para que possa preparar o seu ambiente para o evento. Para mais informações, consulte o artigo Receba avisos de migração em direto.

Atributos de hóspedes

Os atributos de convidado são um tipo específico de metadados personalizados que as suas aplicações podem escrever enquanto são executadas nas suas VMs. Use atributos de convidados apenas para casos de utilização que exijam pequenas quantidades de dados que não se alteram com frequência. Para mais informações sobre os atributos de convidados, consulte o artigo Defina e consulte atributos de convidados.

Atributos de parceiros

Os atributos de parceiros são um tipo específico de metadados de instâncias. Google Cloud Os serviços podem usar atributos de parceiros para criar um espaço de nomes no qual podem definir entradas de metadados de instâncias. Pode definir, atualizar, eliminar e ver os valores das entradas de metadados da instância para configurar esse serviço.

Por exemplo, quando usa identidades de carga de trabalho geridas para o Compute Engine, pode especificar os detalhes da configuração nas entradas de metadados do espaço de nomes desse serviço.

Considerações de segurança dos metadados

Quando faz um pedido para obter informações do servidor de metadados, o seu pedido e a resposta de metadados subsequente nunca saem do anfitrião físico que está a executar a VM.

No entanto, qualquer processo que possa consultar o URL dos metadados tem acesso a todos os valores no servidor de metadados. Isto inclui quaisquer valores de metadados personalizados, certificados de cliente e chaves privadas que escreva no servidor. A Google recomenda que tenha cuidado ao escrever valores confidenciais no servidor de metadados ou ao executar processos de terceiros. Tem de colocar em sandbox qualquer processo que não deva poder aceder ao servidor de metadados.

Pontos finais do servidor de metadados

O servidor de metadados está acessível a partir dos seguintes pontos finais:

  • Um ponto final HTTP: http://metadata.google.internal/computeMetadata/v1. Este ponto final é acessível a partir de todas as VMs, incluindo VMs protegidas.
  • Um ponto final HTTPS: https://metadata.google.internal/computeMetadata/v1. Este ponto final só está acessível a partir de VMs protegidas.

Ponto final do servidor de metadados HTTPS

O ponto final do servidor de metadados HTTPS (https://metadata.google.internal/computeMetadata/v1) oferece segurança adicional para a transmissão de informações entre o servidor de metadados e a VM. Este ponto final só está disponível para VMs protegidas.

Vantagens da utilização do ponto final do servidor de metadados HTTPS

A utilização do ponto final HTTPS para consultar o servidor de metadados oferece as seguintes vantagens:

  • Melhora a segurança: ajuda a evitar o acesso não autorizado aos seus metadados confidenciais. Impede que um atacante consiga realizar qualquer uma das seguintes ações:

    • Roubar ou usar a identidade do servidor de metadados para obter acesso a uma VM
    • Visualizar ou adulterar metadados confidenciais antes de chegarem à VM
  • Reduz os custos: ajuda a evitar os custos associados a violações de segurança

Como funciona o processo

Para VMs protegidas com o ambiente convidado instalado, os seguintes processos ocorrem na sua VM:

  1. O Compute Engine cria três certificados da seguinte forma:

    • Um certificado de raiz autoassinado: um certificado único gerado para a VM. Este certificado só é gerado no primeiro arranque da VM.
    • Um certificado de identidade do servidor: um certificado para o servidor de metadados.
    • Um certificado de identidade do cliente: um certificado para o cliente. Este certificado não é colocado em cache no servidor de metadados e é recriado em cada chamada para o ponto final do certificado de cliente a partir do ambiente convidado.

      Para ver as localizações de armazenamento da identidade do cliente e dos certificados de raiz, consulte o artigo Onde são armazenados os certificados.

  2. No primeiro arranque, o Compute Engine transfere a parte pública do certificado de raiz para o ambiente convidado da VM através de uma variável UEFI gerada pela Google. Em seguida, este certificado de raiz é armazenado na VM.

  3. Periodicamente, o ambiente convidado pede um certificado de identidade do cliente. Quando isto acontece, o agente convidado transfere este certificado do servidor de metadados e valida-o através do certificado de raiz dessa VM.

Quando faz uma consulta ao ponto final do servidor de metadados HTTPS, especifica os certificados de identidade do cliente que são usados pelo servidor de metadados e pela VM para verificar se esta consulta está autorizada.

Ative a configuração automática de certificados

Se quiser que as suas instâncias ou projetos configurem automaticamente os certificados HTTPS MDS, defina a chave de metadados disable-https-mds-setup na sua instância ou projeto como FALSE.

Para mais informações, consulte o artigo Chaves de metadados predefinidas.

Onde são armazenados os certificados

As secções seguintes indicam a localização de armazenamento dos certificados de identidade de raiz e de cliente gerados pelo Compute Engine.

Certificados de raiz

CentOS/RHEL/Rocky

Os certificados de raiz para VMs do CentOS, Red Hat Enterprise Linux (RHEL) e Rocky Linux estão armazenados na seguinte localização:

/run/google-mds-mtls/root.crt

Debian/Ubuntu

Os certificados de raiz para VMs Debian e Ubuntu são armazenados na seguinte localização:

/run/google-mds-mtls/root.crt

Fedora

Os certificados de raiz para VMs do Fedora estão armazenados na seguinte localização:

/run/google-mds-mtls/root.crt

SLES

Os certificados de raiz para VMs do SUSE Linux Enterprise Server (SLES) são armazenados na seguinte localização:

/run/google-mds-mtls/root.crt

Windows

Os certificados de raiz para VMs do Windows são armazenados na seguinte localização:

C:\ProgramData\Google\ComputeEngine\mds-mtls-root.crt

Certificados de identidade do cliente

Os certificados de identidade do cliente estão acessíveis a todos os processos que estão a ser executados na VM. Isto é necessário para que todos os processos tenham acesso ao servidor de metadados através do ponto final HTTPS, semelhante ao ponto final HTTP. Para mais informações, consulte as Considerações de segurança dos metadados.

Linux

Os certificados de identidade do cliente para VMs Linux são armazenados na seguinte localização:

/run/google-mds-mtls/client.key

Windows

Os certificados de identidade do cliente para VMs do Windows são armazenados nas seguintes localizações:

  • C:\ProgramData\Google\ComputeEngine\mds-mtls-client.key

Ativar o armazenamento de certificados de raiz na loja fidedigna do SO

Se quiser que o Compute Engine adicione automaticamente o certificado de raiz do servidor de metadados HTTPS ao seu repositório de confiança do SO, defina a chave de metadados na sua instância ou projeto como TRUE.enable-https-mds-native-cert-store

Se ativar esta opção, o Compute Engine adiciona o certificado de raiz às seguintes localizações, além da localização predefinida.

CentOS/RHEL/Rocky

/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

Debian/Ubuntu

/etc/ssl/certs/ca-certificates.crt

Fedora

/etc/pki/tls/certs/ca-bundle.crt

SLES

/etc/ssl/ca-bundle.pem

Windows

Cert:\LocalMachine\Root

Para mais informações, consulte o artigo Chaves de metadados predefinidas.

Chaves de metadados predefinidas e personalizadas

Cada entrada de metadados é armazenada no servidor de metadados como pares de chave-valor. As chaves de metadados são sensíveis a maiúsculas e minúsculas. As chaves podem ser chaves de metadados predefinidas ou personalizadas.

Chaves de metadados predefinidas

As chaves de metadados predefinidas são chaves de metadados criadas pelo Compute Engine. Quando cria uma VM, o Compute Engine define automaticamente os valores de metadados para algumas destas chaves nessa VM, por exemplo, o ID da instância de VM ou o ID do projeto. Para chaves predefinidas em que o Compute Engine não define automaticamente um valor, pode escolher a partir de um conjunto de valores que estão disponíveis consoante a configuração do sistema. Por exemplo, para ativar o Início de sessão do SO para uma VM, pode definir o valor da chave predefinida enable-oslogin como TRUE para essa VM. Para desativar o Início de sessão do SO para essa VM, pode atualizar o valor da chave para FALSE. Só pode atualizar os valores destas chaves, mas não as chaves em si.

Para mais informações acerca das chaves de metadados predefinidas e uma lista destas chaves, consulte Chaves de metadados predefinidas.

Chaves de metadados personalizados

Os metadados personalizados permitem-lhe criar e usar os seus próprios pares de chave-valor de metadados numa VM individual ou num projeto. Pode adicionar novas chaves de metadados personalizados, atualizar os valores das chaves existentes e remover quaisquer entradas de metadados personalizados quando não precisar delas. A definição de metadados personalizados é útil para transmitir valores arbitrários às VMs num projeto. Também é útil para criar scripts de arranque e encerramento.

Para saber como pode adicionar, atualizar ou remover metadados personalizados para as suas VMs, consulte o artigo Configure metadados personalizados.

Tipos de metadados

As entradas de metadados da VM podem fornecer informações específicas de uma VM individual ou de um projeto. Os seus metadados são divididos em metadados de projeto, zonais e de instância, com base no âmbito em que define os metadados.

Metadados do projeto

Os metadados do projeto são definidos ao nível do projeto e fornecem informações que se aplicam a todas as VMs num projeto. Quando define estes metadados, as entradas de metadados são propagadas a todas as VMs nesse projeto.

Pode usar chaves de metadados predefinidas e personalizadas para definir metadados do projeto. Saiba mais sobre as chaves de metadados do projeto predefinidas e como definir metadados do projeto personalizados.

Metadados zonais

Os metadados zonais são definidos ao nível da zona num projeto e fornecem informações sobre as VMs nessa zona específica nesse projeto. Quando define metadados zonais, as entradas de metadados propagam-se a todas as VMs nessa zona configurada nesse projeto. Quando comparados com os metadados do projeto, os metadados zonais ajudam no isolamento de falhas e oferecem uma maior fiabilidade.

O Compute Engine não fornece chaves predefinidas para metadados zonais. Tem de criar as suas próprias chaves de metadados personalizados para definir metadados zonais. Saiba mais sobre como definir metadados zonais personalizados.

Metadados da instância

Os metadados da instância fornecem informações sobre uma instância de VM específica. Define os metadados de instância separadamente para cada instância de VM individual.

Pode usar chaves de metadados predefinidas e personalizadas para definir metadados de instâncias. Saiba mais sobre as chaves de metadados de instâncias predefinidas e como definir metadados de instâncias personalizados.

Como os metadados estão organizados

O Compute Engine armazena e mantém as chaves e os valores de metadados para as suas VMs e projetos em listas de diretórios. Consoante o tipo de metadados, o Compute Engine armazena as entradas de metadados num dos seguintes diretórios:

Tipo de metadados Diretório
Metadados de projetos e zonais
  • Ponto final de HTTP:
    http://metadata.google.internal/computeMetadata/v1/project
  • Ponto final do HTTPS (Pré-visualização):
    https://metadata.google.internal/computeMetadata/v1/project
Metadados da instância
  • Ponto final de HTTP:
    http://metadata.google.internal/computeMetadata/v1/instance
  • Ponto final HTTPS:
    https://metadata.google.internal/computeMetadata/v1/instance

Cada diretório armazena entradas de metadados sob a forma de pares de chave/valor. Algumas entradas de metadados também são diretórios que contêm outras chaves de metadados. As entradas de metadados que funcionam como diretórios são marcadas por uma barra invertida no final (/) no nome da chave de metadados. Por exemplo, /project/attributes/ é um diretório no diretório project/ que contém outras chaves de metadados. Para criar a sua própria ficha do diretório de metadados, tem de usar uma barra invertida (/) no nome da chave de metadados quando criar a sua entrada de metadados personalizada.

As entradas de metadados zonais e de projetos são armazenadas no mesmo diretório project/. Se definir valores diferentes para as mesmas chaves de metadados personalizados para VMs ao nível do projeto e ao nível da zona, os valores de metadados zonais dessas chaves têm precedência sobre os valores de metadados do projeto nas respetivas zonas.

  • Se adicionar um valor de metadados zonais para uma chave de metadados que já tenha um valor de metadados do projeto, o Compute Engine substitui o valor de metadados do projeto para as VMs nesta zona especificada e atualiza o diretório /project com o valor zonal.
  • Se adicionar um novo valor de metadados do projeto para uma chave de metadados que já tenha um valor de metadados zonais, nada muda. O Compute Engine retém o valor dos metadados zonais no diretório /project na zona específica.
  • Se não especificar um valor de metadados zonais para uma chave de metadados personalizada numa zona específica, mas a chave tiver um valor de metadados do projeto, as suas VMs continuam a ter os valores de metadados do projeto nessas zonas.

Por exemplo, suponha que define um par de metadados do projeto de key-1=value-1. Suponha que também define um par de metadados zonais key-1=zonal-value-1 apenas para a zona us-central1-a. Todas as VMs na zona us-central1-a do seu projeto herdam key-1=zonal-value1 como o par de metadados. O par de metadados permanece key-1=value-1 para todas as VMs noutras zonas onde não tenha definido metadados zonais para key-1.

O que se segue?