サイトアイコン 協栄情報ブログ

メタデータの取得…おぼえがき


この記事は公開されてから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のターミナルに接続して以下コマンドを実施してください。

  1. まずは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)

  2. 前掲した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

  3. 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

  4. メタデータの項目を表示してみます。

    [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/

  5. 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

  6. 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

  7. 取得した値を変数に代入すると、活用の幅が広がりますね!

    [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)

モバイルバージョンを終了