Open2
IMDSv2変更点整理
主な変更点
- インスタンスメタデータ取得方法
- 最初にPUTリクエストでトークン取得する必要がある。
- 参考)https://blog.serverworks.co.jp/tech/2019/11/27/imdsv2/
TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
curl http://169.254.169.254/latest/meta-data/instance-id -H "X-aws-ec2-metadata-token: $TOKEN"
影響範囲
-
インスタンスメタデータ取得しているアプリケーション、パッケージがあれば取得方法を変更する必要がある。
- datadog-agentを利用している場合、IMDSv1で取得している場合は明示的にIMDSv2で指定する必要がある。
- 参考)https://medium.com/@daichiharada/imdsv1を無効化したec2でdatadog-agentを使うときは必ずec2-prefer-imdsv2オプションをtrueにしよう-894d72f79b9f - Ansible moduleでEC2メタデータ取得する際もIMDSv1 or IMDSv2のどちらでインスタンスメタデータ指定する必要があるか確認する。
- datadog-agentを利用している場合、IMDSv1で取得している場合は明示的にIMDSv2で指定する必要がある。
-
IMDSv2対応のAWS SDKにバージョンアップする
IMDSv1通信の検知方法
インスタンス単位の確認方法
MetadataNoTokenのメトリクスを確認
CloudWatchの画面にて対象のEC2のメトリクスから「MetadataNoToken」を選択します。
こちらの数値は トークンを利用しない IMDSv1 の通信が発生した場合にカウントされますので過去データをご確認いただき数値が0の場合はIMDSv2を利用しているか、 IMDSを利用する処理がないと判断ができます。
サードパーティソフトで IMDSv1を使っているか判断ができない場合にご活用頂けます。
プロセス単位の確認方法
IMDS パケットアナライザーを対象サーバーにインストールし、対象プロセスを特定する。