EC2 Linux インスタンスを特定する - Amazon Elastic Compute Cloud

EC2 Linux インスタンスを特定する

場合によっては、アプリケーションにより EC2 インスタンスで実行されているかどうかを判断する必要があります。

Windows インスタンス特定の詳細については、Windows インスタンスの Amazon EC2 ユーザーガイド の「EC2 Windows インスタンスの特定」を参照してください。

インスタンスアイデンティティドキュメント の検査

EC2 インスタンスを識別する、暗号により確認された確実な方法については、その署名を含めて、インスタンスアイデンティティドキュメントを参照してください。これらのドキュメントは、ローカルのルーティングできないアドレス http://169.254.169.254/latest/dynamic/instance-identity/ の各 EC2 インスタンスで入手できます。詳細については、インスタンスアイデンティティドキュメント を参照してください。

システム UUID の検査

システムの UUID を取得して、UUID の最初のオクテットに「ec2」または「EC2」という文字が存在するかどうかを検索することができます。システムが EC2 インスタンスであるかどうかを判断するこの方法は、EC2 インスタンスではないシステムがこれらの文字で始まる UUID を持つ可能性が低いため、迅速でありながら不正確である可能性があります。で、EC2 インスタンスが Amazon Linux 2 を使用していない場合、SMBIOS のディストリビューションの実装については、リトルエンディアン形式で UUID を表すことがあるため、"EC2" の文字列は UUID の先頭には使用されません。

例 : DMI から UUID を取得 (HVM AMI のみ)

デスクトップ管理インターフェイス (DMI) を使用して UUID を取得するには、次のコマンドを使用します。

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

次の出力例では、UUID は「EC2」で始まりますが、これは多くの場合システムが EC2 インスタンスであることを示しています。

EC2E1916-9099-7CAF-FD21-012345ABCDEF

次の出力例では、UUID がリトルエンディアン形式で表されています。

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

別の方法として、Nitro システムに構築されたインスタンスの場合には、次のコマンドを使用できます。

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

次の例のように出力がインスタンス ID となる場合、そのシステムは EC2 インスタンスです。

i-0af01c0123456789a
例 : ハイパーバイザーから UUID を取得 (PV AMI のみ)

次のコマンドを使用して、ハイパーバイザーから UUID を取得します。

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

次の出力例では、UUID は「ec2」で始まりますが、これは多くの場合システムが EC2 インスタンスであることを示しています。

ec2e1916-9099-7caf-fd21-012345abcdef

システムの仮想マシン生成識別子を調べる

仮想マシン生成識別子は、暗号化ランダム整数識別子として解釈される 128 ビットの一意のバッファで構成されます。仮想マシン生成識別子を取得すると、Amazon Elastic Compute Cloud インスタンスを識別できます。生成識別子は、ACPI テーブルエントリを介してインスタンスのゲストオペレーティングシステム内に公開されています。AWS にマシンをクローン、コピー、またはインポートすると、値は VM Import/Export などに変わります。

例 : Linux から仮想マシン生成識別子を取得する

次のコマンドを使用して、Linux を実行しているインスタンスから仮想マシン生成識別子を取得できます。

Amazon Linux 2
  1. 必要に応じて、次のコマンドを使用して既存のソフトウェアパッケージを更新します。

    sudo yum update
  2. 必要に応じて、次のコマンドを使用して busybox パッケージを入手します。

    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. 必要に応じて、次のコマンドを使用して前提条件パッケージをインストールします。

    sudo yum install busybox.rpm iasl -y
  4. iasl コマンドを実行して、ACPI テーブルから出力を生成します。

    sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  5. 次のコマンドを実行して、iasl コマンドの出力をレビューします。

    cat SSDT2.dsl

    仮想マシン生成識別子を取得するために必要なアドレス空間が生成されているはずです。

    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. (オプション) 次のコマンドを使用して、残りのステップのターミナル許可を昇格させます。

    sudo -s
  7. 次のコマンドを使用して、以前に収集したアドレス空間を保存します。

    VMGN_ADDR=0xFED01000
  8. 次のコマンドを使用して、アドレス空間を介して反復処理し、仮想マシン生成識別子を作成します。

    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
  9. 次のコマンドを使用して、出力ファイルから仮想マシン生成識別子を取得します。

    cat vmgenid ; echo

    出力は次のようになります。

    EC2F335D979132C4165896753E72BD1C
Ubuntu
  1. 必要に応じて、次のコマンドを使用して既存のソフトウェアパッケージを更新します。

    sudo apt update
  2. 必要に応じて、次のコマンドを使用して前提条件パッケージをインストールします。

    sudo apt install busybox iasl -y
  3. iasl コマンドを実行して、ACPI テーブルから出力を生成します。

    sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  4. 次のコマンドを実行して、iasl コマンドの出力をレビューします。

    cat SSDT2.dsl

    仮想マシン生成識別子を取得するために必要なアドレス空間が生成されているはずです。

    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. (オプション) 次のコマンドを使用して、残りのステップのターミナル許可を昇格させます。

    sudo -s
  6. 次のコマンドを使用して、以前に収集したアドレス空間を保存します。

    VMGN_ADDR=0xFED01000
  7. 次のコマンドを使用して、アドレス空間を介して反復処理し、仮想マシン生成識別子を作成します。

    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
  8. 次のコマンドを使用して、出力ファイルから仮想マシン生成識別子を取得します。

    cat vmgenid ; echo

    出力は次のようになります。

    EC2F335D979132C4165896753E72BD1C