Ermitteln, ob es sich bei einem Host um eine EC2-Instance handelt
Sie müssen möglicherweise ermitteln, ob Ihre Anwendung oder Website auf einer EC2-Instance ausgeführt wird, insbesondere in einer gemischten Computerumgebung. Sie können eine der folgenden Optionen verwenden, um zu ermitteln, ob der Host für Ihre Anwendung oder Website eine EC2-Instance ist.
Untersuchen von Instance-Identitätsdokument
Jede Instance verfügt über ein signiertes Identitätsdokument für die Instance, das Sie kryptografisch überprüfen können. Sie können diese Dokumente über den Instance Metadata Service (IMDS) finden.
Weitere Informationen finden Sie unter Instance-Identitätsdokumente.
Überprüfen des System-UUID
Sie können die System-UUID abrufen und im ersten Oktett der UUID nach EC2
suchen (unter Linux ist dies möglicherweise ein klein geschriebenes ec2
). Diese Methode ist zwar schnell aber potenziell ungenau, weil auch Systeme, die keine EC2 Instance sind, eine UUID haben können, die mit diesen Zeichenfolgen beginnt. Darüber hinaus verwenden einige Versionen von SMBIOS das Little-Endian-Format, das EC2
am Anfang der UUID nicht einschließt. Dies kann bei EC2-Instances der Fall sein, die SMBIOS 2.4 für Windows verwenden, oder bei anderen Linux-Distributionen als Amazon Linux, die über eine eigene Implementierung von SMBIOS verfügen.
Linux-Beispiel: Abrufen der UUID von DMI (nur HVM-AMIs)
Verwenden Sie den folgenden Befehl, um die UUID mit dem Desktop Management Interface (DMI) abzurufen:
[ec2-user ~]$
sudo dmidecode --string system-uuid
In der folgenden Beispielausgabe beginnt die UUID mit „EC2“. Es handelt sich daher wahrscheinlich um eine EC2 Instance.
EC2E1916-9099-7CAF-FD21-012345ABCDEF
In der folgenden Beispielausgabe ist die UUID im Little-Endian-Format dargestellt.
45E12AEC-DCD1-B213-94ED-012345ABCDEF
Alternativ können Sie für Instances, die auf dem Nitro-System basieren, den folgenden Befehl verwenden:
[ec2-user ~]$
cat /sys/devices/virtual/dmi/id/board_asset_tag
Wenn die Ausgabe eine Instance-ID ist, ist das System als folgende Beispielausgabe eine EC2-Instance:
i-0af01c0123456789a
Linux-Beispiel: Abrufen der UUID vom Hypervisor (nur PV-AMIs)
Verwenden Sie den folgenden Befehl, um die UUID vom Hypervisor zu erhalten:
[ec2-user ~]$
cat /sys/hypervisor/uuid
In der folgenden Beispielausgabe beginnt die UUID mit „ec2“. Es handelt sich daher wahrscheinlich um eine EC2 Instance.
ec2e1916-9099-7caf-fd21-012345abcdef
Windows-Beispiel: Abrufen der UUID mit WMI oder Windows PowerShell
Verwenden Sie die Windows-Verwaltungsinstrumentation-Befehlszeile (WMIC) wie folgt:
wmic path win32_computersystemproduct get uuid
Wenn Sie Windows PowerShell verwenden, verwenden Sie das cmdlet Get-WmiObject wie folgt:
PS C:\>
Get-WmiObject -query "select uuid from Win32_ComputerSystemProduct" | Select UUID
In der folgenden Beispielausgabe beginnt die UUID mit „EC2“. Es handelt sich daher wahrscheinlich um eine EC2 Instance.
EC2AE145-D1DC-13B2-94ED-012345ABCDEF
Bei Instances mit SMBIOS 2.4 kann die UUID im Little-Endian-Format angegeben werden, zum Beispiel:
45E12AEC-DCD1-B213-94ED-012345ABCDEF
Überprüfen der System-ID zur Generierung der virtuellen Maschine
Eine ID zur Generierung virtueller Maschinen besteht aus einem eindeutigen Puffer von 128 Bit, der als kryptografische, zufällige Ganzzahl-ID interpretiert wird. Sie können die ID zur Generierung der virtuellen Maschine abrufen, um Ihre Amazon-Elastic-Compute-Cloud-Instance zu identifizieren. Die Generierungs-ID wird im Gastbetriebssystem der Instance durch einen ACPI-Tabelleneintrag verfügbar gemacht. Der Wert ändert sich, wenn Ihre Maschine geklont, kopiert oder in AWS importiert wird, z. B. mit VM Import/Export.
Beispiel: Die ID zur Generierung der virtuellen Maschine aus Linux abrufen
Sie können die folgenden Befehle verwenden, um die ID zur Generierung der virtuellen Maschine von Ihren Instances abzurufen, auf denen Linux ausgeführt wird.
- Amazon Linux 2
-
-
Aktualisieren Sie Ihre vorhandenen Softwarepakete bei Bedarf mit dem folgenden Befehl:
sudo yum update
-
Wenn nötig, beziehen Sie das busybox-Paket mit dem folgenden Befehl:
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
-
Installieren Sie ggf. die Voraussetzungspakete mit dem folgenden Befehl:
sudo yum install busybox.rpm iasl -y
-
Führen Sie den folgenden iasl
-Befehl aus, um eine Ausgabe aus der ACPI-Tabelle zu erzeugen:
sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
-
Führen Sie den folgenden Befehl aus, um die Ausgabe des iasl
-Befehls zu prüfen:
cat SSDT2.dsl
Die Ausgabe sollte den Adressraum liefern, der zum Abrufen der ID zur Generierung der virtuellen Maschine erforderlich ist:
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
})
}
}
}
-
(Optional) Erweitern Sie Ihre Terminalberechtigungen für die verbleibenden Schritte mit dem folgenden Befehl:
sudo -s
-
Verwenden Sie den folgenden Befehl, um den zuvor erfassten Adressraum zu speichern:
VMGN_ADDR=0xFED01000
-
Verwenden Sie den folgenden Befehl, um den Adressraum zu durchlaufen und die ID zur Generierung der virtuellen Maschine zu erstellen:
for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
-
Rufen Sie die ID zur Generierung der virtuellen Maschine mit dem folgenden Befehl aus der Ausgabedatei ab:
cat vmgenid ; echo
Die Ausgabe sollte in etwa wie folgt aussehen:
EC2F335D979132C4165896753E72BD1C
- Ubuntu
-
-
Aktualisieren Sie Ihre vorhandenen Softwarepakete bei Bedarf mit dem folgenden Befehl:
sudo apt update
-
Installieren Sie ggf. die Voraussetzungspakete mit dem folgenden Befehl:
sudo apt install busybox iasl -y
-
Führen Sie den folgenden iasl
-Befehl aus, um eine Ausgabe aus der ACPI-Tabelle zu erzeugen:
sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
-
Führen Sie den folgenden Befehl aus, um die Ausgabe des iasl
-Befehls zu prüfen:
cat SSDT2.dsl
Die Ausgabe sollte den Adressraum liefern, der zum Abrufen der ID zur Generierung der virtuellen Maschine erforderlich ist:
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
})
}
}
}
-
(Optional) Erweitern Sie Ihre Terminalberechtigungen für die verbleibenden Schritte mit dem folgenden Befehl:
sudo -s
-
Verwenden Sie die folgenden Befehle, um den zuvor erfassten Adressraum zu speichern:
VMGN_ADDR=0xFED01000
-
Verwenden Sie den folgenden Befehl, um den Adressraum zu durchlaufen und die ID zur Generierung der virtuellen Maschine zu erstellen:
for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
-
Rufen Sie die ID zur Generierung der virtuellen Maschine mit dem folgenden Befehl aus der Ausgabedatei ab:
cat vmgenid ; echo
Die Ausgabe sollte in etwa wie folgt aussehen:
EC2F335D979132C4165896753E72BD1C
Beispiel: Die ID zur Generierung der virtuellen Maschine aus Windows abrufen
Sie können eine Beispielanwendung erstellen, um die ID zur Generierung der virtuellen Maschine von Ihren Instances abzurufen, auf denen Windows ausgeführt wird. Weitere Informationen finden Sie unter Erhalten der ID zur Generierung der virtuellen Maschine in der Microsoft-Dokumentation.