12桁のAWSアカウントIDをPowerShellで取得する

取得するためのCmdletが見つからなかったので、やり方を模索してみました。



メタデータのIAM情報から取得してみる。(正規表現

PS>(Invoke-WebRequest "http://169.254.169.254/latest/meta-data/iam/info").Content -match "arn:.*:.*:.*:[0-9]{12}:.*" | %{$matches[0] -split ":"| select -index 4}
012345678912


メタデータのIAM情報から取得してみる。JSONを読み取ってARN変換。ARNの5個目の項目を取得。

PS>((Invoke-WebRequest "http://169.254.169.254/latest/meta-data/iam/info").Content | ConvertFrom-Json).InstanceProfileArn -split ":" | select -Index 4
012345678912


ARNを取ればよいという事なら他の取り方もありますね。

PS>(Get-IAMUsers)[0].Arn -split ":" | select -Index 4
012345678912

ARN以外だとリソースのOwnerもアカウントID。

PS>(Get-EC2SecurityGroup -GroupName "Default").OwnerId
012345678912

実行しているEC2インスタンスのOwnerを取得してみたり。

PS>(Get-EC2Instance -Instance (Invoke-WebRequest "http://169.254.169.254/latest/meta-data/instance-id").Content).OwnerId
012345678912


今のところ一番マシ。

PS>((Invoke-WebRequest "http://169.254.169.254/latest/dynamic/instance-identity/document").Content | ConvertFrom-Json).accountId
012345678912


どれも微妙ですね。もっと良い方法見つけたら追記します。