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
-
-
Actualice sus paquetes de software existentes, según sea necesario, mediante el siguiente comando:
sudo yum update
-
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
-
Si es necesario, instale los paquetes de requisitos previos mediante el siguiente comando:
sudo yum install busybox.rpm iasl -y
-
Ejecute el siguiente comando iasl
para obtener la salida de la tabla ACPI:
sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
-
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
})
}
}
}
-
(Opcional) Aumente los permisos del terminal para los pasos restantes con el siguiente comando:
sudo -s
-
Utilice el siguiente comando para almacenar el espacio de direcciones recopilado previamente:
VMGN_ADDR=0xFED01000
-
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
-
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
-
-
Actualice sus paquetes de software existentes, según sea necesario, mediante el siguiente comando:
sudo apt update
-
Si es necesario, instale los paquetes de requisitos previos mediante el siguiente comando:
sudo apt install busybox iasl -y
-
Ejecute el siguiente comando iasl
para obtener la salida de la tabla ACPI:
sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
-
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
})
}
}
}
-
(Opcional) Aumente los permisos del terminal para los pasos restantes con el siguiente comando:
sudo -s
-
Utilice los siguientes comandos para almacenar el espacio de direcciones recopilado previamente:
VMGN_ADDR=0xFED01000
-
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
-
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.