3
0

More than 1 year has passed since last update.

EC2インスタンスのメタデータ(IMDSv1)をPowerShellで一括出力してみる

Last updated at Posted at 2022-02-21

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

EC2インスタンスの中で169.254.169.254にアクセスすると、EC2インスタンスのメタデータを参照することが出来ます。

exsample

  • 169.254.169.254/latest/meta-data/instance-id でインスタンスID
  • 169.254.169.254/latest/meta-data/instance-type でインスタンスタイプ

が参照できる。

本記事ではそんなメタデータをPowerShellをつかって一括出力してみます。

実行した環境

  • Windows Server 2016
  • Windows PowerShell 5.1

PowerShellで一括出力サンプル

function expand-awsmeta([string]$base , [string]$leaf) {
    if ($leaf.EndsWith("/")) {
   (Invoke-RestMethod "$base$leaf" ) -split "`n" | ForEach-Object { expand-awsmeta "$base$leaf" $_ }
    }
    else {
        try {
            $value = Invoke-RestMethod "$base$leaf"
            Select-Object @{n = 'uri'; e = { "$base$leaf" } }, @{n = 'value'; e = { $value } } -InputObject ""
        }
        catch {
            # public-keysだけ
            # 169.254.169.254/latest/meta-data/public-keys/0/openssh-key といった形なので妥協
            Select-Object @{n = 'uri'; e = { "$base" } }, @{n = 'value'; e = { $leaf } } -InputObject ""
        }
    }
}

expand-awsmeta "169.254.169.254/latest/" "meta-data/"
expand-awsmeta "169.254.169.254/latest/" "dynamic/"

上記コマンドをPowerShellプロンプトにコピペして実行すると下記のように一括でメタデータが出力されます。

image.png

やっていること

AWSのメタデータのURIについては、169.254.169.254/latest/meta-data/にアクセスすると項目の一覧が取得でき、169.254.169.254/latest/meta-data/+<<項目名>>でアクセスすると値が取得できます。

データを眺めてみると、末尾が/で終わっている項目名は項目名のリストになっているようなので、function expand-awsmetaを定義して、末尾が/だったら再帰的に読み込んでます。

169.254.169.254/latest/meta-data/public-keys/項目だけは、取得した項目をそのまま後ろにつけるのではなく、169.254.169.254/latest/meta-data/public-keys/0/openssh-keyのようにする必要があるようで、これは今回取得を妥協しています。(今回は項目名(キー名)だけ取得している)

総評

一覧で出力してみると、こういう項目もあったのかといった感があります。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0