Identificar instâncias de EC2 do Linux - Amazon Elastic Compute Cloud

Identificar instâncias de EC2 do Linux

É possível precisar determinar se a aplicação está executando em uma instância do EC2.

Para obter informações sobre como identificar as instâncias do Windows, consulte Identify EC2 Windows instances (Identificar instâncias do Windows do EC2) no Guia do usuário do Amazon EC2 para instâncias do Windows.

Inspecione o documento de identidade da instância

Para um método definitivo e criptograficamente verificado de identificação de uma instância do EC2, verifique o documento de identidade da instância, incluindo sua assinatura. Esses documentos estão disponíveis em cada instância do EC2 no endereço local não roteável http://169.254.169.254/latest/dynamic/instance-identity/. Para ter mais informações, consulte Documentos de identidade da instância.

Inspecione o UUID do sistema

É possível obter o UUID do sistema e procurar pela presença dos caracteres "ec2" ou "EC2" no octeto inicial do UUID. O método para determinar se um sistema é uma instância do EC2 é rápido, mas potencialmente impreciso, pois há uma pequena possibilidade de um sistema que não seja uma instância do EC2 ter um UUID que comece com esses caracteres. Além disso, para instâncias do EC2 que não estão usando o Amazon Linux 2, a implementação de distribuição do SMBIOS pode representar o UUID em formato little-endian e, portanto, os caracteres “EC2” não aparecem no início do UUID.

exemplo : Obter o UUID do DMI (somente AMIs HVM)

Use o seguinte comando para obter o UUID usando a Desktop Management Interface (DMI):

[ec2-user ~]$ sudo dmidecode --string system-uuid

Na próxima saída de exemplo, o UUID começa com "EC2", que indica que o sistema é provavelmente uma instância do EC2.

EC2E1916-9099-7CAF-FD21-012345ABCDEF

No exemplo de saída a seguir, o UUID é representado no formato little-endian.

45E12AEC-DCD1-B213-94ED-012345ABCDEF

Como alternativa, para instâncias criadas no sistema Nitro, é possível usar o seguinte comando:

[ec2-user ~]$ cat /sys/devices/virtual/dmi/id/board_asset_tag

Se a saída for um ID de instância, como a saída de exemplo a seguir, o sistema será uma instância do EC2:

i-0af01c0123456789a
exemplo : Obtenha o UUID do hipervisor (somente AMIs do picovolt)

Use o seguinte comando para obter o UUID do hipervisor:

[ec2-user ~]$ cat /sys/hypervisor/uuid

Na próxima saída de exemplo, o UUID começa com "ec2", que indica que o sistema é provavelmente uma instância do EC2.

ec2e1916-9099-7caf-fd21-012345abcdef

Inspecione o identificador de geração da máquina virtual do sistema

Um identificador de geração de máquina virtual consiste em um buffer exclusivo de 128 bits interpretado como identificador de inteiro aleatório criptográfico. É possível recuperar o identificador de geração de máquina virtual para identificar sua instância do Amazon Elastic Compute Cloud. O identificador de geração é exposto no sistema operacional convidado da instância por meio de uma entrada de tabela ACPI. O valor mudará se sua máquina for clonada, copiada ou importada para AWS, como com VM Import/Export.

exemplo : Recupere o identificador de geração de máquina virtual do Linux

É possível usar os seguintes comandos para recuperar o identificador de geração de máquina virtual de suas instâncias que executem o Linux:

Amazon Linux 2
  1. Atualize seus pacotes de software existentes, conforme necessário, usando o seguinte comando:

    sudo yum update
  2. Se necessário, utilize o pacote busybox com o seguinte comando:

    sudo curl https://www.rpmfind.net/linux/epel/next/8/Everything/x86_64/Packages/b/busybox-1.35.0-2.el8.next.x86_64.rpm --output busybox.rpm
  3. Se necessário, instale os pacotes de pré-requisitos usando o seguinte comando:

    sudo yum install busybox.rpm iasl -y
  4. Execute o seguinte iasl para produzir saída da tabela ACPI:

    sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  5. Execute o seguinte comando para revisar a saída do comando iasl:

    cat SSDT2.dsl

    A saída deve gerar o espaço de endereço necessário para recuperar o identificador de geração da máquina virtual:

    Intel ACPI Component Architecture
    ASL+ Optimizing Compiler/Disassembler version 20190509
    Copyright (c) 2000 - 2019 Intel Corporation
    
    File appears to be binary: found 32 non-ASCII characters, disassembling
    Binary file appears to be a valid ACPI table, disassembling
    Input file /sys/firmware/acpi/tables/SSDT2, Length 0x7B (123) bytes
    ACPI: SSDT 0x0000000000000000 00007B (v01 AMAZON AMZNSSDT 00000001 AMZN 00000001)
    Pass 1 parse of [SSDT]
    Pass 2 parse of [SSDT]
    Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)
    
    Parsing completed
    Disassembly completed
    ASL Output:    ./SSDT2.dsl - 1065 bytes
    $
    /*
     * Intel ACPI Component Architecture
     * AML/ASL+ Disassembler version 20190509 (64-bit version)
     * Copyright (c) 2000 - 2019 Intel Corporation
     *
     * Disassembling to symbolic ASL+ operators
     *
     * Disassembly of /sys/firmware/acpi/tables/SSDT2, Tue Mar 29 16:15:14 2022
     *
     * Original Table Header:
     *     Signature        "SSDT"
     *     Length           0x0000007B (123)
     *     Revision         0x01
     *     Checksum         0xB8
     *     OEM ID           "AMAZON"
     *     OEM Table ID     "AMZNSSDT"
     *     OEM Revision     0x00000001 (1)
     *     Compiler ID      "AMZN"
     *     Compiler Version 0x00000001 (1)
     */
    DefinitionBlock ("", "SSDT", 1, "AMAZON", "AMZNSSDT", 0x00000001)
    {
        Scope (\_SB)
        {
            Device (VMGN)
            {
                Name (_CID, "VM_Gen_Counter")  // _CID: Compatible ID
                Name (_DDN, "VM_Gen_Counter")  // _DDN: DOS Device Name
                Name (_HID, "AMZN0000")  // _HID: Hardware ID
                Name (ADDR, Package (0x02)
                {
                    0xFED01000,
                    Zero
                })
            }
        }
    }
  6. (Opcional) Eleve suas permissões de terminal para as etapas restantes com o seguinte comando:

    sudo -s
  7. Use o comando a seguir para armazenar o espaço de endereço coletado anteriormente:

    VMGN_ADDR=0xFED01000
  8. Use o seguinte comando para iterar pelo espaço de endereço e criar o identificador de geração de máquina virtual:

    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
  9. Recupere o identificador de geração da máquina virtual do arquivo de saída com o seguinte comando:

    cat vmgenid ; echo

    Sua saída deve ser similar à seguinte:

    EC2F335D979132C4165896753E72BD1C
Ubuntu
  1. Atualize seus pacotes de software existentes, conforme necessário, usando o seguinte comando:

    sudo apt update
  2. Se necessário, instale os pacotes de pré-requisitos usando o seguinte comando:

    sudo apt install busybox iasl -y
  3. Execute o seguinte iasl para produzir saída da tabela ACPI:

    sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  4. Execute o seguinte comando para revisar a saída do comando iasl:

    cat SSDT2.dsl

    A saída deve gerar o espaço de endereço necessário para recuperar o identificador de geração da máquina virtual:

    Intel ACPI Component Architecture
    ASL+ Optimizing Compiler/Disassembler version 20190509
    Copyright (c) 2000 - 2019 Intel Corporation
    
    File appears to be binary: found 32 non-ASCII characters, disassembling
    Binary file appears to be a valid ACPI table, disassembling
    Input file /sys/firmware/acpi/tables/SSDT2, Length 0x7B (123) bytes
    ACPI: SSDT 0x0000000000000000 00007B (v01 AMAZON AMZNSSDT 00000001 AMZN 00000001)
    Pass 1 parse of [SSDT]
    Pass 2 parse of [SSDT]
    Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)
    
    Parsing completed
    Disassembly completed
    ASL Output:    ./SSDT2.dsl - 1065 bytes
    $
    /*
     * Intel ACPI Component Architecture
     * AML/ASL+ Disassembler version 20190509 (64-bit version)
     * Copyright (c) 2000 - 2019 Intel Corporation
     *
     * Disassembling to symbolic ASL+ operators
     *
     * Disassembly of /sys/firmware/acpi/tables/SSDT2, Tue Mar 29 16:15:14 2022
     *
     * Original Table Header:
     *     Signature        "SSDT"
     *     Length           0x0000007B (123)
     *     Revision         0x01
     *     Checksum         0xB8
     *     OEM ID           "AMAZON"
     *     OEM Table ID     "AMZNSSDT"
     *     OEM Revision     0x00000001 (1)
     *     Compiler ID      "AMZN"
     *     Compiler Version 0x00000001 (1)
     */
    DefinitionBlock ("", "SSDT", 1, "AMAZON", "AMZNSSDT", 0x00000001)
    {
        Scope (\_SB)
        {
            Device (VMGN)
            {
                Name (_CID, "VM_Gen_Counter")  // _CID: Compatible ID
                Name (_DDN, "VM_Gen_Counter")  // _DDN: DOS Device Name
                Name (_HID, "AMZN0000")  // _HID: Hardware ID
                Name (ADDR, Package (0x02)
                {
                    0xFED01000,
                    Zero
                })
            }
        }
    }
  5. (Opcional) Eleve suas permissões de terminal para as etapas restantes com o seguinte comando:

    sudo -s
  6. Use os seguintes comandos para armazenar o espaço de endereço coletado anteriormente:

    VMGN_ADDR=0xFED01000
  7. Use o seguinte comando para iterar pelo espaço de endereço e criar o identificador de geração de máquina virtual:

    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
  8. Recupere o identificador de geração da máquina virtual do arquivo de saída com o seguinte comando:

    cat vmgenid ; echo

    Sua saída deve ser similar à seguinte:

    EC2F335D979132C4165896753E72BD1C