EC2 Linux 인스턴스의 인스턴스 메타데이터 문제를 해결하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스에서 인스턴스 메타데이터를 검색할 수 없습니다.

간략한 설명

인스턴스 메타데이터는 인스턴스 ID, 퍼블릭 IP 주소와 프라이빗 IP 주소, 보안 그룹, AWS Identity and Access Management(IAM) 역할 등과 같은 EC2 인스턴스 관련 정보입니다. 인스턴스 메타데이터는 169.254.169.254에 대한 HTTP 요청을 통해 인스턴스에 노출됩니다.

인스턴스 메타데이터 서비스(IMDS)에서 인스턴스 메타데이터를 검색할 때 다음과 같은 문제가 발생할 수 있습니다.

  • HTTP 요청 오류
  • 프록시 구성
  • 로컬 방화벽 규칙
  • 요청 제한

해결 방법

HTTP 요청 오류

인스턴스 메타데이터를 검색하기 위해 HTTP 요청을 할 때 다음과 같은 HTTP 오류 코드가 반환될 수 있습니다.

HTTP 404 - Not Found

HTTP 404 오류는 IMDS v1에 적용됩니다. 이 오류는 요청된 리소스를 사용할 수 없을 때 발생합니다. 올바른 URL을 사용하고 있는지 확인하세요.

400 - Bad Request

400 - Bad Request 오류는 IMDS v2에 적용됩니다. 이 오류는 PUT 요청이 유효하지 않을 때 발생합니다.

401 - Unauthorized

401 - Unauthorized 오류는 GET 요청에서 유효하지 않은 토큰을 사용할 때 발생합니다. 이 경우 새로운 토큰을 생성합니다.

403 - Forbidden

403 - Forbidden 오류는 요청이 허용되지 않거나 IMDS가 꺼진 경우에 발생합니다. 다음 명령을 실행하여 IMDS 상태를 확인합니다. 다음 예제 명령에서 your_instance_ID를 사용 사례에 대한 올바른 값으로 대체합니다.

$ aws ec2 describe-instances -instance-ids  -query 'Reservations[].Instances[].MetadataOptions'

다음은 위 명령의 출력 예시입니다.

[
  {
    "State": "applied",
    "HttpTokens": "optional",
    "HttpPutResponseHopLimit": 1,
    "HttpEndpoint": "disabled",
    "HttpProtocolIpv6": "disabled",
    "InstanceMetadataTags": "disabled"
  }
]

명령 옵션에 HttpEndpoint가 꺼져 있는 것으로 표시되면 다음 명령을 실행합니다.

aws ec2 modify-instance-metadata-options \
    --instance-id  \
    --http-endpoint enabled

프록시 구성

프록시를 사용하여 인터넷에 액세스하는 경우 IMDS IP 주소(169.254.169.254)를 제외해야 합니다. IMDS IP 주소가 제외되지 않으면 인스턴스 메타데이터를 검색하지 못할 수 있습니다.

IMDS IP 주소를 프록시 사용에서 제외하려면 다음 주소를 사용하여 NO_PROXY 환경 변수를 설정하세요.

export NO_PROXY=169.254.169.254

로컬 방화벽 규칙

인스턴스의 방화벽으로 인해 일부 또는 모든 프로세스가 IMDS에 액세스하지 못할 수 있습니다.

인스턴스 운영 체제의 방화벽이 인스턴스 메타데이터 IP 주소로 나가는 트래픽을 차단하고 있지 않은지 확인하세요. 방화벽에는 iptables, UFW(Uncomplicated Firewall) 등이 포함됩니다.

다음 명령을 사용하여 iptables의 방화벽 규칙을 확인하세요.

sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
REJECT     tcp  --  anywhere             169.254.169.254      owner UID match 1000-10000 reject-with icmp-port-unreachable

iptables 나열 결과에 메타데이터 검색 거부가 표시되면 다음 오류가 발생할 수 있습니다.

$ curl http://169.254.169.254/latest/meta-data/
curl: (7) Failed to connect to 169.254.169.254 port 80 after 0 ms: Connection refused

이 오류를 해결하려면 다음 명령을 실행하여 해당 규칙을 삭제합니다.

$ sudo iptables -D OUTPUT -proto tcp -destination 169.254.169.254 -match owner -uid-owner 1000-10000 -jump REJECT

요청 제한

IMDS로의 트래픽은 초당 패킷 수를 기준으로 제한됩니다. 그리고 인스턴스에 연결된 각 탄력적 네트워크 인터페이스는 1,024PPS로 제한됩니다. IMDS 서비스에 대한 PPS 속도가 1,024PPS를 초과할 경우 요청이 제한됩니다.

제한이 발생할 경우 지수 백오프 전략을 사용하여 요청을 다시 시도하세요.

EC2 인스턴스가 제한 한도에 도달하는 빈도를 확인하려면 탄력적 네트워크 인터페이스 드라이버에서 linklocal_allowance_exceeded 지표를 확인하세요. 이 지표는 로컬 프록시 서비스에 대한 트래픽으로 인해 형성된 패킷 수가 네트워크 인터페이스의 최대값을 초과했음을 나타냅니다.

다음 명령을 실행하여 linklocal_allowance_exceeded 지표를 확인하세요.

$ ethtool -S <Network-Interface>
eg: $ ethtool -S eth0

관련 정보

Amazon EC2 인스턴스에서 프록시 사용

인스턴스 메타데이터 검색 예시

IMDS 액세스 제한

쿼리 제한

ENA 드라이버 지표

AWS 공식
AWS 공식업데이트됨 10달 전