今日はなにの日。

気になったこと勉強になったことのメモ。

今日は、EC2インスタンスメタデータサービスバージョン2についての日。

目次

とある日

AWS の勉強用の記録。

よく問題集とかで出る項目だけを調べてまとめるだけ。

インスタンスメタデータ

インスタンスメタデータは、インスタンスに関するデータで、実行中のインスタンスを設定または管理するために使用します。インスタンスメタデータは、ホスト名、イベント、およびセキュリティグループなどでカテゴリ分けされます。

IMDSv2 の使用 - Amazon Elastic Compute Cloud

IMDSv2 = インスタンスメタデータサービスバージョン 2

次のいずれかのメソッドを使って、実行中のインスタンスからインスタンスメタデータにアクセスできます。

インスタンスメタデータサービスバージョン 1 (IMDSv1) – リクエスト/レスポンスメソッド

インスタンスメタデータサービスバージョン 2 (IMDSv2) – セッション志向メソッド

デフォルトでは、IMDSv1またはIMDSv2のいずれか、あるいは両方を使用できます。インスタンスメタデータサービスは(所定のリクエストについて)、IMDSv2 に固有の PUT または GET ヘッダーがリクエストに存在するかどうかを基準にして、IMDSv1 と IMDSv2 へのリクエストを識別しています。詳細については、「EC2 Instance Metadata Service の拡張により、オープンファイアウォール、リバースプロキシ、および SSRF の脆弱性に対して多層防御を追加」を参照してください。

インスタンスインスタンスメタデータサービスを、ローカルコードまたはユーザーが IMDSv2を使用しなければいけないように構成できます。IMDSv2を使用しなければならないように指定すると、IMDSv1はもう機能しなくなります。詳細については、「インスタンスメタデータオプションの設定」を参照してください。

インスタンスメタデータの取得

インスタンスメタデータは実行中のインスタンスから取得できるため、Amazon EC2 コンソールまたは AWS CLI を使用する必要はありません。これは、インスタンスから実行するスクリプトを記述しているときに便利です。たとえば、インスタンスメタデータからインスタンスのローカル IP アドレスにアクセスして、外部アプリケーションへの接続を管理できます。

実行中のインスタンスから下記を使用すれば見れる。

[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/

バージョン1とバージョン2の違い

IMDSv2は、セッション志向リクエストを使用します。セッション志向リクエストを使用して、セッション期間 (1 秒~6 時間) を定義するセッショントークンを作成します。指定した期間中、それ以降のリクエストに同じセッショントークンを使用できます。指定した期間が期限切れになった後、将来のリクエストに使用する新しいセッショントークンを作成する必要があります。

バージョン1はセキュリティ事故があったらしい。

そのためバージョン2ではトークンを使用してデータをやり取りする。

参考記事

Instance Metadata Service Version 2 (IMDSv2):インスタンスメタデータサービスv2の設定と挙動確認 - Qiita

インスタンスのメタデータV2だけを有効する方法 - 協栄情報ブログ

AWSのEC2 インスタンスメタデータサービスのv1(IMDSv1) とv2 (IMDSv2) の違いと効果 - プログラマでありたい

セキュリティでやらかしていることがあったのは面白い。