Detección de si un host es una instancia de EC2 - Amazon Elastic Compute Cloud

Detección de si un host es una instancia de EC2

Es posible que tenga que saber si su aplicación o sitio web se ejecuta en una instancia de EC2, específicamente si tiene un entorno de computación combinado. Puede utilizar una de las siguientes opciones para determinar si el host de su aplicación o sitio web es una instancia de EC2.

Examinar el Documentos de identidad de instancia

Cada instancia tiene un documento de identidad de instancia firmado que puede comprobar criptográficamente. Puede encontrar estos documentos mediante el servicio de metadatos de instancias (IMDS).

Para obtener más información, consulte Documentos de identidad de instancias.

Revise el UUID del sistema

Puede obtener el UUID del sistema y buscarlo en el octeto inicial del UUID para EC2 (en Linux, puede estar en minúsculas ec2). Este método es rápido, pero potencialmente impreciso, ya que existe una pequeña posibilidad de que un sistema que no es una instancia EC2 tenga un UUID que comience con estos caracteres. Además, algunas versiones de SMBIOS utilizan el formato little-endian, que no incluye EC2 al principio del UUID. Este podría ser el caso de las instancias de EC2 que utilizan SMBIOS 2.4 para Windows o de distribuciones de Linux distintas de Amazon Linux que tienen su propia implementación de SMBIOS.

Ejemplo de Linux: obtención del UUID de DMI (solo AMI HVM)

Utilice el siguiente comando para obtener el UUID mediante la Interfaz de administración de escritorio (DMI):

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

En el siguiente ejemplo de resultado, el UUID comienza por "EC2", lo que indica que el sistema es probablemente una instancia de EC2.

EC2E1916-9099-7CAF-FD21-012345ABCDEF

En la siguiente salida de ejemplo, el UUID se representa en formato little-endian.

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

Otra opción para instancias integradas en el sistema Nitro, es usar el siguiente comando:

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

Si la salida es un ID de instancia, como la siguiente salida de ejemplo, el sistema es una instancia de EC2:

i-0af01c0123456789a
Ejemplo de Linux: obtención del UUID del hipervisor (solo AMI PV)

Utilice el siguiente comando para obtener el UUID del hipervisor:

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

En el siguiente ejemplo de resultado, el UUID comienza por "ec2", lo que indica que el sistema es probablemente una instancia de EC2.

ec2e1916-9099-7caf-fd21-012345abcdef
Ejemplo de Windows: obtención del UUID con WMI o Windows PowerShell

Use la línea de comando Windows Management Instrumentation Command (WMIC) del modo siguiente:

wmic path win32_computersystemproduct get uuid

Si utiliza Windows PowerShell, use el cmdlet Get-WmiObject del modo siguiente:

PS C:\> Get-WmiObject -query "select uuid from Win32_ComputerSystemProduct" | Select UUID

En el siguiente ejemplo de resultado, el UUID comienza por "EC2", lo que indica que el sistema es probablemente una instancia de EC2.

EC2AE145-D1DC-13B2-94ED-012345ABCDEF

En las instancias que usan SMBIOS 2.4, se puede representar el UUID en formato little-endian, por ejemplo:

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

Examine el identificador de generación de máquinas virtuales del sistema

Un identificador de generación de máquinas virtuales consiste en un búfer único de 128 bits que se interpreta como un identificador criptográfico aleatorio de números enteros. Puede recuperar el identificador de generación de máquinas virtuales para identificar su instancia de Amazon Elastic Compute Cloud (EC2). El identificador de generación se encuentra expuesto dentro del sistema operativo invitado de la instancia a través de una entrada de la tabla ACPI. El valor cambiará si el equipo se clona, copia o importa en AWS, como por ejemplo con VM Import/Export.

Ejemplo: Recupere el identificador de generación de máquinas virtuales de Linux

Puede utilizar los siguientes comandos para recuperar el identificador de generación de máquinas virtuales de sus instancias que ejecutan Linux.

Amazon Linux 2
  1. Actualice sus paquetes de software existentes, según sea necesario, mediante el siguiente comando:

    sudo yum update
  2. Si es necesario, obtenga el paquete busybox con el siguiente 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. Si es necesario, instale los paquetes de requisitos previos mediante el siguiente comando:

    sudo yum install busybox.rpm iasl -y
  4. Ejecute el siguiente comando iasl para obtener la salida de la tabla ACPI:

    sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  5. Ejecute el siguiente comando para revisar la salida del comando iasl:

    cat SSDT2.dsl

    La salida debería proporcionar el espacio de direcciones necesario para recuperar el identificador de generación de máquinas virtuales:

    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) Aumente los permisos del terminal para los pasos restantes con el siguiente comando:

    sudo -s
  7. Utilice el siguiente comando para almacenar el espacio de direcciones recopilado previamente:

    VMGN_ADDR=0xFED01000
  8. Utilice el siguiente comando para iterar a través del espacio de direcciones y crear el identificador de generación de máquinas virtuales:

    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
  9. Recupere el identificador de generación de máquinas virtuales del archivo de salida con el siguiente comando:

    cat vmgenid ; echo

    El resultado debería ser similar al siguiente:

    EC2F335D979132C4165896753E72BD1C
Ubuntu
  1. Actualice sus paquetes de software existentes, según sea necesario, mediante el siguiente comando:

    sudo apt update
  2. Si es necesario, instale los paquetes de requisitos previos mediante el siguiente comando:

    sudo apt install busybox iasl -y
  3. Ejecute el siguiente comando iasl para obtener la salida de la tabla ACPI:

    sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  4. Ejecute el siguiente comando para revisar la salida del comando iasl:

    cat SSDT2.dsl

    La salida debería proporcionar el espacio de direcciones necesario para recuperar el identificador de generación de máquinas virtuales:

    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) Aumente los permisos del terminal para los pasos restantes con el siguiente comando:

    sudo -s
  6. Utilice los siguientes comandos para almacenar el espacio de direcciones recopilado previamente:

    VMGN_ADDR=0xFED01000
  7. Utilice el siguiente comando para iterar a través del espacio de direcciones y crear el identificador de generación de máquinas virtuales:

    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
  8. Recupere el identificador de generación de máquinas virtuales del archivo de salida con el siguiente comando:

    cat vmgenid ; echo

    El resultado debería ser similar al siguiente:

    EC2F335D979132C4165896753E72BD1C
Ejemplo: Recupere el identificador de generación de máquinas virtuales de Windows

Puede crear una aplicación de ejemplo para recuperar el identificador de generación de máquinas virtuales de las instancias que ejecutan Windows. Para obtener más información, consulte Obtención del identificador de generación de máquinas virtuales en la documentación de Microsoft.