Amazon EC2에서 메타데이터를 호출했더니 돌아오는 값이 없을 때는 ?

Amazon EC2에서 메타데이터를 호출했더니 돌아오는 값이 없을 때는 ?

Amazon EC2에서 메타데이터를 호출했더니 돌아오는 값이 없을 때 어떻게 해야 하는지 조사해 봤습니다.
2026.01.08

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Amazon EC2에서 메타데이터를 호출했더니 돌아오는 값이 없을 때 어떻게 해야 하는지 조사해 봤습니다.

문제 발생

EC2 인스턴스에 접속해서 아래 명령어로 메타데이터를 호출했더니 어떠한 값도 돌아오지 않는 것을 확인했습니다.

echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id)

상기 명령어대로면 접속한 EC2 인스턴스의 ID가 호출이 되어야 정상입니다.

문제 해결

결론부터 말하면 문법 자체는 틀리지 않았지만, IMDSv2 때문에 동작하지 않는 경우가 많습니다.

아래 명령어는 IMDSv1 EC2에서는 정상적으로 동작할 것입니다.

echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id)

AWS는 기본적으로 IMDSv2 사용을 권장/강제합니다.

IMDSv2에서는:

  • 토큰 없이 메타데이터 요청 불가
  • 반드시 세션 토큰을 먼저 발급받아야 함

이러한 이유로 입력한 명령어는 아래와 에러가 출력됩니다:

  • 빈 값 출력
  • timeout
  • 401 Unauthorized

IMDSv2에서의 올바른 명령어는 다음과 같습니다.

먼저 토큰을 발급합니다.

TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \
  -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")

인스턴스 ID를 조회합니다.

echo $(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
  http://169.254.169.254/latest/meta-data/instance-id)

한 줄로 표현하면 다음과 같습니다.

TOKEN=$(curl -s -X PUT http://169.254.169.254/latest/api/token -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") \
&& curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/instance-id

아래는 실행 결과입니다.

[ec2-user@ip-xx-x-xx-x ~]$ TOKEN=$(curl -s -X PUT http://169.254.169.254/latest/api/token -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") \
&& curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/instance-id

i-xxxxxxxxxx

생성한 EC2 인스턴스가 IMDSv1인지 IMDSv2인지 확인하는 방법과 변경하는 방법에 대해서는 아래 블로그를 참고해 주세요.

https://dev.classmethod.jp/articles/jw-security-hub-ec2-instances-should-use-instance-metadata-service-version-2/#%25EB%25AC%25B8%25EC%25A0%259C%2520%25ED%2595%25B4%25EA%25B2%25B0

마무리

정리하면, EC2 인스턴스에 접속한 상태에서 메타데이터를 호출했음에도 불구하고 기대했던 값이 반환되지 않는 경우에는, 단순히 명령어 자체의 문법 오류나 입력 실수를 먼저 의심하기보다는, 해당 인스턴스에 IMDSv2(Instance Metadata Service Version 2) 가 적용되어 있는지 여부를 가장 우선적으로 확인하는 것이 문제 해결에 있어 매우 중요합니다.

최근 생성되는 EC2 인스턴스의 경우 보안 강화를 목적으로 IMDSv2가 기본적으로 적용되어 있으며, 이 환경에서는 과거 IMDSv1에서 사용하던 방식처럼 토큰 없이 메타데이터를 직접 호출하는 것이 허용되지 않기 때문에, 메타데이터를 정상적으로 조회하기 위해서는 반드시 사전에 세션 토큰을 발급받은 후 해당 토큰을 포함하여 요청을 전송해야만 올바른 결과를 얻을 수 있습니다.

따라서 동일한 명령어를 사용하더라도 EC2 인스턴스에 적용된 IMDS 버전에 따라 반환되는 결과가 달라질 수 있다는 점을 미리 인지하고 있다면, 메타데이터 조회와 관련된 문제를 마주했을 때 불필요하게 명령어 자체를 수정하거나 다른 원인을 추적하느라 시간을 소모하지 않고, 보다 빠르고 효율적으로 원인을 파악하여 디버깅 시간을 크게 줄일 수 있을 것입니다.

この記事をシェアする

FacebookHatena blogX

関連記事