Déterminer si un hôte est une instance EC2 - Amazon Elastic Compute Cloud

Déterminer si un hôte est une instance EC2

Vous pouvez avoir besoin de savoir si votre application ou votre site web s’exécute sur une instance EC2, en particulier si vous disposez d’un environnement informatique mixte. Vous pouvez utiliser l’une des options suivantes pour savoir si l’hôte de votre application ou de votre site web est une instance EC2.

Inspecter le Documents d’identité d’instance

Chaque instance possède un document d’identité d’instance signé que vous pouvez vérifier de manière cryptographique. Vous pouvez trouver ces documents en utilisant le service de métadonnées d’instance (IMDS).

Pour en savoir plus, consultez Documents d’identité d’instance.

Inspecter l’UUID du système

Vous pouvez obtenir l’UUID du système et rechercher l’octet de début de l’UUID pour EC2 (sous Linux, il peut s’agir de ec2 en minuscules). Cette méthode est rapide, mais potentiellement inexacte car il y a une faible chance qu’un système qui n’est pas une instance EC2 puisse avoir un UUID qui commence par ces caractères. De plus, certaines versions de SMBIOS utilisent le format little-endian, qui n’inclut pas EC2 au début de l’UUID. Cela peut être le cas pour les instances EC2 qui utilisent SMBIOS 2.4 pour Windows, ou pour les distributions Linux autres qu’Amazon Linux qui ont leur propre mise en œuvre de SMBIOS.

Exemple Linux : obtenir l’UUID du DMI (AMI HVM uniquement)

Utilisez la commande suivante pour obtenir l’UUID à l’aide de DMI (Desktop Management Interface) :

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

Dans l’exemple de sortie suivant, l’UUID commence par « EC2 », ce qui indique que le système est probablement une instance EC2.

EC2E1916-9099-7CAF-FD21-012345ABCDEF

Dans l’exemple de sortie qui suit, l’UUID est représenté au format Little Endian :

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

Sinon, pour les instances construites sur le système Nitro, vous pouvez utiliser la commande suivante :

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

Si la sortie est un ID d’instance, comme l’exemple de sortie suivant, le système est une instance EC2 :

i-0af01c0123456789a
Exemple Linux : obtenir l’UUID de l’hyperviseur (AMI PV uniquement)

Utilisez la commande suivante pour obtenir l’UUID de l’hyperviseur :

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

Dans l’exemple de sortie suivant, l’UUID commence par « ec2 », ce qui indique que le système est probablement une instance EC2.

ec2e1916-9099-7caf-fd21-012345abcdef
Exemple Windows : obtenir l’UUID à l’aide de WMI ou de Windows PowerShell

Utilisez l’utilitaire de ligne de commande Windows Management Instrumentation Command Line (WMIC) comme suit :

wmic path win32_computersystemproduct get uuid

Sinon, si vous utilisez Windows PowerShell, utilisez l’applet de commande Get-WmiObject comme suit :

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

Dans l’exemple de sortie suivant, l’UUID commence par « EC2 », ce qui indique que le système est probablement une instance EC2.

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

Pour les instances utilisant SMBIOS 2.4, l’UUID peut être représenté au format Little Endian. Par exemple :

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

Inspecter l’identificateur de génération de machine virtuelle du système

Un identificateur de génération de machine virtuelle consiste en un tampon unique de 128 bits interprété comme un entier unique aléatoire cryptographique. Vous pouvez récupérer l’identificateur de génération de machine virtuelle pour identifier votre instance Amazon Elastic Compute Cloud. L’identificateur de génération est exposé dans le système d’exploitation invité de l’instance via une entrée de table ACPI. La valeur change si votre machine est clonée, copiée ou importée dans AWS, par exemple avec VM Import/Export.

Exemple : récupérer l’identifiant de génération de la machine virtuelle sous Linux

Vous pouvez utiliser les commandes suivantes pour récupérer l’identifiant de génération de machine virtuelle à partir de vos instances exécutant Linux.

Amazon Linux 2
  1. Mettez à jour vos packages logiciels existants, le cas échéant, à l’aide de la commande suivante :

    sudo yum update
  2. Si nécessaire, créez le package busybox à l’aide de la commande suivante :

    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 nécessaire, installez les packages préalables à l’aide de la commande suivante :

    sudo yum install busybox.rpm iasl -y
  4. Exécutez la commande iasl suivante pour produire une sortie à partir de la table ACPI :

    sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  5. Exécutez la commande suivante pour vérifier la sortie de la commande iasl :

    cat SSDT2.dsl

    La sortie doit fournir l’espace d’adressage requis pour récupérer l’identificateur de génération de machine virtuelle :

    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. (Facultatif) Augmentez les autorisations de votre terminal pour les étapes restantes à l’aide de la commande suivante :

    sudo -s
  7. Utilisez la commande suivante pour stocker l’espace d’adressage précédemment collecté :

    VMGN_ADDR=0xFED01000
  8. Utilisez la commande suivante pour parcourir l’espace d’adressage et créer l’identificateur de génération de machine virtuelle :

    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
  9. Récupérez l’identificateur de génération de machine virtuelle à partir du fichier de sortie à l’aide de la commande suivante :

    cat vmgenid ; echo

    Votre sortie doit ressembler à ce qui suit :

    EC2F335D979132C4165896753E72BD1C
Ubuntu
  1. Mettez à jour vos packages logiciels existants, le cas échéant, à l’aide de la commande suivante :

    sudo apt update
  2. Si nécessaire, installez les packages préalables à l’aide de la commande suivante :

    sudo apt install busybox iasl -y
  3. Exécutez la commande iasl suivante pour produire une sortie à partir de la table ACPI :

    sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  4. Exécutez la commande suivante pour vérifier la sortie de la commande iasl :

    cat SSDT2.dsl

    La sortie doit fournir l’espace d’adressage requis pour récupérer l’identificateur de génération de machine virtuelle :

    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. (Facultatif) Augmentez les autorisations de votre terminal pour les étapes restantes à l’aide de la commande suivante :

    sudo -s
  6. Utilisez les commandes suivantes pour stocker l’espace d’adressage précédemment collecté :

    VMGN_ADDR=0xFED01000
  7. Utilisez la commande suivante pour parcourir l’espace d’adressage et créer l’identificateur de génération de machine virtuelle :

    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
  8. Récupérez l’identificateur de génération de machine virtuelle à partir du fichier de sortie à l’aide de la commande suivante :

    cat vmgenid ; echo

    Votre sortie doit ressembler à ce qui suit :

    EC2F335D979132C4165896753E72BD1C
Exemple : récupérer l’identifiant de génération de la machine virtuelle à partir de Windows

Vous pouvez créer un exemple d’application pour récupérer l’identificateur de génération de machine virtuelle à partir de vos instances exécutant Windows. Pour plus d’informations, consultez Obtention de l’identificateur de génération de l’ordinateur virtuel dans la documentation Microsoft.