[AWS] EC2 : 유저데이터와 메타데이터 (EC2 User Data & Meta Data)
이번 포스팅에서는 EC2 인스턴스의 유저데이터 및 메타데이터의 설정 방법 및 활용에 대해서 알아보려고 한다.
유저데이터 (EC2 User Data)
EC2 인스턴스를 최초 실행할 때 사용자 정의 스크립트를 실행할 수 있는 기능 인스턴스의 부팅 과정에서 실행되며, 필요한 초기화 작업을 자동으로 수행할 수 있다.
- 동일한 작업을 여러 인스턴스에 적용해야 할 때, 수작업 대신 자동화를 통해 시간 절약
- EC2 인스턴스 설정(보안 설정, 인스턴스 설정 등), 외부 패키지 및 애플리케이션 설치 및 실행 등
- ex) Git 코드를 다운로드받고, Docker를 다운받아 이미지를 올리는 것 등
- 필요 시 재부팅 마다 실행하도록 설정 가능
- 특히 Auto Scaling 그룹에서 새로운 인스턴스가 생성될 때 User Data를 통해 초기화 작업을 자동으로 처리할 수 있어 편리하
실행 모드
- Shell Script: 일반적인 셸 명령어를 실행할 수 있는 방식으로 간단한 작업에 적합하다.
- Cloud-init: YAML 형식으로 작성하며 소프트웨어 설치, 설정 관리, 사용자 생성 등을 포함한 복잡한 작업을 정의할 수 있다.
EC2 : 사용자 데이터 설정하기
EC2 인스턴스에서 사용자 데이터를 편집할 수 있다. 위의 내용은 Ubuntu의 apt를 사용하여 docker 실행에 필요한 패키지들을 다운로드하는 과정을 자동으로 수행하도록 유저데이터를 설정한 것이다.
사용자 데이터 결과 확인 및 디버깅
cloud-init.log : EC2 인스턴스가 초기화되는 전체 과정에 대한 상세 로그가 기록된 파일.
cloud-init-output.log : EC2 초기화 과정에서의 스크립트 출력 및 에러 메시지가 기록된 로그 파일.
해당 두 가지의 로그 내용을 바탕으로 User Data가 성공적으로 반영되었는지, 혹시 실패하였다면 어디서 실패했는지를 파악할 수 있다.
일반적으로 Output 로그를 먼저 확인하여 스크립트 결과를 확인하고, 필요 시 세부 내역에 대해 로그를 확인한다.
메타데이터 (EC2 Meta Data)
EC2 인스턴스가 자체적으로 속성 및 정보를 조회할 수 있도록 AWS에서 제공하는 서비스
메타데이터는 AMI ID, 네트워크 정보(IP 주소, 보안그룹 등), EBS 볼륨 매핑 정보 등 인스턴스와 관련된 다양한 정보를 포함한다
이 정보는 인스턴스 내부에서만 접근 가능하며, 다른 인스턴스에서는 접근할 수 없다.
IMDS (Instance Metadata Service)
EC2 인스턴스에서 실행 중인 애플리케이션이 인스턴스 메타데이터 및 IAM 역할 자격증명과 같은 정보를 안전하게 조회할 수 있도록 제공되는 서비스. 네트워크를 통해 간단한 HTTP 요청으로 동작한다.
IP 주소 : 169.254.169.254(IPv4), fd00:ec2::254(IPv6)
동작 방식
V1 : Request/Response 기반
V2 : 세션 기반 (디폴트, 현재 주로 사용됨) → 보안 토큰을 발급받아 요청 시 토큰 사용. 높은 보안 수준. 정책을 통해 강제적으로 IMDS v2로 강제할 수 있음. AWS 단의 Best Practice(권장 사항)
주요 사용 목적
동적 설정 및 초기화: 인스턴스가 환경 설정을 메타데이터를 바탕으로 동적으로 변경할 수 있다.
- ex) EC2 인스턴스 ID를 기반으로 애플리케이션의 Alias 설정 등을 초기화.
IAM 임시 자격증명 조회: 인스턴스에 할당된 IAM 역할의 임시 자격증명(Access Key, Secret Key)을 조회하여 역할을 부여받을 수 있음.
https://sjh9708.tistory.com/247
EC2 : 메타데이터 엑세스 활성화
디폴트로 활성화되어 동작하여, V2만을 사용하도록 강제하는 등의 옵션을 부여할 수 있다. 요금은 무료이다.
IMDS V2를 사용하여 인스턴스 메타데이터 조회하기
1. IMDS v2에 보안 토큰 요청
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
- curl 명령어를 사용해 IMDS의 보안 토큰을 발급받는 /latest/api/token 엔드포인트에 요청을 보낸다.
- 헤더에 X-aws-ec2-metadata-token-ttl-seconds는 토큰의 유효 시간을 설정하여 보낸다.
- 반환받은 보안 토큰을 변수 TOKEN에 저장하여 사용한다.
2. 보안 토큰을 활용하여 EC2 인스턴스의 ID 확인
curl -s -H "x-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id
- 인스턴스 ID를 조회하는 IMDS 엔드포인트로 요청을 보낸다.
- 헤더 x-aws-ec2-metadata-token: $TOKEN을 포함하여 요청한다.
References
'Cloud > AWS' 카테고리의 다른 글
[AWS] Autoscaling : EC2 클러스터 구성 및 스케일링 정책 적용 (1) | 2025.01.14 |
---|---|
[AWS] EC2 : ENI & Elastic IP 설정을 통한 Public IP 고정시키기 (1) | 2025.01.13 |
[AWS] EC2 : 주요 구성 요소와 인스턴스 생성 및 연결 방법 (0) | 2025.01.12 |
[AWS] IAM : 인증과 접근 방식 (장기 자격 증명 & 임시 자격 증명) (0) | 2025.01.11 |
[AWS] IAM : 사용자 및 권한 정책 관리 기초 (그룹, 역할) (0) | 2025.01.09 |