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.

Neste documento, apresentamos uma visão geral sobre metadados da VM e explicamos os tipos e propriedades desses metadados.

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 uma opção de programação de VMs 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 parceiro são um tipo específico de metadados de instância.Os serviços do Google Cloud podem usar atributos de parceiro para criar um namespace em que é possível 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.

Por exemplo, ao usar identidades gerenciadas de carga de trabalho para o Compute Engine, você pode especificar os detalhes da configuração nas entradas de metadados do namespace desse 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 de cliente e chaves privadas que você grava no servidor. O Google recomenda cuidado ao gravar valores confidenciais no servidor de metadados ou ao executar processos de terceiros. É preciso isolar em sandbox qualquer processo que não deva ter acesso ao servidor de metadados.

Endpoints do servidor de metadados

O servidor de metadados pode ser acessado pelos seguintes endpoints:

  • Um endpoint HTTP: http://metadata.google.internal/computeMetadata/v1. Esse endpoint pode ser acessado de todas as VMs, incluindo as protegidas.
  • Um endpoint HTTPS: https://metadata.google.internal/computeMetadata/v1. Esse endpoint só pode ser acessado em VMs protegidas.

Endpoint do servidor de metadados HTTPS

O endpoint do servidor de metadados HTTPS (https://metadata.google.internal/computeMetadata/v1) fornece segurança para transmissão de informações entre o servidor de metadados e a VM. Esse endpoint está disponível apenas para VMs protegidas.

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

Usar o 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 seus metadados sensíveis. Isso impede que um invasor realize qualquer uma das seguintes ações:

    • Falsificação ou representação do servidor de metadados para acessar uma VM
    • Visualizar ou adulterar metadados sensíveis antes que eles cheguem à VM
  • Reduz custos: ajuda a evitar os custos associados a violações de segurança.

Como funciona o processo

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

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

    • Um certificado raiz autoassinado: um certificado exclusivo gerado para a VM. Esse certificado só é gerado na primeira inicialização 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. Esse certificado não é armazenado em cache no servidor de metadados e é recriado em cada chamada para o endpoint do certificado do cliente no ambiente de convidado.

      Para saber onde os certificados de identidade do cliente e raiz são armazenados, 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 convidado da VM usando uma variável UEFI gerada pelo Google. Esse certificado raiz é armazenado na VM.

  3. Periodicamente, o ambiente convidado solicita um certificado de identidade do cliente. Quando isso acontece, o agente convidado baixa o 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 MDS HTTPS, defina a chave de metadados disable-https-mds-setup na instância ou projeto como FALSE.

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 de identidade raiz e do cliente gerados pelo Compute Engine.

Certificados raiz

CentOS/RHEL/Rocky

Os certificados raiz para VMs 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 do 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 das 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 estão acessíveis a 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 HTTP. Para mais informações, consulte Considerações sobre a segurança de metadados.

Linux

Os certificados de identidade do cliente para VMs 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.

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. Por exemplo, para ativar o Login do SO em uma VM, defina o valor da chave predefinida enable-oslogin como TRUE para essa VM. Para desativar o Login do SO para essa VM, atualize o valor da chave para FALSE. 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, zonais e de instância, com base no escopo em que você os define.

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 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 de projeto.

Metadados de zona

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

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

.

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 de projeto e zonais
  • Endpoint HTTP:
    http://metadata.google.internal/computeMetadata/v1/project
  • Endpoint HTTPS (Pré-lançamento):
    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.

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 de 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 de key-1=value-1 no projeto. Suponha que você também defina um par de metadados zonais 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 zonais para key-1.

A seguir