Instance Profileを設定したEC2インスタンスでAWS Account IDを取得する

タイトルの通りで、これだけです。 (もちろん、これ以外の方法もあります。個人の好みです。)

Metadataに含まれるInstanceProfileのARNから取得しています。

curl http://169.254.169.254/latest/meta-data/iam/info/ | jq .InstanceProfileArn | awk -F':' '{print $5}'

これを書いたのは、JAWS-UG CLI専門支部のハンズオンでAWS Account IDを抽出するコマンドで嵌ったことがきっかけです。

AWS_ID=`aws iam get-user --query 'User.Arn' --output text | sed 's/^.*:://' | sed 's/:.*$//'` && echo ${AWS_ID}

上記のコマンドを実行したとき、ユーザを指定していないとのエラーが出ました。 実行環境はInstance Profileを設定したEC2インスタンスAmazon Linux)です。

原因を周りに聞いてみたところ、 IAMユーザのCredentialで実行するときに--user-nameを指定していない場合にはコマンドを実行したIAMユーザの情報を出力する仕様になっているとのことでした。 そのため、roleで実行するときには--user-nameは必須のオプションのようです。

公式ドキュメントにも記載がありました。

get-user — AWS CLI 1.7.39 documentation

Options

--user-name (string)

The name of the user to get information about. This parameter is optional. If it is not included, it defaults to the user making the request.

以上、小ネタでした。