この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
はじめに
こんばんは。今日はIMDSv2のインスタンスメタデータの取得を行っていきたいと思います。
IMDSについてのおさらい
インスタンスメタデータの取得の前に、IMDSについて簡単なおさらいをしておきます。
インスタンスにはami-idやregion、availabirity-zoneなどのメタデータが紐づいています。IMDS(Instance Metadata Service)は文字通り、そうした情報を取得することができるサービスです。
そんなIMDSですが、二つのバージョンがあり、公式には次のように分類されています。
- インスタンスメタデータサービスバージョン 1 (IMDSv1) – リクエスト/レスポンスメソッド
- インスタンスメタデータサービスバージョン 2 (IMDSv2) – セッション志向メソッド
以上のように分類されていますが、値の取得そのものはシンプルで、実行中のEC2にログインしてhttp://169.254.169.254 に対してcurlコマンドを叩くだけです。大きな違いはセッショントークンを利用した認証要求があるかどうかという点です。
IMDSv2は、トークンによる認証要求によりIMDSへのアクセスをより安全にし、特にサーバー側要求偽造(SSRF)のような攻撃に対する脆弱性を減少させるため、セキュリティの観点で利用が推奨されます。
インスタンスメタデータの取得
今回はメタデータとしてregion情報を取得してみます。
ECのターミナルに接続して以下コマンドを実施してください。
-
まずはTOKENを取得します。
※ 下記コマンドの21600はトークンの有効期間です。21600秒は6時間です。6時間過ぎた場合などはもう一度以下のコマンドを実行してトークンを取得しなおす必要があります。[ec2-user@ip-10-0-0-72 ~]$ TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" -s)
-
前掲したURLに直接アクセスすると、メタデータのバージョン一覧が表示されます。
[ec2-user@ip-10-0-0-72 ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/
1.0
2007-01-19
2007-03-01
…
latest -
latest配下を表示してみるとmeta-dataがあることが確認できます。
[ec2-user@ip-10-0-0-7curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/atest/
dynamic
meta-data -
メタデータの項目を表示してみます。
[ec2-user@ip-10-0-0-72 ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
…
placement/
… -
placement配下にregionがあるのでそれを確認します。
[ec2-user@ip-10-0-0-72 ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/placement/
availability-zone
availability-zone-id
region -
regionの値を確認してみます。
[ec2-user@ip-10-0-0-72 ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/placement/region
ap-northeast-1 -
取得した値を変数に代入すると、活用の幅が広がりますね!
[ec2-user@ip-10-0-0-72 ~]$ REGION=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/placement/region)
おわりに
いかがだったでしょうか。
今回はIMDSv2を利用してインスタンスメタデータを取得してみました。
では、またお会いしましょう!! あでゅー!
参考
インスタンスメタデータの取得
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
IMDSv2 の使用
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html
インスタンスメタデータのカテゴリ
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instancedata-data-categories.html)