Instance Metadata Service 버전 2로 전환하기

Instance Metadata Service 버전 2로 전환하기 (Transition to using Instance Metadata Service Version 2)

인스턴스가 IMDSv2(Instance Metadata Service 버전 2) 호출만 수락하도록 구성하려면 다음 도구와 전환 경로를 사용하는 것을 권장해요.

주제 (Topics)

  • IMDSv2로 전환하기 위한 도구
  • 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 Packet Analyzer – IMDS Packet Analyzer는 인스턴스의 부팅 단계와 런타임 작업 중에 IMDSv1 호출을 식별하고 기록하는 오픈소스 도구예요. 이 로그를 분석하면 인스턴스에서 IMDSv1 호출을 하는 소프트웨어를 정확히 식별하고, 인스턴스가 IMDSv2만 사용하도록 업데이트해야 할 부분을 결정할 수 있어요. IMDS Packet Analyzer를 명령줄에서 실행하거나 서비스로 설치할 수 있어요. 자세한 내용은 GitHub의 'AWS ImdsPacketAnalyzer'를 참고하세요.
  • CloudWatch – CloudWatch는 인스턴스 모니터링용 지표 두 개를 제공해요.
    • MetadataNoToken – IMDSv2는 토큰 기반 세션을 사용하는 반면 IMDSv1은 토큰을 사용하지 않아요. MetadataNoToken 지표는 IMDSv1을 사용하는 IMDS(Instance Metadata Service) 호출 수를 추적해요. 이 지표를 0으로 추적하면 모든 소프트웨어가 IMDSv2를 사용하도록 업그레이드되었는지, 그 시점을 결정할 수 있어요.
    • MetadataNoTokenRejected – IMDSv1을 비활성화한 뒤 MetadataNoTokenRejected 지표로 IMDSv1 호출이 시도되고 거부된 횟수를 추적할 수 있어요. 이 지표를 추적하면 소프트웨어를 IMDSv2를 사용하도록 업데이트해야 하는지 확인할 수 있어요.
    • 각 EC2 인스턴스에 대해 이 지표는 상호 배타적이에요. IMDSv1이 활성화되어 있으면(httpTokens = optional) MetadataNoToken만 발생하고, IMDSv1이 비활성화되어 있으면(httpTokens = required) MetadataNoTokenRejected만 발생해요. 이 지표를 언제 사용할지는 'IMDSv2를 요구하도록 권장되는 경로'를 참고하세요. 자세한 내용은 '인스턴스 지표'를 참고하세요.
  • Launch APIs (시작 API) – 새 인스턴스: RunInstances API를 사용해 IMDSv2 사용을 요구하는 새 인스턴스를 시작하세요. 자세한 내용은 '새 인스턴스의 인스턴스 메타데이터 옵션 구성하기'를 참고하세요. 기존 인스턴스: ModifyInstanceMetadataOptions API를 사용해 기존 인스턴스에서 IMDSv2 사용을 요구하세요. 자세한 내용은 '기존 인스턴스의 인스턴스 메타데이터 옵션 수정하기'를 참고하세요. Auto Scaling 그룹이 시작하는 모든 새 인스턴스에서 IMDSv2 사용을 요구하려면 Auto Scaling 그룹이 시작 템플릿이나 시작 구성을 사용할 수 있어요. 시작 템플릿을 만들거나 시작 구성을 만들 때 MetadataOptions 매개변수를 구성해 IMDSv2 사용을 요구해야 해요. Auto Scaling 그룹은 새 시작 템플릿이나 시작 구성을 사용해 새 인스턴스를 시작하지만 기존 인스턴스에는 영향을 주지 않아요. Auto Scaling 그룹의 기존 인스턴스: ModifyInstanceMetadataOptions API를 사용해 기존 인스턴스에서 IMDSv2 사용을 요구하거나, 인스턴스를 종료하면 Auto Scaling 그룹이 새 시작 템플릿이나 시작 구성에 정의된 인스턴스 메타데이터 옵션 설정으로 새 대체 인스턴스를 시작해요.
  • AMIs – ImdsSupport 매개변수가 v2.0으로 설정된 AMI는 기본적으로 IMDSv2를 요구하는 인스턴스를 시작해요. Amazon Linux 2023은 ImdsSupport = v2.0으로 구성돼 있어요. 새 AMI: 새 AMI를 만들 때 ImdsSupport 매개변수를 v2.0으로 설정하려면 register-image CLI 명령을 사용하세요. 기존 AMI: 기존 AMI를 수정할 때 ImdsSupport 매개변수를 v2.0으로 설정하려면 modify-image-attribute CLI 명령을 사용하세요. 자세한 내용은 'AMI 구성하기'를 참고하세요.
  • 계정 수준 제어 (Account-level controls) – 계정 수준에서 모든 인스턴스 메타데이터 옵션의 기본값을 구성할 수 있어요. 기본값은 인스턴스를 시작할 때 자동으로 적용돼요. 자세한 내용은 '계정의 기본값으로 IMDSv2 설정하기'를 참고하세요. 또한 계정 수준에서 IMDSv2 사용을 강제할 수 있어요. IMDSv2 강제가 활성화되면:
    • 새 인스턴스: IMDSv1이 활성화되도록 시작하도록 구성된 인스턴스는 시작에 실패해요.
    • IMDSv1이 비활성화된 기존 인스턴스: 기존 인스턴스에서 IMDSv1을 활성화하려는 시도가 차단돼요.
    • IMDSv1이 활성화된 기존 인스턴스: 이미 IMDSv1이 활성화된 기존 인스턴스는 영향을 받지 않아요.
    • 자세한 내용은 '계정 수준에서 IMDSv2 강제하기'를 참고하세요.
  • IAM 정책 및 SCP – IAM 정책이나 AWS Organizations 서비스 제어 정책(SCP)으로 사용자를 다음과 같이 제어할 수 있어요.
    • 인스턴스가 IMDSv2를 사용하도록 구성되지 않으면 RunInstances API로 인스턴스를 시작할 수 없다.
    • ModifyInstanceMetadataOptions API로 기존 인스턴스를 수정해 IMDSv1을 다시 활성화할 수 없다.
    • IAM 정책이나 SCP에는 다음 IAM 조건 키가 포함되어야 해요.
      • ec2:MetadataHttpEndpoint
      • ec2:MetadataHttpPutResponseHopLimit
      • ec2:MetadataHttpTokens
    • API나 CLI 호출의 매개변수가 조건 키가 포함된 정책에 지정된 상태와 일치하지 않으면 API/CLI 호출이 UnauthorizedOperation 응답으로 실패해요.
    • 또한 IMDSv1에서 IMDSv2로의 변경을 강제하는 추가 보호 계층을 선택할 수 있어요. EC2 Role 자격 증명을 통해 호출되는 API에 대한 액세스 관리 계층에서 IAM 정책이나 SCP에 조건 키를 사용할 수 있어요. 구체적으로 IAM 정책에서 ec2:RoleDelivery 조건 키를 값 2.0으로 사용하면, IMDSv1에서 얻은 EC2 Role 자격 증명으로 만든 API 호출은 UnauthorizedOperation 응답을 받아요. SCP로 조건을 요구하면 더 광범위하게 같은 효과를 얻을 수 있어요. 이렇게 하면 IMDSv1을 통해 전달된 자격 증명은 지정된 조건과 일치하지 않는 모든 API 호출이 UnauthorizedOperation 오류를 받으므로 실제로 API를 호출하는 데 사용될 수 없어요. 예시 IAM 정책은 '인스턴스 메타데이터 작업하기'를 참고하세요. SCP에 대한 자세한 내용은 AWS Organizations User Guide의 '서비스 제어 정책'을 참고하세요.
  • 선언적 정책 (Declarative Policies) – AWS Organizations의 기능인 선언적 정책을 사용해 조직 전반에서 IMDS 계정 기본값(IMDSv2 강제 포함)을 중앙에서 설정하세요. 예시 정책은 AWS Organizations User Guide의 '지원되는 선언적 정책' 섹션의 Instance Metadata 탭을 참고하세요.

IMDSv2를 요구하도록 권장되는 경로

위 도구를 사용해 다음과 같은 IMDSv2 전환 경로를 권장해요.

  • 1단계: IMDSv2=optional인 인스턴스 식별하고 IMDSv1 사용량 감사하기
  • 2단계: 소프트웨어를 IMDSv2로 업데이트하기
  • 3단계: 인스턴스에서 IMDSv2 요구하기
  • 4단계: 기본값으로 IMDSv2=required 설정하기
  • 5단계: 인스턴스가 IMDSv2를 요구하도록 강제하기

1단계: IMDSv2=optional인 인스턴스 식별하고 IMDSv1 사용량 감사하기

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

  • IMDSv1 또는 IMDSv2를 허용하도록 구성된 인스턴스 식별 – Amazon EC2 콘솔: https://console.aws.amazon.com/ec2/ 을 열고 탐색 창에서 Instances를 선택하세요. IMDSv1이나 IMDSv2를 허용하도록 구성된 인스턴스만 보려면 IMDSv2 = optional 필터를 추가하세요. 또는 모든 인스턴스에 대해 IMDSv2가 optional인지 required인지 보려면 Preferences 창(기어 아이콘)을 열고 IMDSv2를 켠 뒤 Confirm을 선택하세요. 이렇게 하면 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
  • 각 인스턴스에서 IMDSv1 호출 감사 – CloudWatch 지표 MetadataNoToken을 사용하세요. 이 지표는 인스턴스의 IMDS에 대한 IMDSv1 호출 수를 보여줘요. 자세한 내용은 '인스턴스 지표'를 참고하세요.
  • 인스턴스에서 IMDSv1 호출을 하는 소프트웨어 식별 – 오픈소스 IMDS Packet Analyzer를 사용해 인스턴스의 부팅 단계와 런타임 작업 중에 IMDSv1 호출을 식별하고 기록하세요. 이 정보를 사용해 인스턴스가 IMDSv2만 사용하도록 준비하기 위해 업데이트할 소프트웨어를 식별하세요. IMDS Packet Analyzer를 명령줄에서 실행하거나 서비스로 설치할 수 있어요.

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

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

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

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

  • 기존 인스턴스가 IMDSv2를 요구하도록 구성 – Amazon EC2 콘솔: https://console.aws.amazon.com/ec2/ 을 열고 탐색 창에서 Instances를 선택한 뒤 인스턴스를 선택하세요. Actions, Instance settings, Modify instance metadata options를 선택하세요. IMDSv2에서 Required를 선택한 뒤 Save를 선택하세요. AWS CLI: modify-instance-metadata-options CLI 명령을 사용해 IMDSv2만 사용되도록 지정하세요.

참고 실행 중인 인스턴스에서 이 설정을 수정할 수 있어요. 변경은 인스턴스 재시작 없이 즉시 적용돼요. 자세한 내용은 'IMDSv2 사용 요구하기'를 참고하세요.

  • IMDSv1 비활성화 후 문제 모니터링 – MetadataNoTokenRejected CloudWatch 지표로 IMDSv1 호출이 시도되고 거부된 횟수를 추적하세요. MetadataNoTokenRejected 지표가 소프트웨어 문제를 겪고 있는 인스턴스에서 IMDSv1 호출을 기록한다면 그 소프트웨어를 IMDSv2를 사용하도록 업데이트해야 함을 나타내요.
  • 새 인스턴스가 IMDSv2를 요구하도록 구성 – Amazon EC2 콘솔: https://console.aws.amazon.com/ec2/ 을 열고 인스턴스를 시작하는 단계를 따르세요. Advanced details를 펼치고 Metadata version에서 **V2 only (token required)**을 선택한 뒤 Summary 패널에서 인스턴스 구성을 검토하고 Launch instance를 선택하세요. 자세한 내용은 '시작 시 인스턴스 구성하기'를 참고하세요. AWS CLI: run-instances 명령을 사용하고 IMDSv2가 요구된다고 지정하세요.

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

계정 수준이나 조직 수준에서 기본 구성으로 IMDSv2=required를 설정할 수 있어요. 이렇게 하면 새로 시작되는 모든 인스턴스가 자동으로 IMDSv2를 요구하도록 구성된다는 것을 보장해요.

  • 계정 수준 기본값 설정 – Amazon EC2 콘솔: https://console.aws.amazon.com/ec2/ 을 열고 탐색 창에서 Dashboard를 선택하세요. Account attributes 카드의 Settings 아래에서 Data protection and security를 선택하세요. IMDS defaults 아래에서 Manage를 선택하세요. Instance metadata service에서 Enabled를, Metadata version에서 **V2 only (token required)**를 선택한 뒤 Update를 선택하세요. AWS CLI: modify-instance-metadata-defaults CLI 명령을 사용하고 --http-tokens required와 --http-put-response-hop-limit 2를 지정하세요. 자세한 내용은 '계정의 기본값으로 IMDSv2 설정하기'를 참고하세요.
  • 또는 선언적 정책으로 조직 수준 기본값 설정 – 선언적 정책을 사용해 조직 기본값을 IMDSv2=required로 설정하세요. 예시 정책은 AWS Organizations User Guide의 '지원되는 선언적 정책' 섹션의 Instance Metadata 탭을 참고하세요.

5단계: 인스턴스가 IMDSv2를 요구하도록 강제하기

어떤 인스턴스에서도 IMDSv1 의존성이 없음을 확인한 뒤 모든 새 인스턴스에서 IMDSv2를 강제하는 것을 권장해요. IMDSv2를 강제하는 다음 옵션 중 하나를 사용하세요.

  • 계정 속성으로 IMDSv2 강제 – 각 AWS 리전의 계정 수준에서 IMDSv2 사용을 강제할 수 있어요. 강제되면 인스턴스가 IMDSv2를 요구하도록 구성된 경우에만 시작할 수 있어요. 이 강제는 인스턴스나 AMI가 어떻게 구성되었는지와 관계없이 적용돼요. 자세한 내용은 '계정 수준에서 IMDSv2 강제하기'를 참고하세요. 이 설정을 조직 수준에서 적용하려면 선언적 정책을 설정하세요. 예시 정책은 AWS Organizations User Guide의 '지원되는 선언적 정책' 섹션의 Instance Metadata 탭을 참고하세요. 강제가 되돌려지는 것을 방지하려면 IAM 정책을 사용해 ModifyInstanceMetadataDefaults API에 대한 액세스를 차단해야 해요. 자세한 내용은 'IAM 정책 사용하기'를 참고하세요.

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

경고 IMDSv2 강제가 활성화되고 httpTokens가 시작 시 인스턴스 구성, 계정 설정, AMI 구성 중 어디에서도 required로 설정되지 않으면 인스턴스 시작이 실패해요. 문제 해결 정보는 'IMDSv1이 활성화된 인스턴스 시작 실패'를 참고하세요.

  • 또는 다음 IAM/SCP 조건 키로 IMDSv2 강제 –
    • ec2:MetadataHttpTokens
    • ec2:MetadataHttpPutResponseHopLimit
    • ec2:MetadataHttpEndpoint
    • 이 조건 키들은 RunInstances와 ModifyInstanceMetadataOptions API 및 해당 CLI의 사용을 제어해요. 정책이 생성되고 API 호출의 매개변수가 조건 키를 사용해 정책에 지정된 상태와 일치하지 않으면 API/CLI 호출이 UnauthorizedOperation 응답으로 실패해요. 예시 IAM 정책은 '인스턴스 메타데이터 작업하기'를 참고하세요.

더 알아보기 (Learn more)