새 인스턴스에 대한 인스턴스 메타데이터 옵션 구성
새 인스턴스에서 다음과 같은 인스턴스 메타데이터 옵션을 구성할 수 있습니다.
다음 방법을 사용하여 새 인스턴스에서 IMDSv2 사용을 요구할 수 있습니다.
IMDSv2를 계정 기본값으로 설정
각 AWS 리전의 계정 수준에서 인스턴스 메타데이터 서비스(IMDS)의 기본 버전을 설정할 수 있습니다. 즉, 새 인스턴스가 시작되면 인스턴스 메타데이터 버전이 자동으로 계정 수준 기본값으로 설정됩니다. 하지만 시작 시 또는 시작한 후에 값을 수동으로 재정의할 수 있습니다. 계정 수준 설정 및 수동 재정의가 인스턴스에 미치는 영향에 대한 자세한 내용은 인스턴스 메타데이터 옵션의 우선순위 섹션을 참조하세요.
계정 수준 기본값을 설정해도 기존 인스턴스는 재설정되지 않습니다. 예를 들어, 계정 수준 기본값을 IMDSv2로 설정하는 경우 IMDSv1로 설정된 기존 인스턴스는 영향을 받지 않습니다. 기존 인스턴스의 값을 변경하려면 인스턴스 자체의 값을 수동으로 변경해야 합니다.
계정의 모든 새 인스턴스가 필요한 IMDSv2로 시작되도록(IMDSv1은 비활성화됨) 인스턴스 메타데이터 버전의 계정 기본값을 IMDSv2로 설정할 수 있습니다. 이 계정 기본값을 사용하면 인스턴스를 시작할 때 인스턴스의 기본값은 다음과 같습니다.
계정 기본값을 IMDSv2로 설정하기 전에 인스턴스가 IMDSv1에 종속되지 않았는지 확인합니다. 자세한 내용은 IMDSv2를 요구하는 권장 경로 단원을 참조하십시오.
- Console
-
IMDSv2를 지정된 리전의 계정 기본값으로 설정하는 방법
https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.
-
AWS 리전을(를) 변경하려면 페이지의 오른쪽 상단 모서리에 있는 리전 선택기를 사용합니다.
-
탐색 창에서 EC2 대시보드를 선택합니다.
-
계정 속성에서 데이터 보호 및 보안을 선택합니다.
-
IMDS 기본값 옆에서 관리를 선택합니다.
-
IMDS 기본값 관리 페이지에서 다음을 수행합니다.
-
인스턴스 메타데이터 서비스에서 활성화됨을 선택합니다.
-
메타데이터 버전(Metadata version)에 V2만 해당(토큰 필요)(V2 only (token required))를 선택합니다.
-
메타데이터 응답 홉 제한에서 인스턴스가 컨테이너를 호스팅하는 경우 2를 지정합니다. 그렇지 않으면 기본 설정 없음을 선택합니다. 기본 설정이 지정되지 않은 경우 AMI에 IMDSv2가 필요하면 시작 시 기본값은 2이고, 그렇지 않으면 기본값은 1입니다.
-
업데이트를 선택합니다.
- AWS CLI
-
IMDSv2를 지정된 리전의 계정 기본값으로 설정하는 방법
modify-instance-metadata-defaults 명령을 사용하고 IMDS 계정 수준 설정을 수정할 리전을 지정합니다. 인스턴스가 컨테이너를 호스팅할 경우 --http-tokens
(required
로 설정됨) 및 --http-put-response-hop-limit
(2
로 설정됨)를 포함합니다. 그렇지 않으면 기본 설정 없음을 표시하도록 -1
을 지정합니다. -1
(기본 설정 없음)이 지정된 경우 AMI에 IMDSv2가 필요하면 시작 시 기본값은 2
이고, 그렇지 않으면 1
입니다.
aws ec2 modify-instance-metadata-defaults \
--region us-east-1
\
--http-tokens required \
--http-put-response-hop-limit 2
예상 결과
{
"Return": true
}
지정된 리전의 인스턴스 메타데이터 옵션에 대한 기본 계정 설정을 보는 방법
get-instance-metadata-defaults 명령을 사용하고 리전을 지정합니다.
aws ec2 get-instance-metadata-defaults --region us-east-1
출력 예시
{
"AccountLevel": {
"HttpTokens": "required",
"HttpPutResponseHopLimit": 2
}
}
IMDSv2를 모든 리전의 계정 기본값으로 설정하려면 다음을 수행하세요.
modify-instance-metadata-defaults 명령을 사용하여 모든 리전의 IMDS 계정 수준 설정을 수정합니다. 인스턴스가 컨테이너를 호스팅할 경우 --http-tokens
(required
로 설정됨) 및 --http-put-response-hop-limit
(2
로 설정됨)를 포함합니다. 그렇지 않으면 기본 설정 없음을 표시하도록 -1
을 지정합니다. -1
(기본 설정 없음)이 지정된 경우 AMI에 IMDSv2가 필요하면 시작 시 기본값은 2
이고, 그렇지 않으면 1
입니다.
echo -e "Region \t Modified" ; \
echo -e "-------------- \t ---------" ; \
for region in $(
aws ec2 describe-regions \
--region us-east-1 \
--query "Regions[*].[RegionName]" \
--output text
);
do (output=$(
aws ec2 modify-instance-metadata-defaults \
--region $region \
--http-tokens required \
--http-put-response-hop-limit 2
\
--output text)
echo -e "$region \t $output"
);
done
예상 결과
Region Modified
-------------- ---------
ap-south-1 True
eu-north-1 True
eu-west-3 True
...
모든 리전의 인스턴스 메타데이터 옵션에 대한 기본 계정 설정을 보려면 다음을 수행하세요.
get-instance-metadata-defaults 명령을 사용합니다.
echo -e "Region \t Level Hops HttpTokens" ; \
echo -e "-------------- \t ------------ ---- ----------" ; \
for region in $(
aws ec2 describe-regions \
--region us-east-1 \
--query "Regions[*].[RegionName]" \
--output text
);
do (output=$(
aws ec2 get-instance-metadata-defaults \
--region $region \
--output text)
echo -e "$region \t $output"
);
done
예상 결과
Region Level Hops HttpTokens
-------------- ------------ ---- ----------
ap-south-1 ACCOUNTLEVEL 2 required
eu-north-1 ACCOUNTLEVEL 2 required
eu-west-3 ACCOUNTLEVEL 2 required
...
- PowerShell
-
IMDSv2를 지정된 리전의 계정 기본값으로 설정하는 방법
Edit-EC2InstanceMetadataDefault 명령을 사용하고 IMDS 계정 수준 설정을 수정할 리전을 지정합니다. 인스턴스가 컨테이너를 호스팅할 경우 -HttpToken
(required
로 설정됨) 및 -HttpPutResponseHopLimit
(2
로 설정됨)를 포함합니다. 그렇지 않으면 기본 설정 없음을 표시하도록 -1
을 지정합니다. -1
(기본 설정 없음)이 지정된 경우 AMI에 IMDSv2가 필요하면 시작 시 기본값은 2
이고, 그렇지 않으면 1
입니다.
Edit-EC2InstanceMetadataDefault `
-Region us-east-1
`
-HttpToken required `
-HttpPutResponseHopLimit 2
예상 결과
True
지정된 리전의 인스턴스 메타데이터 옵션에 대한 기본 계정 설정을 보는 방법
Get-EC2InstanceMetadataDefault 명령을 사용하고 리전을 지정합니다.
Get-EC2InstanceMetadataDefault -Region us-east-1
| Format-List
출력 예시
HttpEndpoint :
HttpPutResponseHopLimit : 2
HttpTokens : required
InstanceMetadataTags :
IMDSv2를 모든 리전의 계정 기본값으로 설정하려면 다음을 수행하세요.
Edit-EC2InstanceMetadataDefault Cmdlet을 사용하여 모든 리전의 IMDS 계정 수준 설정을 수정합니다. 인스턴스가 컨테이너를 호스팅할 경우 -HttpToken
(required
로 설정됨) 및 -HttpPutResponseHopLimit
(2
로 설정됨)를 포함합니다. 그렇지 않으면 기본 설정 없음을 표시하도록 -1
을 지정합니다. -1
(기본 설정 없음)이 지정된 경우 AMI에 IMDSv2가 필요하면 시작 시 기본값은 2
이고, 그렇지 않으면 1
입니다.
(Get-EC2Region).RegionName | `
ForEach-Object {
[PSCustomObject]@{
Region = $_
Modified = (Edit-EC2InstanceMetadataDefault `
-Region $_ `
-HttpToken required `
-HttpPutResponseHopLimit 2
)
}
} | `
Format-Table Region, Modified -AutoSize
예상 결과
Region Modified
------ --------
ap-south-1 True
eu-north-1 True
eu-west-3 True
...
모든 리전의 인스턴스 메타데이터 옵션에 대한 기본 계정 설정을 보려면 다음을 수행하세요.
Get-EC2InstanceMetadataDefault Cmdlet을 사용합니다.
(Get-EC2Region).RegionName | `
ForEach-Object {
[PSCustomObject]@{
Region = $_
HttpPutResponseHopLimit = (Get-EC2InstanceMetadataDefault -Region $_).HttpPutResponseHopLimit
HttpTokens = (Get-EC2InstanceMetadataDefault -Region $_).HttpTokens
}
} | `
Format-Table -AutoSize
출력 예시
Region HttpPutResponseHopLimit HttpTokens
------ ----------------------- ----------
ap-south-1 2 required
eu-north-1 2 required
eu-west-3 2 required
...
인스턴스를 시작할 때 다음 필드를 구성하여 IMDSv2를 사용하도록 인스턴스를 구성할 수 있습니다.
IMDSv2를 사용하도록 지정하면 메타데이터 액세스 가능을 활성화됨(콘솔)로 설정하거나 HttpEndpoint
를 enabled
(AWS CLI)로 설정하여 인스턴스 메타데이터 서비스(IMDS) 엔드포인트도 활성화해야 합니다.
컨테이너 환경에서는 IMDSv2가 필요한 경우 홉 제한을 2
로 설정하는 것이 좋습니다. 자세한 내용은 인스턴스 메타데이터 액세스 고려 사항 단원을 참조하십시오.
- Console
-
새 인스턴스에서 IMDSv2를 사용해야 하도록 설정하려면
- AWS CLI
-
새 인스턴스에서 IMDSv2를 사용해야 하도록 설정하려면
다음 run-instances 예에서는 c6i.large
를 --metadata-options
로 설정하여 HttpTokens=required
인스턴스를 시작합니다. 또한 HttpTokens
의 값을 지정할 때 HttpEndpoint
를 enabled
로 설정해야 합니다. 메타데이터 검색 요청에 대해 보안 토큰 헤더가 required
로 설정되어 있으므로 인스턴스 메타데이터를 요청할 때 인스턴스가 IMDSv2를 사용해야 합니다.
컨테이너 환경에서는 IMDSv2가 필요한 경우 HttpPutResponseHopLimit=2
를 사용하여 홉 제한을 2
로 설정하는 것이 좋습니다.
aws ec2 run-instances \
--image-id ami-0abcdef1234567890
\
--instance-type c6i.large
\
...
--metadata-options "HttpEndpoint=enabled,HttpTokens=required,HttpPutResponseHopLimit=2"
- PowerShell
-
새 인스턴스에서 IMDSv2를 사용해야 하도록 설정하려면
다음 New-EC2Instance Cmdlet 예에서는 MetadataOptions_HttpEndpoint
를 enabled
로 설정하고 MetadataOptions_HttpTokens
파라미터를 required
로 설정하여 c6i.large
인스턴스를 시작합니다. 또한 HttpTokens
의 값을 지정할 때 HttpEndpoint
를 enabled
로 설정해야 합니다. 메타데이터 검색 요청에 대해 보안 토큰 헤더가 required
로 설정되어 있으므로 인스턴스 메타데이터를 요청할 때 인스턴스가 IMDSv2를 사용해야 합니다.
New-EC2Instance `
-ImageId ami-0abcdef1234567890
`
-InstanceType c6i.large
`
-MetadataOptions_HttpEndpoint enabled `
-MetadataOptions_HttpTokens required
- AWS CloudFormation
-
AWS CloudFormation을 사용하여 인스턴스에 대한 메타데이터 옵션을 지정하려면 AWS CloudFormation 사용 설명서의 AWS::EC2::LaunchTemplate MetadataOptions 속성을 참조하세요.
새 AMI를 등록하거나 기존 AMI를 수정할 때 imds-support
파라미터를 v2.0
로 설정할 수 있습니다. 이 AMI에서 시작된 인스턴스의 Metadata version(메타데이터 버전)은 V2 only (token required)(V2 전용(토큰 필요))(콘솔)로 설정되거나 HttpTokens
는 required
(AWS CLI)로 설정됩니다. 이러한 설정을 사용하면 인스턴스에서 인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 지정됩니다.
imds-support
를 v2.0
으로 설정하면 이 AMI에서 시작된 인스턴스의 Metadata response hop limit(메타데이터 응답 홉 제한)(콘솔) 또는 http-put-response-hop-limit
(AWS CLI)도 2로 설정됩니다.
AMI 소프트웨어가 IMDSv2를 지원하지 않는 한 이 파라미터를 사용하지 마세요. 값을 v2.0
으로 설정한 후에는 이를 실행 취소할 수 없습니다. AMI를 “재설정”하는 유일한 방법은 기본 스냅샷에 새 AMI를 생성하는 것입니다.
IMDSv2를 위해 새 AMI 구성
다음 방법 중 하나를 사용하여 IMDsv2에 대한 새 AMI를 구성합니다.
- AWS CLI
-
다음 register-image 예제는 EBS 루트 볼륨의 지정된 스냅샷을 디바이스 /dev/xvda
로 사용하여 AMI를 등록합니다. 이 AMI에서 시작된 인스턴스가 인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 imds-support
파라미터를 v2.0
으로 지정합니다.
aws ec2 register-image \
--name my-image
\
--root-device-name /dev/xvda \
--block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0123456789example
} \
--architecture x86_64 \
--imds-support v2.0
- PowerShell
-
다음 Register-EC2Image Cmdlet 예제는 EBS 루트 볼륨의 지정된 스냅샷을 디바이스 /dev/xvda
로 사용하여 AMI를 등록합니다. 이 AMI에서 시작된 인스턴스가 인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 ImdsSupport
파라미터를 v2.0
으로 지정합니다.
Register-EC2Image `
-Name 'my-image
' `
-RootDeviceName /dev/xvda `
-BlockDeviceMapping (
New-Object `
-TypeName Amazon.EC2.Model.BlockDeviceMapping `
-Property @{
DeviceName = '/dev/xvda';
EBS = (New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice -Property @{
SnapshotId = 'snap-0123456789example
'
VolumeType = 'gp3'
} )
} ) `
-Architecture X86_64 `
-ImdsSupport v2.0
IMDSv2를 위해 기존 AMI 구성
다음 방법 중 하나를 사용하여 IMDSv2용 기존 AMI를 구성합니다.
- AWS CLI
-
다음 modify-image-attribute 예제는 IMDSv2에 대해서만 기존 AMI를 수정합니다. 이 AMI에서 시작된 인스턴스가 인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 imds-support
파라미터를 v2.0
으로 지정합니다.
aws ec2 modify-image-attribute \
--image-id ami-0123456789example
\
--imds-support v2.0
- PowerShell
-
다음 Edit-EC2ImageAttribute Cmdlet 예제는 IMDSv2에 대해서만 기존 AMI를 수정합니다. 이 AMI에서 시작된 인스턴스가 인스턴스 메타데이터를 요청할 때 IMDSv2를 사용하도록 imds-support
파라미터를 v2.0
으로 지정합니다.
Edit-EC2ImageAttribute `
-ImageId ami-0abcdef1234567890
`
-ImdsSupport 'v2.0'
사용자가 새 인스턴스에서 IMDSv2를 사용하도록 지정하지 않는 경우 새 인스턴스를 시작하지 못하게 하는 IAM 정책을 생성할 수 있습니다.
IAM 정책을 사용하여 모든 새 인스턴스에서 IMDSv2를 사용해야 하도록 설정
사용자가 인스턴스 메타데이터 요청 시 IMDSv2를 사용해야 하는 인스턴스만 시작할 수 있도록 하려면 IMDSv2를 사용해야 한다는 조건을 충족한 후에만 인스턴스를 시작할 수 있도록 지정할 수 있습니다. IAM 정책 예제는 인스턴스 메타데이터 작업 섹션을 참조하세요.
IMDS에는 인스턴스에 IPv4(169.254.169.254
) 및 IPv6([fd00:ec2::254]
)이라는 두 개의 엔드포인트가 있습니다. IMDS를 활성화하면 IPv4 엔드포인트가 자동으로 활성화됩니다. IPv6 전용 서브넷으로 인스턴스를 시작하는 경우에도 IPv6 엔드포인트는 비활성화된 상태로 유지됩니다. IPv6 엔드포인트를 활성화하려면 명시적으로 활성화해야 합니다. IPv6 엔드포인트가 활성화되면 IPv4 엔드포인트는 활성화된 상태로 유지됩니다.
인스턴스 시작 시 또는 이후에 IPv6 엔드포인트를 활성화할 수 있습니다.
다음 방법 중 하나를 사용하여 IMDS IPv6 엔드포인트가 활성화된 상태로 인스턴스를 시작합니다.
- Console
-
인스턴스 시작 시 IMDS IPv6 엔드포인트를 활성화하는 방법
자세한 내용은 고급 세부 정보 단원을 참조하십시오.
- AWS CLI
-
인스턴스 시작 시 IMDS IPv6 엔드포인트를 활성화하는 방법
다음 run-instances 예제는 IMDS에 대해 활성화된 IPv6 엔드포인트로 c6i.large
인스턴스를 시작합니다. IPv6 엔드포인트를 활성화하려면 --metadata-options
파라미터에 대해 HttpProtocolIpv6=enabled
를 지정합니다. 또한 HttpProtocolIpv6
의 값을 지정할 때 HttpEndpoint
를 enabled
로 설정해야 합니다.
aws ec2 run-instances \
--image-id ami-0abcdef1234567890
\
--instance-type c6i.large
\
...
--metadata-options "HttpEndpoint=enabled,HttpProtocolIpv6=enabled"
- PowerShell
-
인스턴스 시작 시 IMDS IPv6 엔드포인트를 활성화하는 방법
다음 New-EC2Instance Cmdlet 예제는 IMDS에 대해 활성화된 IPv6 엔드포인트로 c6i.large
인스턴스를 시작합니다. IPv6 엔드포인트를 활성화하려면 MetadataOptions_HttpProtocolIpv6
를 enabled
로 지정합니다. 또한 MetadataOptions_HttpProtocolIpv6
의 값을 지정할 때 MetadataOptions_HttpEndpoint
를 enabled
로 설정해야 합니다.
New-EC2Instance `
-ImageId ami-0abcdef1234567890
`
-InstanceType c6i.large
`
-MetadataOptions_HttpEndpoint enabled `
-MetadataOptions_HttpProtocolIpv6 enabled
인스턴스를 시작할 때 IMDS를 비활성화하여 인스턴스 메타데이터에 대한 액세스를 끌 수 있습니다. 나중에 IMDS를 다시 활성화하여 액세스를 켤 수 있습니다. 자세한 내용은 인스턴스 메타데이터에 대한 액세스 활성화 단원을 참조하십시오.
시작 시 또는 시작한 후에 IMDS를 비활성할 수 있습니다. 시작 시 IMDS를 비활성화하면 다음 사항이 작동하지 않을 수 있습니다.
-
인스턴스에 대한 SSH 액세스 권한이 없을 수 있습니다. 인스턴스의 퍼블릭 SSH 키인 public-keys/0/openssh-key
는 일반적으로 키가 제공되고 EC2 인스턴스 메타데이터에서 액세스되기 때문에 액세스할 수 없습니다.
-
EC2 사용자 데이터는 사용할 수 없으며 인스턴스 시작 시 실행되지 않습니다. EC2 사용자 데이터는 IMDS에서 호스팅됩니다. IMDS를 비활성화하면 사용자 데이터에 대한 액세스가 사실상 꺼집니다.
이 기능을 사용하려면, 시작 후 IMDS를 다시 활성화할 수 있습니다.
- Console
-
시작 시 인스턴스 메타데이터에 대한 액세스 끄기
자세한 내용은 고급 세부 정보 단원을 참조하십시오.
- AWS CLI
-
시작 시 인스턴스 메타데이터에 대한 액세스 끄기
--metadata-options
를 HttpEndpoint=disabled
로 설정하여 인스턴스를 시작합니다.
aws ec2 run-instances \
--image-id ami-0abcdef1234567890
\
--instance-type c6i.large
\
...
--metadata-options "HttpEndpoint=disabled"
- PowerShell
-
시작 시 인스턴스 메타데이터에 대한 액세스 끄기
다음 New-EC2Instance Cmdlet 예에서는 MetadataOptions_HttpEndpoint
를 disabled
로 설정하여 인스턴스를 시작합니다.
New-EC2Instance `
-ImageId ami-0abcdef1234567890
`
-InstanceType c6i.large
`
-MetadataOptions_HttpEndpoint disabled
- AWS CloudFormation
-
AWS CloudFormation을 사용하여 인스턴스에 대한 메타데이터 옵션을 지정하려면 AWS CloudFormation 사용 설명서의 AWS::EC2::LaunchTemplate MetadataOptions 속성을 참조하세요.
기본적으로 인스턴스 태그는 인스턴스 메타데이터에서 액세스할 수 없습니다. 각 인스턴스에 대해 명시적으로 액세스를 허용해야 합니다. 액세스가 허용되면 인스턴스 태그 키는 특정 문자 제한을 준수해야 합니다. 그렇지 않으면 인스턴스 시작이 실패합니다. 자세한 내용은 인스턴스 메타데이터의 태그에 대한 액세스 허용 단원을 참조하십시오.