インスタンスメタデータサービスバージョン 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 パケットアナライザーはコマンドラインから実行することも、サービスとしてインストールすることもできます。詳細についてはGitHub の AWS ImdsPacketAnalyzer
のページを参照してください - CloudWatch
-
CloudWatch では、インスタンスのモニタリング用に次の 2 つのメトリクスが用意されています。
MetadataNoToken– IMDSv2 はトークンベースのセッションを使用します。ただし、IMDSv1 はこれを使用しません。MetadataNoTokenメトリクスは IMDSv1 を使用しているインスタンスメタデータサービス (IMDS) への呼び出しの数を追跡します。このメトリクスをゼロまでトラッキングすることにより、すべてのソフトウェアが IMDSv2 を使用するようアップグレードされたかどうか、およびいつアップデートが行われたかを測定できます。MetadataNoTokenRejected– IMDSv1 を無効にした後、MetadataNoTokenRejectedメトリクスを使用して、IMDSv1 呼び出しが試行および拒否された回数を追跡できます。このメトリクスを追跡することで、IMDSv2 を使用するようにソフトウェアを更新する必要があるかどうかを確認できます。詳細については、「インスタンスメトリクス」を参照してください。
- API の起動
-
新しいインスタンス: RunInstances API を使用して、IMDSv2 の使用を義務付ける新しいインスタンスを起動します。詳細については、「新規インスタンスのインスタンスメタデータオプションの設定」を参照してください。
既存のインスタンス: ModifyInstanceMetadataOptions API を使用して、既存のインスタンスで IMDSv2 の使用を要求します。詳細については、「既存インスタンスのインスタンスメタデータオプションの変更」を参照してください。
Amazon EC2 Auto Scaling グループによって起動された新しいインスタンス: Amazon EC2 Auto Scalingによって起動されたすべての新しいインスタンスで IMDSv2 の使用を義務付けるために、Amazon EC2 Auto Scaling グループは起動テンプレートまたは起動設定を使用できます。起動テンプレートの作成時や起動設定の作成時に、IMDSv2 の使用が必須となるように
MetadataOptionsパラメータを設定する必要があります。Amazon EC2 Auto Scaling グループは新しい起動テンプレートまたは起動設定を使用して新しいインスタンスを起動しますが、既存のインスタンスは影響を受けません。Amazon EC2 Auto Scaling グループ内の既存のインスタンス: ModifyInstanceMetadataOptions API を使用して、既存のインスタンスで IMDSv2 の使用を要求するかインスタンスを終了すると、Amazon EC2 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 ポリシーで値
2.0を設定した条件キーec2:RoleDeliveryを使用していると、IMDSv1 から取得した EC2 ロールの認証情報を使用した API コールに対して、UnauthorizedOperationレスポンスが返されます。同じことはSCP によって義務付けられる条件を使ってより広く達成できます。これにより、指定した条件と一致しない API コールに対してはUnauthorizedOperationエラーが返されるため、実際に IMDSv1 から取得した認証情報を使用して API を呼び出すことはできなくなります。IAM ポリシーの例はインスタンスメタデータの使用を参照してください。SCP の詳細については「AWS Organizations ユーザーガイド 」の「サービスコントロールポリシー (SCPs)」を参照してください。
-
- 宣言型ポリシー
-
宣言型ポリシー (AWS Organizations の機能) を使用して、IMDSv2 を組織全体のデフォルトの IMDS バージョンとして一元的に設定して適用します。ポリシーの例については、「AWS Organizations ユーザーガイド」で「サポートされている宣言型ポリシー」セクションの「インスタンスメタデータのデフォルト」タブを参照してください。
IMDSv2 を必要とする推奨パス
上記のツールを使用する際、IMDSv2 への移行において次のパスを使用することを推奨します。
ステップ 1: IMDSv2=optional を使用するインスタンスを特定し、IMDSv1 の使用状況を監査する
IMDSv2 移行の範囲を評価するには、IMDSv1 または IMDSv2 のいずれかを許可するように設定されたインスタンスを特定し、IMDSv1 呼び出しを監査します。
-
IMDSv1 または IMDSv2 のいずれかを許可するように設定されたインスタンスを特定する:
-
各インスタンスで IMDSv1 呼び出しを監査する:
CloudWatch メトリクス
MetadataNoTokenを使用します。このメトリクスはインスタンスの IMDS に対する IMDSv1 呼び出しの数を示します。詳細については、「インスタンスのメトリクス」を参照してください。 -
IMDSv1 呼び出しを行うインスタンス上のソフトウェアを特定する:
オープンソースの IMDS パケットアナライザー
を使用して、インスタンスの起動フェーズおよびランタイムオペレーション中に IMDSv1 呼び出しを特定し、ログに記録します。この情報を使用して、更新するソフトウェアを特定し、インスタンスが IMDSv2 のみを使用する準備を行います。IMDS パケットアナライザーはコマンドラインから実行することも、サービスとしてインストールすることもできます。
ステップ 2: ソフトウェアを IMDSv2 に更新する
インスタンスでロール認証情報を使用するすべてのSDK、CLI、ソフトウェアを IMDSv2 対応バージョンに更新します。詳細については AWS Command Line Interface ユーザーガイド」の「AWS CLI の最新バージョンをインストールまたは更新」を参照してください。
ステップ 3: インスタンスで IMDSv2 を要求する
MetadataNoToken メトリクスを通じて IMDSv1 呼び出しがゼロになったことを確認したら、IMDSv2 を要求するように既存のインスタンスを設定します。また、IMDSv2 を要求するようにすべての新しいインスタンスを設定します。つまり、すべての既存のインスタンスと新しいインスタンスで IMDSv1 を無効にします。
-
IMDSv2 を要求するように既存のインスタンスを設定する:
注記
この設定は、実行中のインスタンスで変更できます。変更は、インスタンスを再起動しなくてもすぐに有効になります。
詳細については、「IMDSv2 の使用を要求する」を参照してください。
-
IMDSv1 を無効にした後の問題を監視する:
-
MetadataNoTokenRejectedCloudWatch メトリクスを使用して、IMDSv1 呼び出しが試行および拒否された回数を追跡できます。 -
ソフトウェアの問題が発生しているインスタンスで
MetadataNoTokenRejectedメトリクスが IMDSv1 呼び出しを記録する場合、これは IMDSv2 を使用するためにソフトウェアを更新する必要があることを示します。
-
-
IMDSv2 を要求するように新しいインスタンスを設定する:
ステップ 4: IMDSv2=required をデフォルトとして設定する
IMDSv2=required は、アカウントレベルまたは組織レベルのいずれかでデフォルト設定として設定できます。これにより、新しく起動されたすべてのインスタンスが IMDSv2 を要求するように自動的に設定されます。
-
アカウントレベルのデフォルトを設定する:
詳細については、「IMDSv2 をアカウントのデフォルトとして設定する」を参照してください。
-
または、宣言型ポリシーを使用して組織レベルのデフォルトを設定します。
宣言型ポリシーを使用して、IMDSv2 の組織のデフォルトを必須に設定します。ポリシーの例については、「AWS Organizations ユーザーガイド」で「サポートされている宣言型ポリシー」セクションの「インスタンスメタデータのデフォルト」タブを参照してください。
ステップ 5: インスタンスに IMDSv2 を要求するように強制する
IMDSv2 の使用を適用するには、次の IAM または SCP 条件キーを使用します。
-
ec2:MetadataHttpTokens -
ec2:MetadataHttpPutResponseHopLimit -
ec2:MetadataHttpEndpoint
これらの条件キーは RunInstances API と ModifyInstanceMetadataOptions API、および対応する CLI の使用を制御します。ポリシーを作成し、条件キーを使用してポリシーに指定した状態と API コールのパラメータが一致しない場合、API コールまたは CLI コールは失敗して UnauthorizedOperation レスポンスが返されます。
IAM ポリシーの例はインスタンスメタデータの使用を参照してください。