인스턴스 메타데이터에 액세스하는 방법
인스턴스 메타데이터에 액세스하는 방법
AWS EC2 인스턴스의 메타데이터에 액세스하려면 인스턴스 내부에서 HTTP 요청을 통해 인스턴스 메타데이터 서비스를 사용할 수 있습니다. 이 서비스는 인스턴스의 특정 정보를 제공합니다. 이를 통해 인스턴스 ID, AMI ID, 호스트 이름, 보안 그룹 등 다양한 정보를 조회할 수 있습니다.
AWS EC2 인스턴스에서 IMDSv1 또는 IMDSv2가 사용되고 있는지 확인
1. AWS CLI를 통한 확인
AWS CLI를 사용하여 인스턴스 메타데이터 서비스(IMDS) 구성을 확인할 수 있습니다.
aws ec2 describe-instances --instance-ids <INSTANCE_ID> --query "Reservations[].Instances[].MetadataOptions"
- HttpTokens : optional이면 IMDSv1과 IMDSv2 모두 허용되고, required이면 IMDSv2만 허용됩니다.
- HttpEndpoint : enabled이면 메타데이터 서비스가 활성화되어 있습니다.
- HttpPutResponseHopLimit : IMDSv2에서 세션 토큰을 요청할 때 사용할 수 있는 최대 허용 홉 수를 나타냅니다.
IMDSv1과 IMDSv2 모두 허용
[
{
"State": "applied",
"HttpTokens": "optional",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled",
"HttpProtocolIpv6": "disabled",
"InstanceMetadataTags": "disabled"
}
]
IMDSv2만 허용
[
{
"State": "applied",
"HttpTokens": "required",
"HttpPutResponseHopLimit": 2,
"HttpEndpoint": "enabled",
"HttpProtocolIpv6": "disabled",
"InstanceMetadataTags": "disabled"
}
]
2. 인스턴스 내에서 직접 확인
인스턴스 내부에서 IMDSv1 또는 IMDSv2 사용 여부를 확인할 수 있습니다.
IMDSv1 확인
- IMDSv1은 세션 토큰 없이 메타데이터에 바로 접근할 수 있습니다.
curl http://169.254.169.254/latest/meta-data/instance-id
$ curl http://169.254.169.254/latest/meta-data/instance-id
i-01xxxxxxxxxxxxx24
- 만약 인스턴스 ID가 반환되면 IMDSv1이 활성화된 상태입니다. 요청이 실패한다면 IMDSv1이 비활성화되었거나 IMDSv2만 사용 중일 수 있습니다.
IMDSv2 확인
- IMDSv2는 세션 토큰을 사용합니다. 토큰을 요청하여 응답을 받을 수 있으면 IMDSv2가 활성화되어 있다는 뜻입니다.
curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
$ curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
AQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==
- 응답으로 토큰이 반환되면 IMDSv2가 활성화되어 있습니다. 만약 응답이 없거나 오류가 발생하면 IMDSv2가 비활성화된 것입니다.
3. 인스턴스 메타데이터 엔드포인트
최신 메타데이터 API 버전인 IMDSv2를 사용하는 것이 권장합니다.
인스턴스 메타데이터 서비스의 엔드포인트 URL은 http://169.254.169.254입니다.
4. IMDSv2 사용: 토큰 기반 요청
IMDSv2는 보안을 강화하기 위해 세션 토큰을 사용합니다.
세션 토큰 가져오기
- 세션 토큰을 요청해야 합니다.
TOKEN=`curl -s -X PUT "http://169.254.169.254/latest/api/token" \
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
메타데이터 요청
- 토큰을 사용하여 메타데이터에 액세스할 수 있습니다(인스턴스 ID).
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id
$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id
i-01xxxxxxxxxxxxx24
5. 주요 메타데이터 경로
인스턴스 ID : /latest/meta-data/instance-id
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id
AMI ID : /latest/meta-data/ami-id
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
호스트 이름 : /latest/meta-data/hostname
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/hostname
보안 그룹 : /latest/meta-data/security-groups
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/security-groups
IPv4 주소 : /latest/meta-data/local-ipv4
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/local-ipv4
퍼블릭 IPv4 주소 : /latest/meta-data/public-ipv4
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-ipv4
메타데이터 항목을 조회
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
system
참고URL
- AWS Documentation : 인스턴스 메타데이터 카테고리
- AWS Documentation : EC2 인스턴스 내에서 인스턴스 메타데이터에 액세스
- AWS Documentation : IMDSv2 예제