【アップデート】新しい CloudWatch メトリクス MetadataNoTokenRejected が利用できるようになりました
[アップデート:2024/3/25]デフォルト IMDS を設定できるようになりました

アップデート内容
2024/3/25 のアップデートでリージョン毎にインスタンスメタデータサービス (IMDS) のデフォルトを設定可能になりました。さらに、CloudWatch メトリクス MetadataNoTokenRejected によって拒否された IMDSv1 の呼び出しを確認できるようになりました。
EC2 コンソールを使用するか、リージョンごとに API を使って IMDS のデフォルトを有効にすることができます。
EC2 コンソールの場合は、右側の部分「データ保護とセキュリティ」というメニューから設定することができます。

[管理]をクリックします。

[Metadata version]で「V2 only」とすることができます。

ちなみに、[Metadata version]で「V1 and V2」とした場合は、EC2 インスタンス起動設定のメタデータバージョン初期値が変わっていました。

「MetadataNoTokenRejected」メトリクス
MetadataNoTokenRejectedは、V1 が無効化されたインスタンスから V1 にアクセスしようとして拒否された場合に確認できるメトリクスです。
メトリクスを確認するために、メタデータのバージョンを 「V2 のみ」にした EC2 インスタンスを起動します。

IMDSv1 にアクセスできない EC2 インスタンスから、v1 と v2 にアクセスすると次のようになります。v1 のほうが「401 Unauthorized」となっています。
- IMDSv1
curl http://169.254.169.254/latest/meta-data/

- 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"

10 秒おきに IMDSv1 にアクセスするようにすると、MetadataNoTokenRejected が増加するのが確認できました。
watch -n 10 curl http://169.254.169.254/latest/meta-data/

ちなみに、メタデータバージョンを「V2 のみ」にしていない EC2 インスタンスで IMDSv1 にアクセスしている場合は、MetadataNoToken メトリクスを見ることで確認することができます。

まとめ
現在は、IMDSv2 のみとすることが推奨されています。
既存インスタンスを 「V2 のみ」に変更した後は、MetadataNoTokenRejected によって V1 にアクセスしようとしているインスタンスを発見することができそうですが、「V2 のみ」に変更する前に MetadataNoToken を調査するのがよいと思います。
その上で、見落としを検知するために MetadataNoTokenRejected でアラートが発生するようにしておくのがよいでしょう。
Discussion