인스턴스 메타데이터 서비스 버전 2 사용으로 전환 - - Amazon Elastic Compute Cloud

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

인스턴스가 인스턴스 메타데이터 서비스 버전 2(IMDSv2) 호출만 허용하도록 설정하려면, 다음에 소개하는 도구와 전환 경로를 사용하는 것이 좋습니다.

IMDSv2로 전환하는 데 사용되는 도구

다음 도구는 소프트웨어를 IMDSv1에서 IMDSv2로 전환할 때, 이를 식별, 모니터링 및 관리하는 데 도움이 됩니다. 이러한 도구를 사용하는 방법에 대한 지침은 IMDSv2를 요구하는 권장 경로 섹션을 참조하세요.

AWS 소프트웨어

최신 버전의 AWS CLI 및 AWS SDK는 IMDSv2를 지원합니다. IMDSv2를 사용하려면 EC2 인스턴스에서 최신 버전으로 업데이트해야 합니다. IMDSv2를 지원하는 최소 AWS SDK 버전은 지원되는 AWS SDK 사용 섹션을 참조하세요.

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

IMDS 패킷 분석기

IMDS 패킷 분석기는 인스턴스의 부팅 단계와 실행 중에 발생하는 IMDSv1 호출을 식별하고 기록하는 오픈 소스 도구입니다. 이러한 로그를 분석하면 인스턴스에서 IMDSv1을 호출하는 소프트웨어를 정확히 파악하고, IMDSv2만 지원하도록 업데이트가 필요한 부분을 확인할 수 있습니다. 명령줄에서 IMDS 패킷 분석기를 실행하거나 서비스로 설치할 수 있습니다. 자세한 내용은 GitHubAWS ImdsPacketAnalyzer를 참조하세요.

CloudWatch

CloudWatch는 인스턴스 모니터링을 위해 다음 두 가지 지표를 제공합니다.

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

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

자세한 내용은 인스턴스 지표 섹션을 참조하세요.

시작 API

새 인스턴스: IMDSv2 사용을 요구하는 새 인스턴스를 시작하려면 RunInstances API를 사용하세요. 자세한 내용은 새 인스턴스에 대한 인스턴스 메타데이터 옵션 구성 섹션을 참조하세요.

기존 인스턴스: 기존 인스턴스에서 IMDSv2를 사용하도록 요구하려면 ModifyInstanceMetadataOptions API를 사용하세요. 자세한 내용은 기존 인스턴스에 대한 인스턴스 메타데이터 옵션 수정 섹션을 참조하세요.

Auto Scaling 그룹에서 시작하는 새 인스턴스: Auto Scaling 그룹에서 시작하는 모든 새 인스턴스에 대해 IMDSv2 사용을 요구하려면, Auto Scaling 그룹에서 시작 템플릿 또는 시작 구성을 사용할 수 있습니다. 시작 템플릿을 생성하거나 시작 구성을 생성할 때 IMDSv2를 반드시 사용하도록 MetadataOptions 파라미터를 구성해야 합니다. Auto Scaling 그룹은 새 시작 템플릿 또는 시작 구성을 사용하여 새 인스턴스를 시작하지만 기존 인스턴스는 영향을 받지 않습니다.

Auto Scaling 그룹의 기존 인스턴스: ModifyInstanceMetadataOptions API를 사용하여 기존 인스턴스에서 IMDSv2를 사용하도록 요구하거나, 인스턴스를 종료하면 Auto Scaling 그룹이 새 시작 템플릿 또는 시작 구성에 정의된 인스턴스 메타데이터 옵션 설정으로 새 대체 인스턴스를 시작합니다.

AMI

ImdsSupport 파라미터를 v2.0으로 설정한 AMI는 기본적으로 IMDSv2를 요구하는 인스턴스를 시작합니다. Amazon Linux 2023은 ImdsSupport = v2.0으로 구성되어 있습니다.

새 AMI: 새 AMI를 생성할 때 register-image CLI 명령어를 사용하여 ImdsSupport 파라미터를 v2.0으로 설정합니다.

기존 AMI: 기존 AMI를 수정할 때 modify-image-attribute CLI 명령어를 사용하여 ImdsSupport 파라미터를 v2.0으로 설정합니다.

자세한 내용은 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 사용 설명서서비스 제어 정책을 참조하세요.

선언적 정책

선언적 정책(AWS Organizations의 기능)을 사용하여 조직 전체에서 IMDSv2를 기본 IMDS 버전으로 중앙 집중식 설정 및 강제할 수 있습니다. 예제 정책은 AWS Organizations 사용 설명서지원되는 선언적 정책 섹션에 있는 인스턴스 메타데이터 기본값 탭을 참조하세요.

1단계: IMDSv2=optional 인스턴스 식별 및 IMDSv1 사용 감사

IMDSv2 마이그레이션 범위를 평가하려면 IMDSv1 또는 IMDSv2를 모두 허용하도록 구성된 인스턴스를 식별하고 IMDSv1 호출을 감사하세요.

  1. IMDSv1 또는 IMDSv2를 모두 허용하도록 구성된 인스턴스를 식별합니다.

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

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

    3. IMDSv1 또는 IMDSv2를 허용하도록 구성된 인스턴스만 보려면 IMDSv2 = optional 필터를 추가합니다.

    4. 또는 모든 인스턴스의 IMDSv2가 optional인지 required인지 확인하려면 기본 설정 창(톱니바퀴 아이콘)을 열고 IMDSv2를 켠 다음 확인을 선택합니다. 이렇게 하면 Instances 테이블에 IMDSv2 열이 추가됩니다.

    AWS CLI

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

    aws ec2 describe-instances --filters "Name=metadata-options.http-tokens,Values=optional" --query "Reservations[*].Instances[*].[InstanceId]" --output text
  2. 각 인스턴스의 IMDSv1 호출 감사:

    CloudWatch 지표 MetadataNoToken을 사용하세요. 이 지표는 인스턴스에서 IMDS에 대한 IMDSv1 호출 수를 표시합니다. 자세한 내용은 인스턴스 지표를 참조하세요.

  3. 인스턴스에서 IMDSv1을 호출하는 소프트웨어를 식별합니다.

    오픈 소스 IMDS 패킷 분석기를 사용하여 인스턴스의 부팅 단계와 런타임 작업 중 IMDSv1 호출을 식별하고 기록하세요. 이 정보를 사용하여 IMDSv2만 사용하도록 인스턴스를 준비하기 위해 업데이트해야 할 소프트웨어를 확인하세요. 명령줄에서 IMDS 패킷 분석기를 실행하거나 서비스로 설치할 수 있습니다.

2단계: 소프트웨어를 IMDSv2로 업데이트

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

3단계: 인스턴스에서 IMDSv2 요구

MetadataNoToken 지표를 통해 IMDSv1 호출이 0임을 확인한 후, 기존 인스턴스를 IMDSv2 요구하도록 구성하세요. 또한 모든 새 인스턴스를 IMDSv2 요구하도록 구성하세요. 즉, 모든 기존 및 새 인스턴스에서 IMDSv1을 비활성화하세요.

  1. 기존 인스턴스를 IMDSv2 요구하도록 구성합니다.

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

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

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

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

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

    6. 저장을 선택합니다.

    AWS CLI

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

    참고

    실행 중인 인스턴스에서 이 설정을 수정할 수 있으며, 인스턴스 재시작 없이 즉시 적용됩니다.

    자세한 내용은 IMDSv2의 사용 요구 섹션을 참조하세요.

  2. IMDSv1 비활성화 후 문제를 모니터링합니다.

    1. CloudWatch 지표 MetadataNoTokenRejected를 사용하여 IMDSv1 호출이 시도되고 거부된 횟수를 추적합니다.

    2. MetadataNoTokenRejected 지표가 소프트웨어 문제가 발생하는 인스턴스에서 IMDSv1 호출을 기록하면 해당 소프트웨어를 IMDSv2로 업데이트해야 함을 나타냅니다.

  3. 새 인스턴스를 IMDSv2를 요구하도록 구성합니다.​

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

    2. 인스턴스 시작 단계를 따릅니다.

    3. 고급 세부 정보를 확장하고 메타데이터 버전에서 V2 전용(토큰 필요)을 선택합니다.

    4. Summary(요약) 패널에서 인스턴스 구성을 검토한 다음 Launch instance(인스턴스 시작)를 선택합니다.

      자세한 내용은 시작 시 인스턴스 구성 섹션을 참조하세요.

    AWS CLI

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

4단계: IMDSv2=required를 기본값으로 설정

계정 또는 조직 수준에서 IMDSv2=required를 기본 구성으로 설정할 수 있습니다. 이렇게 하면 모든 새로 시작된 인스턴스가 자동으로 IMDSv2를 요구하도록 구성됩니다.

  1. 계정 수준 기본값을 설정합니다.

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

    2. EC2 대시보드의 계정 속성에서 데이터 보호 및 보안을 선택합니다.

    3. IMDS 기본값에서 관리를 선택합니다.

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

    5. 메타데이터 버전에서 V2 전용(토큰 필요)을 선택합니다.

    6. 업데이트를 선택합니다.

    AWS CLI

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

    자세한 내용은 IMDSv2를 계정 기본값으로 설정 섹션을 참조하세요.

  2. 또는 선언적 정책을 사용하여 조직 수준 기본값을 설정합니다.

    선언적 정책을 사용하여 조직 기본값으로 IMDSv2를 required로 설정하세요. 예제 정책은 AWS Organizations 사용 설명서지원되는 선언적 정책 섹션에 있는 인스턴스 메타데이터 기본값 탭을 참조하세요.

5단계: 인스턴스에서 IMDSv2 요구를 강제합니다.

다음 IAM 또는 SCP 조건 키를 사용하여 IMDSv2 사용을 강제하세요.

  • ec2:MetadataHttpTokens

  • ec2:MetadataHttpPutResponseHopLimit

  • ec2:MetadataHttpEndpoint

이 조건 키들은 RunInstancesModifyInstanceMetadataOptions API와 해당 CLI의 사용을 제어합니다. 정책이 생성되고 API 호출의 파라미터가 조건 키를 사용하는 정책에 지정된 상태와 일치하지 않으면 API 또는 CLI 호출이 UnauthorizedOperation 응답과 함께 실패합니다.

IAM 정책에 대한 예시는 인스턴스 메타데이터 작업 섹션을 참조하세요.