호스트가 EC2 인스턴스인지 감지하기

호스트가 EC2 인스턴스인지 감지하기 (Detect whether a host is an EC2 instance)

특히 혼합 컴퓨팅 환경에서 애플리케이션이나 웹사이트가 EC2 인스턴스에서 실행 중인지 알아야 할 수 있어요. 호스트가 EC2 인스턴스인지 판단하는 데 다음 옵션 중 하나를 사용할 수 있어요.

출처: 문서

본문

인스턴스 ID 문서 검사하기 (Inspect the instance identity document)

각 인스턴스에는 암호화 방식으로 검증할 수 있는 서명된 인스턴스 ID 문서(instance identity document)가 있어요. 이 문서는 Instance Metadata Service(IMDS)에서 찾을 수 있어요. 자세한 내용은 "Instance identity documents"를 참고하세요.

시스템 UUID 검사하기 (Inspect the system UUID)

시스템 UUID를 얻어 UUID의 시작 옥텟에서 EC2(Linux에서는 소문자 ec2일 수 있음)를 확인할 수 있어요. 이 방법은 빠르지만, EC2 인스턴스가 아닌 시스템도 이 문자들로 시작하는 UUID를 가질 가능성이 약간 있어 부정확할 수 있어요. 또한 일부 SMBIOS 버전은 little-endian 형식을 사용하는데, 이 형식은 UUID 시작 부분에 EC2가 포함되지 않아요. Windows용 SMBIOS 2.4를 쓰는 EC2 인스턴스나 자체 SMBIOS 구현을 가진 Amazon Linux 외의 Linux 배포판이 그럴 수 있어요.

Linux 예시(DMI에서 UUID 얻기, HVM AMI만) — Desktop Management Interface(DMI)로 UUID를 얻으려면 다음 명령을 사용해요.

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

다음 예시 출력에서 UUID가 "EC2"로 시작하므로 시스템이 아마 EC2 인스턴스일 거예요.

EC2E1916-9099-7CAF-FD21-012345ABCDEF

다음 예시 출력에서는 UUID가 little-endian 형식으로 표시돼요.

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

또는 Nitro 시스템 기반 인스턴스는 다음 명령을 사용할 수 있어요.

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

출력이 다음 예시처럼 인스턴스 ID라면 시스템은 EC2 인스턴스예요.

i-0af01c0123456789a

Linux 예시(하이퍼바이저에서 UUID 얻기, PV AMI만) — 하이퍼바이저에서 UUID를 얻으려면 다음 명령을 사용해요.

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

다음 예시 출력에서 UUID가 "ec2"로 시작하므로 시스템이 아마 EC2 인스턴스일 거예요.

ec2e1916-9099-7caf-fd21-012345abcdef

Windows 예시(WMI 또는 Windows PowerShell로 UUID 얻기) — WMIC(Windows Management Instrumentation command line)를 다음과 같이 사용해요.

wmic path win32_computersystemproduct get uuid

또는 Windows PowerShell의 Get-WmiObject cmdlet을 사용해요.

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

다음 예시 출력에서 UUID가 "EC2"로 시작하므로 시스템이 아마 EC2 인스턴스일 거예요.

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

SMBIOS 2.4를 사용하는 인스턴스에서는 UUID가 little-endian 형식일 수 있어요. 예:

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

시스템 가상 머신 생성 식별자 검사하기 (Inspect the system virtual machine generation identifier)

가상 머신 생성 식별자(virtual machine generation identifier)는 암호화된 랜덤 정수 식별자로 해석되는 128비트의 고유 버퍼로 구성돼요. 가상 머신 생성 식별자를 검색해 Amazon Elastic Compute Cloud 인스턴스를 식별할 수 있어요. 생성 식별자는 ACPI 테이블 항목을 통해 인스턴스의 게스트 운영 체제 내에 노출돼요. VM Import/Export처럼 머신을 클론, 복사하거나 AWS로 가져오면 값이 변경돼요.

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. 출력을 검토해요: cat SSDT2.dsl

출력에는 가상 머신 생성 식별자를 검색하는 데 필요한 주소 공간이 나타나요.

Intel ACPI Component Architecture
ASL+ Optimizing Compiler/Disassembler version 20190509
...
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
        })
    }
}
}
  1. (선택) 나머지 단계를 위해 터미널 권한을 상승해요: sudo -s
  2. 수집한 주소 공간을 저장해요: VMGN_ADDR=0xFED01000
  3. 주소 공간을 반복하며 가상 머신 생성 식별자를 만들어요:
    for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\\n$//' >> vmgenid; done
    
  4. 출력 파일에서 가상 머신 생성 식별자를 가져와요: cat vmgenid ; echo

출력은 다음과 비슷해야 해요.

EC2F335D979132C4165896753E72BD1C

Linux(Ubuntu)에서 검색하기

  1. 패키지를 업데이트: sudo apt update
  2. 필요하면 전제 패키지 설치: sudo apt install busybox iasl -y
  3. iasl 명령 실행: sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
  4. 출력 검토: cat SSDT2.dsl (위와 같은 주소 공간 산출)
  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

Windows에서 가상 머신 생성 식별자 검색하기

Windows를 실행하는 인스턴스에서 가상 머신 생성 식별자를 검색하는 샘플 애플리케이션을 만들 수 있어요. Microsoft 문서의 "Obtaining the virtual machine generation identifier"를 참고하세요.

더 알아보기