Sobre os metadados da VM

Cada instância de máquina virtual (VM) armazena os metadados em um servidor de metadados. O acesso da VM à API do servidor de metadados é fornecido automaticamente, sem qualquer autorização extra. O Compute Engine mantém as chaves e os valores de metadados das VMs e projetos em diretórios. Cada diretório armazena entradas de metadados na forma de pares de chave-valor. Alguns diretórios contêm subdiretórios.

Este documento oferece uma visão geral dos metadados da VM e explica os tipos e as propriedades deles.

Usos dos metadados da VM

Nas seções a seguir, descrevemos alguns cenários em que é possível usar entradas de metadados para gerenciar as VMs.

Scripts de inicialização e desligamento

O servidor de metadados é útil principalmente quando usado com os scripts de inicialização e desligamento. Você pode usá-lo para receber programaticamente informações exclusivas sobre uma VM sem a necessidade de autorização extra.

Por exemplo, você pode escrever um script de inicialização que busca o par de chave-valor de metadados para o IP externo de uma VM e usar esse IP no seu script de configuração de banco de dados. Como as chaves de metadados predefinidas do Compute Engine são as mesmas em todas as VMs, é possível reutilizar o script sem precisar atualizá-lo para cada VM. Com isso, é possível criar um código mais robusto para os aplicativos.

Manutenção do host

O servidor de metadados fornece informações sobre a opção de programação de uma VM no diretório de metadados scheduling/ usando a chave maintenance-event. Use esses valores de metadados para notificar quando um evento de manutenção estiver prestes a acontecer e preparar o ambiente para o evento. Para mais informações, consulte Receber avisos de migração em tempo real.

Atributos de convidado

Os atributos de convidado são um tipo específico de metadados personalizados em que os aplicativos podem gravar enquanto estão sendo executados nas VMs. Use atributos de convidado somente em casos de uso que exijam pequenas quantidades de dados que não mudam com frequência. Para mais informações sobre os atributos de convidado, consulte Definir e consultar atributos de convidado.

Atributos do parceiro

Os atributos de parceiros são um tipo específico de metadados de instância. Cloud de Confiance Os serviços podem usar atributos de parceiros para criar um namespace em que podem definir entradas de metadados de instância. É possível definir, atualizar, excluir e visualizar os valores das entradas de metadados da instância para configurar esse serviço.

Considerações sobre a segurança dos metadados

Quando você faz uma solicitação para receber informações do servidor de metadados, a solicitação e a resposta de metadados subsequente nunca deixam o host físico que está executando a VM.

No entanto, qualquer processo que possa consultar o URL de metadados, tem acesso a todos os valores no servidor de metadados. Isso inclui todos os valores de metadados personalizados, certificados do cliente e chaves privadas gravadas no servidor. O Google recomenda cuidado ao gravar valores confidenciais no servidor de metadados ou ao executar processos de terceiros. É necessário colocar em sandbox qualquer processo que não possa acessar o servidor de metadados.

Endpoints do servidor de metadados

O servidor de metadados pode ser acessado pelos endpoints HTTP e HTTPS.

Endpoints do servidor de metadados HTTP

Os endpoints HTTP podem ser acessados em todos os tipos de instâncias de computação, incluindo VMs protegidas.

É possível usar os seguintes endpoints para acessar o servidor de metadados usando HTTP:

  • Nome do DNS (recomendado): http://metadata.google.internal/computeMetadata/v1
  • Endereço IPv4: http://169.254.169.254/computeMetadata/v1
  • Endereço IPv6 (somente para VMs somente IPv6): http://[fd20:ce::254]/computeMetadata/v1

Endpoints do servidor de metadados HTTPS

Os endpoints do servidor de metadados HTTPS fornecem segurança para transmissão de informações entre o servidor de metadados e a VM. Esses endpoints estão disponíveis apenas para VMs protegidas.

É possível usar os seguintes endpoints para acessar o servidor de metadados de uma VM protegida usando HTTPS:

  • Nome do DNS (recomendado): https://metadata.google.internal/computeMetadata/v1
  • Endereço IPv4: https://169.254.169.254/computeMetadata/v1
  • Endereço IPv6 (somente para VMs somente IPv6): https://[fd20:ce::254]/computeMetadata/v1

Benefícios de usar o endpoint do servidor de metadados HTTPS

O uso do endpoint HTTPS para consultar o servidor de metadados oferece os seguintes benefícios:

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

    • Falsificação ou representação do servidor de metadados para acessar uma VM
    • Visualização ou adulteração de metadados confidenciais antes que eles cheguem à VM
  • Reduz os custos: ajuda a evitar os custos associados a violações de segurança

Como o processo funciona

Para VMs protegidas que têm o ambiente de convidado instalado, os seguintes processos ocorrem na VM:

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

    • Um certificado raiz autoassinado:um certificado exclusivo que o Compute Engine gera para a VM. O Compute Engine gera esse certificado apenas na primeira inicialização da VM, e ele é válido por 50 anos.
    • Um certificado de identidade do servidor:um certificado para o servidor de metadados.
    • Um certificado de identidade do cliente:um certificado para o cliente. O servidor de metadados não armazena esse certificado em cache. O ambiente de convidado recebe um novo certificado do servidor de metadados em cada chamada para o endpoint do certificado do cliente. Esse certificado é válido por sete dias. O ambiente de convidado precisa chamar o endpoint pelo menos a cada sete dias para receber um novo certificado e manter um válido.

      Para locais de armazenamento de certificados raiz e de identidade do cliente, consulte Onde os certificados são armazenados.

  2. Na primeira inicialização, o Compute Engine transfere a parte pública do certificado raiz para o ambiente de convidado da VM usando uma variável UEFI gerada pelo Google. Esse certificado raiz é armazenado na VM.

  3. Periodicamente, o ambiente de convidado solicita um certificado de identidade do cliente. Quando isso acontece, o agente de convidado baixa esse certificado do servidor de metadados e o valida usando o certificado raiz da VM.

Ao fazer uma consulta ao endpoint do servidor de metadados HTTPS, você especifica os certificados de identidade do cliente, que são usados pelo servidor de metadados e pela VM para verificar se essa consulta está autorizada.

Ativar a configuração automática de certificados

Se você quiser que suas instâncias ou projetos configurem automaticamente os certificados HTTPS MDS, defina a chave de metadados na instância ou no projeto como.disable-https-mds-setupFALSE

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

Onde os certificados são armazenados

As seções a seguir listam o local de armazenamento dos certificados raiz e de identidade do cliente gerados pelo Compute Engine.

Certificados raiz

CentOS/RHEL/Rocky

Os certificados raiz para VMs do CentOS, Red Hat Enterprise Linux (RHEL) e Rocky Linux são armazenados no seguinte local:

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

Debian/Ubuntu

Os certificados raiz para VMs do Debian e Ubuntu são armazenados no seguinte local:

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

Fedora

Os certificados raiz para VMs do Fedora são armazenados no seguinte local:

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

SLES

Os certificados raiz para VMs do SUSE Linux Enterprise Server (SLES) são armazenados no seguinte local:

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

Windows

Os certificados raiz para VMs do Windows são armazenados no seguinte local:

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

Certificados de identidade do cliente

Os certificados de identidade do cliente podem ser acessados por todos os processos em execução na VM. Isso é necessário para que todos os processos tenham acesso ao servidor de metadados usando o endpoint HTTPS, semelhante ao endpoint HTTP. Para mais informações, consulte Considerações sobre a segurança dos metadados.

Linux

Os certificados de identidade do cliente para VMs do Linux são armazenados no seguinte local:

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

Windows

Os certificados de identidade do cliente para VMs do Windows são armazenados nos seguintes locais:

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

Como ativar o armazenamento de certificados raiz no repositório de confiança do SO

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

Se você ativar essa opção, o Compute Engine vai adicionar o certificado raiz aos seguintes locais, além do local padrão.

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 Chaves de metadados predefinidas.

Rotação de certificados raiz

O certificado raiz do servidor de metadados HTTPS é girado sempre que uma instância é iniciada e interrompida. Quando isso ocorre, todos os certificados baseados no certificado raiz anterior não são mais válidos para fazer conexões HTTPS com o servidor de metadados. Se a configuração automática de certificados estiver ativada, o ambiente de convidado vai atualizar os certificados raiz e do cliente anteriores no sistema de arquivos usando o mesmo processo da primeira inicialização.

Chaves de metadados predefinidas e personalizadas

Cada entrada de metadados é armazenada no servidor de metadados como pares de chave-valor. As chaves de metadados diferenciam maiúsculas de minúsculas. Suas chaves podem ser predefinidas ou personalizadas.

Chaves de metadados predefinidas

As chaves de metadados predefinidas são chaves de metadados criadas pelo Compute Engine. Quando você cria uma VM, o Compute Engine define automaticamente os valores de metadados de algumas chaves nessa VM, por exemplo, o ID da instância da VM ou o ID do projeto. Para chaves predefinidas em que o Compute Engine não define automaticamente um valor, é possível escolher um conjunto de valores disponíveis dependendo da configuração do sistema. Só é possível atualizar os valores dessas chaves, mas não as chaves em si.

Para mais informações sobre chaves de metadados predefinidas e uma lista delas, consulte Chaves de metadados predefinidas.

Chaves de metadados personalizadas

Com os metadados personalizados, é possível criar e usar seus próprios pares de chave-valor de metadados em uma VM individual ou um projeto. É possível adicionar novas chaves de metadados personalizadas, atualizar os valores das chaves existentes e remover entradas de metadados personalizados quando não precisar delas. Definir metadados personalizados é útil para transmitir valores arbitrários às VMs em um projeto. Também é útil para criar scripts de inicialização e desligamento.

Para saber como adicionar, atualizar ou remover metadados personalizados das VMs, consulte Configurar metadados personalizados.

Tipos de metadados

As entradas de metadados da VM podem fornecer informações específicas para uma VM individual ou um projeto. Seus metadados são divididos em metadados de projeto, zona e instância, com base no escopo em que você define os metadados.

Metadados do projeto

Os metadados do projeto são definidos no escopo do projeto e fornecem informações que se aplicam a todas as VMs em um projeto. Quando você define esses metadados, as entradas de metadados são propagadas para todas as VMs do projeto.

Você pode usar chaves de metadados predefinidas e personalizadas para definir metadados do projeto. Saiba mais sobre chaves de metadados de projeto predefinidas e como definir metadados personalizados do projeto.

Metadados da zona

Os metadados da zona são definidos em um escopo de zona em um projeto e fornecem informações sobre VMs nessa zona específica do projeto. Quando você define metadados da zona, as entradas de metadados são propagadas para todas as VMs nessa zona configurada do projeto. Quando comparados aos metadados do projeto, os metadados da zona ajudam no isolamento de falhas e oferecem maior confiabilidade.

O Compute Engine não fornece chaves predefinidas para metadados da zona. É necessário criar suas próprias chaves de metadados personalizadas para definir metadados da zona. Saiba mais sobre como definir metadados personalizados da zona.

Metadados de instância

Os metadados de instância fornecem informações sobre uma instância de VM específica. Você define os metadados de instâncias separadamente para cada instância de VM.

Você pode usar as chaves de metadados predefinidas e personalizadas para definir metadados de instância. Saiba mais sobre chaves de metadados de instância predefinidas e como Definir metadados de instância personalizados.

Como os metadados são organizados

O Compute Engine armazena e mantém as chaves e os valores de metadados das VMs e projetos em listagens de diretórios. Dependendo do tipo de metadados, o Compute Engine armazena entradas de metadados em um dos seguintes diretórios:

Tipo de metadados Diretório
Metadados do projeto e da zona
  • Endpoint HTTP:
    http://metadata.google.internal/computeMetadata/v1/project
  • Endpoint HTTPS:
    https://metadata.google.internal/computeMetadata/v1/project
Metadados de instância
  • Endpoint HTTP:
    http://metadata.google.internal/computeMetadata/v1/instance
  • Endpoint HTTPS:
    https://metadata.google.internal/computeMetadata/v1/instance

Cada diretório armazena entradas de metadados na forma de pares de chave-valor. Algumas entradas de metadados são diretórios em que há outras chaves de metadados. As entradas de metadados que funcionam como diretórios são marcadas por uma barra à direita (/) 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 sua própria listagem do diretório de metadados, use uma barra à direita (/) no nome da chave de metadados ao criar sua entrada de metadados personalizada.

Ao consultar um endpoint de metadados, o formato do corpo da resposta depende do endpoint. Se você consultar um endpoint que armazena um único valor, como hostname, o corpo da resposta vai conter esse valor como texto simples. Se você consultar um endpoint que atua como um diretório, como /project/attributes/, o corpo da resposta vai conter uma lista das entradas nesse diretório, com uma entrada por linha.

Para mais informações sobre como consultar endpoints de metadados, incluindo como consultar diretórios de forma recursiva ou formatar a resposta como JSON, consulte Visualizar e consultar metadados da VM.

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

  • Se você adicionar um valor de metadados de zona a uma chave de metadados que já tenha um valor de metadados do projeto, o Compute Engine vai substituir o valor de metadados do projeto nas VMs da zona especificada e atualizar o diretório /project com o valor da zona.
  • Se você adicionar um novo valor de metadados do projeto a uma chave de metadados que já tenha um valor de metadados da zona, nada será alterado. O Compute Engine mantém o valor de metadados de zona no diretório /project da zona específica.
  • Se você não especificar um valor de metadados de zona para uma chave de metadados personalizada em uma zona específica, mas a chave tiver um valor de metadados do projeto, as VMs continuarão tendo os valores de metadados do projeto nessas zonas.

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

A seguir