

# 인스턴스 메타데이터 서비스 옵션 구성
<a name="configuring-instance-metadata-options"></a>

인스턴스 메타데이터 서비스(IMDS)는 모든 EC2 인스턴스에서 로컬로 실행됩니다. *인스턴스 메타데이터 옵션*은 EC2 인스턴스에서 IMDS의 액세스 가능성과 동작을 제어하는 일련의 구성입니다.

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

**인스턴스 메타데이터 서비스(IMDS)**: `enabled` \$1 `disabled`  
인스턴스에서 IMDS를 활성화 또는 비활성화할 수 있습니다. 비활성화하면 사용자 또는 다른 코드에서 인스턴스의 인스턴스 메타데이터에 액세스할 수 없습니다.  
IMDS에는 인스턴스에 IPv4(`169.254.169.254`) 및 IPv6(`[fd00:ec2::254]`)이라는 두 개의 엔드포인트가 있습니다. IMDS를 활성화하면 IPv4 엔드포인트가 자동으로 활성화됩니다. IPv6 엔드포인트를 활성화하려면 명시적으로 활성화해야 합니다.

**IMDS IPv6 엔드포인트**: `enabled` \$1 `disabled`  
인스턴스에서 IPv6 IMDS 엔드포인트를 명시적으로 활성화할 수 있습니다. IPv6 엔드포인트가 활성화된 경우 IPv4 엔드포인트는 활성화된 상태로 유지됩니다. IPv6 엔드포인트는 [IPv6 지원 서브넷](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range)(듀얼 스택 또는 IPv6 전용)의 [Nitro 기반 인스턴스](instance-types.md#instance-hypervisor-type)에서만 지원됩니다.

**메타데이터 버전**: `IMDSv1 or IMDSv2 (token optional)` \$1 `IMDSv2 only (token required)`  
인스턴스 메타데이터를 요청할 때 IMDSv2를 직접 호출하려면 토큰이 필요합니다. IMDSv1 직접 호출에는 토큰이 필요하지 않습니다. IMDSv1 또는 IMDSv2 직접 호출(토큰은 선택 사항)을 허용하거나 IMDSv2 직접 호출만(토큰은 필수) 허용하도록 인스턴스를 구성할 수 있습니다.

**메타데이터 응답 홉 제한**: `1`–`64`  
홉 제한은 PUT 응답에 허용된 네트워크 홉 수입니다. 홉 제한을 최소 `1` 및 최대 `64`로 설정할 수 있습니다. 컨테이너 환경에서는 홉 제한 `1`이 문제를 일으킬 수 있습니다. 이러한 문제를 완화하는 방법에 대한 자세한 내용은 [인스턴스 메타데이터 액세스 고려 사항](instancedata-data-retrieval.md#imds-considerations) 아래의 컨테이너 환경 정보를 참조하세요.

**인스턴스 메타데이터에서 태그에 대한 액세스**: `enabled` \$1 `disabled`  
인스턴스 메타데이터에서 인스턴스의 태그에 대한 액세스를 활성화하거나 비활성화할 수 있습니다. 자세한 내용은 [인스턴스 메타데이터를 사용하여 EC2 인스턴스의 태그 보기](work-with-tags-in-IMDS.md) 섹션을 참조하세요.

인스턴스의 현재 구성을 보려면 [기존 인스턴스에 대한 인스턴스 메타데이터 옵션 쿼리](instancedata-data-retrieval.md#query-IMDS-existing-instances) 섹션을 참조하세요.

## 인스턴스 메타데이터 옵션을 구성하는 위치
<a name="where-to-configure-instance-metadata-options"></a>

인스턴스 메타데이터 옵션은 다음과 같이 다양한 수준에서 구성할 수 있습니다.
+ **계정** - 각 AWS 리전의 계정 수준에서 인스턴스 메타데이터 옵션의 기본값을 설정할 수 있습니다. 인스턴스가 시작되면 인스턴스 메타데이터 옵션이 계정 수준 값으로 자동 설정됩니다. 이러한 값은 시작할 때 변경할 수 있습니다. 계정 수준의 기본값은 기존 인스턴스에 영향을 주지 않습니다.
+ **AMI** - AMI를 등록하거나 수정할 때 `imds-support` 파라미터를 `v2.0`으로 설정할 수 있습니다. 이 AMI로 인스턴스를 시작하면 인스턴스 메타데이터 버전이 자동으로 IMDSv2로 설정되고 홉 제한은 2로 설정됩니다.
+ **인스턴스** - 시작할 때 인스턴스의 모든 인스턴스 메타데이터 옵션을 변경하여 기본 설정을 재정의할 수 있습니다. 실행 중이거나 중지된 인스턴스에서 시작 후 인스턴스 메타데이터 옵션을 변경할 수도 있습니다. 단, IAM 또는 SCP 정책에 따라 변경이 제한될 수 있습니다.

자세한 내용은 [새 인스턴스에 대한 인스턴스 메타데이터 옵션 구성](configuring-IMDS-new-instances.md) 및 [기존 인스턴스에 대한 인스턴스 메타데이터 옵션 수정](configuring-IMDS-existing-instances.md)(을)를 참조하세요.

## 인스턴스 메타데이터 옵션의 우선순위
<a name="instance-metadata-options-order-of-precedence"></a>

각 인스턴스 메타데이터 옵션의 값은 계층적 우선순위에 따라 인스턴스를 시작할 때 결정됩니다. 계층 구조는 다음과 같습니다(맨 위의 우선순위가 가장 높음).
+ **우선순위 1: 시작 시 인스턴스 구성** - 시작 템플릿 또는 인스턴스 구성에서 값을 지정할 수 있습니다. 여기에 지정된 모든 값은 계정 수준 또는 AMI에서 지정된 값을 재정의합니다.
+ **우선순위 2: 계정 설정** - 인스턴스 시작 시 값을 지정하지 않은 경우 계정 수준 설정(각 AWS 리전에 대해 설정됨)에 따라 값이 결정됩니다. 계정 수준 설정은 각 메타데이터 옵션의 값을 포함하거나 기본 설정이 없음을 나타냅니다.
+ **우선순위 3: AMI 구성** - 인스턴스 시작 시 또는 계정 수준에서 값이 지정되지 않은 경우 AMI 구성에 따라 값이 결정됩니다. 이것은 `HttpTokens` 및 `HttpPutResponseHopLimit`에만 적용됩니다.

각 메타데이터 옵션은 개별적으로 평가됩니다. 인스턴스는 직접 인스턴스 구성, 계정 수준 기본값 및 AMI의 구성을 혼합하여 구성할 수 있습니다.

IAM 또는 SCP 정책에 의해 변경이 제한되지 않는 한, 실행 중이거나 중지된 인스턴스에서 시작 후 모든 메타데이터 옵션의 값을 변경할 수 있습니다.

**참고**  
계정 수준의 IMDSv2 적용 설정은 우선순위에 따라 인스턴스의 IMDS 설정이 결정된 후 평가됩니다. IMDSv2 적용이 활성화되면 IMDSv1로 활성화된 인스턴스가 실패합니다. 적용에 대한 자세한 내용은 [계정 수준에서 IMDSv2 적용](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level) 섹션을 참조하세요.

**주의**  
IMDSv2 적용이 활성화되어 있고 시작 시 인스턴스 구성, 계정 설정 또는 AMI 구성에서 `httpTokens`가 `required`로 설정되지 않은 경우 시작이 실패합니다.

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

이 예에서는 계정 수준에서 `HttpPutResponseHopLimit`가 `1`로 설정된 리전에서 EC2 인스턴스가 시작됩니다. 지정된 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`로 기본 설정되므로 시작이 성공합니다.

### 인스턴스 메타데이터 버전 설정
<a name="metadata-version-order-of-precedence"></a>

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

인스턴스를 시작할 때 메타데이터 버전의 값을 수동으로 지정하거나 기본값을 사용할 수 있습니다. 값을 수동으로 지정하면 해당 값이 기본값을 재정의합니다. 값을 수동으로 지정하지 않는 경우 기본 설정의 조합에 따라 값이 결정됩니다.

다음 순서도는 서로 다른 구성 수준의 설정에 따라 시작 시 인스턴스의 메타데이터 버전이 어떻게 결정되고 어디에서 적용이 평가되는지를 보여줍니다. 다음 표는 수준별 구체적인 설정을 제공합니다.

![\[인스턴스 메타데이터 버전과 IMDSv2 적용에 대한 평가 요소를 보여주는 흐름도\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/images/imds-defaults-launch-flow.png)


이 테이블에서는 시작 시 인스턴스의 메타데이터 버전(4번째 열의 **결과 인스턴스 구성**으로 표시됨)이 다양한 구성 수준의 설정에 따라 어떻게 결정되는지를 보여줍니다. 우선순위는 왼쪽에서 오른쪽 순서이며, 다음과 같이 첫 번째 열이 우선순위가 가장 높습니다.
+ 열 1: **시작 파라미터** - 시작 시 수동으로 지정하는 인스턴스의 설정을 나타냅니다.
+ 열 2: **계정 수준 기본값** - 계정 설정을 나타냅니다.
+ 열 3: **AMI 기본값** - AMI의 설정을 나타냅니다.


| 시작 파라미터 | 계정 수준 기본값 | AMI 기본값 | 결과 인스턴스 구성 | 
| --- | --- | --- | --- | 
| V2 전용(토큰 필요) | 기본 설정 없음 | V2 전용 | V2 전용 | 
| V2 전용(토큰 필요) | V2 전용 | V2 전용 | V2 전용 | 
| V2 전용(토큰 필요) | V1 또는 V2 | V2 전용 | V2 전용 | 
| V1 또는 V2(토큰 선택 사항) | 기본 설정 없음 | V2 전용 | V1 또는 V2 | 
| V1 또는 V2(토큰 선택 사항) | V2 전용 | V2 전용 | V1 또는 V2 | 
| V1 또는 V2(토큰 선택 사항) | V1 또는 V2 | V2 전용 | V1 또는 V2 | 
| 설정되지 않음 | 기본 설정 없음 | V2 전용 | V2 전용 | 
| 설정되지 않음 | V2 전용 | V2 전용 | V2 전용 | 
| 설정되지 않음 | V1 또는 V2 | V2 전용 | V1 또는 V2 | 
| V2 전용(토큰 필요) | 기본 설정 없음 | null | V2 전용 | 
| V2 전용(토큰 필요) | V2 전용 | null | V2 전용 | 
| V2 전용(토큰 필요) | V1 또는 V2 | null | V2 전용 | 
| V1 또는 V2(토큰 선택 사항) | 기본 설정 없음 | null | V1 또는 V2 | 
| V1 또는 V2(토큰 선택 사항) | V2 전용 | null | V1 또는 V2 | 
| V1 또는 V2(토큰 선택 사항) | V1 또는 V2 | null | V1 또는 V2 | 
| 설정되지 않음 | 기본 설정 없음 | null | V1 또는 V2 | 
| 설정되지 않음 | V2 전용 | null | V2 전용 | 
| 설정되지 않음 | V1 또는 V2 | null | V1 또는 V2 | 

## IAM 조건 키를 사용하여 인스턴스 메타데이터 옵션 제한
<a name="iam-condition-keys-and-imds"></a>

다음과 같이 IAM 정책 또는 SCP에서 IAM 조건 키를 사용할 수 있습니다.
+ IMDSv2를 사용해야 하도록 구성된 경우에만 인스턴스를 시작하도록 허용
+ 허용된 홉 수 제한
+ 인스턴스 메타데이터에 대한 액세스 비활성화

**Topics**
+ [인스턴스 메타데이터 옵션을 구성하는 위치](#where-to-configure-instance-metadata-options)
+ [인스턴스 메타데이터 옵션의 우선순위](#instance-metadata-options-order-of-precedence)
+ [IAM 조건 키를 사용하여 인스턴스 메타데이터 옵션 제한](#iam-condition-keys-and-imds)
+ [새 인스턴스에 대한 인스턴스 메타데이터 옵션 구성](configuring-IMDS-new-instances.md)
+ [기존 인스턴스에 대한 인스턴스 메타데이터 옵션 수정](configuring-IMDS-existing-instances.md)

**참고**  
작업을 조심스럽게 진행해야 하며 무엇이든 변경하기 전에 세심하게 테스트해야 합니다. 다음에 유의하세요.  
IMDSv2를 사용해야 하도록 설정하면 인스턴스 메타데이터 액세스에 IMDSv1를 사용하는 애플리케이션이나 에이전트는 중단됩니다.
인스턴스 메타데이터에 대한 모든 액세스를 끄면 인스턴스 메타데이터 액세스를 이용하여 작동하는 애플리케이션이나 에이전트는 중단됩니다.
IMDSv2의 경우 토큰을 검색할 때 `/latest/api/token`을 사용해야 합니다.
(Windows만 해당) PowerShell 버전이 4.0 이전 버전인 경우 IMDSv2를 사용하려면 [Windows Management Framework 4.0으로 업데이트](https://devblogs.microsoft.com/powershell/windows-management-framework-wmf-4-0-update-now-available-for-windows-server-2012-windows-server-2008-r2-sp1-and-windows-7-sp1/)해야 합니다.

# 새 인스턴스에 대한 인스턴스 메타데이터 옵션 구성
<a name="configuring-IMDS-new-instances"></a>

새 인스턴스에서 다음과 같은 인스턴스 메타데이터 옵션을 구성할 수 있습니다.

**Topics**
+ [IMDSv2의 사용 요구](#configure-IMDS-new-instances)
+ [IMDS IPv4 및 IPv6 엔드포인트 활성화](#configure-IMDS-new-instances-ipv4-ipv6-endpoints)
+ [인스턴스 메타데이터에 대한 액세스 비활성화](#configure-IMDS-new-instances--turn-off-instance-metadata)
+ [인스턴스 메타데이터의 태그에 대한 액세스 허용](#configure-IMDS-new-instances-tags-in-instance-metadata)

**참고**  
이러한 옵션에 대한 설정은 계정 수준에서 직접 구성되거나 선언적 정책을 사용하여 구성됩니다. 이 설정은 인스턴스 메타데이터 옵션을 구성하려는 각 AWS 리전에서 구성해야 합니다. 선언적 정책을 사용하면 여러 리전과 여러 계정에 동시에 설정을 적용할 수 있습니다. 선언적 정책을 사용 중인 경우 계정 내에서 직접 설정을 수정할 수 없습니다. 이 주제에서는 계정 내에서 직접 설정을 구성하는 방법을 설명합니다. 선언적 정책 사용에 대한 자세한 내용은 *AWS Organizations 사용 설명서*의 [선언적 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)을 참조하세요.

## IMDSv2의 사용 요구
<a name="configure-IMDS-new-instances"></a>

다음 방법을 사용하여 새 인스턴스에서 IMDSv2 사용을 요구할 수 있습니다.

**Topics**
+ [IMDSv2를 계정 기본값으로 설정](#set-imdsv2-account-defaults)
+ [계정 수준에서 IMDSv2 적용](#enforce-imdsv2-at-the-account-level)
+ [시작 시 인스턴스 구성](#configure-IMDS-new-instances-instance-settings)
+ [AMI 구성](#configure-IMDS-new-instances-ami-configuration)
+ [IAM 정책 사용](#configure-IMDS-new-instances-iam-policy)

### IMDSv2를 계정 기본값으로 설정
<a name="set-imdsv2-account-defaults"></a>

각 AWS 리전의 계정 수준에서 인스턴스 메타데이터 서비스(IMDS)의 기본 버전을 설정할 수 있습니다. 즉, *새* 인스턴스가 시작되면 인스턴스 메타데이터 버전이 자동으로 계정 수준 기본값으로 설정됩니다. 하지만 시작 시 또는 시작한 후에 값을 수동으로 재정의할 수 있습니다. 계정 수준 설정 및 수동 재정의가 인스턴스에 미치는 영향에 대한 자세한 내용은 [인스턴스 메타데이터 옵션의 우선순위](configuring-instance-metadata-options.md#instance-metadata-options-order-of-precedence) 섹션을 참조하세요.

**참고**  
계정 수준 기본값을 설정해도 *기존* 인스턴스는 재설정되지 않습니다. 예를 들어, 계정 수준 기본값을 IMDSv2로 설정하는 경우 IMDSv1로 설정된 기존 인스턴스는 영향을 받지 않습니다. 기존 인스턴스의 값을 변경하려면 인스턴스 자체의 값을 수동으로 변경해야 합니다.

계정의 모든 *새* 인스턴스가 필요한 IMDSv2로 시작되도록(IMDSv1은 비활성화됨) 인스턴스 메타데이터 버전의 계정 기본값을 IMDSv2로 설정할 수 있습니다. 이 계정 기본값을 사용하면 인스턴스를 시작할 때 인스턴스의 기본값은 다음과 같습니다.
+ 콘솔: **메타데이터 버전**은 **V2 전용(토큰 필요)**으로 설정되고 **메타데이터 응답 홉 제한**은 **2**로 설정됩니다.
+ AWS CLI: `HttpTokens`는 `required`로 설정되고 `HttpPutResponseHopLimit`는 `2`로 설정됩니다.

**참고**  
계정 기본값을 IMDSv2로 설정하기 전에 인스턴스가 IMDSv1에 종속되지 않았는지 확인합니다. 자세한 내용은 [IMDSv2를 요구하는 권장 경로](instance-metadata-transition-to-version-2.md#recommended-path-for-requiring-imdsv2) 섹션을 참조하세요.

------
#### [ Console ]

**IMDSv2를 지정된 리전의 계정 기본값으로 설정하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. AWS 리전을(를) 변경하려면 페이지의 오른쪽 상단 모서리에 있는 리전 선택기를 사용합니다.

1. 탐색 창에서 **대시보드**를 선택합니다.

1. **계정 속성** 카드의 **설정**에서 **데이터 보호 및 보안**을 선택합니다.

1. **IMDS 기본값** 옆에서 **관리**를 선택합니다.

1. **IMDS 기본값 관리** 페이지에서 다음을 수행합니다.

   1. **인스턴스 메타데이터 서비스**에서 **활성화됨**을 선택합니다.

   1. **메타데이터 버전(Metadata version)**에 **V2만 해당(토큰 필요)(V2 only (token required))**를 선택합니다.

   1. **메타데이터 응답 홉 제한**에서 인스턴스가 컨테이너를 호스팅하는 경우 **2**를 지정합니다. 그렇지 않으면 **기본 설정 없음**을 선택합니다. 기본 설정이 지정되지 않은 경우 AMI에 설정 `ImdsSupport: v2.0`가 있으면 기본값은 **2**이고, 그렇지 않으면 기본값은 **1**입니다.

   1. **업데이트**를 선택합니다.

------
#### [ AWS CLI ]

**IMDSv2를 지정된 리전의 계정 기본값으로 설정하는 방법**  
[modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) 명령을 사용하고 IMDS 계정 수준 설정을 수정할 리전을 지정합니다. 인스턴스가 컨테이너를 호스팅할 경우 `--http-tokens`(`required`로 설정됨) 및 `--http-put-response-hop-limit`(`2`로 설정됨)를 포함합니다. 그렇지 않으면 기본 설정 없음을 표시하도록 `-1`을 지정합니다. `-1`(기본 설정 없음)이 지정된 경우 AMI에 설정 `ImdsSupport: v2.0`가 있으면 기본값은 `2`이고, 그렇지 않으면 기본값은 `1`입니다.

```
aws ec2 modify-instance-metadata-defaults \
    --region us-east-1 \
    --http-tokens required \
    --http-put-response-hop-limit 2
```

다음은 예제 출력입니다.

```
{
    "Return": true
}
```

**지정된 리전의 인스턴스 메타데이터 옵션에 대한 기본 계정 설정을 보려면**  
[get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html) 명령을 사용하고 리전을 지정합니다.

```
aws ec2 get-instance-metadata-defaults --region us-east-1
```

다음은 예제 출력입니다.

```
{
    "AccountLevel": {
        "HttpTokens": "required",
        "HttpPutResponseHopLimit": 2
    },
    "ManagedBy": "account"
}
```

`ManagedBy` 필드는 설정을 구성한 엔터티를 나타냅니다. 이 예제의 `account`는 해당 설정이 계정에서 직접 구성되었음을 나타냅니다. 값이 `declarative-policy`이면 설정이 선언적 정책에 의해 구성되었음을 의미합니다. 자세한 내용은 *AWS Organizations 사용 설명서*의 [선언적 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)을 참조하세요.

**IMDSv2를 모든 리전의 계정 기본값으로 설정하려면**  
[modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) 명령을 사용하여 모든 리전의 IMDS 계정 수준 설정을 수정합니다. 인스턴스가 컨테이너를 호스팅할 경우 `--http-tokens`(`required`로 설정됨) 및 `--http-put-response-hop-limit`(`2`로 설정됨)를 포함합니다. 그렇지 않으면 기본 설정 없음을 표시하도록 `-1`을 지정합니다. `-1`(기본 설정 없음)이 지정된 경우 AMI에 설정 `ImdsSupport: v2.0`가 있으면 기본값은 `2`이고, 그렇지 않으면 기본값은 `1`입니다.

```
echo -e "Region          \t Modified" ; \
echo -e "--------------  \t ---------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 modify-instance-metadata-defaults \
            --region $region \
            --http-tokens required \
            --http-put-response-hop-limit 2 \
            --output text)
        echo -e "$region        \t $output"
    );
done
```

다음은 예제 출력입니다.

```
Region                   Modified
--------------           ---------
ap-south-1               True
eu-north-1               True
eu-west-3                True
...
```

**모든 리전의 인스턴스 메타데이터 옵션에 대한 기본 계정 설정을 보려면**  
[get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html) 명령을 사용합니다.

```
echo -e "Region   \t Level          Hops    HttpTokens" ; \
echo -e "-------------- \t ------------   ----    ----------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 get-instance-metadata-defaults \
            --region $region \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

다음은 예제 출력입니다.

```
Region           Level          Hops    HttpTokens
--------------   ------------   ----    ----------
ap-south-1       ACCOUNTLEVEL   2       required
eu-north-1       ACCOUNTLEVEL   2       required
eu-west-3        ACCOUNTLEVEL   2       required
...
```

------
#### [ PowerShell ]

**IMDSv2를 지정된 리전의 계정 기본값으로 설정하려면**  
[Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html) cmdlet을 사용하고 IMDS 계정 수준 설정을 수정할 리전을 지정합니다. 인스턴스가 컨테이너를 호스팅할 경우 `-HttpToken`(`required`로 설정됨) 및 `-HttpPutResponseHopLimit`(`2`로 설정됨)를 포함합니다. 그렇지 않으면 기본 설정 없음을 표시하도록 `-1`을 지정합니다. `-1`(기본 설정 없음)이 지정된 경우 AMI에 설정 `ImdsSupport: v2.0`가 있으면 기본값은 `2`이고, 그렇지 않으면 기본값은 `1`입니다.

```
Edit-EC2InstanceMetadataDefault `
    -Region us-east-1 `
    -HttpToken required `
    -HttpPutResponseHopLimit 2
```

다음은 예제 출력입니다.

```
True
```

**지정된 리전의 인스턴스 메타데이터 옵션에 대한 기본 계정 설정을 보려면**  
[Get-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceMetadataDefault.html) cmdlet을 사용하고 리전을 지정합니다.

```
Get-EC2InstanceMetadataDefault -Region us-east-1 | Format-List
```

다음은 예제 출력입니다.

```
HttpEndpoint            : 
HttpPutResponseHopLimit : 2
HttpTokens              : required
InstanceMetadataTags    :
```

**IMDSv2를 모든 리전의 계정 기본값으로 설정하려면 다음을 수행하세요.**  
[Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html) cmdlet을 사용하여 모든 리전의 IMDS 계정 수준 설정을 수정합니다. 인스턴스가 컨테이너를 호스팅할 경우 `-HttpToken`(`required`로 설정됨) 및 `-HttpPutResponseHopLimit`(`2`로 설정됨)를 포함합니다. 그렇지 않으면 기본 설정 없음을 표시하도록 `-1`을 지정합니다. `-1`(기본 설정 없음)이 지정된 경우 AMI에 설정 `ImdsSupport: v2.0`가 있으면 기본값은 `2`이고, 그렇지 않으면 기본값은 `1`입니다.

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region   = $_
        Modified = (Edit-EC2InstanceMetadataDefault `
                -Region $_ `
                -HttpToken required `
                -HttpPutResponseHopLimit 2)
    } 
} | `
Format-Table Region, Modified -AutoSize
```

예상 결과

```
Region         Modified
------         --------
ap-south-1         True
eu-north-1         True
eu-west-3          True
...
```

**모든 리전의 인스턴스 메타데이터 옵션에 대한 기본 계정 설정을 보려면 다음을 수행하세요.**  
[Get-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceMetadataDefault.html) cmdlet을 사용합니다.

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region = $_
        HttpPutResponseHopLimit = (Get-EC2InstanceMetadataDefault -Region $_).HttpPutResponseHopLimit
        HttpTokens              = (Get-EC2InstanceMetadataDefault -Region $_).HttpTokens
    }
} | `
Format-Table -AutoSize
```

 출력 예시

```
Region         HttpPutResponseHopLimit HttpTokens
------         ----------------------- ----------
ap-south-1                           2 required
eu-north-1                           2 required
eu-west-3                            2 required                    
...
```

------

### 계정 수준에서 IMDSv2 적용
<a name="enforce-imdsv2-at-the-account-level"></a>

각 AWS 리전에 대해 계정 수준에서 IMDSv2 사용을 적용할 수 있습니다. 적용되면 인스턴스가 IMDSv2를 요구하도록 구성된 경우에만 인스턴스를 시작할 수 있습니다. 이는 인스턴스 또는 AMI 구성 방식에 관계없이 적용됩니다.

**참고**  
계정 수준에서 IMDSv2 적용을 활성화하기 전에 애플리케이션과 AMI가 IMDSv2를 지원하는지 확인합니다. 자세한 내용은 [IMDSv2를 요구하는 권장 경로](instance-metadata-transition-to-version-2.md#recommended-path-for-requiring-imdsv2) 섹션을 참조하세요. IMDSv2 적용이 활성화되어 있고 시작 시 인스턴스 구성, 계정 설정 또는 AMI 구성에서 `httpTokens`가 `required`로 설정되지 않은 경우 인스턴스 시작이 실패합니다. 문제 해결 정보는 [IMDSv1이 활성화된 인스턴스 시작 실패](troubleshooting-launch.md#launching-an-imdsv1-enabled-instance-fails)를 참조하세요.

**참고**  
이 설정은 기존 인스턴스의 IMDS 버전을 변경하지 않지만 현재 IMDSv1이 비활성화된 기존 인스턴스에서 IMDSv1을 활성화하는 것을 차단합니다.

------
#### [ Console ]

**지정된 리전의 계정에 대해 IMDSv2를 적용하려면 다음을 수행하세요.**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. AWS 리전을 변경하려면 페이지의 오른쪽 상단 모서리에 있는 리전 선택기를 사용합니다.

1. 탐색 창에서 **대시보드**를 선택합니다.

1. **계정 속성** 카드의 **설정**에서 **데이터 보호 및 보안**을 선택합니다.

1. **IMDS 기본값** 옆에서 **관리**를 선택합니다.

1. **IMDS 기본값 관리** 페이지에서 다음을 수행합니다.

   1. **메타데이터 버전(Metadata version)**에 **V2만 해당(토큰 필요)(V2 only (token required))**를 선택합니다.

   1. **IMDSv2 적용**에서 **활성화됨**을 선택합니다.

   1. **업데이트**를 선택합니다.

------
#### [ AWS CLI ]

**지정된 리전의 계정에 대해 IMDSv2를 적용하려면 다음을 수행하세요.**  
 [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) 명령을 사용하고 IIMDSv2를 적용할 리전을 지정합니다.

```
aws ec2 modify-instance-metadata-defaults \
    --region us-east-1 \
    --http-tokens required \
    --http-tokens-enforced enabled
```

다음은 예제 출력입니다.

```
{
"Return": true
}
```

**특정 리전의 계정에 대한 IMDSv2 적용 설정을 보려면 다음을 수행하세요.**  
[get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html) 명령을 사용하고 리전을 지정합니다.

```
aws ec2 get-instance-metadata-defaults --region us-east-1
```

다음은 예제 출력입니다.

```
{
    "AccountLevel": {
        "HttpTokens": "required",
        "HttpTokensEnforced": "enabled"
    },
    "ManagedBy": "account"
}
```

`ManagedBy` 필드는 설정을 구성한 엔터티를 나타냅니다. 이 예제의 `account`는 해당 설정이 계정에서 직접 구성되었음을 나타냅니다. 값이 `declarative-policy`이면 설정이 선언적 정책에 의해 구성되었음을 의미합니다. 자세한 내용은 *AWS Organizations 사용 설명서*의 [선언적 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)을 참조하세요.

**모든 리전의 계정에 대해 IMDSv2를 적용하려면 다음을 수행하세요.**  
[modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) 명령을 사용하여 모든 리전에서 IMDSv2를 적용합니다.

```
echo -e "Region          \t Modified" ; \
echo -e "--------------  \t ---------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 modify-instance-metadata-defaults \
            --region $region \
            --http-tokens-enforced enabled \
            --output text)
        echo -e "$region        \t $output"
    );
done
```

다음은 예제 출력입니다.

```
Region                   Modified
--------------           ---------
ap-south-1               True
eu-north-1               True
eu-west-3                True
...
```

**모든 리전의 계정에 대한 IMDSv2 적용 설정을 보려면 다음을 수행하세요.**  
[get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html) 명령을 사용합니다.

```
echo -e "Region   \t Level           HttpTokensEnforced" ; \
echo -e "-------------- \t ------------   ----------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 get-instance-metadata-defaults \
            --region $region \
            --query 'AccountLevel.HttpTokensEnforced' \           
            --output text)
        echo -e "$region \t ACCOUNTLEVEL $output" 
    );
done
```

다음은 예제 출력입니다.

```
Region           Level          HttpTokensEnforced
--------------   ------------   ------------------
ap-south-1       ACCOUNTLEVEL   enabled
eu-north-1       ACCOUNTLEVEL   enabled
eu-west-3        ACCOUNTLEVEL   enabled
...
```

------
#### [ PowerShell ]

**지정된 리전의 계정에 대해 IMDSv2를 적용하려면 다음을 수행하세요.**  
[Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html) cmdlet을 사용하고 IMDSv2를 적용할 리전을 지정합니다.

```
Edit-EC2InstanceMetadataDefault `
    -Region us-east-1 `
    -HttpToken required `
    -HttpPutResponseHopLimit 2
```

다음은 예제 출력입니다.

```
@{
    Return = $true
}
```

**특정 리전의 계정에 대한 IMDSv2 적용 설정을 보려면 다음을 수행하세요.**  
Get-EC2InstanceMetadataDefault 명령을 사용하고 리전을 지정합니다.

```
Get-EC2InstanceMetadataDefault -Region us-east-1
```

다음은 예제 출력입니다.

```
@{
    AccountLevel = @{
        HttpTokens = "required"
        HttpTokensEnforced = "enabled"
    }
    ManagedBy = "account"
}
```

`ManagedBy` 필드는 설정을 구성한 엔터티를 나타냅니다. 이 예제의 `account`는 해당 설정이 계정에서 직접 구성되었음을 나타냅니다. 값이 `declarative-policy`이면 설정이 선언적 정책에 의해 구성되었음을 의미합니다. 자세한 내용은 *AWS Organizations 사용 설명서*의 [선언적 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)을 참조하세요.

**모든 리전의 계정에 대해 IMDSv2를 적용하려면 다음을 수행하세요.**  
[modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) 명령을 사용하여 모든 리전에서 IMDSv2를 적용합니다.

```
echo -e "Region          \t Modified" ; \
echo -e "--------------  \t ---------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 modify-instance-metadata-defaults \
            --region $region \
            --http-tokens-enforced enabled \
            --output text)
        echo -e "$region        \t $output"
    );
done
```

다음은 예제 출력입니다.

```
Region                   Modified
--------------           ---------
ap-south-1               True
eu-north-1               True
eu-west-3                True
...
```

**IMDSv2를 모든 리전의 계정 기본값으로 설정하려면 다음을 수행하세요.**  
[Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html) cmdlet을 사용하여 모든 리전의 IMDS 계정 수준 설정을 수정합니다. 인스턴스가 컨테이너를 호스팅할 경우 `-HttpToken`(`required`로 설정됨) 및 `-HttpPutResponseHopLimit`(`2`로 설정됨)를 포함합니다. 그렇지 않으면 기본 설정 없음을 표시하도록 `-1`을 지정합니다. `-1`(기본 설정 없음)이 지정된 경우 AMI에 설정 `ImdsSupport: v2.0`가 있으면 기본값은 `2`이고, 그렇지 않으면 기본값은 `1`입니다.

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region   = $_
        Modified = (Edit-EC2InstanceMetadataDefault `
                -Region $_ `
                -HttpToken required `
                -HttpPutResponseHopLimit 2)
    } 
} | `
Format-Table Region, Modified -AutoSize
```

예상 결과

```
Region         Modified
------         --------
ap-south-1         True
eu-north-1         True
eu-west-3          True
...
```

**모든 리전의 인스턴스 메타데이터 옵션에 대한 기본 계정 설정을 보려면 다음을 수행하세요.**  
[Get-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceMetadataDefault.html) cmdlet을 사용합니다.

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region = $_
        HttpPutResponseHopLimit = (Get-EC2InstanceMetadataDefault -Region $_).HttpPutResponseHopLimit
        HttpTokens              = (Get-EC2InstanceMetadataDefault -Region $_).HttpTokens
    }
} | `
Format-Table -AutoSize
```

 출력 예시

```
Region         HttpPutResponseHopLimit HttpTokens
------         ----------------------- ----------
ap-south-1                           2 required
eu-north-1                           2 required
eu-west-3                            2 required                    
...
```

------

### 시작 시 인스턴스 구성
<a name="configure-IMDS-new-instances-instance-settings"></a>

[인스턴스를 시작](ec2-launch-instance-wizard.md)할 때 다음 필드를 구성하여 IMDSv2를 사용하도록 인스턴스를 구성할 수 있습니다.
+ Amazon EC2 콘솔: **Metadata version**(메타데이터 버전)을 **V2 only (token required)**(V2 전용(토큰 필요))로 설정합니다.
+ AWS CLI: `HttpTokens`를 `required`로 설정합니다.

IMDSv2를 사용하도록 지정하면 **메타데이터 액세스 가능**을 **활성화됨**(콘솔)로 설정하거나 `HttpEndpoint`를 `enabled`(AWS CLI)로 설정하여 인스턴스 메타데이터 서비스(IMDS) 엔드포인트도 활성화해야 합니다.

컨테이너 환경에서는 IMDSv2가 필요한 경우 홉 제한을 `2`로 설정하는 것이 좋습니다. 자세한 내용은 [인스턴스 메타데이터 액세스 고려 사항](instancedata-data-retrieval.md#imds-considerations) 섹션을 참조하세요.

------
#### [ Console ]

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

  자세한 내용은 [고급 세부 정보](ec2-instance-launch-parameters.md#liw-advanced-details) 섹션을 참조하세요.

------
#### [ AWS CLI ]

**새 인스턴스에서 IMDSv2를 사용해야 하도록 설정하려면**  
다음 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 예에서는 `c6i.large`를 `--metadata-options`로 설정하여 `HttpTokens=required` 인스턴스를 시작합니다. 또한 `HttpTokens`의 값을 지정할 때 `HttpEndpoint`를 `enabled`로 설정해야 합니다. 메타데이터 검색 요청에 대해 보안 토큰 헤더가 `required`로 설정되어 있으므로 인스턴스 메타데이터를 요청할 때 인스턴스가 IMDSv2를 사용해야 합니다.

컨테이너 환경에서는 IMDSv2가 필요한 경우 `HttpPutResponseHopLimit=2`를 사용하여 홉 제한을 `2`로 설정하는 것이 좋습니다.

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

------
#### [ PowerShell ]

**새 인스턴스에서 IMDSv2를 사용해야 하도록 설정하려면**  
다음 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 예제는 `MetadataOptions_HttpEndpoint`를 `enabled`로 설정하고 `MetadataOptions_HttpTokens` 파라미터를 `required`로 설정하여 `c6i.large` 인스턴스를 시작합니다. 또한 `HttpTokens`의 값을 지정할 때 `HttpEndpoint`를 `enabled`로 설정해야 합니다. 메타데이터 검색 요청에 대해 보안 토큰 헤더가 `required`로 설정되어 있으므로 인스턴스 메타데이터를 요청할 때 인스턴스가 IMDSv2를 사용해야 합니다.

```
New-EC2Instance `
    -ImageId ami-0abcdef1234567890 `
    -InstanceType c6i.large `
    -MetadataOptions_HttpEndpoint enabled `
    -MetadataOptions_HttpTokens required
```

------
#### [ CloudFormation ]

CloudFormation을 사용하여 인스턴스에 대한 메타데이터 옵션을 지정하려면 [AWS CloudFormation 사용 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html)의 *AWS::EC2::LaunchTemplate MetadataOptions* 속성을 참조하세요.

------

### AMI 구성
<a name="configure-IMDS-new-instances-ami-configuration"></a>

새 AMI를 등록하거나 기존 AMI를 수정할 때 `imds-support` 파라미터를 `v2.0`로 설정할 수 있습니다. 이 AMI에서 시작된 인스턴스에 대해 **메타데이터 버전**은 **V2 전용(토큰 필요)**(콘솔)으로 설정되거나 `HttpTokens`가 `required`(AWS CLI)로 설정됩니다. 이러한 설정을 사용하면 인스턴스에서 인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 지정됩니다.

`imds-support`를 `v2.0`으로 설정하면 이 AMI에서 시작된 인스턴스의 **Metadata response hop limit**(메타데이터 응답 홉 제한)(콘솔) 또는 `http-put-response-hop-limit`(AWS CLI)도 **2**로 설정됩니다.

**중요**  
AMI 소프트웨어가 IMDSv2를 지원하지 않는 한 이 파라미터를 사용하지 마세요. 값을 `v2.0`으로 설정한 후에는 이를 실행 취소할 수 없습니다. AMI를 “재설정”하는 유일한 방법은 기본 스냅샷에 새 AMI를 생성하는 것입니다.

**IMDSv2를 위해 새 AMI를 구성하려면**  
다음 방법 중 하나를 사용하여 IMDSv2에 대한 새 AMI를 구성합니다.

------
#### [ AWS CLI ]

다음 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 예제는 EBS 루트 볼륨의 지정된 스냅샷을 디바이스 `/dev/xvda`로 사용하여 AMI를 등록합니다. 이 AMI에서 시작된 인스턴스가 인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 `imds-support` 파라미터를 `v2.0`으로 지정합니다.

```
aws ec2 register-image \
    --name my-image \
    --root-device-name /dev/xvda \
    --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0123456789example} \
    --architecture x86_64 \
    --imds-support v2.0
```

------
#### [ PowerShell ]

다음 [Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet 예제는 EBS 루트 볼륨의 지정된 스냅샷을 디바이스 `/dev/xvda`로 사용하여 AMI를 등록합니다. 이 AMI에서 시작된 인스턴스가 인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 `ImdsSupport` 파라미터를 `v2.0`으로 지정합니다.

```
Register-EC2Image `
    -Name 'my-image' `
    -RootDeviceName /dev/xvda `
    -BlockDeviceMapping  ( 
    New-Object `
        -TypeName Amazon.EC2.Model.BlockDeviceMapping `
        -Property @{ 
        DeviceName = '/dev/xvda'; 
        EBS        = (New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice -Property @{ 
                SnapshotId = 'snap-0123456789example'
                VolumeType = 'gp3' 
                } )      
        }  ) `
    -Architecture X86_64 `
    -ImdsSupport v2.0
```

------

**IMDSv2를 위해 기존 AMI를 구성하려면**  
다음 방법 중 하나를 사용하여 IMDSv2용 기존 AMI를 구성합니다.

------
#### [ AWS CLI ]

다음 [modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) 예제는 IMDSv2에 대해서만 기존 AMI를 수정합니다. 이 AMI에서 시작된 인스턴스가 인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 `imds-support` 파라미터를 `v2.0`으로 지정합니다.

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --imds-support v2.0
```

------
#### [ PowerShell ]

다음 [Edit-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) cmdlet 예제는 IMDSv2에 대해서만 기존 AMI를 수정합니다. 이 AMI에서 시작된 인스턴스가 인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 `imds-support` 파라미터를 `v2.0`으로 지정합니다.

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -ImdsSupport 'v2.0'
```

------

### IAM 정책 사용
<a name="configure-IMDS-new-instances-iam-policy"></a>

다음 중 하나를 수행하는 IAM 정책을 생성할 수 있습니다.
+ 새 인스턴스에 IMDSv2가 필요하지 않은 경우 사용자가 새 인스턴스를 시작하지 못하게 합니다.
+ 사용자가 ModifyInstanceMetadataOptions API를 직접적으로 호출하여 실행 중인 인스턴스의 메타데이터 옵션을 변경하지 못하게 합니다. ModifyInstanceMetadataOptions httpTokens 속성에 대한 액세스를 제한하여 실행 중인 인스턴스의 의도하지 않은 업데이트를 방지합니다.
+ 사용자가 ModifyInstanceMetadataDefaults API를 직접적으로 호출하여 httpTokens와 httpTokensEnforced의 계정 기본 설정을 변경하지 못하게 합니다. 이 두 속성에 대한 액세스를 제한하면 권한 있는 역할만 계정 기본값을 수정할 수 있습니다.

**IAM 정책을 사용하여 모든 새 인스턴스에서 IMDSv2를 사용해야 하도록 설정하려면**  
사용자가 인스턴스 메타데이터를 요청할 때 IMDSv2 사용을 요구하는 인스턴스만 시작할 수 있도록 하려면 다음을 수행하세요.
+ `ModifyInstanceMetadataOptions` 및 `ModifyInstanceMetadataDefaults` API, 특히 `httpTokens` 및 `httpTokensEnforced` 속성에 대한 액세스를 제한합니다.
+ 그런 다음 계정 기본값을 `httpTokens = required`와 `httpTokensEnforced = enabled`로 설정합니다.

  IAM 정책 예제는 [인스턴스 메타데이터 작업](ExamplePolicies_EC2.md#iam-example-instance-metadata) 섹션을 참조하세요.

## IMDS IPv4 및 IPv6 엔드포인트 활성화
<a name="configure-IMDS-new-instances-ipv4-ipv6-endpoints"></a>

IMDS에는 인스턴스에 IPv4(`169.254.169.254`) 및 IPv6(`[fd00:ec2::254]`)이라는 두 개의 엔드포인트가 있습니다. IMDS를 활성화하면 IPv4 엔드포인트가 자동으로 활성화됩니다. IPv6 전용 서브넷으로 인스턴스를 시작하는 경우에도 IPv6 엔드포인트는 비활성화된 상태로 유지됩니다. IPv6 엔드포인트를 활성화하려면 명시적으로 활성화해야 합니다. IPv6 엔드포인트가 활성화되면 IPv4 엔드포인트는 활성화된 상태로 유지됩니다.

인스턴스 시작 시 또는 이후에 IPv6 엔드포인트를 활성화할 수 있습니다.

**IPv6 엔드포인트 활성화 요구**
+ 선택한 인스턴스 유형은 [Nitro 기반 인스턴스](instance-types.md#instance-hypervisor-type)입니다.
+ 선택한 서브넷은 IPv6를 지원합니다. 여기서 서브넷은 [이중 스택 또는 IPv6 전용](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range)입니다.

다음 방법 중 하나를 사용하여 IMDS IPv6 엔드포인트가 활성화된 상태로 인스턴스를 시작합니다.

------
#### [ Console ]

**인스턴스 시작 시 IMDS IPv6 엔드포인트를 활성화하려면**
+ **Advanced details**(고급 세부 정보)에서 다음을 지정하여 Amazon EC2 콘솔에서 [인스턴스를 시작](ec2-launch-instance-wizard.md)합니다.
  + **메타데이터 IPv6 엔드포인트**에 대해 **활성화됨**을 선택합니다.

자세한 내용은 [고급 세부 정보](ec2-instance-launch-parameters.md#liw-advanced-details) 섹션을 참조하세요.

------
#### [ AWS CLI ]

**인스턴스 시작 시 IMDS IPv6 엔드포인트를 활성화하는 방법**  
다음 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 예제는 IMDS에 대해 활성화된 IPv6 엔드포인트로 `c6i.large` 인스턴스를 시작합니다. IPv6 엔드포인트를 활성화하려면 `--metadata-options` 파라미터에 대해 `HttpProtocolIpv6=enabled`를 지정합니다. 또한 `HttpProtocolIpv6`의 값을 지정할 때 `HttpEndpoint`를 `enabled`로 설정해야 합니다.

```
aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type c6i.large \
    ...
    --metadata-options "HttpEndpoint=enabled,HttpProtocolIpv6=enabled"
```

------
#### [ PowerShell ]

**인스턴스 시작 시 IMDS IPv6 엔드포인트를 활성화하는 방법**  
다음 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 예제는 IMDS에 대해 활성화된 IPv6 엔드포인트로 `c6i.large` 인스턴스를 시작합니다. IPv6 엔드포인트를 활성화하려면 `MetadataOptions_HttpProtocolIpv6`를 `enabled`로 지정합니다. 또한 `MetadataOptions_HttpProtocolIpv6`의 값을 지정할 때 `MetadataOptions_HttpEndpoint`를 `enabled`로 설정해야 합니다.

```
New-EC2Instance `
    -ImageId ami-0abcdef1234567890 `
    -InstanceType c6i.large `
    -MetadataOptions_HttpEndpoint enabled `
    -MetadataOptions_HttpProtocolIpv6 enabled
```

------

## 인스턴스 메타데이터에 대한 액세스 비활성화
<a name="configure-IMDS-new-instances--turn-off-instance-metadata"></a>

인스턴스를 시작할 때 IMDS를 비활성화하여 인스턴스 메타데이터에 대한 액세스를 끌 수 있습니다. 나중에 IMDS를 다시 활성화하여 액세스를 켤 수 있습니다. 자세한 내용은 [인스턴스 메타데이터에 대한 액세스 활성화](configuring-IMDS-existing-instances.md#enable-instance-metadata-on-existing-instances) 섹션을 참조하세요.

**중요**  
시작 시 또는 시작한 후에 IMDS를 비활성할 수 있습니다. **시작 시 IMDS를 비활성화하면 다음 사항이 작동하지 않을 수 있습니다.  
인스턴스에 대한 SSH 액세스 권한이 없을 수 있습니다. 인스턴스의 퍼블릭 SSH 키인 `public-keys/0/openssh-key`는 일반적으로 키가 제공되고 EC2 인스턴스 메타데이터에서 액세스되기 때문에 액세스할 수 없습니다.
EC2 사용자 데이터는 사용할 수 없으며 인스턴스 시작 시 실행되지 않습니다. EC2 사용자 데이터는 IMDS에서 호스팅됩니다. IMDS를 비활성화하면 사용자 데이터에 대한 액세스가 사실상 꺼집니다.
이 기능을 사용하려면, 시작 후 IMDS를 다시 활성화할 수 있습니다.

------
#### [ Console ]

**시작 시 인스턴스 메타데이터에 대한 액세스를 끄려면**
+ **Advanced details**(고급 세부 정보)에서 다음을 지정하여 Amazon EC2 콘솔에서 [인스턴스를 시작](ec2-launch-instance-wizard.md)합니다.
  + **액세스 가능한 메타데이터(Metadata accessible)**에 **비활성화(Disabled)**를 선택합니다.

자세한 내용은 [고급 세부 정보](ec2-instance-launch-parameters.md#liw-advanced-details) 섹션을 참조하세요.

------
#### [ AWS CLI ]

**시작 시 인스턴스 메타데이터에 대한 액세스를 끄려면**  
`--metadata-options`를 `HttpEndpoint=disabled`로 설정하여 인스턴스를 시작합니다.

```
aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type c6i.large \
    ... 
    --metadata-options "HttpEndpoint=disabled"
```

------
#### [ PowerShell ]

**시작 시 인스턴스 메타데이터에 대한 액세스를 끄려면**  
다음 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 예제는 `MetadataOptions_HttpEndpoint`를 `disabled`로 설정하여 인스턴스를 시작합니다.

```
New-EC2Instance `
    -ImageId ami-0abcdef1234567890 `
    -InstanceType c6i.large `
    -MetadataOptions_HttpEndpoint disabled
```

------
#### [ CloudFormation ]

CloudFormation을 사용하여 인스턴스에 대한 메타데이터 옵션을 지정하려면 [CloudFormation 사용 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html)의 *AWS::EC2::LaunchTemplate MetadataOptions* 속성을 참조하세요.

------

## 인스턴스 메타데이터의 태그에 대한 액세스 허용
<a name="configure-IMDS-new-instances-tags-in-instance-metadata"></a>

기본적으로 인스턴스 태그는 인스턴스 메타데이터에서 액세스할 수 없습니다. 각 인스턴스에 대해 명시적으로 액세스를 허용해야 합니다. 액세스가 허용되면 인스턴스 태그 *키*는 특정 문자 제한을 준수해야 합니다. 그렇지 않으면 인스턴스 시작이 실패합니다. 자세한 내용은 [인스턴스 메타데이터에서 태그에 대한 액세스 활성화](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS) 섹션을 참조하세요.

# 기존 인스턴스에 대한 인스턴스 메타데이터 옵션 수정
<a name="configuring-IMDS-existing-instances"></a>

기존 인스턴스에 대한 인스턴스 메타데이터 옵션을 수정할 수 있습니다.

사용자가 기존 인스턴스의 인스턴스 메타데이터 옵션을 수정하지 못하도록 하는 IAM 정책을 생성할 수도 있습니다. 인스턴스 메타데이터 옵션을 수정할 수 있는 사용자를 제어하려면 지정된 역할을 가진 사용자 이외의 모든 사용자가 [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) API를 사용하지 못하게 하는 정책을 지정합니다. IAM 정책 예제는 [인스턴스 메타데이터 작업](ExamplePolicies_EC2.md#iam-example-instance-metadata) 섹션을 참조하세요.

**참고**  
선언적 정책을 사용하여 인스턴스 메타데이터 옵션을 구성한 경우 계정 내에서 직접 수정할 수 없습니다. 자세한 내용은 *AWS Organizations 사용 설명서*의 [선언적 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)을 참조하세요.

## IMDSv2의 사용 요구
<a name="modify-require-IMDSv2"></a>

인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 하려면 다음 방법 중 하나를 사용하여 기존 인스턴스의 인스턴스 메타데이터 옵션을 수정합니다. IMDSv2가 필요한 경우 IMDSv1을 사용할 수 없습니다.

**참고**  
IMDSv2를 사용하도록 요구하기 전에 인스턴스가 IMDSv1을 직접 호출하지 않는지 확인합니다. `MetadataNoToken` CloudWatch 지표는 IMDSv1 직접 호출을 추적합니다. `MetadataNoToken`에서 인스턴스의 IMDSv1 사용량을 0으로 기록하면 해당 인스턴스에서 IMDSv2를 요구할 준비가 된 것입니다.

------
#### [ Console ]

**기존 인스턴스에서 IMDSv2를 사용해야 하도록 설정하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. 인스턴스를 선택합니다.

1. **작업**, **인스턴스 설정**, **인스턴스 메타데이터 옵션 수정**을 차례로 선택합니다.

1. **인스턴스 메타데이터 옵션 수정** 대화 상자에서 다음을 수행합니다.

   1. **인스턴스 메타데이터 서비스**에서 **활성화**를 선택합니다.

   1. **IMDSv2**의 경우 **필수**를 선택합니다.

   1. **저장**을 선택합니다.

------
#### [ AWS CLI ]

**기존 인스턴스에서 IMDSv2를 사용해야 하도록 설정하려면**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI 명령을 사용하고 `http-tokens` 파라미터를 `required`로 설정합니다. 또한 `http-tokens`의 값을 지정할 때 `http-endpoint`를 `enabled`로 설정해야 합니다.

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

------
#### [ PowerShell ]

**기존 인스턴스에서 IMDSv2를 사용해야 하도록 설정하려면**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) cmdlet을 사용하고 `HttpTokens` 파라미터를 `required`로 설정합니다. 또한 `HttpTokens`의 값을 지정할 때 `HttpEndpoint`를 `enabled`로 설정해야 합니다.

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpTokens required `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## IMDSv1 사용 복원
<a name="modify-restore-IMDSv1"></a>

인스턴스에서 IMDSv2가 요구되는 경우 IMDSv1 요청을 사용하면 실패합니다. IMDSv2가 선택 사항인 경우 IMDSv2와 IMDSv1이 모두 작동합니다. 따라서 IMDSv1을 복원하려면 다음 방법 중 하나를 사용하여 IMDSv2를 optional(`httpTokens = optional`)로 설정합니다.

또한 `httpTokensEnforced` IMDS 속성은 기존 인스턴스에서 IMDSv1을 활성화하려는 시도를 방지합니다. 리전의 계정에 대해 활성화된 경우 `httpTokens`를 `optional`로 설정하려고 하면 `UnsupportedOperation` 예외가 발생합니다. 자세한 내용은 [문제 해결](#troubleshoot-modifying-an-imdsv1-enabled-instance-fails)을 참조하세요.

**중요**  
IMDSv2 적용으로 인해 인스턴스 시작이 실패하는 경우 시작을 성공시키기 위한 두 가지 옵션이 있습니다.  
**IMDSv2 전용으로 인스턴스 시작** - 인스턴스에서 실행되는 소프트웨어가 IMDSv2만 사용하는 경우(IMDSv1에 대한 종속성 없음) IMDSv2 전용으로 인스턴스를 시작할 수 있습니다. 이렇게 하려면 시작 파라미터 또는 리전의 계정에 대한 메타데이터 기본값에서 `httpTokens = required`를 설정하여 IMDSv2만 구성합니다.
**적용 비활성화** - 소프트웨어가 여전히 IMDSv1에 종속되는 경우 리전의 계정에 대해 `httpTokensEnforced`를 `disabled`로 설정합니다. 자세한 내용은 [계정 수준에서 IMDSv2 적용](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level) 섹션을 참조하세요.

------
#### [ Console ]

**인스턴스에서 IMDSv1 사용을 복원하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. 인스턴스를 선택합니다.

1. **작업**, **인스턴스 설정**, **인스턴스 메타데이터 옵션 수정**을 차례로 선택합니다.

1. **인스턴스 메타데이터 옵션 수정** 대화 상자에서 다음을 수행합니다.

   1. **인스턴스 메타데이터 서비스**의 경우 **활성화**가 선택되어 있는지 확인합니다.

   1. **IMDSv2**의 경우 **선택 사항**을 선택합니다.

   1. **저장**을 선택합니다.

------
#### [ AWS CLI ]

**인스턴스에서 IMDSv1 사용을 복원하려면**  
인스턴스 메타데이터를 요청할 때 `http-tokens`가 `optional`로 설정된 [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI를 사용하여 IMDSv1의 사용을 복원할 수 있습니다.

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

------
#### [ PowerShell ]

**인스턴스에서 IMDSv1 사용을 복원하려면**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) cmdlet을 사용하되 `HttpTokens`를 `optional`로 설정하여 인스턴스 메타데이터를 요청할 때 IMDSv1 사용을 복원할 수 있습니다.

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpTokens optional `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## PUT 응답 홉 제한 변경
<a name="modify-PUT-response-hop-limit"></a>

기존 인스턴스의 경우 `PUT` 응답 홉 제한에 대한 설정을 변경할 수 있습니다.

현재는 AWS CLI 및 AWS SDK만 PUT 응답 홉 제한 변경을 지원합니다.

------
#### [ AWS CLI ]

**PUT 응답 홉 제한을 변경하려면**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI 명령을 사용하고 `http-put-response-hop-limit` 파라미터를 필요한 홉 수로 설정합니다. 다음 예제에서는 옵 제한이 `3`으로 설정됩니다. 또한 `http-put-response-hop-limit`의 값을 지정할 때 `http-endpoint`를 `enabled`로 설정해야 합니다.

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

------
#### [ PowerShell ]

**PUT 응답 홉 제한을 변경하려면**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) cmdlet을 사용하고 `HttpPutResponseHopLimit` 파라미터를 필요한 홉 수로 설정합니다. 다음 예제에서는 옵 제한이 `3`으로 설정됩니다. 또한 `HttpPutResponseHopLimit`의 값을 지정할 때 `HttpEndpoint`를 `enabled`로 설정해야 합니다.

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpPutResponseHopLimit 3 `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## IMDS IPv4 및 IPv6 엔드포인트 활성화
<a name="enable-ipv6-endpoint-for-existing-instances"></a>

IMDS에는 인스턴스에 IPv4(`169.254.169.254`) 및 IPv6(`[fd00:ec2::254]`)이라는 두 개의 엔드포인트가 있습니다. IMDS를 활성화하면 IPv4 엔드포인트가 자동으로 활성화됩니다. IPv6 전용 서브넷으로 인스턴스를 시작하는 경우에도 IPv6 엔드포인트는 비활성화된 상태로 유지됩니다. IPv6 엔드포인트를 활성화하려면 명시적으로 활성화해야 합니다. IPv6 엔드포인트가 활성화되면 IPv4 엔드포인트는 활성화된 상태로 유지됩니다.

인스턴스 시작 시 또는 이후에 IPv6 엔드포인트를 활성화할 수 있습니다.

**IPv6 엔드포인트 활성화 요구**
+ 선택한 인스턴스 유형은 [Nitro 기반 인스턴스](instance-types.md#instance-hypervisor-type)입니다.
+ 선택한 서브넷은 IPv6를 지원합니다. 여기서 서브넷은 [이중 스택 또는 IPv6 전용](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range)입니다.

현재는 AWS CLI 및 AWS SDK만 인스턴스 후 IMDS IPv6 엔드포인트 활성화를 지원합니다.

------
#### [ AWS CLI ]

**인스턴스에 대해 IMDS IPv6 엔드포인트를 활성화하려면**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI 명령을 사용하고 `http-protocol-ipv6` 파라미터를 `enabled`로 설정합니다. 또한 `http-protocol-ipv6`의 값을 지정할 때 `http-endpoint`를 `enabled`로 설정해야 합니다.

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

------
#### [ PowerShell ]

**인스턴스에 대해 IMDS IPv6 엔드포인트를 활성화하는 방법**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) cmdlet을 사용하고 `HttpProtocolIpv6` 파라미터를 `enabled`로 설정합니다. 또한 `HttpProtocolIpv6`의 값을 지정할 때 `HttpEndpoint`를 `enabled`로 설정해야 합니다.

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpProtocolIpv6 enabled `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## 인스턴스 메타데이터에 대한 액세스 활성화
<a name="enable-instance-metadata-on-existing-instances"></a>

사용 중인 IMDS 버전에 관계없이 인스턴스에서 IMDS의 HTTP 엔드포인트를 활성화하여 인스턴스 메타데이터에 대한 액세스를 사용 설정할 수 있습니다. HTTP 엔드포인트를 비활성화하여 언제든지 이 변경을 되돌릴 수 있습니다.

인스턴스에서 인스턴스 메타데이터에 대한 액세스를 사용 설정하려면 다음 방법 중 하나를 사용합니다.

------
#### [ Console ]

**인스턴스 메타데이터에 대한 액세스를 활성화하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. 인스턴스를 선택합니다.

1. **작업**, **인스턴스 설정**, **인스턴스 메타데이터 옵션 수정**을 차례로 선택합니다.

1. **인스턴스 메타데이터 옵션 수정** 대화 상자에서 다음을 수행합니다.

   1. **인스턴스 메타데이터 서비스**에서 **활성화**를 선택합니다.

   1. **저장**을 선택합니다.

------
#### [ AWS CLI ]

**인스턴스 메타데이터에 대한 액세스를 활성화하려면**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI 명령을 사용하고 `http-endpoint` 파라미터를 `enabled`로 설정합니다.

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-endpoint enabled
```

------
#### [ PowerShell ]

**인스턴스 메타데이터에 대한 액세스를 활성화하려면**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) cmdlet을 사용하고 `HttpEndpoint` 파라미터를 `enabled`로 설정합니다.

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## 인스턴스 메타데이터에 대한 액세스 비활성화
<a name="disable-instance-metadata-on-existing-instances"></a>

사용 중인 IMDS 버전에 관계없이 인스턴스에서 IMDS의 HTTP 엔드포인트를 비활성화하여 인스턴스 메타데이터에 대한 액세스를 비활성화할 수 있습니다. HTTP 엔드포인트를 활성화하여 언제든지 이 변경을 되돌릴 수 있습니다.

인스턴스에서 인스턴스 메타데이터에 대한 액세스를 비활성화하려면 다음 방법 중 하나를 사용합니다.

------
#### [ Console ]

**인스턴스 메타데이터에 대한 액세스를 끄려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 탐색 창에서 **인스턴스**를 선택합니다.

1. 인스턴스를 선택합니다.

1. **작업**, **인스턴스 설정**, **인스턴스 메타데이터 옵션 수정**을 차례로 선택합니다.

1. **인스턴스 메타데이터 옵션 수정** 대화 상자에서 다음을 수행합니다.

   1. **인스턴스 메타데이터 서비스**의 경우 **활성화**를 선택 취소합니다.

   1. **저장**을 선택합니다.

------
#### [ AWS CLI ]

**인스턴스 메타데이터에 대한 액세스를 끄려면**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI 명령을 사용하고 `http-endpoint` 파라미터를 `disabled`로 설정합니다.

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-endpoint disabled
```

------
#### [ PowerShell ]

**인스턴스 메타데이터에 대한 액세스를 끄려면**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) cmdlet을 사용하고 `HttpEndpoint` 파라미터를 `disabled`로 설정합니다.

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpEndpoint disabled).InstanceMetadataOptions
```

------

## 인스턴스 메타데이터의 태그에 대한 액세스 허용
<a name="modify-access-to-tags-in-instance-metadata-on-existing-instances"></a>

실행 중이거나 중지된 인스턴스에서 인스턴스 메타데이터의 태그에 대한 액세스를 허용할 수 있습니다. 각 인스턴스에 대해 명시적으로 액세스를 허용해야 합니다. 액세스가 허용되면 인스턴스 태그 *키*는 특정 문자 제한을 준수해야 합니다. 그렇지 않으면 오류가 발생합니다. 자세한 내용은 [인스턴스 메타데이터에서 태그에 대한 액세스 활성화](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS) 섹션을 참조하세요.

## 문제 해결
<a name="troubleshoot-modifying-an-imdsv1-enabled-instance-fails"></a>

### IMDSv1이 활성화된 인스턴스 수정 실패
<a name="modifying-an-imdsv1-enabled-instance-fails"></a>

#### 설명
<a name="modifying-an-imdsv1-enabled-instance-fails-description"></a>

다음과 같은 오류 메시지가 나타납니다.

`You can't launch instances with IMDSv1 because httpTokensEnforced is enabled for this account. Either launch the instance with httpTokens=required or contact your account owner to disable httpTokensEnforced using the ModifyInstanceMetadataDefaults API or the account settings in the EC2 console.`

#### 원인
<a name="modifying-an-imdsv1-enabled-instance-fails-cause"></a>

EC2 계정 설정이나 AWS Organization 선언적 정책에서 IMDSv2 사용(`httpTokensEnforced = enabled`)을 적용하는 계정에서 IMDSv1이 활성화(`httpTokens = optional`)된 기존 인스턴스를 수정하려고 할 때 이 오류가 발생합니다.

#### Solution
<a name="modifying-an-imdsv1-enabled-instance-fails-solution"></a>

기존 인스턴스에서 IMDSv1 지원이 필요한 경우 해당 리전에서 계정에 대한 IMDSv2 적용을 비활성화해야 합니다. IMDSv2 적용을 비활성화하려면 `HttpTokensEnforced`를 `disabled`로 설정합니다. 자세한 내용은 Amazon EC2 API 참조의 [ModifyInstanceMetadataDefaults](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataDefaults.html)를 참조하세요. 콘솔을 사용하여 이 설정을 구성하려면 [계정 수준에서 IMDSv2 적용](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level) 섹션을 참조하세요.

IMDSv2만 사용하는 것을 권장합니다(`httpTokens=required`). 자세한 내용은 [인스턴스 메타데이터 서비스 버전 2 사용으로 전환](instance-metadata-transition-to-version-2.md) 섹션을 참조하세요.

 