메타데이터
- 메타데이터는 객체에 대한 키와 값에 대한 집합 데이터
인스턴스 메타데이터
- 실행 중인 인스턴스를 구성 또는 관리하는 데 사용될 수 있는 인스턴스 관련 데이터
인스턴스 메타데이터 확인 (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
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/configuring-IMDS-existing-instances.html
[참고]
- 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
'AWS > EC2' 카테고리의 다른 글
[AWS] Amazon Linux 2023 /var/log 디렉토리에 로그가 없는 이유 (0) | 2024.10.20 |
---|---|
AWS EC2 StatusCheckFailed 발생 원인 (0) | 2024.08.21 |
[AWS] System Manager의 Run Command 기능을 통해 S3에 저장된 스크립트 일괄 실행 (0) | 2024.01.21 |
[AWS] EC2 instance power maintenance scheduled 이란? (0) | 2024.01.14 |