EC2 인스턴스 메타데이터 접근 보호 점검

필요한 메타데이터 접근에는 IMDSv2를 요구하고 실제 애플리케이션 호환성을 확인하세요.

설명

메타데이터 엔드포인트가 활성화되어 있고 metadata_options.http_tokens가 optional이면 IMDSv1과 IMDSv2 요청이 모두 허용됩니다. IMDSv2는 세션 토큰을 요구해 일부 SSRF 경로 등을 통한 메타데이터 노출 위험을 줄입니다. 모든 SSRF나 인스턴스 침해를 막는 것은 아닙니다.

잠재적 영향

  • 취약한 애플리케이션을 통해 메타데이터나 인스턴스 역할의 임시 자격 증명이 노출될 수 있습니다.
  • 호환성을 확인하지 않고 IMDSv2를 강제하면 오래된 클라이언트가 메타데이터를 읽지 못할 수 있습니다.

해결 방법

  • 메타데이터가 필요하면 http_tokens: required를 설정하고 SDK, 에이전트와 컨테이너에서 정상 동작하는지 확인하세요. 엔드포인트가 필요하지 않으면 http_endpoint: disabled를 검토하세요.
  • 실제 인스턴스의 설정과 새 인스턴스에 적용되는 시작 설정을 함께 확인하고, 인스턴스 역할 권한과 SSRF 방어도 별도로 유지하세요.

예시

ec2_subnet_id와 ec2_image_id에는 해당 리전에서 사용할 실제 서브넷과 AMI ID를 제공하세요. 예시는 메타데이터 사용이 필요한 인스턴스를 비교합니다.

변경 전

yaml
- name: EC2 인스턴스 생성
  amazon.aws.ec2_instance:
    name: public-metadataoptions-instance
    vpc_subnet_id: "{{ ec2_subnet_id }}"
    instance_type: t3.small
    image_id: "{{ ec2_image_id }}"
    metadata_options:
      http_tokens: optional

변경 후

yaml
- name: EC2 인스턴스 생성
  amazon.aws.ec2_instance:
    name: public-metadataoptions-instance
    vpc_subnet_id: "{{ ec2_subnet_id }}"
    instance_type: t3.small
    image_id: "{{ ec2_image_id }}"
    metadata_options:
      http_endpoint: enabled
      http_tokens: required

설명:

  • 변경 전: 활성화된 엔드포인트에서 optional은 토큰 없는 IMDSv1 요청도 허용합니다.
  • 변경 후: 엔드포인트를 활성화하면서 required로 IMDSv2 토큰을 요구합니다.

참조