

# 인스턴스 메타데이터 서비스를 사용하여 인스턴스 메타데이터에 액세스
<a name="configuring-instance-metadata-service"></a>

다음 방법 중 하나를 사용하여 실행 중인 인스턴스에서 인스턴스 메타데이터에 액세스할 수 있습니다.
+ 인스턴스 메타데이터 서비스 버전 2(IMDSv2) – 세션 지향 방법

  예시는 [IMDSv2 예제](#instance-metadata-retrieval-examples) 섹션을 참조하세요.
+ 인스턴스 메타데이터 서비스 버전 1(IMDSv1) – 요청/응답 방법

  예시는 [IMDSv1 예제](#instance-metadata-retrieval-examples-imdsv1) 섹션을 참조하세요.

기본적으로 IMDSv1 또는 IMDSv2를 사용하거나 둘 다 사용할 수 있습니다.

각 인스턴스에서 인스턴스 메타데이터 서비스(IMDS)를 구성하여 IMDSv2 호출만 수락하도록 설정할 수 있습니다. 이렇게 하면 IMDSv1 호출은 실패하게 됩니다. 인스턴스에서 IMDSv2를 사용하도록 구성하는 방법에 대한 자세한 내용은 [인스턴스 메타데이터 서비스 옵션 구성](configuring-instance-metadata-options.md) 섹션을 참조하세요.

`PUT` 또는 `GET` 헤더는 IMDSv2에만 있습니다. 요청에 이러한 헤더가 있는 경우 요청은 IMDSv2를 위한 것입니다. 헤더가 없는 경우 요청은 IMDSv1을 위한 것으로 간주됩니다.

IMDSv2에 대한 자세한 내용은 [EC2 인스턴스 메타데이터 서비스의 향상된 기능을 통해 개방형 방화벽, 역방향 프록시, SSRF 취약성에 대한 심층적인 방어 기능 추가](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/)를 참조하세요.

**Topics**
+ [인스턴스 메타데이터 서비스 버전 2 작동 방식](#instance-metadata-v2-how-it-works)
+ [지원되는 AWS SDK 사용](#use-a-supported-sdk-version-for-imdsv2)
+ [IMDSv2 예제](#instance-metadata-retrieval-examples)
+ [IMDSv1 예제](#instance-metadata-retrieval-examples-imdsv1)

## 인스턴스 메타데이터 서비스 버전 2 작동 방식
<a name="instance-metadata-v2-how-it-works"></a>

IMDSv2는 세션 지향 요청을 사용합니다. 세션 지향 요청을 사용하여 세션 기간을 정의하는 세션 토큰을 생성합니다. 세션 기간은 최소 1초에서 최대 6시간일 수 있습니다. 지정된 기간 중에는 후속 요청에 동일한 세션 토큰을 사용할 수 있습니다. 지정된 기간이 만료된 후에는 향후 요청에 사용할 새로운 세션 토큰을 생성할 수 있습니다.

**참고**  
이 섹션의 예에서는 인스턴스 메타데이터 서비스(IMDS)의 IPv4 주소(`169.254.169.254`)를 사용합니다. IPv6 주소를 통해 EC2 인스턴스의 인스턴스 메타데이터를 검색하는 경우, 대신 IPv6 주소(`[fd00:ec2::254]`)를 활성화하고 사용해야 합니다. IMDS의 IPv6 주소는 IMDSv2 명령과 호환됩니다. 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)에서만 액세스할 수 있습니다.

다음 예에서는 쉘 스크립트와 IMDSv2를 사용하여 최상위 인스턴스 메타데이터 항목을 검색합니다. 각 예시:
+ `PUT` 요청을 사용하여 6시간(21,600초) 동안 지속되는 세션 토큰을 생성합니다.
+ 세션 토큰 헤더를 `TOKEN`(Linux 인스턴스) 또는 `token`(Windows 인스턴스)이라는 변수에 저장합니다.
+ 토큰을 사용하여 최상위 메타데이터 항목을 요청합니다.

### Linux 예
<a name="how-imdsv2-works-example-linux"></a>

별도의 두 명령을 실행하거나 둘을 결합할 수 있습니다.

**별도의 명령**

먼저 다음 명령을 사용하여 토큰을 생성합니다.

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
```

그런 다음 해당 토큰을 사용하여 다음 명령으로 최상위 메타데이터 항목을 생성합니다.

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
```

**결합된 명령**

토큰을 저장하고 명령을 결합할 수 있습니다. 다음 예는 위의 두 명령을 결합하고 TOKEN이라는 변수에 세션 토큰 헤더를 저장합니다.

**참고**  
토큰이 유효하지 않고, 토큰을 만드는 데 오류가 발생하면 오류 메시지가 변수에 저장되고 명령이 작동하지 않습니다.

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
	&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
```

토큰을 생성한 후에는 만료될 때까지 토큰을 재사용할 수 있습니다. 다음 예제 명령에서는 인스턴스를 시작할 때 사용된 AMI의 ID를 가져오며, 이전 예제에서 `$TOKEN`에 저장한 토큰을 재사용합니다.

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
```

### Windows 예
<a name="how-imdsv2-works-example-windows"></a>

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/
```

토큰을 생성한 후에는 만료될 때까지 토큰을 재사용할 수 있습니다. 다음 예제 명령에서는 인스턴스를 시작할 때 사용된 AMI의 ID를 가져오며, 이전 예제에서 `$token`에 저장한 토큰을 재사용합니다.

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} `
	-Method GET -uri http://169.254.169.254/latest/meta-data/ami-id
```

IMDSv2를 사용하여 인스턴스 메타데이터를 요청하는 경우 요청에는 다음이 포함되어야 합니다.

1. `PUT` 요청을 사용하여 인스턴스 메타데이터 서비스의 세션을 초기화합니다. `PUT` 요청은 후속 `GET` 요청에 포함되어야 하는 토큰을 인스턴스 메타데이터 서비스에 반환합니다. 토큰은 IMDSv2를 사용하여 메타데이터에 액세스하는 데 필요합니다.

1. IMDS에 대한 모든 `GET` 요청에 토큰을 포함합니다. 토큰 사용이 `required`로 설정되면 유효한 토큰이 없거나 만료된 토큰이 있는 요청은 `401 - Unauthorized` HTTP 오류 코드를 수신합니다.
   + 토큰은 인스턴스에 특정한 키입니다. 토큰은 다른 EC2 인스턴스에서 유효하지 않으며 해당 토큰이 생성된 인스턴스 외부에서 사용하려고 시도하면 거부됩니다.
   + `PUT` 요청에는 토큰의 TTL(Time to Live)를 최대 6시간(21,600초)까지 초 단위로 지정하는 헤더가 포함되어야 합니다. 토큰은 논리 세션을 나타냅니다. TTL은 토큰이 유효한 시간 길이를 지정하며 따라서 세션 기간을 지정합니다.
   + 토큰이 만료된 후 인스턴스 메타데이터에 계속 액세스하려면 다른 `PUT`를 사용하여 새 세션을 생성해야 합니다.
   + 토큰을 재사용하거나 모든 요청에 새 토큰을 생성하도록 선택할 수 있습니다. 요청 수가 적은 경우 IMDS에 액세스해야 할 때마다 토큰을 생성하고 즉시 사용하는 것이 더 간편할 수 있습니다. 하지만 효율성을 향상하려면 인스턴스 메타데이터를 요청해야 할 때마다 `PUT` 요청을 작성하는 대신 토큰에 더 긴 기간을 지정하고 토큰을 재사용할 수 있습니다. 동시 토큰 수에는 실질적인 제한이 없으며 각각은 자체 세션을 나타냅니다. 그러나 IMDSv2에는 표준 IMDS 연결 및 조절 제한이 여전히 적용됩니다. 자세한 내용은 [쿼리 조절](instancedata-data-retrieval.md#instancedata-throttling) 섹션을 참조하세요.

IMDSv2 인스턴스 메타데이터 요청에서는 HTTP `GET` 및 `HEAD` 메서드가 허용됩니다. `PUT` 요청은 X-Forwarded-For 헤더가 포함될 경우 거부됩니다.

기본적으로 `PUT` 요청에 대한 응답에는 IP 프로토콜 수준에서 `1`의 응답 홉 제한(TTL(Time to Live))이 있습니다. 더 큰 홉 제한이 필요한 경우 [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) AWS CLI 명령을 사용하여 조정할 수 있습니다. 예를 들어 인스턴스에서 실행 중인 컨테이너 서비스가 있는 경우 이전 버전과의 호환성을 위해 더 큰 홉 제한이 필요할 수 있습니다. 자세한 내용은 [기존 인스턴스에 대한 인스턴스 메타데이터 옵션 수정](configuring-IMDS-existing-instances.md) 섹션을 참조하세요.

## 지원되는 AWS SDK 사용
<a name="use-a-supported-sdk-version-for-imdsv2"></a>

IMDSv2를 사용하려면 EC2 인스턴스에서 IMDSv2 사용을 지원하는 AWS SDK 버전을 사용해야 합니다. 모든 AWS SDK의 최신 버전에서는 IMDSv2 사용을 지원합니다.

**중요**  
최신 기능, 보안 업데이트 및 기본 종속성을 지원하려면 SDK 릴리스를 최신 상태로 유지하는 것이 좋습니다. 지원되지 않는 SDK 버전을 계속 사용하는 것은 권장되지 않으며 그에 따른 책임은 사용자에게 있습니다. 자세한 내용은 *AWS SDK 및 도구 참조 가이드*에서 [AWS SDK 및 도구 유지 관리 정책](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html)을 참조하세요.

다음은 IMDSv2 사용을 지원하는 최소 버전입니다.
+ [AWS CLI](https://github.com/aws/aws-cli) - 1.16.289
+ [AWS Tools for Windows PowerShell](https://github.com/aws/aws-tools-for-powershell) – 4.0.1.0
+ [AWS SDK for .NET](https://github.com/aws/aws-sdk-net) – 3.3.634.1
+ [AWS SDK for C\$1\$1](https://github.com/aws/aws-sdk-cpp) – 1.7.229
+ [AWS SDK for Go](https://github.com/aws/aws-sdk-go) – 1.25.38
+ [AWS Go v2용 SDK](https://github.com/aws/aws-sdk-go-v2) – 0.19.0
+ [AWS SDK for Java](https://github.com/aws/aws-sdk-java) – 1.11.678
+ [AWS SDK for Java 2.x](https://github.com/aws/aws-sdk-java-v2) – 2.10.21
+ [AWS Node.js의 JavaScript용 SDK](https://github.com/aws/aws-sdk-js) – 2.722.0
+ [AWS SDK for Kotlin](https://github.com/awslabs/aws-sdk-kotlin)-1.1.4
+ [AWS SDK for PHP](https://github.com/aws/aws-sdk-php) – 3.147.7
+ [AWS SDK for Python(Botocore)](https://github.com/boto/botocore) – 1.13.25
+ [AWS SDK for Python (Boto3)](https://github.com/boto/boto3) – 1.12.6
+ [AWS SDK for Ruby](https://github.com/aws/aws-sdk-ruby) – 3.79.0

## IMDSv2 예제
<a name="instance-metadata-retrieval-examples"></a>

Amazon EC2 인스턴스에서 다음 예제를 실행하여 IMDSv2의 인스턴스 메타데이터를 검색합니다.

Windows 인스턴스에서 Windows PowerShell을 사용하거나 cURL 또는 wget을 설치할 수 있습니다. Windows 인스턴스에 서드 파티 도구를 설치하는 경우 직접 호출과 출력이 여기 설명된 것과 다를 수 있으므로 부속 문서를 주의 깊게 정독해야 합니다.

**Topics**
+ [인스턴스 메타데이터의 사용 가능한 버전 가져오기](#instance-metadata-ex-1)
+ [최고 수준 메타데이터 항목 가져오기](#instance-metadata-ex-2)
+ [메타데이터 항목의 값 가져오기](#instance-metadata-ex-2a)
+ [사용 가능한 퍼블릭 키 목록 가져오기](#instance-metadata-ex-3)
+ [퍼블릭 키 0을 이용할 수 있는 형식 표시](#instance-metadata-ex-4)
+ [퍼블릭 키 0(OpenSSH 키 형식) 가져오기](#instance-metadata-ex-5)
+ [인스턴스에 대한 서브넷 ID 가져오기](#instance-metadata-ex-6)
+ [인스턴스에 대한 인스턴스 태그 가져오기](#instance-metadata-ex-7)

### 인스턴스 메타데이터의 사용 가능한 버전 가져오기
<a name="instance-metadata-ex-1"></a>

이 예를 통해 이용 가능한 인스턴스 메타데이터 버전을 가져올 수 있습니다. 각 버전은 새 인스턴스 메타데이터 카테고리가 릴리스될 때 인스턴스 메타데이터 빌드를 참조합니다. 인스턴스 메타데이터 빌드 버전은 Amazon EC2 API 버전과 상관관계가 없습니다. 이전 버전의 구조 및 정보를 사용하는 스크립트인 경우 이전 버전을 사용할 수 있습니다.

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

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

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------

### 최고 수준 메타데이터 항목 가져오기
<a name="instance-metadata-ex-2"></a>

이 예제는 최고 수준 메타데이터 항목을 가져옵니다. 응답의 항목에 대한 자세한 내용은 [인스턴스 메타데이터 카테고리](ec2-instance-metadata.md#instancedata-data-categories) 섹션을 참조하세요.

액세스를 허용한 경우에만 이 출력에 태그가 포함됩니다. 자세한 내용은 [인스턴스 메타데이터에서 태그에 대한 액세스 활성화](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS) 섹션을 참조하세요.

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
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/
tags/
```

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

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
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/
tags/
```

------

### 메타데이터 항목의 값 가져오기
<a name="instance-metadata-ex-2a"></a>

이 예에서는 앞의 예에서 얻은 최상위 메타데이터 항목 중 일부의 값을 가져옵니다. 이 요청은 이전 예제의 명령을 사용하여 생성한 저장된 토큰을 사용합니다. 토큰이 만료되지 않아야 합니다.

------
#### [ cURL ]

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

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

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------

### 사용 가능한 퍼블릭 키 목록 가져오기
<a name="instance-metadata-ex-3"></a>

이 예제를 통해 이용 가능한 퍼블릭 키 목록을 획득할 수 있습니다.

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key
```

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

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key
```

------

### 퍼블릭 키 0을 이용할 수 있는 형식 표시
<a name="instance-metadata-ex-4"></a>

이 예제는 퍼블릭 키 0을 이용할 수 있는 형식을 보여줍니다.

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/0/
openssh-key
```

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

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
openssh-key
```

------

### 퍼블릭 키 0(OpenSSH 키 형식) 가져오기
<a name="instance-metadata-ex-5"></a>

이 예제에서는 퍼블릭 키 0(OpenSSH 키 형식)을 획득합니다.

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

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

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------

### 인스턴스에 대한 서브넷 ID 가져오기
<a name="instance-metadata-ex-6"></a>

이 예제에서는 인스턴스에 대한 서브넷 ID를 가져옵니다.

------
#### [ cURL ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

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

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------

### 인스턴스에 대한 인스턴스 태그 가져오기
<a name="instance-metadata-ex-7"></a>

인스턴스 메타데이터의 인스턴스 태그에 대한 액세스가 설정된 경우 인스턴스 메타데이터에서 인스턴스의 태그를 가져올 수 있습니다. 자세한 내용은 [인스턴스 메타데이터에서 태그 검색](work-with-tags-in-IMDS.md#retrieve-tags-from-IMDS) 섹션을 참조하세요.

## IMDSv1 예제
<a name="instance-metadata-retrieval-examples-imdsv1"></a>

Amazon EC2 인스턴스에서 다음 예제를 실행하여 IMDSv1의 인스턴스 메타데이터를 검색합니다.

Windows 인스턴스에서 Windows PowerShell을 사용하거나 cURL 또는 wget을 설치할 수 있습니다. Windows 인스턴스에 서드 파티 도구를 설치하는 경우 직접 호출과 출력이 여기 설명된 것과 다를 수 있으므로 부속 문서를 주의 깊게 정독해야 합니다.

**Topics**
+ [인스턴스 메타데이터의 사용 가능한 버전 가져오기](#instance-metadata-ex-1-imdsv1)
+ [최고 수준 메타데이터 항목 가져오기](#instance-metadata-ex-2-imdsv1)
+ [메타데이터 항목의 값 가져오기](#instance-metadata-ex-2a-imdsv1)
+ [사용 가능한 퍼블릭 키 목록 가져오기](#instance-metadata-ex-3-imdsv1)
+ [퍼블릭 키 0을 이용할 수 있는 형식 표시](#instance-metadata-ex-4-imdsv1)
+ [퍼블릭 키 0(OpenSSH 키 형식) 가져오기](#instance-metadata-ex-5-imdsv1)
+ [인스턴스에 대한 서브넷 ID 가져오기](#instance-metadata-ex-6-imdsv1)
+ [인스턴스에 대한 인스턴스 태그 가져오기](#instance-metadata-ex-7-imdsv1)

### 인스턴스 메타데이터의 사용 가능한 버전 가져오기
<a name="instance-metadata-ex-1-imdsv1"></a>

이 예를 통해 이용 가능한 인스턴스 메타데이터 버전을 가져올 수 있습니다. 각 버전은 새 인스턴스 메타데이터 카테고리가 릴리스될 때 인스턴스 메타데이터 빌드를 참조합니다. 인스턴스 메타데이터 빌드 버전은 Amazon EC2 API 버전과 상관관계가 없습니다. 이전 버전의 구조 및 정보를 사용하는 스크립트인 경우 이전 버전을 사용할 수 있습니다.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

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

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------

### 최고 수준 메타데이터 항목 가져오기
<a name="instance-metadata-ex-2-imdsv1"></a>

이 예제는 최고 수준 메타데이터 항목을 가져옵니다. 응답의 항목에 대한 자세한 내용은 [인스턴스 메타데이터 카테고리](ec2-instance-metadata.md#instancedata-data-categories) 섹션을 참조하세요.

액세스를 허용한 경우에만 이 출력에 태그가 포함됩니다. 자세한 내용은 [인스턴스 메타데이터에서 태그에 대한 액세스 활성화](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS) 섹션을 참조하세요.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

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

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------

### 메타데이터 항목의 값 가져오기
<a name="instance-metadata-ex-2a-imdsv1"></a>

이 예제는 이전 예제에서 얻은 최상위 메타데이터 항목 중 일부의 값을 가져옵니다.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

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

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------

### 사용 가능한 퍼블릭 키 목록 가져오기
<a name="instance-metadata-ex-3-imdsv1"></a>

이 예제를 통해 이용 가능한 퍼블릭 키 목록을 획득할 수 있습니다.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key
```

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

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key
```

------

### 퍼블릭 키 0을 이용할 수 있는 형식 표시
<a name="instance-metadata-ex-4-imdsv1"></a>

이 예제는 퍼블릭 키 0을 이용할 수 있는 형식을 보여줍니다.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/
openssh-key
```

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

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
openssh-key
```

------

### 퍼블릭 키 0(OpenSSH 키 형식) 가져오기
<a name="instance-metadata-ex-5-imdsv1"></a>

이 예제에서는 퍼블릭 키 0(OpenSSH 키 형식)을 획득합니다.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

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

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------

### 인스턴스에 대한 서브넷 ID 가져오기
<a name="instance-metadata-ex-6-imdsv1"></a>

이 예제에서는 인스턴스에 대한 서브넷 ID를 가져옵니다.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

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

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------

### 인스턴스에 대한 인스턴스 태그 가져오기
<a name="instance-metadata-ex-7-imdsv1"></a>

인스턴스 메타데이터의 인스턴스 태그에 대한 액세스가 설정된 경우 인스턴스 메타데이터에서 인스턴스의 태그를 가져올 수 있습니다. 자세한 내용은 [인스턴스 메타데이터에서 태그 검색](work-with-tags-in-IMDS.md#retrieve-tags-from-IMDS) 섹션을 참조하세요.