既存インスタンスのインスタンスメタデータオプションの変更
既存のインスタンスのインスタンスメタデータオプションを変更することが可能です。
また、既存のインスタンスでインスタンスメタデータオプションを変更することをユーザーに禁止する IAM ポリシーを作成することもできます。インスタンスメタデータオプションを変更できるユーザーをコントロールするには指定したロールを持つユーザー以外のすべてのユーザーに ModifyInstanceMetadataOptions API の使用を禁止するポリシーを指定できます。IAM ポリシーの例についてはインスタンスメタデータの使用を参照してください。
宣言ポリシーを使用してインスタンスメタデータオプションを設定した場合、アカウント内で直接変更することはできません。詳細については「AWS OrganizationsIAM ユーザーガイド」の「 マネージドポリシー」を参照してください。
IMDSv2 の使用を要求する
既存のインスタンスに対して、インスタンスメタデータのリクエスト時に IMDSv2 が使用されるようにするため、既存のインスタンスメタデータオプションを変更します。IMDSv2 が必須である場合、IMDSv1 は使用できません。
IMDSv2 の使用を要求する前に、インスタンスが IMDSv1 呼び出しを行っていないことを確認してください。MetadataNoToken CloudWatch メトリクスは IMDSv1 呼び出しを追跡します。あるインスタンスの MetadataNoToken で IMDSv1 の使用量がゼロと記録されている場合はそのインスタンスは IMDSv2 を要求できます。
- Console
-
既存インスタンスでの IMDSv2 の使用を義務付けるには
Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。
-
ナビゲーションペインで、[インスタンス] を選択してください。
-
インスタンスを選択してください。
-
[アクション]、[インスタンスの設定]、[インスタンスメタデータのオプションを変更] の順に選択してください。
-
[インスタンスメタデータオプションの変更] ダイアログボックスで、次の操作を行います。
-
[インスタンスメタデータサービス] で、[有効にする] を選択してください。
-
[IMDSv2] の場合は[必須] を選択してください。
-
[保存] を選択します。
- AWS CLI
-
既存インスタンスでの IMDSv2 の使用を義務付けるには
modify-instance-metadata-optionsCLI コマンドを使って、http-tokens パラメータを required に設定できます。http-tokens の値を指定する場合はhttp-endpoint も enabled に設定する必要があります。
aws ec2 modify-instance-metadata-options \
--instance-id i-1234567890abcdef0 \
--http-tokens required \
--http-endpoint enabled
- PowerShell
-
既存インスタンスでの IMDSv2 の使用を義務付けるには
Edit-EC2InstanceMetadataOption コマンドレットを使用して、HttpTokens パラメータを required に設定します。HttpTokens の値を指定する場合はHttpEndpoint も enabled に設定する必要があります。
(Edit-EC2InstanceMetadataOption `
-InstanceId i-1234567890abcdef0 `
-HttpTokens required `
-HttpEndpoint enabled).InstanceMetadataOptions
IMDSv1 の使用を再開します
インスタンスで IMDSv2 が必須となっている場合、IMDSv1 リクエストの使用は失敗します。IMDSv2 がオプションである場合、IMDSv2 と IMDSv1 の両方が機能します。このため、IMDSv1 を復元するには、次のいずれかの方法を使用して IMDSv2 をオプション (httpTokens = optional) として設定します。
httpTokensEnforced IMDS プロパティも、既存のインスタンスで IMDSv1 を有効化する試みを阻止します。リージョン内のアカウントに対して有効化されているときに httpTokens を optional に設定しようとすると、UnsupportedOperation 例外が発生します。詳細については、「トラブルシューティング」を参照してください。
IMDSv2 の強制適用が原因でインスタンスの起動が失敗する場合は、起動を正常に行うための 2 つのオプションがあります。
-
インスタンスを IMDSv2 のみとして起動する – インスタンスで実行されているソフトウェアが IMDSv2 のみを使用している (IMDSv1 に対する依存なし) 場合、インスタンスを IMDSv2 のみとして起動できます。これを実行するには、リージョン内のアカウントの起動パラメータまたはメタデータデフォルトのいずれかで httpTokens = required を設定することによって IMDSv2 のみに設定します。
-
強制適用を無効にする – ソフトウェアが依然として IMDSv1 に依存している場合は、リージョン内のアカウントで httpTokensEnforced を disabled に設定します。詳細については、「アカウントレベルで IMDSv2 を強制適用する」を参照してください。
- Console
-
インスタンスで IMDSv1 の使用を復元するには
Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。
-
ナビゲーションペインで、[インスタンス] を選択してください。
-
インスタンスを選択してください。
-
[アクション]、[インスタンスの設定]、[インスタンスメタデータのオプションを変更] の順に選択してください。
-
[インスタンスメタデータオプションの変更] ダイアログボックスで、次の操作を行います。
-
[インスタンスメタデータサービス] で、[有効にする] が選択されていることを確認します。
-
[IMDSv2] の場合は[オプション] を選択してください。
-
[保存] を選択します。
- AWS CLI
-
インスタンスで IMDSv1 の使用を復元するには
modify-instance-metadata-options CLI コマンドを、http-tokens を optional に設定して実行すると、インスタンスメタデータのリクエスト時に IMDSv1 の使用を復元できます。
aws ec2 modify-instance-metadata-options \
--instance-id i-1234567890abcdef0 \
--http-tokens optional \
--http-endpoint enabled
- PowerShell
-
インスタンスで IMDSv1 の使用を復元するには
HttpTokens を optional に設定した Edit-EC2InstanceMetadataOption コマンドレットを使用して、インスタンスメタデータのリクエスト時に IMDSv1 の使用を復元できます。
(Edit-EC2InstanceMetadataOption `
-InstanceId i-1234567890abcdef0 `
-HttpTokens optional `
-HttpEndpoint enabled).InstanceMetadataOptions
PUT レスポンスホップリミットを変更する
既存インスタンスについて、PUTリスポンスホップリミットの設定を変更することができます。
現在、PUT 応答ホップ制限の変更をサポートしているのはAWS CLI と AWS SDK のみです。
- AWS CLI
-
PUT レスポンスホップリミットを変更するには
modify-instance-metadata-options CLI コマンドを使って、http-put-response-hop-limit パラメータを必要なホップ数に設定できます。以下の例ではホップリミットが3に設定されています。http-put-response-hop-limit の値を指定する場合はhttp-endpoint を enabled に設定することも必要です。
aws ec2 modify-instance-metadata-options \
--instance-id i-1234567890abcdef0 \
--http-put-response-hop-limit 3 \
--http-endpoint enabled
- PowerShell
-
PUT レスポンスホップリミットを変更するには
Edit-EC2InstanceMetadataOption コマンドレットを使用して、HttpPutResponseHopLimit パラメータを必要なホップ数に設定します。以下の例ではホップリミットが3に設定されています。HttpPutResponseHopLimit の値を指定する場合はHttpEndpoint を enabled に設定することも必要です。
(Edit-EC2InstanceMetadataOption `
-InstanceId i-1234567890abcdef0 `
-HttpPutResponseHopLimit 3 `
-HttpEndpoint enabled).InstanceMetadataOptions
IMDS IPv4 および IPv6 エンドポイントを有効にする
IMDS のインスタンスにはIPv4 (169.254.169.254) と IPv6 ([fd00:ec2::254]) という 2 つのエンドポイントがあります。IMDS を有効にすると、IPv4 エンドポイントが自動的に有効になります。IPv6 専用サブネットに対してインスタンスを起動しても、その IPv6 エンドポイントは無効のままになります。IPv6 エンドポイントを有効にするには明示的に有効にする必要があります。IPv6 エンドポイントを有効にしても、IPv4 エンドポイントは有効なままになります。
IPv6 エンドポイントはインスタンス起動時またはその後に有効にできます。
現在、AWS CLI と AWS SDK のみがインスタンス起動後の IMDS IPv6 エンドポイントの有効化をサポートします。
- AWS CLI
-
インスタンスで IMDS IPv6 エンドポイントを有効にするには
modify-instance-metadata-optionsCLI コマンドを使って、http-protocol-ipv6 パラメータを enabled に設定できます。http-protocol-ipv6 の値を指定する場合はhttp-endpoint を enabled に設定することも必要です。
aws ec2 modify-instance-metadata-options \
--instance-id i-1234567890abcdef0 \
--http-protocol-ipv6 enabled \
--http-endpoint enabled
- PowerShell
-
インスタンスで IMDS IPv6 エンドポイントを有効にするには
Edit-EC2InstanceMetadataOption コマンドレットを使用して、HttpProtocolIpv6 パラメータを enabled に設定します。HttpProtocolIpv6 の値を指定する場合はHttpEndpoint を enabled に設定することも必要です。
(Edit-EC2InstanceMetadataOption `
-InstanceId i-1234567890abcdef0 `
-HttpProtocolIpv6 enabled `
-HttpEndpoint enabled).InstanceMetadataOptions
使用中の IMDS のバージョンに関係なく、IMDS の HTTP エンドポイントを無効にすることによりインスタンスメタデータへのアクセスをオフにすることができます。HTTP エンドポイントを無効化することにより、この変更はいつでも元に戻すことができます。
次のいずれかの方法を使用して、インスタンスのインスタンスメタデータへのアクセスを有効にします。
- Console
-
インスタンスメタデータへのアクセスを有効にするには
Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。
-
ナビゲーションペインで、[インスタンス] を選択してください。
-
インスタンスを選択してください。
-
[アクション]、[インスタンスの設定]、[インスタンスメタデータのオプションを変更] の順に選択してください。
-
[インスタンスメタデータオプションの変更] ダイアログボックスで、次の操作を行います。
-
[インスタンスメタデータサービス] で、[有効にする] を選択してください。
-
[保存] を選択します。
- AWS CLI
-
インスタンスメタデータへのアクセスを有効にするには
modify-instance-metadata-optionsCLI コマンドを使って、http-endpoint パラメータを enabled に設定できます。
aws ec2 modify-instance-metadata-options \
--instance-id i-1234567890abcdef0 \
--http-endpoint enabled
- PowerShell
-
インスタンスメタデータへのアクセスを有効にするには
Edit-EC2InstanceMetadataOption コマンドレットを使用して、HttpEndpoint パラメータを enabled に設定します。
(Edit-EC2InstanceMetadataOption `
-InstanceId i-1234567890abcdef0 `
-HttpEndpoint enabled).InstanceMetadataOptions
使用中のインスタンスメタデータサービスのバージョンに関係なく、IMDS の HTTP エンドポイントを無効にすることにより IMDS へのアクセスをオフにすることができます。HTTP エンドポイントを有効化することにより、この変更はいつでも元に戻すことができます。
インスタンスのインスタンスメタデータへのアクセスを無効にするには次のいずれかの方法を使用します。
- Console
-
インスタンスメタデータへのアクセスを無効にするには
Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。
-
ナビゲーションペインで、[インスタンス] を選択してください。
-
インスタンスを選択してください。
-
[アクション]、[インスタンスの設定]、[インスタンスメタデータのオプションを変更] の順に選択してください。
-
[インスタンスメタデータオプションの変更] ダイアログボックスで、次の操作を行います。
-
[インスタンスメタデータサービス] では[有効にする] をオフにします。
-
[保存] を選択します。
- AWS CLI
-
インスタンスメタデータへのアクセスを無効にするには
modify-instance-metadata-optionsCLI コマンドを使って、http-endpoint パラメータを disabled に設定できます。
aws ec2 modify-instance-metadata-options \
--instance-id i-1234567890abcdef0 \
--http-endpoint disabled
- PowerShell
-
インスタンスメタデータへのアクセスを無効にするには
Edit-EC2InstanceMetadataOption コマンドレットを使用して、HttpEndpoint パラメータを disabled に設定します。
(Edit-EC2InstanceMetadataOption `
-InstanceId i-1234567890abcdef0 `
-HttpEndpoint disabled).InstanceMetadataOptions
実行中または停止中のインスタンス上のインスタンスメタデータ内のタグへのアクセスを許可できます。インスタンスごとに、アクセスを明示的に許可する必要があります。アクセスが許可されている場合、インスタンスタグキーは特定の文字制限に準拠している必要があります。それ以外の場合はエラーが発生します。詳細については、「インスタンスメタデータ内のタグへのアクセスを有効にする」を参照してください。
トラブルシューティング
IMDSv1 が有効化されたインスタンスの変更が失敗する
説明
以下のエラーメッセージが表示されます。
You can't launch instances with IMDSv1 because httpTokensEnforced is
enabled for this account. Either launch the instance with httpTokens=required or
contact your account owner to disable httpTokensEnforced using the
ModifyInstanceMetadataDefaults API or the account settings in the EC2
console.
原因
このエラーは、EC2 アカウント設定または AWS Organization 宣言型ポリシーが IMDSv2 の使用を強制する (httpTokensEnforced = enabled) アカウントで既存のインスタンスを IMDSv1 有効 (httpTokens = optional) に変更しようとするときにスローされます。
ソリューション
既存のインスタンスで IMDSv1 サポートが必要な場合は、リージョン内のアカウントで IMDSv2 の強制適用を無効にする必要があります。IMDSv2 の強制適用を無効にするには、HttpTokensEnforced を disabled.に設定します。詳細については、「Amazon EC2 API リファレンス」の「ModifyInstanceMetadataDefaults」を参照してください。この設定をコンソールを使用して行う場合は、「アカウントレベルで IMDSv2 を強制適用する」を参照してください。
IMDSv2 のみ (httpTokens=required) を使用することをお勧めします。詳細については、「インスタンスメタデータサービスバージョン 2 の使用への移行」を参照してください。