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.
以上、小ネタでした。