

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Snowball Edge의 IMDS 버전
<a name="imds-versions"></a>

IMDS 버전 2 또는 IMDS 버전 1을 사용하여 실행 중인 인스턴스에서 인스턴스 메타데이터에 액세스할 수 있습니다.
+ 인스턴스 메타데이터 서비스 버전 2(IMDSv2) – 세션 지향 방법
+ 인스턴스 메타데이터 서비스 버전 1(IMDSv1) – 요청/응답 방법

Snow 소프트웨어 버전에 따라 IMDSv1 또는 IMDSv2를 사용하거나 둘 다 사용할 수 있습니다. 이는 EC2 호환 인스턴스에서 실행되는 AMI 유형에 따라서도 달라집니다. Ubuntu 20.04를 실행하는 AMI와 같은 일부 AMI에는 IMDSv2가 필요합니다. 인스턴스 메타데이터 서비스는 `PUT` 또는 `GET` 헤더의 존재 여부에 따라 IMDSv1 요청과 IMDSv2 요청을 구별합니다. IMDSv2는 이 두 헤더를 모두 사용합니다. IMDSv1은 `GET` 헤더만 사용합니다.

AWS IMDSv2에는 더 높은 보안이 포함되어 있으므로는 IMDSv1 대신 IMDSv2를 사용하도록 권장합니다. 자세한 내용은 [EC2 인스턴스 메타데이터 서비스의 향상된 기능을 통해 개방형 방화벽, 역방향 프록시 및 SSRF 취약성에 대한 심층적인 방어 기능 추가](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/)를 참조하십시오.

## Snowball Edge의 IMDSv2
<a name="imdsv2"></a>

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

1. `PUT` 요청을 사용하여 인스턴스 메타데이터 서비스의 세션을 초기화합니다. `PUT` 요청은 후속 `GET` 요청에 포함되어야 하는 세션 토큰을 인스턴스 메타데이터 서비스에 반환합니다. 세션 기간을 정의하는 세션 토큰입니다. 세션 기간은 최소 1초, 최대 6시간입니다. 지정된 기간 중에는 후속 요청에 동일한 세션 토큰을 사용할 수 있습니다. 지정된 기간이 만료된 후에는 향후 요청에 사용할 새로운 세션 토큰을 생성해야 합니다. 토큰은 IMDSv2를 사용하여 메타데이터에 액세스하는 데 필요합니다.

1. 인스턴스 메타데이터 서비스에 대한 모든 `GET` 요청에 토큰을 포함시킵니다.

   1. 토큰은 인스턴스에 특정한 키입니다. 토큰은 다른 인스턴스에서 유효하지 않으며 해당 토큰이 생성된 인스턴스 외부에서 사용하려고 시도하면 거부됩니다.

   1. `PUT` 요청에는 토큰의 TTL(Time to Live)를 최대 6시간(21,600초)까지 초 단위로 지정하는 헤더가 포함되어야 합니다. 토큰은 논리 세션을 나타냅니다. TTL은 토큰이 유효한 시간 길이를 지정하며 따라서 세션 기간을 지정합니다.

   1. 토큰이 만료된 후 인스턴스 메타데이터에 계속 액세스하려면 다른 `PUT` 요청을 사용하여 새 세션을 생성해야 합니다.

   1. 토큰을 재사용하거나 모든 요청에 새 토큰을 생성하도록 선택할 수 있습니다. 요청 수가 적은 경우 인스턴스 메타데이터 서비스에 액세스해야 할 때마다 토큰을 생성하고 즉시 사용하는 것이 더 간편할 수 있습니다. 하지만 효율성을 향상하려면 인스턴스 메타데이터를 요청해야 할 때마다 `PUT` 요청을 작성하는 대신 토큰에 더 긴 기간을 지정하고 토큰을 재사용할 수 있습니다. 동시 토큰 수에는 실질적인 제한이 없으며 각각은 자체 세션을 나타냅니다.

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

기본적으로 `PUT` 요청에 대한 응답에는 IP 프로토콜 수준에서 1의 응답 홉 제한(TTL(Time to Live))이 있습니다. Snow용 IMDS는 `PUT` 응답에 대한 홉 제한을 수정할 수 없습니다.

다음 예에서는 Linux 셸 스크립트와 IMDSv2를 사용하여 최상위 인스턴스 메타데이터 항목을 가져옵니다. 이 예에서는

1. `PUT` 요청을 사용하여 6시간(21,600초) 동안 지속되는 세션 토큰을 생성합니다.

1. `TOKEN`이라는 변수에 세션 토큰 헤더를 저장합니다.

1. 토큰을 사용하여 최상위 메타데이터 항목을 요청합니다.

두 개의 명령을 사용하여 EC2-compatible 토큰을 생성합니다. 명령을 별도로 실행하거나 하나의 명령으로 실행할 수 있습니다.

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

**참고**  
`X-aws-ec2-metadata-token-ttl-seconds`는 필수 헤더입니다. 이 헤더가 포함되지 않은 경우 **400 - 파라미터 누락 또는 잘못된 파라미터** 오류 코드를 받게 됩니다.

```
    [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" -v http://169.254.169.254/latest/meta-data/
```

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

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

**Example 결합된 명령**  

```
    [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" -v http://169.254.169.254/latest/meta-data/
```

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

**Example 토큰 재사용의 경우**  

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

## Snowball Edge의 IMDSv1
<a name="imdsv1"></a>

IMDSv1은 요청-응답 모델을 사용합니다. 인스턴스 메타데이터를 요청하려면 인스턴스 메타데이터 서비스에 `GET` 요청을 전송합니다.

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

인스턴스 메타데이터는 실행 중인 인스턴스에서 사용할 수 있으므로 Amazon EC2 콘솔 또는 AWS CLI 를 사용하여 액세스할 필요가 없습니다. 이는 인스턴스에서 실행할 스크립트를 작성할 때 유용합니다. 예를 들어, 사용자는 인스턴스 메타데이터에서 인스턴스의 로컬 IP 주소에 액세스하여 외부 애플리케이션과의 연결을 관리할 수 있습니다. 인스턴스 메타데이터는 몇 가지 범주로 분류될 수 있습니다. 각 인스턴스 메타데이터 범주에 대한 설명은 이 설명서의 [지원되는 인스턴스 메타데이터 및 사용자 데이터](https://docs.aws.amazon.com/snowball/latest/developer-guide/edge-compute-instance-metadata.html)를 참조하십시오.

실행 중인 모든 인스턴스 메타데이터 범주를 살펴보려면 다음 IPv4 URI를 사용하십시오.

```
    http://169.254.169.254/latest/meta-data/
```

IP 주소는 링크-로컬 주소이며 인스턴스에서만 유효합니다. 자세한 내용은 Wikipedia의 [Link-local address](https://en.wikipedia.org/wiki/Link-local_address)를 참조하십시오.

모든 인스턴스 메타데이터는 텍스트(HTTP 콘텐츠 유형 `text/plain`)로 반환됩니다.

특정 메타데이터 리소스를 요청하면 적절한 값이 반환되거나 리소스를 이용할 수 없는 경우 **404 - 찾을 수 없음** HTTP 오류 코드가 반환됩니다.

일반 메타데이터 리소스(`/`로 끝나는 URI)를 요청한 경우 이용 가능한 리소스 목록이 반환되거나 해당 리소스가 없는 경우 **404 - 찾을 수 없음** HTTP 오류 코드가 반환됩니다. 목록 항목은 개별 라인에 표시되고 줄바꿈(ASCII 문자 코드 10)으로 끝납니다.

IMDSv1을 사용하여 수행한 요청의 경우 다음 HTTP 오류 코드가 반환될 수 있습니다.
+ **400 - 파라미터 누락 또는 유효하지 않음** - `PUT` 요청이 유효하지 않습니다.
+ **401 - 권한이 없음** - `GET` 요청이 유효하지 않은 토큰을 사용합니다. 권장되는 작업은 새 토큰을 생성하는 것입니다.
+ **403 - 금지됨** - 요청이 허용되지 않거나 인스턴스 메타데이터 서비스가 꺼져 있습니다.