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

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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

Vous devrez peut-être savoir si votre application ou votre site Web s'exécute sur une EC2 instance, en particulier si vous disposez d'un environnement informatique mixte. Vous pouvez utiliser l'une des options suivantes pour déterminer si l'hôte de votre application ou de votre site Web est une EC2 instance.

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 à l'aide du service de métadonnées d'instance (IMDS).

Pour de plus amples informations, veuillez consulter Documents d’identité d’instance.

Inspectez le système UUID

Vous pouvez obtenir le système UUID et regarder dans le premier octet du UUID for EC2 (sous Linux, cela peut être en minusculesec2). Cette méthode est rapide, mais potentiellement imprécise, car il est peu probable qu'un système qui n'est pas une EC2 instance UUID ait un nom commençant par ces caractères. De plus, certaines versions de SMBIOS utilisent le format little-endian, qui n'est pas inclus EC2 au début du. UUID Cela peut être le cas pour les EC2 instances qui utilisent la version SMBIOS 2.4 pour Windows ou pour les distributions Linux autres qu'Amazon Linux qui ont leur propre implémentation deSMBIOS.

Exemple Linux : obtenir le UUID depuis DMI (HVMAMIsuniquement)

Utilisez la commande suivante pour obtenir l'UUIDutilisation de l'interface de gestion de bureau (DMI) :

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

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

EC2E1916-9099-7CAF-FD21-012345ABCDEF

Dans l'exemple de sortie suivant, le 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 le résultat est un ID d'instance, comme dans l'exemple de sortie suivant, le système est une EC2 instance :

i-0af01c0123456789a
Exemple Linux : obtenir le UUID depuis l'hyperviseur (PV AMIs uniquement)

Utilisez la commande suivante pour obtenir le UUID depuis l'hyperviseur :

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

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

ec2e1916-9099-7caf-fd21-012345abcdef
Exemple Windows : Get the UUID using WMI ou Windows PowerShell

Utilisez la ligne de commande Windows Management Instrumentation (WMIC) comme suit :

wmic path win32_computersystemproduct get uuid

Si vous utilisez Windows PowerShell, vous pouvez également utiliser l'Get-WmiObjectapplet de commande comme suit :

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

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

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

Dans les cas utilisant la SMBIOS version 2.4, UUID ils peuvent être représentés 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'identifiant de génération est exposé dans le système d'exploitation invité de l'instance par le biais d'une entrée de ACPI table. 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 machine virtuelle depuis 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 iasl commande suivante pour générer une sortie à partir de la ACPI table :

    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 iasl commande suivante pour générer une sortie à partir de la ACPI table :

    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 machine virtuelle depuis 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.