인스턴스 메타데이터 서비스를 사용하여 인스턴스 메타데이터에 액세스 - Amazon Elastic Compute Cloud

인스턴스 메타데이터 서비스를 사용하여 인스턴스 메타데이터에 액세스

다음 방법 중 하나를 사용하여 실행 중인 인스턴스에서 인스턴스 메타데이터에 액세스할 수 있습니다.

  • 인스턴스 메타데이터 서비스 버전 2(IMDSv2) – 세션 지향 방법

    예시는 IMDSv2 예제 섹션을 참조하세요.

  • 인스턴스 메타데이터 서비스 버전 1(IMDSv1) – 요청/응답 방법

    예시는 IMDSv1 예제 섹션을 참조하세요.

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

로컬 코드 또는 사용자가 IMDSv2를 사용해야 하도록 각 인스턴스에서 인스턴스 메타데이터 서비스(IMDS)를 구성할 수 있습니다. IMDSv2를 사용해야 하도록 지정하면 IMDSv1는 더 이상 작동하지 않습니다. 인스턴스에서 IMDSv2를 사용하도록 구성하는 방법에 대한 자세한 내용은 인스턴스 메타데이터 서비스 옵션 구성 섹션을 참조하세요.

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

IMDSv2에 대한 자세한 내용은 EC2 인스턴스 메타데이터 서비스의 향상된 기능을 통해 개방형 방화벽, 역방향 프록시, SSRF 취약성에 대한 심층적인 방어 기능 추가를 참조하세요.

인스턴스 메타데이터 서비스 버전 2 작동 방식

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

참고

이 섹션의 예에서는 인스턴스 메타데이터 서비스(IMDS)의 IPv4 주소(169.254.169.254)를 사용합니다. IPv6 주소를 통해 EC2 인스턴스의 인스턴스 메타데이터를 검색하는 경우, 대신 IPv6 주소([fd00:ec2::254])를 활성화하고 사용해야 합니다. IMDS의 IPv6 주소는 IMDSv2 명령과 호환됩니다. IPv6 주소는 AWS Nitro 시스템에 구축된 인스턴스IPv6 지원 서브넷(이중 스택 또는 IPv6만 해당)에서만 액세스할 수 있습니다.

다음 예에서는 쉘 스크립트와 IMDSv2를 사용하여 최상위 인스턴스 메타데이터 항목을 검색합니다. 각 예시:

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

  • 세션 토큰 헤더를 TOKEN(Linux 인스턴스) 또는 token(Windows 인스턴스)이라는 변수에 저장합니다.

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

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

별도의 명령

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

[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
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를 사용하여 메타데이터에 액세스하는 데 필요합니다.

  2. IMDS에 대한 모든 GET 요청에 토큰을 포함합니다. 토큰 사용이 required로 설정되면 유효한 토큰이 없거나 만료된 토큰이 있는 요청은 401 - Unauthorized HTTP 오류 코드를 수신합니다.

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

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

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

    • 토큰을 재사용하거나 모든 요청에 새 토큰을 생성하도록 선택할 수 있습니다. 요청 수가 적은 경우 IMDS에 액세스해야 할 때마다 토큰을 생성하고 즉시 사용하는 것이 더 간편할 수 있습니다. 하지만 효율성을 향상하려면 인스턴스 메타데이터를 요청해야 할 때마다 PUT 요청을 작성하는 대신 토큰에 더 긴 기간을 지정하고 토큰을 재사용할 수 있습니다. 동시 토큰 수에는 실질적인 제한이 없으며 각각은 자체 세션을 나타냅니다. 그러나 IMDSv2에는 표준 IMDS 연결 및 조절 제한이 여전히 적용됩니다. 자세한 내용은 쿼리 조절 단원을 참조하십시오.

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

기본적으로 PUT 요청에 대한 응답에는 IP 프로토콜 수준에서 1의 응답 홉 제한(TTL(Time to Live))이 있습니다. 더 큰 홉 제한이 필요한 경우 modify-instance-metadata-options AWS CLI 명령을 사용하여 조정할 수 있습니다. 예를 들어 인스턴스에서 실행 중인 컨테이너 서비스가 있는 경우 이전 버전과의 호환성을 위해 더 큰 홉 제한이 필요할 수 있습니다. 자세한 내용은 기존 인스턴스에 대한 인스턴스 메타데이터 옵션 수정 단원을 참조하십시오.

인스턴스 메타데이터 서비스 버전 2 사용으로 전환

IMDSv2로 마이그레이션하는 경우 다음과 같은 도구와 전환 경로를 사용하는 것이 좋습니다.

IMDSv2로 전환하는 데 도움이 되는 도구

소프트웨어가 IMDSv1을 사용하는 경우 다음 도구를 사용하면 IMDSv2를 사용하도록 소프트웨어를 재구성하는 데 도움이 됩니다.

AWS 소프트웨어

최신 버전의 AWS CLI 및 AWS SDK는 IMDSv2를 지원합니다. IMDSv2를 사용하려면 EC2 인스턴스에 최신 버전의 CLI 및 SDK가 있는지 확인합니다. CLI 업데이트에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서에서 AWS CLI 설치, 업데이트 및 제거를 참조하세요.

모든 Amazon Linux 2 및 Amazon Linux 2023 소프트웨어 패키지에서 IMDSv2를 지원합니다. Amazon Linux 2023에서는 IMDSv1은 기본적으로 비활성화되어 있습니다.

IMDsv2를 지원하는 최소 AWS SDK 버전은 지원되는 AWS SDK 사용 섹션을 참조하세요.

IMDS 패킷 분석기

IMDS 패킷 분석기는 인스턴스의 부팅 단계에서 IMDSv1 호출을 식별하고 기록하는 오픈 소스 도구입니다. 이는 EC2 인스턴스에서 IMDSv1 호출을 수행하는 소프트웨어를 식별하는 데 도움이 되며, 이를 통해 인스턴스가 IMDSv2만 사용할 준비가 되도록 업데이트해야 하는 항목을 정확히 찾아낼 수 있습니다. 명령줄에서 IMDS 패킷 분석기를 실행하거나 서비스로 설치할 수 있습니다. 자세한 내용은 GitHub의 IMDS 패킷 분석기를 참조하세요.

CloudWatch

IMDSv2는 토큰 지원 세션을 사용하지만 IMDSv1은 사용하지 않습니다. MetadataNoToken CloudWatch 지표는 IMDSv1을 사용하는 인스턴스 메타데이터 서비스(IMDS)에 대한 호출 수를 추적합니다. 이 지표를 0까지 추적하면 모든 소프트웨어가 IMDSv2를 사용하도록 업그레이드되었는지 여부와 업그레이드된 시간을 확인할 수 있습니다.

IMDSv1을 비활성화한 후 MetadataNoTokenRejected CloudWatch 지표를 사용하여 IMDsv1 직접 호출이 시도되었지만 거부된 횟수를 추적할 수 있습니다. 이 지표를 추적하면 IMDSv2를 사용하기 위해 소프트웨어를 업데이트해야 하는지 여부를 확인할 수 있습니다.

자세한 내용은 인스턴스 지표 단원을 참조하십시오.

EC2 API 및 CLI 업데이트

새 인스턴스의 경우 RunInstances API를 사용하여 IMDSv2를 사용해야 하는 새 인스턴스를 시작할 수 있습니다. 자세한 내용은 새 인스턴스에 대한 인스턴스 메타데이터 옵션 구성 단원을 참조하십시오.

기존 인스턴스의 경우 ModifyInstanceMetadataOptions API를 사용하여 IMDSv2를 사용하도록 할 수 있습니다. 자세한 내용은 기존 인스턴스에 대한 인스턴스 메타데이터 옵션 수정 단원을 참조하십시오.

Auto Scaling 그룹에서 시작한 모든 새 인스턴스에서 IMDSv2를 사용해야 하는 경우 Auto Scaling 그룹에서 시작 템플릿 또는 시작 구성을 사용할 수 있습니다. 시작 템플릿을 생성하거나 시작 구성을 생성할 때 IMDSv2를 반드시 사용하도록 MetadataOptions 파라미터를 구성해야 합니다. Auto Scaling 그룹은 새 시작 템플릿 또는 시작 구성을 사용하여 새 인스턴스를 시작하지만 기존 인스턴스는 영향을 받지 않습니다. Auto Scaling 그룹의 기존 인스턴스의 경우 ModifyInstanceMetadataOptions API를 사용하여 기존 인스턴스에서 IMDSv2를 사용하도록 요구하거나 인스턴스를 종료하면 Auto Scaling 그룹이 새 시작 템플릿 또는 시작 구성에 정의된 인스턴스 메타데이터 옵션 설정으로 새 대체 인스턴스를 시작합니다.

기본적으로 IMDSv2를 구성하는 AMI 사용

인스턴스를 시작할 때 v2.0으로 설정된 ImdsSupport 파라미터로 구성한 AMI로 인스턴스를 시작하여 기본적으로 IMDSv2를 사용하도록 인스턴스를 자동 구성할 수 있습니다(HttpTokens 파라미터는 required로 설정됨). register-image CLI 명령을 사용하여 AMI를 등록할 때 ImdsSupport 파라미터를 v2.0로 설정하거나 modify-image-attribute CLI 명령을 사용하여 기존 AMI를 수정할 수 있습니다. 자세한 내용은 AMI 구성 단원을 참조하십시오.

IAM 정책 및 SCP

IAM 정책 또는 AWS Organizations 서비스 제어 정책(SCP)을 사용하여 다음과 같이 사용자를 제어할 수 있습니다.

  • 인스턴스가 IMDSv2를 사용하도록 구성되어 있지 않으면 RunInstances API를 사용하여 인스턴스를 시작할 수 없습니다.

  • IMDSv1을 다시 활성화하기 위해 ModifyInstanceMetadataOptions API를 사용하여 실행 중인 인스턴스를 수정할 수 없습니다.

IAM 정책 또는 SCP에 다음 IAM 조건 키가 포함되어야 합니다.

  • ec2:MetadataHttpEndpoint

  • ec2:MetadataHttpPutResponseHopLimit

  • ec2:MetadataHttpTokens

API 또는 CLI 호출의 파라미터가 조건 키가 포함된 정책에 지정된 상태와 일치하지 않는 경우 API 또는 CLI 호출은 UnauthorizedOperation 응답과 함께 실패합니다.

추가로, IMDSv1에서 IMDSv2로 변경을 시행하기 위한 추가 보호 계층을 선택할 수 있습니다. EC2 역할 자격 증명을 통해 호출되는 API에 관한 액세스 관리 계층에서는 IAM 정책 또는 AWS Organizations 서비스 제어 정책(SCP)에서 새 조건 키를 사용할 수 있습니다. 특히, IAM 정책에서 값이 ec2:RoleDelivery인 조건 키 2.0을 사용하여 IMDSv1에서 얻은 EC2 역할 자격 증명으로 API 호출을 수행하면 UnauthorizedOperation 응답이 수신됩니다. SCP에 따라 필요한 조건을 사용하여 동일한 작업을 더 광범위하게 수행할 수 있습니다. 이렇게 하면 지정된 조건에 맞지 않게 API를 호출할 경우 UnauthorizedOperation 오류가 수신되기 때문에 실제로 IMDSv1을 통해 제공된 자격 증명을 사용하여 API를 호출할 수 없습니다.

예제 IAM 정책은 인스턴스 메타데이터 작업 섹션을 참조하세요. SCP에 대한 자세한 내용을 알아보려면 AWS Organizations 사용 설명서서비스 제어 정책(SCP)을 참조하세요.

위의 도구를 사용하여 이 경로를 따라 IMDSv2로 전환하는 것이 좋습니다.

1단계: 시작 시

EC2 인스턴스에서 역할 자격 증명을 사용하는 SDK, CLI 및 소프트웨어를 IMDSv2와 호환되는 버전으로 업데이트합니다. CLI 업데이트에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서에서 최신 버전의 AWS CLI로 업그레이드를 참조하세요.

그런 다음, IMDSv2 요청을 사용하여 인스턴스 메타데이터에 직접 액세스하는(다시 말해서, SDK를 사용하지 않는) 소프트웨어를 변경합니다. IMDS 패킷 분석기로 IMDSv2 요청 사용을 위해 변경해야 하는 소프트웨어를 식별할 수 있습니다.

2단계: 전환 진행률 추적

CloudWatch 지표 MetadataNoToken을 사용하여 전환 진행률을 추적합니다. 이 지표는 인스턴스에서 IMDS에 대한 IMDSv1 호출 수를 표시합니다. 자세한 내용은 인스턴스 지표 단원을 참조하십시오.

3단계: IMDSv1 사용량이 0인 경우

CloudWatch 지표 MetadataNoToken이 IMDSv1 사용량을 0으로 기록하면 인스턴스가 IMDSv2 사용으로 완전히 전환할 준비가 된 것입니다. 이 단계에서 다음 작업을 수행할 수 있습니다.

  • 계정 기본값

    IMDSv2를 반드시 계정 기본값으로 사용하도록 설정할 수 있습니다. 인스턴스가 시작되면 인스턴스 구성이 계정 기본값으로 자동 설정됩니다.

    계정 기본값을 설정하려면 다음을 수행합니다.

    • Amazon EC2 콘솔: EC2 대시보드의 계정 속성, 데이터 보호 및 보안 아래에서 IMDS 기본값에 대해 인스턴스 메타데이터 서비스활성화됨으로 설정하고 메타데이터 버전V2 전용(토큰 필요)으로 설정합니다. 자세한 내용은 IMDSv2를 계정 기본값으로 설정 단원을 참조하십시오.

    • AWS CLI: modify-instance-metadata-defaults CLI 명령을 사용하고 --http-tokens required--http-put-response-hop-limit 2를 지정합니다.

  • 새 인스턴스

    새 인스턴스를 시작할 때 다음을 수행할 수 있습니다.

    • Amazon EC2 콘솔: 인스턴스 시작 마법사에서 Metadata accessible(액세스 가능한 메타데이터)을 Enabled(사용)로 설정하고 Metadata version(메타데이터 버전)을 V2 only (token required)(V2 전용(토큰 필요))로 설정합니다. 자세한 내용은 시작 시 인스턴스 구성 단원을 참조하십시오.

    • AWS CLI: run-instances CLI 명령을 사용하여 IMDSv2를 필수로 지정합니다.

  • 기존 인스턴스

    기존 인스턴스의 경우 다음 작업을 수행할 수 있습니다.

    • Amazon EC2 콘솔: 인스턴스 페이지에서 인스턴스를 선택하고 작업, 인스턴스 설정, 인스턴스 메타데이터 수정 옵션을 선택하고 IMDsv2의 경우 필수를 선택합니다. 자세한 내용은 IMDSv2의 사용 요구 단원을 참조하십시오.

    • AWS CLI: modify-instance-metadata-options CLI 명령을 사용하여 IMDSv2만 사용하도록 지정합니다.

    실행 중인 인스턴스에서 인스턴스 메타데이터 옵션을 수정할 수 있으며 인스턴스 메타데이터 옵션을 수정한 후 인스턴스를 다시 시작할 필요가 없습니다.

4단계: 인스턴스가 IMDSv2로 전환되었는지 확인

인스턴스가 아직 IMDSv2를 사용하도록 구성되지 않았는지, 즉 IMDSv2가 여전히 optional로 구성되었는지 확인할 수 있습니다. 인스턴스가 여전히 optional로 구성된 경우 이전 3단계를 반복하여 인스턴스 메타데이터 옵션을 수정하여 IMDSv2 required를 만들 수 있습니다.

인스턴스를 필터링하려면 다음을 수행합니다.

  • Amazon EC2 콘솔: 인스턴스 페이지에서 IMDSv2 = 선택 사항 필터를 사용하여 인스턴스를 필터링합니다. 필터링에 대한 자세한 내용은 콘솔을 사용하여 리소스 필터링 섹션을 참조하세요. 또한 각 인스턴스에 대해 IMDSv2가 필수인지 선택 사항인지 확인할 수 있습니다. 기본 설정 창에서 IMDSv2를 켜서 IMDSv2 열을 인스턴스 테이블에 추가하세요.

  • AWS CLI: describe-instance CLI 명령을 사용하고 다음과 같이 metadata-options.http-tokens = optional로 필터링합니다.

    aws ec2 describe-instances --filters "Name=metadata-options.http-tokens,Values=optional" --query "Reservations[*].Instances[*].[InstanceId]" --output text

5단계: 모든 인스턴스가 IMDSv2로 전환될 때

ec2:MetadataHttpTokens, ec2:MetadataHttpPutResponseHopLimit, ec2:MetadataHttpEndpoint IAM 조건 키를 사용하여 RunInstancesModifyInstanceMetadataOptions API와 해당 CLI 사용을 제어할 수 있습니다. 정책이 생성되고 API 호출의 파라미터가 조건 키를 사용하는 정책에 지정된 상태와 일치하지 않으면 API 또는 CLI 호출이 UnauthorizedOperation 응답과 함께 실패합니다. 예제 IAM 정책은 인스턴스 메타데이터 작업 섹션을 참조하세요.

또한 IMDSv1을 비활성화한 후 MetadataNoTokenRejected CloudWatch 지표를 사용하여 IMDSv1 직접 호출이 시도되었지만 거부된 횟수를 추적할 수 있습니다. IMDSv1을 비활성화한 후 소프트웨어가 제대로 작동하지 않고 MetadataNoTokenRejected 지표에서 IMDSv1 직접 호출을 기록하는 경우 IMDSv2를 사용하려면 이 소프트웨어를 업데이트해야 할 수 있습니다.

지원되는 AWS SDK 사용

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

중요

최신 기능, 보안 업데이트 및 기본 종속성을 지원하려면 SDK 릴리스를 최신 상태로 유지하는 것이 좋습니다. 지원되지 않는 SDK 버전을 계속 사용하는 것은 권장되지 않으며 그에 따른 책임은 사용자에게 있습니다. 자세한 내용은 AWS SDK 및 도구 참조 가이드에서 AWS SDK 및 도구 유지 관리 정책을 참조하세요.

다음은 IMDSv2 사용을 지원하는 최소 버전입니다.

IMDSv2 예제

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

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

인스턴스 메타데이터의 사용 가능한 버전 가져오기

이 예를 통해 이용 가능한 인스턴스 메타데이터 버전을 가져올 수 있습니다. 각 버전은 새 인스턴스 메타데이터 카테고리가 릴리스될 때 인스턴스 메타데이터 빌드를 참조합니다. 인스턴스 메타데이터 빌드 버전은 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

최고 수준 메타데이터 항목 가져오기

이 예제는 최고 수준 메타데이터 항목을 가져옵니다. 응답의 항목에 대한 자세한 내용은 인스턴스 메타데이터 카테고리 섹션을 참조하세요.

액세스를 허용한 경우에만 이 출력에 태그가 포함됩니다. 자세한 내용은 인스턴스 메타데이터의 태그에 대한 액세스 허용 단원을 참조하십시오.

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/

메타데이터 항목의 값 가져오기

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

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

사용 가능한 퍼블릭 키 목록 가져오기

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

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을 이용할 수 있는 형식 표시

이 예제는 퍼블릭 키 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 키 형식) 가져오기

이 예제에서는 퍼블릭 키 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 가져오기

이 예제에서는 인스턴스에 대한 서브넷 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

인스턴스에 대한 인스턴스 태그 가져오기

인스턴스 메타데이터의 인스턴스 태그에 대한 액세스가 설정된 경우 인스턴스 메타데이터에서 인스턴스의 태그를 가져올 수 있습니다. 자세한 내용은 인스턴스 메타데이터에서 태그 검색 단원을 참조하십시오.

IMDSv1 예제

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

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

인스턴스 메타데이터의 사용 가능한 버전 가져오기

이 예를 통해 이용 가능한 인스턴스 메타데이터 버전을 가져올 수 있습니다. 각 버전은 새 인스턴스 메타데이터 카테고리가 릴리스될 때 인스턴스 메타데이터 빌드를 참조합니다. 인스턴스 메타데이터 빌드 버전은 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

최고 수준 메타데이터 항목 가져오기

이 예제는 최고 수준 메타데이터 항목을 가져옵니다. 응답의 항목에 대한 자세한 내용은 인스턴스 메타데이터 카테고리 섹션을 참조하세요.

액세스를 허용한 경우에만 이 출력에 태그가 포함됩니다. 자세한 내용은 인스턴스 메타데이터의 태그에 대한 액세스 허용 단원을 참조하십시오.

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/

메타데이터 항목의 값 가져오기

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

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

사용 가능한 퍼블릭 키 목록 가져오기

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

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을 이용할 수 있는 형식 표시

이 예제는 퍼블릭 키 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 키 형식) 가져오기

이 예제에서는 퍼블릭 키 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 가져오기

이 예제에서는 인스턴스에 대한 서브넷 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

인스턴스에 대한 인스턴스 태그 가져오기

인스턴스 메타데이터의 인스턴스 태그에 대한 액세스가 설정된 경우 인스턴스 메타데이터에서 인스턴스의 태그를 가져올 수 있습니다. 자세한 내용은 인스턴스 메타데이터에서 태그 검색 단원을 참조하십시오.