Instance Metadata Service 옵션 구성하기

Instance Metadata Service 옵션 구성하기

Instance Metadata Service(IMDS)는 모든 EC2 인스턴스에서 로컬로 실행돼요. 인스턴스 메타데이터 옵션은 EC2 인스턴스에서 IMDS의 접근성과 동작을 제어하는 일련의 구성 집합을 말합니다.

출처: 문서

본문

각 인스턴스에서 다음 인스턴스 메타데이터 옵션을 구성할 수 있어요.

  • Instance metadata service (IMDS): enabled | disabled — 인스턴스에서 IMDS를 활성화하거나 비활성화할 수 있어요. 비활성화하면 사용자나 코드가 인스턴스의 인스턴스 메타데이터에 접근할 수 없습니다.
  • IMDS IPv6 endpoint: enabled | disabled — IMDS에는 인스턴스에 두 개의 엔드포인트가 있어요: IPv4(169.254.169.254)와 IPv6([fd00:ec2::254]). IMDS를 활성화하면 IPv4 엔드포인트가 자동으로 활성화됩니다. IPv6 엔드포인트를 활성화하려면 명시적으로 설정해야 해요. IPv6 엔드포인트가 활성화되면 IPv4 엔드포인트도 계속 활성화돼 있어요. IPv6 엔드포인트는 IPv6 지원 서브넷(듀얼 스택 또는 IPv6 전용)의 Nitro 기반 인스턴스에서만 지원됩니다.
  • Metadata version: IMDSv1 or IMDSv2 (token optional) | IMDSv2 only (token required) — 인스턴스 메타데이터를 요청할 때 IMDSv2 호출에는 토큰이 필요하고 IMDSv1 호출에는 토큰이 필요 없어요. 인스턴스가 IMDSv1 또는 IMDSv2 호출을 모두 허용하도록(토큰 선택 사항) 또는 IMDSv2 호출만 허용하도록(토큰 필수) 구성할 수 있습니다.
  • Metadata response hop limit: 1 – 64 — 홉 제한은 PUT 응답이 이동할 수 있는 네트워크 홉 수예요. 홉 제한은 최소 1에서 최대 64로 설정할 수 있어요. 컨테이너 환경에서는 홉 제한 1이 문제를 일으킬 수 있습니다. 자세한 내용은 "인스턴스 메타데이터 접근 고려 사항"의 컨테이너 환경 정보를 참고하세요.
  • Access to tags in instance metadata: enabled | disabled — 인스턴스 메타데이터에서 인스턴스 태그에 대한 접근을 활성화하거나 비활성화할 수 있어요.

인스턴스의 현재 구성을 보려면 "기존 인스턴스의 인스턴스 메타데이터 옵션 조회"를 참고하세요.

인스턴스 메타데이터 옵션을 구성할 위치

인스턴스 메타데이터 옵션은 다음과 같이 여러 수준에서 구성할 수 있어요.

  • 계정(Account) — 각 AWS 리전의 계정 수준에서 인스턴스 메타데이터 옵션의 기본값을 설정할 수 있어요. 인스턴스를 시작하면 인스턴스 메타데이터 옵션이 자동으로 계정 수준 값으로 설정됩니다. 시작 시 이 값을 변경할 수 있어요. 계정 수준 기본값은 기존 인스턴스에는 영향을 주지 않습니다.
  • AMI — AMI를 등록하거나 수정할 때 imds-support 파라미터를 v2.0으로 설정할 수 있어요. 이 AMI로 인스턴스를 시작하면 인스턴스 메타데이터 버전이 자동으로 IMDSv2로, 홉 제한이 2로 설정됩니다.
  • 인스턴스(Instance) — 시작 시 인스턴스의 모든 인스턴스 메타데이터 옵션을 변경해 기본 설정을 덮어쓸 수 있어요. 실행 중이거나 중지된 인스턴스의 옵션도 시작 후 변경할 수 있습니다. IAM이나 SCP 정책으로 변경이 제한될 수 있다는 점을 유의하세요.

인스턴스 메타데이터 옵션의 우선 순위

각 인스턴스 메타데이터 옵션 값은 인스턴스 시작 시 결정되며, 다음과 같은 계층적 우선 순위를 따릅니다(위가 가장 높은 우선 순위).

  • 우선 순위 1: 시작 시 인스턴스 구성 — 값은 시작 템플릿이나 인스턴스 구성에 지정할 수 있어요. 여기 지정된 값은 계정 수준이나 AMI에 지정된 값을 덮어씁니다.
  • 우선 순위 2: 계정 설정 — 인스턴스 시작 시 값이 지정되지 않으면 계정 수준 설정(각 AWS 리전별)에 의해 결정됩니다. 계정 수준 설정은 각 메타데이터 옵션에 값을 포함하거나 아무 선호도 없음을 나타낼 수 있어요.
  • 우선 순위 3: AMI 구성 — 시작 시나 계정 수준에서 값이 지정되지 않으면 AMI 구성에 의해 결정됩니다. 이는 HttpTokens와 HttpPutResponseHopLimit에만 적용됩니다.

각 메타데이터 옵션은 별도로 평가됩니다. 인스턴스는 직접 인스턴스 구성, 계정 수준 기본값, AMI의 구성이 혼합되어 설정될 수 있어요. IAM이나 SCP 정책으로 변경이 제한되지 않는 한, 실행 중이거나 중지된 인스턴스에서 시작 후 어떤 메타데이터 옵션 값도 변경할 수 있습니다.

참고 — 계정 수준 IMDSv2 강제 적용(enforcement) 설정은 우선 순위가 인스턴스의 IMDS 설정을 결정한 후에 평가됩니다. IMDSv2 강제 적용이 활성화되면 IMDSv1으로 활성화된 인스턴스는 실패해요.

경고 — IMDSv2 강제 적용이 활성화되고 httpTokens가 시작 시 인스턴스 구성, 계정 설정, AMI 구성 중 어디에서도 required로 설정되지 않았다면 시작이 실패합니다.

예제 1 — 메타데이터 옵션 값 결정

이 예제에서 EC2 인스턴스는 계정 수준에서 HttpPutResponseHopLimit이 1로 설정된 리전에 시작됩니다. 지정된 AMI는 ImdsSupport가 v2.0으로 설정되어 있고, 시작 시 인스턴스에 직접 지정된 메타데이터 옵션은 없어요. 인스턴스는 다음 메타데이터 옵션으로 시작됩니다.

"MetadataOptions": {
    ...
    "HttpTokens": "required",
    "HttpPutResponseHopLimit": 1,
    ...

이 값들은 다음과 같이 결정됐어요.

  • 시작 시 지정된 메타데이터 옵션 없음: 인스턴스 시작 동안 인스턴스 시작 파라미터나 시작 템플릿에서 특정 값이 제공되지 않았습니다.
  • 계정 설정이 다음 우선 순위: 시작 시 지정된 값이 없으므로 리전 내 계정 수준 설정이 우선합니다. 즉 계정 수준 기본값이 적용되며, 여기서 HttpPutResponseHopLimit이 1로 설정됐습니다.
  • AMI 설정이 마지막 우선 순위: HttpTokens(인스턴스 메타데이터 버전)에 대해 시작 시나 계정 수준에서 지정된 값이 없으므로 AMI 설정이 적용됩니다. 즉 AMI 설정 ImdsSupport: v2.0이 HttpTokens를 required로 결정했습니다. AMI 설정 ImdsSupport: v2.0은 HttpPutResponseHopLimit: 2를 설정하도록 설계됐지만, 우선 순위가 높은 계정 수준 설정 HttpPutResponseHopLimit: 1이 덮어썼습니다.

예제 2 — 메타데이터 옵션 값 결정

이 예제에서 EC2 인스턴스는 예제 1과 같은 설정으로 시작되지만, 시작 시 인스턴스에 직접 HttpTokens를 optional로 설정했습니다. 인스턴스는 다음 메타데이터 옵션으로 시작됩니다.

"MetadataOptions": {
    ...
    "HttpTokens": "optional",
    "HttpPutResponseHopLimit": 1,
    ...

HttpPutResponseHopLimit 값은 예제 1과 같은 방식으로 결정되지만, HttpTokens 값은 다음과 같이 결정됩니다: 시작 시 인스턴스에 구성된 메타데이터 옵션이 첫 번째 우선 순위를 가져요. AMI가 ImdsSupport: v2.0(즉 HttpTokens가 required)으로 구성됐어도, 시작 시 인스턴스에 지정된 값(HttpTokens를 optional로)이 우선했습니다.

예제 3 — HttpTokensEnforced가 활성화된 메타데이터 옵션 값 결정

이 예제에서 리전의 계정은 HttpTokens = required와 HttpTokensEnforced = enabled입니다. 다음 EC2 인스턴스 시작 시도를 고려해 보세요.

  • HttpTokens를 optional로 설정한 시작 시도 — 계정 수준 강제 적용이 활성화되어 있고(HttpTokensEnforced = enabled), 시작 파라미터가 계정 기본값보다 우선하므로 시작이 실패합니다.
  • HttpTokens를 required로 설정한 시작 시도 — 계정 수준 강제 적용을 준수하므로 시작이 성공합니다.
  • HttpTokens 값을 지정하지 않은 시작 시도 — 계정 설정에 따라 값이 기본적으로 required가 되므로 시작이 성공합니다.

인스턴스 메타데이터 버전 설정

인스턴스를 시작할 때 인스턴스 메타데이터 버전 값은 IMDSv1 또는 IMDSv2(토큰 선택 사항)(httpTokens=optional) 또는 IMDSv2만(토큰 필수)(httpTokens=required) 중 하나입니다.

시작 시 메타데이터 버전 값을 직접 지정하거나 기본값을 사용할 수 있어요. 직접 지정하면 모든 기본값을 덮어씁니다. 직접 지정하지 않으면 기본 설정의 조합으로 결정됩니다.

다음 표는 시작 시 인스턴스의 메타데이터 버전(4열의 결과 인스턴스 구성)이 구성의 여러 수준 설정에 의해 어떻게 결정되는지 보여줘요. 우선 순위는 왼쪽에서 오른쪽이며, 첫 번째 열이 가장 높은 우선 순위를 가집니다.

  • 1열: 시작 파라미터 — 시작 시 직접 지정하는 인스턴스의 설정을 나타냅니다.
  • 2열: 계정 수준 기본값 — 계정의 설정을 나타냅니다.
  • 3열: AMI 기본값 — AMI의 설정을 나타냅니다.
시작 파라미터 계정 수준 기본값 AMI 기본값 결과 인스턴스 구성
V2 only (token required) No preference V2 only V2 only
V2 only (token required) V2 only V2 only V2 only
V2 only (token required) V1 or V2 V2 only V2 only
V1 or V2 (token optional) No preference V2 only V1 or V2
V1 or V2 (token optional) V2 only V2 only V1 or V2
V1 or V2 (token optional) V1 or V2 V2 only V1 or V2
Not set No preference V2 only V2 only
Not set V2 only V2 only V2 only
Not set V1 or V2 V2 only V1 or V2
V2 only (token required) No preference null V2 only
V2 only (token required) V2 only null V2 only
V2 only (token required) V1 or V2 null V2 only
V1 or V2 (token optional) No preference null V1 or V2
V1 or V2 (token optional) V2 only null V1 or V2
V1 or V2 (token optional) V1 or V2 null V1 or V2
Not set No preference null V1 or V2
Not set V2 only null V2 only
Not set V1 or V2 null V1 or V2

IAM 조건 키로 인스턴스 메타데이터 옵션 제한하기

IAM 정책이나 SCP에서 IAM 조건 키를 다음과 같이 사용할 수 있어요.

  • IMDSv2 사용을 요구하도록 구성된 경우에만 인스턴스가 시작되도록 허용
  • 허용되는 홉 수 제한
  • 인스턴스 메타데이터 접근 끄기

참고 — 변경 전에 신중히 진행하고 철저한 테스트를 수행해야 해요. 다음을 유의하세요.

  • IMDSv2 사용을 강제하면 인스턴스 메타데이터 접근에 IMDSv1을 사용하는 애플리케이션이나 에이전트가 중단됩니다.
  • 인스턴스 메타데이터 접근을 모두 끄면 인스턴스 메타데이터 접근에 의존하는 애플리케이션이나 에이전트가 중단됩니다.
  • IMDSv2에서는 토큰을 가져올 때 /latest/api/token을 사용해야 해요.
  • (Windows 전용) PowerShell 버전이 4.0보다 이전이라면 IMDSv2 사용을 요구하려면 Windows Management Framework 4.0으로 업데이트해야 해요.

더 알아보기 (Learn more)