Mendeteksi apakah host adalah sebuah EC2 instance - Amazon Elastic Compute Cloud

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mendeteksi apakah host adalah sebuah EC2 instance

Anda mungkin perlu tahu apakah aplikasi atau situs web Anda berjalan pada sebuah EC2 instance, terutama jika Anda memiliki lingkungan komputasi campuran. Anda dapat menggunakan salah satu opsi berikut untuk menentukan apakah host untuk aplikasi atau situs web Anda adalah sebuah EC2 instance.

Memeriksa dokumen identitas instans

Setiap instance memiliki dokumen identitas instance yang ditandatangani yang dapat Anda verifikasi secara kriptografi. Anda dapat menemukan dokumen-dokumen ini menggunakan Layanan Metadata Instance ()IMDS.

Untuk informasi selengkapnya, lihat Dokumen identitas instans.

Periksa sistem UUID

Anda bisa mendapatkan sistem UUID dan melihat oktet awal UUID for EC2 (di Linux, ini mungkin huruf kecilec2). Metode ini cepat, tetapi berpotensi tidak akurat karena ada kemungkinan kecil bahwa sistem yang bukan EC2 instance dapat memiliki UUID yang dimulai dengan karakter ini. Selain itu, beberapa versi SMBIOS menggunakan format endian kecil, yang tidak termasuk EC2 di awal. UUID Ini mungkin terjadi pada EC2 instance yang menggunakan SMBIOS 2.4 untuk Windows, atau untuk distribusi Linux selain Amazon Linux yang memiliki implementasinya sendiri. SMBIOS

Contoh Linux: Dapatkan UUID dari DMI (HVMAMIshanya)

Gunakan perintah berikut untuk mendapatkan UUID menggunakan Desktop Management Interface (DMI):

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

Dalam contoh output berikut, UUID dimulai dengan "EC2“, yang menunjukkan bahwa sistem mungkin sebuah EC2 instance.

EC2E1916-9099-7CAF-FD21-012345ABCDEF

Dalam contoh output berikut, UUID diwakili dalam format endian kecil.

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

Atau, untuk instans yang dibangun di sistem Nitro, Anda dapat menggunakan perintah berikut:

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

Jika output adalah ID instance, sebagai contoh output berikut, sistem adalah sebuah EC2 instance:

i-0af01c0123456789a
Contoh Linux: Dapatkan UUID dari hypervisor (hanya PVAMIs)

Gunakan perintah berikut untuk mendapatkan UUID dari hypervisor:

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

Dalam contoh output berikut, UUID dimulai dengan “ec2", yang menunjukkan bahwa sistem mungkin sebuah EC2 instance.

ec2e1916-9099-7caf-fd21-012345abcdef
Contoh Windows: Dapatkan UUID penggunaan WMI atau Windows PowerShell

Gunakan baris perintah Instrumentasi Manajemen Windows (WMIC) sebagai berikut:

wmic path win32_computersystemproduct get uuid

Atau, jika Anda menggunakan Windows PowerShell, gunakan Get-WmiObject cmdlet sebagai berikut:

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

Dalam contoh output berikut, UUID dimulai dengan "EC2“, yang menunjukkan bahwa sistem mungkin sebuah EC2 instance.

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

Untuk contoh menggunakan SMBIOS 2.4, UUID mungkin direpresentasikan dalam format endian kecil; misalnya:

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

Periksa pengenal pembuatan mesin virtual sistem

Pengidentifikasi generasi mesin virtual terdiri dari buffer unik 128-bit yang diartikan sebagai pengidentifikasi integer acak kriptografi. Anda dapat mengambil pengenal pembuatan mesin virtual untuk mengidentifikasi instans Amazon Elastic Compute Cloud Anda. Pengidentifikasi generasi diekspos dalam sistem operasi tamu instance melalui entri ACPI tabel. Nilai akan berubah jika mesin Anda diklona, disalin, atau diimpor ke AWS, seperti dengan VM Import/Export.

Contoh: Ambil pengenal generasi mesin virtual dari Linux

Anda dapat menggunakan perintah berikut untuk mengambil pengenal pembuatan mesin virtual dari instans Anda yang menjalankan Linux.

Amazon Linux 2
  1. Perbarui paket perangkat lunak yang ada, jika perlu, menggunakan perintah berikut:

    sudo yum update
  2. Jika perlu, sumber paket busybox dengan perintah berikut ini:

    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. Jika perlu, instal paket prasyarat menggunakan perintah berikut:

    sudo yum install busybox.rpm iasl -y
  4. Jalankan iasl perintah berikut untuk menghasilkan output dari ACPI tabel:

    sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  5. Jalankan perintah berikut untuk meninjau output dari iasl perintah:

    cat SSDT2.dsl

    Output harus menghasilkan ruang alamat yang diperlukan untuk mengambil pengenal pembuatan mesin virtual:

    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. (Opsional) Tingkatkan izin terminal Anda untuk langkah-langkah yang tersisa dengan perintah berikut:

    sudo -s
  7. Gunakan perintah berikut untuk menyimpan ruang alamat yang dikumpulkan sebelumnya:

    VMGN_ADDR=0xFED01000
  8. Gunakan perintah berikut untuk melakukan iterasi melalui ruang alamat dan membuat pengidentifikasi pembuatan mesin virtual:

    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
  9. Ambil pengidentifikasi pembuatan mesin virtual dari file output dengan perintah berikut:

    cat vmgenid ; echo

    Output Anda harus serupa dengan berikut:

    EC2F335D979132C4165896753E72BD1C
Ubuntu
  1. Perbarui paket perangkat lunak yang ada, jika perlu, menggunakan perintah berikut:

    sudo apt update
  2. Jika perlu, instal paket prasyarat menggunakan perintah berikut:

    sudo apt install busybox iasl -y
  3. Jalankan iasl perintah berikut untuk menghasilkan output dari ACPI tabel:

    sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  4. Jalankan perintah berikut untuk meninjau output dari iasl perintah:

    cat SSDT2.dsl

    Output harus menghasilkan ruang alamat yang diperlukan untuk mengambil pengenal pembuatan mesin virtual:

    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. (Opsional) Tingkatkan izin terminal Anda untuk langkah-langkah yang tersisa dengan perintah berikut:

    sudo -s
  6. Gunakan perintah berikut untuk menyimpan ruang alamat yang dikumpulkan sebelumnya:

    VMGN_ADDR=0xFED01000
  7. Gunakan perintah berikut untuk melakukan iterasi melalui ruang alamat dan membuat pengidentifikasi pembuatan mesin virtual:

    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
  8. Ambil pengidentifikasi pembuatan mesin virtual dari file output dengan perintah berikut:

    cat vmgenid ; echo

    Output Anda harus serupa dengan berikut:

    EC2F335D979132C4165896753E72BD1C
Contoh: Ambil pengenal generasi mesin virtual dari Windows

Anda dapat membuat sampel aplikasi untuk mengambil pengidentifikasi pembuatan mesin virtual dari instans Anda yang menjalankan Windows. Untuk informasi selengkapnya, lihat Mendapatkan pengidentifikasi pembuatan mesin virtual di dokumentasi Microsoft.