본문 바로가기

AWS/EC2

[EC2] EC2 인스턴스 메타데이터

반응형

메타데이터

 - 메타데이터는 객체에 대한 키와 값에 대한 집합 데이터

 

인스턴스 메타데이터

 -  실행 중인 인스턴스를 구성 또는 관리하는 데 사용될 수 있는 인스턴스 관련 데이터

 

인스턴스 메타데이터 확인 (Amazon Linux 2 버전 기준)

버전확인

 - 169.254.169.254 IP 주소는 아마존 EC2 등 클라우드 플랫폼에서 VM 인스턴스에 메타데이터를 제공하기 위한 내부 주소

$ curl http://169.254.169.254
1.0
2007-01-19
2007-08-29
2007-10-10
...
2021-07-15
2022-07-09
2022-09-24
lastest

 

최신 버전에서 메타데이터 리스트 검색

$ curl http://169.254.169.254/latest
dynamic
meta-data

$ curl http://169.254.169.254/latest/meta-data
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
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/

 

인스턴스 ID / 타입 / DNS 등 실제 인스턴스와 비교하면 동일한 것을 확인할 수 있다. 

$ curl http://169.254.169.254/latest/meta-data/instance-id

$ curl http://169.254.169.254/latest/meta-data/instance-type

$ curl http://169.254.169.254/latest/meta-data/public-hostname

 

다음 방법 중 하나를 사용하여 실행 중인 인스턴스에서 인스턴스 메타데이터에 액세스 할 수 있습니다.

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

 

IMDSv1는 정해진 메타데이터 URL에 대해 GET 요청을 하면 누구나 메타데이터에 접근할 수 있습니다.

IMDSv2는 GET 요청을 하기 전에 PUT 요청을 통해 Token을 발급받아야 합니다.

따럿, IMDSv2는 SSRF(Server Side Request Forgery) 공격으로부터 인스턴스 메타데이터 서비스를 보호할 수 있습니다.

 

기본적으로 IMDSv1 또는 IMDSv2를 사용하거나 둘 다 사용할 수 있습니다. 인스턴스 메타데이터 서비스는 특정 요청에 대해 IMDSv2에 고유한 PUT 또는 GET 헤더가 해당 요청에 있는지 여부에 따라 IMDSv1 및 IMDSv2 요청 간을 구별합니다.

 

로컬 코드 또는 사용자가 IMDSv2를 사용해야 하도록 각 인스턴스에서 인스턴스 메타데이터 서비스를 구성할 수 있습니다. IMDSv2를 사용해야 하도록 지정하면 IMDSv1는 더 이상 작동하지 않습니다. 


"서비스를 운영하고 있을 경우 해당 메타데이터 버전 변경 시 장애가 발생할 수 있습니다."

 

인스턴스 메타데이터 옵션 구성

 

1. 새 인스턴스에 대한 인스턴스 메타데이터 옵션 구성

 

1) Console

새 인스턴스에서 IMDSv2를 사용해야 하도록 설정하려면
Amazon EC2 콘솔에서 새 인스턴스를 시작할 때 고급 세부 정보를 확장하고 다음을 수행합니다.
액세스 가능한 메타데이터(Metadata accessible)에 활성화(Enabled)를 선택합니다.
메타데이터 버전(Metadata version)에 V2만 해당(토큰 필요)(V2 only (token required))를 선택합니다.

 

2) AWS CLI

다음 run-instances 예에서는 c3.large를 --metadata-options로 설정하여 HttpTokens=required 인스턴스를 시작합니다. 또한 HttpTokens의 값을 지정할 때 HttpEndpoint를 enabled로 설정해야 합니다. 메타데이터 검색 요청에 대해 보안 토큰 헤더가 required로 설정되어 있으므로 인스턴스 메타데이터를 요청할 때 인스턴스가 IMDSv2를 사용해야 합니다.

aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type c3.large \
	...
    --metadata-options "HttpEndpoint=enabled,HttpTokens=required"

 

2. 기존 인스턴스의 경우

 

1) IMDSv2의 사용하도록 요구하려면

aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567898abcdef0 \
    --http-tokens required \
    --http-endpoint enabled

 

2) PUT 응답 홉 제한을 변경하려면

aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567898abcdef0 \
    --http-put-response-hop-limit 3 \
    --http-endpoint enabled

 

3) IMDSv2를 사용하여 인스턴스에서 IMDSv1의 사용을 복원하려면

aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567898abcdef0 \
    --http-tokens optional \
    --http-endpoint enabled

 

4) 인스턴스에 대해 IPv6 엔드포인트 설정

aws ec2 modify-instance-metadata-options \
	--instance-id i-1234567898abcdef0 \
	--http-protocol-ipv6 enabled \
	--http-endpoint enabled

 

※ 인스턴스 메타데이터에 대한 액세스를 끄려면 아래 링크 참고

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html

 

새 인스턴스에 대한 인스턴스 메타데이터 옵션 구성 - Amazon Elastic Compute Cloud

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/configuring-IMDS-existing-instances.html

 

기존 인스턴스에 대한 인스턴스 메타데이터 옵션 수정 - Amazon Elastic Compute Cloud

Amazon EC2 콘솔을 사용하여 인스턴스 메타데이터 옵션을 수정할 수 없습니다. 현재 AWS CLI 및 AWS SDK에서만 기존 인스턴스에 대한 인스턴스 메타데이터 옵션 수정을 지원합니다.

docs.aws.amazon.com

 

 

[참고]

- https://dev.classmethod.jp/articles/check-the-ec2-instance-metadata/

- https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html

- https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html

반응형