Obtendo Metadados da Instância

O serviço de metadados da instância (IMDS) fornece informações sobre uma instância em execução, incluindo uma variedade de detalhes sobre a instância, suas placas de interface de rede virtual (VNICs) anexadas, seus anexos de volume ativados para multipath anexados e quaisquer metadados personalizados que você definir. O IMDS também fornece informações para executar cloud-init, que você pode usar para várias tarefas de inicialização do sistema.

Você pode encontrar algumas dessas informações na Console na página Detalhes da Instância ou obter todas elas fazendo log-in na instância e usando o serviço de metadados. O serviço é executado em cada instância e é um ponto final HTTP que faz listening em 169.254.169.254. Se uma instância tiver várias VNICs, envie a solicitação usando a VNIC principal.

Importante

Para aumentar a segurança das solicitações de metadados, recomendamos que você atualize todos os aplicativos para usar o ponto final IMDS versão 2, se suportado pela imagem. Em seguida, desative as solicitações para o IMDS versão 1.

Para obter permissões, consulte Política Obrigatória do Serviço IAM para Trabalhar com Instâncias.

Upgrade para o Serviço de Metadados da Instância v2

O serviço de metadados da instância está disponível nas versões 1 e 2. O IMDSv2 oferece maior segurança em comparação com o v1.

Quando você desativa o IMDSv1 e permite solicitações apenas para o IMDSv2, ocorrem as seguintes mudanças:

  • Todas as solicitações devem ser feitas aos pontos finais do v2 (/opc/v2). As solicitações para os pontos finais do v1 (/opc/v1 e /openstack) são rejeitadas com um erro 404 não encontrado.
  • Todas as solicitações aos pontos finais do v2 devem incluir um cabeçalho de autorização. As solicitações que não incluem o cabeçalho de autorização são rejeitadas.
  • As solicitações que são encaminhadas usando os cabeçalhos HTTP Forwarded, X-Forwarded-For ou X-Forwarded-Host são rejeitadas.

Para fazer upgrade do serviço de metadados da instância em uma instância de computação, use as seguintes etapas de alto nível:

  1. Verifique se a instância usa uma imagem que suporta o IMDSv2.
  2. Identifique solicitações para os pontos finais legados do v1.
  3. Migre todos os aplicativos para suportar os pontos finais do v2.
  4. Desative todas as solicitações para os pontos finais legados do v1.

Imagens Suportadas do IMDSv2

O IMDSv2 é suportado nas seguintes imagens de plataforma:

  • Imagens do Oracle Autonomous Linux 8.x
  • Imagens do Oracle Autonomous Linux 7.x liberadas em junho de 2020 ou depois
  • Imagens do Oracle Linux 8.x, Oracle Linux 7.x e Oracle Linux 6.x lançadas em julho de 2020 ou depois

Outras imagens de plataforma, a maioria das imagens personalizadas e a maioria das imagens de Marketplace não suportam IMDSv2. Imagens personalizadas do Linux poderão suportar o IMDSv2 se o cloud-init for atualizado para a versão 20.3 ou mais recente e o Oracle Cloud Agent for atualizado para a versão 0.0.19 ou mais recente. Imagens personalizadas do Windows poderão suportar o IMDSv2 se o Oracle Cloud Agent for atualizado para a versão 1.0.0.0 ou mais recente; o cloudbase-init não suporta o IMDSv2.

Identificando Solicitações para os Pontos Finais Legados do IMDSv1

Para identificar os pontos finais do IMDS específicos, aos quais as solicitações estão sendo feitas e os agentes que estão fazendo as solicitações, use a métrica InstanceMetadataRequests.

Para identificar quais versões do IMDS estão ativadas para uma instância, execute uma das seguintes ações:

  • Usando a Console:
    1. Abra o menu de navegação e clique em Compute. No serviço Compute, clique em Instâncias.
    2. Clique na instância em que você está interessado.
    3. Na seção Detalhes da Instância, ao lado de Serviço de metadados da instância, observe os números das versões.
  • Usando a API: Use a operação GetInstance ou ListInstances. Na resposta, o atributo areLegacyImdsEndpointsDisabled no objeto InstanceOptions retornará false se o IMDSv1 e o IMDSv2 estiverem ativados para a instância. Ele retornará true se o IMDSv1 estiver desativado.

Desativando Solicitações para os Pontos Finais IMDSv1 Legados

Depois de migrar todos os aplicativos para que eles façam solicitações apenas aos pontos finais do IMDSv2, desative todas as solicitações aos pontos finais legados do IMDSv1.
Importante

Verifique se a instância não usa os pontos finais do IMDSv1 antes de desativar as solicitações para o IMDSv1. Se a instância ainda depender do IMDSv1 quando você desativar as solicitações, talvez você perca alguma funcionalidade.

Execute um dos seguintes procedimentos:

  • Usando a Console:
    1. Abra o menu de navegação e clique em Compute. No serviço Compute, clique em Instâncias.
    2. Clique na instância em que você está interessado.
    3. Na seção Detalhes da Instância, ao lado de Serviço de metadados da instância, clique em Editar.
    4. Para Versão permitida do IMDS, selecione a opção Somente Versão 2.
    5. Clique em Salvar alterações.
  • Usando a API: Use a operação UpdateInstance. No corpo da solicitação, no objeto InstanceOptions, informe o valor true para o atributo areLegacyImdsEndpointsDisabled.
Observação

Se você desativar o IMDSv1 em uma instância que não suporta o IMDSv2, talvez não consiga estabelecer conexão com instância quando iniciá-la. Para reativar o IMDSv1: usando a Console, na página Detalhes da Instância, ao lado de Serviço de Metadados da Instância, clique em Editar. Selecione a opção Versão 1 e Versão 2, salve suas alterações e reinicie a instância. Usando a API, use a operação UpdateInstance.

Throttling de Solicitações

O Oracle Cloud Infrastructure aplica o throttling a solicitações de serviço de metadados da instância para impedir o uso acidental ou abusivo de recursos. Para evitar throttling, em vez de consultar credenciais de segurança para cada transação, armazene em cache as credenciais até que elas estejam próximas da expiração.

Se você fizer muitas solicitações muito rapidamente, talvez veja algumas solicitações bem-sucedidas e outras falhas. Se você estiver tendo problemas de throttling, a Oracle recomenda que você repita a operação usando um back-off exponencial.

Obtendo Metadados da Instância nas Imagens da Plataforma

Você pode obter os metadados da instância para imagens de plataforma usando o cURL nas instâncias do Linux. Nas instâncias do Windows, você pode usar o cURL (se suportado pela versão do Windows) ou um browser de internet.

Todas as solicitações para o serviço de metadados v2 da instância devem incluir o seguinte cabeçalho:

Authorization: Bearer Oracle

Os metadados da instância acessados usando o IMDSv2 estão disponíveis nos seguintes URLs raiz:

  • Todas as informações da instância:

    http://169.254.169.254/opc/v2/instance/
  • Informações sobre as VNICs anexadas à instância:

    http://169.254.169.254/opc/v2/vnics/
  • Informações sobre um volume anexado à instância com anexo ativado para multipath:

    http://169.254.169.254/opc/v2/volumeAttachments/

Os metadados da instância acessados usando o IMDSv1 estão disponíveis nos URLs raiz a seguir. Nenhum cabeçalho é necessário.

  • Todas as informações da instância:

    http://169.254.169.254/opc/v1/instance/
  • Informações sobre as VNICs anexadas à instância:

    http://169.254.169.254/opc/v1/vnics/
  • Informações sobre um volume anexado à instância com anexo ativado para multipath:

    http://169.254.169.254/opc/v1/volumeAttachments/

Os valores de chave de metadados específicas estão disponíveis como subcaminhos abaixo do URL raiz.

Para obter os metadados das instâncias do Linux

  1. Conecte-se a uma instância do Linux usando SSH.
  2. Use o cURL para emitir uma solicitação GET para o URL de metadados da instância no qual você está interessado. Por exemplo:

    curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/instance/

Para obter os metadados das instâncias do Windows

As etapas para obter metadados em uma instância do Windows dependem de qual versão do serviço de metadados da instância você está solicitando metadados.

Para obter metadados da instância do Windows usando o IMDSv2:

  1. Conecte-se a uma instância do Windows usando uma conexão de Área de Trabalho Remota.
  2. Dependendo de sua versão do Windows incluir ou não o cURL, siga um destes procedimentos:

    • Se sua versão do Windows incluir o cURL, use o cURL para emitir uma solicitação GET para o URL de metadados da instância do seu interesse. Por exemplo:

      curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/instance/
    • Se sua versão do Windows não incluir o cURL, você poderá obter os metadados da instância no seu browser de internet. Navegue até o URL de metadados da instância do seu interesse e informe uma solicitação que inclua o cabeçalho de autorização. Consulte as instruções do browser para obter mais informações sobre como incluir cabeçalhos em uma solicitação. Talvez seja necessário instalar uma extensão de browser de terceiros que permita incluir cabeçalhos de solicitação.

Para obter metadados da instância do Windows usando o IMDSv1:

  1. Conecte-se a uma instância do Windows usando uma conexão de Área de Trabalho Remota.
  2. Abra um browser de Internet e, em seguida, navegue até o URL de metadados da instância em que você está interessado.

Repetições para Metadados da Instância

O serviço de metadados da instância passa regularmente por períodos curtos de inatividade para manutenção. Portanto, quando você tenta acessar os pontos finais do IMDS, eles podem não estar disponíveis. Como melhor prática, implemente a lógica de repetição ao acessar pontos finais do IMDS. A estratégia a seguir é recomendada: tente novamente até três vezes com um timeout de 30 segundos se receber uma resposta 404, 429 ou 5xx. Para obter mais informações e exemplos, consulte a documentação do SDK para Java.

Chaves de Metadados

Os metadados da instância incluem chaves de metadados padrão que são definidas pelo serviço Compute e não podem ser editadas, bem como chaves de metadados personalizadas que você cria.

Algumas entradas de metadados são diretórios que contêm chaves de metadados adicionais. Nas tabelas a seguir, as entradas com uma barra à direita indicam um diretório. Por exemplo, regionInfo/ é um diretório que contém outras chaves de metadados.

Chaves de Metadados de uma Instância

Os metadados a seguir sobre uma instância estão disponíveis. Os caminhos são relativos a http://169.254.169.254/opc/v2/instance/.

Entrada de Metadados Descrição
availabilityDomain

O domínio de disponibilidade no qual a instância está em execução. Esse nome inclui o prefixo específico da tenancy para o nome do domínio de disponibilidade.

Exemplo: Uocm:PHX-AD-1

faultDomain

O nome do domínio de falha no qual a instância está sendo executada.

Exemplo: FAULT-DOMAIN-1

compartmentId

O OCID  do compartimento que contém a instância.

displayName O nome simples da instância.
hostname O nome de host da instância.
id O OCID da instância.
image O OCID da imagem usada para inicializar a instância.
metadata/

Um diretório que contém quaisquer metadados personalizados fornecidos para a instância.

Para consultar os metadados de uma chave de metadados personalizada específica, use metadata/<key-name>, em que <key-name> é o nome da chave que você definiu ao criar a instância.

metadata/ssh_authorized_keys Para instâncias do Linux, a chave SSH pública que foi fornecida ao criar a instância.
metadata/user_data Dados do usuário a serem usados por cloud-init ou cloudbase-init para executar scripts personalizados ou fornecer configuração personalizada.
region

A região que contém o domínio de disponibilidade no qual a instância está sendo executada.

Para as regiões us-phoenix-1 e us-ashburn-1, phx e iad são retornados, respectivamente. Para todas as outras regiões, o identificador de região completo é retornado.

Exemplos: phx, eu-frankfurt-1

canonicalRegionName

O identificador da região que contém o domínio de disponibilidade no qual a instância está sendo executada.

Exemplo: us-phoenix-1

ociAdName

O domínio de disponibilidade no qual a instância está em execução. Esse nome é usado internamente e corresponde ao label do data center.

Exemplo: phx-ad-1

regionInfo/ Um diretório que contém informações sobre a região que contém o domínio de disponibilidade no qual a instância está sendo executada.
regionInfo/realmKey

A chave para o realm no qual a região está.

Exemplo: oc1

regionInfo/realmDomainComponent

O domínio do realm.

Exemplo: oraclecloud.com

regionInfo/regionKey

A chave de 3 letras para a região.

Exemplo: PHX

regionInfo/regionIdentifier

O identificador da região.

Exemplo: us-phoenix-1

shape A forma da instância. A forma determina o número de CPUs e a quantidade de memória alocada para a instância. Você pode enumerar todas as formas disponíveis chamando a operação ListShapes.
state

O estado do ciclo de vida atual da instância. Para obter uma lista de valores permitidos, consulte Instância.

Exemplo: Running

timeCreated A data e a hora em que a instância foi criada, no formato de timestamp UNIX em milissegundos desde Epoch.
agentConfig/ Um diretório que contém informações sobre o software Oracle Cloud Agent e plug-ins em execução na instância.
agentConfig/monitoringDisabled

Um valor booliano que indica se o software Oracle Cloud Agent pode reunir métricas de desempenho e monitorar a instância usando os plug-ins de monitoramento.

Os plug-ins de monitoramento são controlados por esse parâmetro e pela configuração por plug-in no objeto pluginsConfig.

agentConfig/managementDisabled

Um valor booliano que indica se o software Oracle Cloud Agent pode executar todos os plug-ins de gerenciamento disponíveis.

Os plug-ins de gerenciamento são controlados por esse parâmetro e pela configuração por plug-in no objeto pluginsConfig.

agentConfig/allPluginsDisabled Um valor booliano que indica se o Oracle Cloud Agent pode executar todos os plug-ins disponíveis. Isso inclui os plugins de gerenciamento e monitoramento.
agentConfig/pluginsConfig/ Um diretório que contém informações sobre os plug-ins que o Oracle Cloud Agent gerencia na instância.
agentConfig/pluginsConfig/name O nome do plug-in.
agentConfig/pluginsConfig/desiredState

Se o plug-in deve ser ativado ou desativado.

Para ativar os plug-ins de monitoramento e gerenciamento, os atributos monitoringDisabled e managementDisabled também devem ser definidos como falso.

freeformTags/ Um diretório que contém todas as tags de formato livre que são adicionadas à instância.
definedTags/ Um diretório que contém quaisquer tags definidas que são adicionadas à instância.

Aqui está um exemplo de resposta que mostra todas as informações de uma instância:

{
  "availabilityDomain" : "EMIr:PHX-AD-1",
  "faultDomain" : "FAULT-DOMAIN-3",
  "compartmentId" : "ocid1.tenancy.oc1..exampleuniqueID",
  "displayName" : "my-example-instance",
  "hostname" : "my-hostname",
  "id" : "ocid1.instance.oc1.phx.exampleuniqueID",
  "image" : "ocid1.image.oc1.phx.exampleuniqueID",
  "metadata" : {
    "ssh_authorized_keys" : "example-ssh-key"
  },
  "region" : "phx",
  "canonicalRegionName" : "us-phoenix-1",
  "ociAdName" : "phx-ad-1",
  "regionInfo" : {
    "realmKey" : "oc1",
    "realmDomainComponent" : "oraclecloud.com",
    "regionKey" : "PHX",
    "regionIdentifier" : "us-phoenix-1"
  },
  "shape" : "VM.Standard.E3.Flex",
  "state" : "Running",
  "timeCreated" : 1600381928581,
  "agentConfig" : {
    "monitoringDisabled" : false,
    "managementDisabled" : false,
    "allPluginsDisabled" : false,
    "pluginsConfig" : [ {
      "name" : "OS Management Service Agent",
      "desiredState" : "ENABLED"
    }, {
      "name" : "Custom Logs Monitoring",
      "desiredState" : "ENABLED"
    }, {
      "name" : "Compute Instance Run Command",
      "desiredState" : "ENABLED"
    }, {
      "name" : "Compute Instance Monitoring",
      "desiredState" : "ENABLED"
    } ]
  },
  "freeformTags": {
    "Department": "Finance"
  },
  "definedTags": {
    "Operations": {
      "CostCenter": "42"
    }
  }
}

Chaves de Metadados para VNICs Anexadas

Estão disponíveis a seguir os metadados sobre as VNICs anexadas à instância. Os caminhos são relativos a http://169.254.169.254/opc/v2/vnics/.

Entrada de Metadados Descrição
vnicId O OCID da VNIC.
privateIp O endereço IP privado do objeto privateIp principal na VNIC. O endereço está dentro do CIDR da sub-rede da VNIC.
vlanTag

A tag de VLAN designada pela Oracle da VNIC anexada.

Se a VNIC pertencer a uma VLAN como parte da Solução Oracle Cloud VMware, o valor vlanTag será o valor do atributo vlanTag da VLAN. Veja Vlan.

macAddr

O endereço MAC da VNIC.

Se a VNIC pertencer a uma VLAN como parte da Solução Oracle Cloud VMware, o endereço MAC será aprendido. Se a VNIC pertencer a uma sub-rede, o endereço MAC será um valor estático fornecido pela Oracle.

virtualRouterIp O endereço IP do roteador virtual.
subnetCidrBlock O bloco CIDR da sub-rede.
nicIndex Qual placa de interface de rede (NIC) física a VNIC usa. Algumas formas de instância bare metal têm duas NICs físicas ativas (0 e 1). Se você adicionar uma VNIC secundária a uma dessas instâncias, poderá especificar qual NIC a VNIC usará. Para obter mais informações, consulte VNICs (Virtual Network Interface Cards).

Veja um exemplo de resposta que mostra as VNICs anexadas a uma instância:

[ {
    "vnicId" : "ocid1.vnic.oc1.phx.exampleuniqueID",
    "privateIp" : "10.0.3.6",
    "vlanTag" : 11,
    "macAddr" : "00:00:00:00:00:01",
    "virtualRouterIp" : "10.0.3.1",
    "subnetCidrBlock" : "10.0.3.0/24",
    "nicIndex" : 0
}, {
    "vnicId" : "ocid1.vnic.oc1.phx.exampleuniqueID",
    "privateIp" : "10.0.4.3",
    "vlanTag" : 12,
    "macAddr" : "00:00:00:00:00:02",
    "virtualRouterIp" : "10.0.4.1",
    "subnetCidrBlock" : "10.0.4.0/24",
    "nicIndex" : 0
} ]

Chaves de Metadados para Volumes Anexados com Anexos Ativados para Multipath

Os metadados a seguir estão disponíveis sobre os anexos de volume ativados para multipath que são anexados à instância. Os caminhos são relativos a http://169.254.169.254/opc/v2/volumeAttachments/.

Entrada de Metadados Descrição
id O OCID do anexo de volume.
instanceId O OCID da instância.
volumeId O OCID do volume.
ipv4 O endereço IPv4 do destino iSCSI.
iqn O IQN do destino iSCSI.
port A porta do destino iSCSI.
multipathDevices Uma lista de dispositivos multi-caminho secundários com as propriedades ipv4, iqn e port.

Este é um exemplo de resposta que mostra os anexos de volume ativados para multipath de uma instância:

[
  {
    "id": "ocid1.volumeattachment.oc1.phx.exampleuniqueID",
    "instanceId": "ocid1.instance.oc1.phx.exampleuniqueID",
    "volumeId": "ocid1.volume.oc1.phx.exampleuniqueID",
    "ipv4": "169.254.2.2",
    "iqn": "iqn.2015-12.com.oracleiaas:exampleuniqueID",
    "port": 3260,
    "multipathDevices":
    [
      {
        "ipv4": "exampleIP",
        "iqn": "iqn.2015-12.com.oracleiaas:exampleuniqueID",
        "port": 3260
      },
      {
        "ipv4": "exampleIP",
        "iqn": "iqn.2015-12.com.oracleiaas:exampleuniqueID",
        "port": 3260
      },
      {
        "ipv4": "exampleIP",
        "iqn": "iqn.2015-12.com.oracleiaas:exampleuniqueID",
        "port": 3260
      },
      {
        "ipv4": "exampleIP",
        "iqn": "iqn.2015-12.com.oracleiaas:exampleuniqueID",
        "port": 3260
      },
      {
        "ipv4": "exampleIP",
        "iqn": "iqn.2015-12.com.oracleiaas:exampleuniqueID",
        "port": 3260
      },
      {
        "ipv4": "exampleIP",
        "iqn": "iqn.2015-12.com.oracleiaas:exampleuniqueID",
        "port": 3260
      },
      {
        "ipv4": "exampleIP",
        "iqn": "iqn.2015-12.com.oracleiaas:exampleuniqueID",
        "port": 3260
      },
      {
        "ipv4": "exampleIP",
        "iqn": "iqn.2015-12.com.oracleiaas:exampleuniqueID",
        "port": 3260
      }
    ]
  }
]