ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS] 인스턴스 메타데이터
    밥은 벌어먹고 살아야지 2024. 7. 26. 01:15

    회사에서 한 서비스의 온프렘 → 퍼블릭 클라우드(AWS) 대개체 프로젝트를 내가 담당하게 되었다.

    뭐 기껏해야 KMS, SG, EC2, EBS, EFS 최소한의 서비스만 콘솔로 딸각해서 올리는게 전부일테지만 과거의 기록을 안하는 습관을 청산하고자 최대한 기록으로 남기고자 한다.

    (큰 조직이라 체계를 배울 수 있음에 감사하지만 나의 롤이 너무 좁아 아쉬움이 크다. / Docs 복붙이 대부분이겠으나 안그런 글이 어딨겠는가.)

     

    출처

    우선 인스턴스 메타데이터란?

    Docs에 따르면 인스턴스 메타데이터는 실행 중인 인스턴스를 구성 또는 관리하는 데 사용될 수 있는 인스턴스 관련 데이터이다.

    대충 인스턴스 식별 및 관리, 모니터링, 네트워크 설정 조회 등의 목적으로 사용된다.

    대충 아래와 같은 항목이 있는데 모든 항목을 보고 싶다면 여기로(인스턴스 메타데이터 카테고리 Docs)

    • instance-id
    • hostname
    • instance-type
    • ami-id
    • subnet-id / vpc-id
    • local-ipv4 / public-ipv4

    메타데이터 액세스

    참고로 인스턴스에서 outbound 설정이 되지 않더라도 IMDS(http://169.254.169.254/latest/meta-data/)로의 통신이 가능하다.

    명령 형식은 IMDS의 버전에 따라 동작 방식이 다르다.

    • 인스턴스 메타데이터 서비스 버전 1(IMDSv1) – 요청/응답 방법
    • 인스턴스 메타데이터 서비스 버전 2(IMDSv2) – 세션 지향 방법

    참고로 교양삼아 v2 가 나오게 된 이유를 설명하자면 v1이 SSRF 공격에 취약하여 도입 됐다.

    아무튼 설정이 가능하긴 하나 2023년 11월 09일 올라온 aws 블로그에 따르면 IMDSv2는 기본 설정이 되어 그냥 냅다 인스턴스를 생성하고 v1 방식으로 요청하면 아래와 같이 Unauthorized가 뜨게 된다.

    그렇기에 세션 토큰을 발급 받아 X-aws-ec2-metadata-token 헤더에 담아 전달해야 한다.

    TOKEN=`curl -X PUT "<http://169.254.169.254/latest/api/token>" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
    curl -H "X-aws-ec2-metadata-token: $TOKEN" <http://169.254.169.254/latest/meta-data/>
    

    세션 기간은 최소 1초에서 최대 6시간일 수 있다.

     

     

    아무튼 결론

    앞서 보이는 사진에 보이는 정보들과 같은 메타데이터에 접근할 수 있다.

    추가적으로 리소스 기반 IAM을 EC2 인스턴스에 부여한다면 IAM도 조회 가능하여 Access Key와 Secret Key를 확인하는 것도 가능하다. (대충 회사에서는 확인 했는데 다시 하기 너무 귀찮아요….)

    그리하여 보안 모범 사례로 IMDSv2를 권장하니 말을 잘 들어 v1은 비활성화 하도록 하자.

Designed by Tistory.