このページでは AWS インスタンスに提供される機能の一つである IMDS(Instance MetaData Service)のバージョン1とバージョン2の違いに関して説明します。
IMDSとはインスタンスに関する情報を取得する機能です。
Windows や Redhat などのインスタンスはAWS基盤上で動作するOSですが、そのままでは自分自身がAWS上で動作していることが分からないのでAWSの情報も取得できません。
そこで Instance MetaData Service の出番です。この機能により自分自身のインスタンスID、Role情報、パブリックIPアドレス、リージョン、AZなどを取得することが可能となります。
この中にはIAM Role のクレデンシャル情報 なども含まれます。もしIMDS情報が漏洩したらかなり危険な情報となります。
2022年1月現在ではこのIMDS は v1 と v2 の2種類が使用可能です。ただしv1はセキュリティ上の面で弱点があるためv2を使用することが強く推奨されています。v1はネットワーク機器のアクセス権設定不備によりデータが漏洩する可能性があります。
比較は以下の表の通りとなります。
比較表 | IMDS v1 | IMDS v2 |
概要 | セッショントークンなしでデータの取得が可能。 | 期限付きのセッショントークンの取得が必須。HTTP PUT で取得する。このトークンをヘッダに挿入して取得する。 PUTは通常Firewall などでアクセス禁止されている。そのためよっぽどの不備がない限りPUTによる漏洩の危険性は低い。 |
Windows Powershellでのアクセスサンプル | Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ | $token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/ |
Redhat でのアクセスサンプル | curl http://169.254.169.254/latest/meta-data/ | 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/ |
危険性 | メタデータの攻撃の可能性が高い。 | ネットワーク機器が適切に設定されている場合、攻撃の可能性は低い。 |