[小ネタ]AWS CLIでIAMロールの”LastUsedDate”一覧を取得してみた

2019.11.26

はじめに

こんにちは。大阪オフィスの林です。

先日のアップデートでIAMロールの最終使用日時を確認できるようになりました。概要は弊社の西野さんが書いたこちらをご覧ください!

「棚卸ができるイイアップデートだなぁ~」っと思いながらAWS CLIを触っていたのですが、現時点では「aws iam get-role」でロール名まで指定しないとロールの最終使用日時(LastUsedDate)を確認出来ないようです。すなわちロールの一覧取得コマンドである「aws iam list-roles」ではロールの最終使用日時が確認出来ません!

「aws iam list-roles」のコマンド結果

ロールの一覧取得コマンドである「aws iam list-roles」では「LastUsedDate」の項目は含まれません。下記は「aws iam list-roles」のコマンド実行結果です。

「LastUsedDate」の項目がないですね。一応grepもしてみます。

はい。出てこないですね。

「aws iam get-role」のコマンド結果

ロールの情報取得コマンドである「aws iam get-role」では「LastUsedDate」の項目は含まれます。下記は「aws iam get-role」のコマンドでとあるロールを指定した時の実行結果です。

「LastUsedDate」の項目がありますね。

作ってみた

う~ん。。。ロール一覧とロールの最終使用日時(LastUsedDate)を一緒に出したい!今回「aws iam list-roles」でロール名を取得し、取得したロール名を「aws iam get-role」の引数に渡してあげるというコマンドをサンプルで作成しました!これで簡単にロール一覧とロールの最終使用日時(LastUsedDate)が抽出できます!

スクリプトの中身がこちらです。※注意:Default output format は「json」としています。

何をしているかを簡単に説明します。

コマンド 説明
aws iam list-roles --profile test001 ロールの一覧を出しています。
jq -r '.Roles[].RoleName' ロールの一覧からロール名だけ抜き出します。
xargs -L 1 aws iam --profile test001 get-role --role-name 抜き出したロール名をxargsで引数として受け渡してget-roleを実行しています。

※上記コマンドをパイプでつなぎます。

以外に簡単にできましたね!※profileは今回の環境用なのでご自身の環境に応じて適宜変更してください!

どうしても「jq」を使いたくない人向け

「jq」を使うと簡単にできるのですが、「jq」を使わない方法も作ってみました。

スクリプトの中身がこちらです。

何をしているかを簡単に説明します。

コマンド 説明
aws iam list-roles --profile test001 ロールの一覧を出しています。
grep RoleName ロールの一覧からロール名の行だけ抜き出します。
sed 's/^[ \t]*//' 行頭の空白を消します。
sed 's/"\([^"]*\)"/""/' ダブルクォーテーションで囲われた文字を削除します。
cut -c 6- 行頭の不要文字を文字数指定で削除します。
rev | cut -c 4- | rev 行末の不要文字を文字数指定で削除します。
>> rolelist.txt 整形した文字列をrolelist.txtというファイルに書き出します。
シェルの中身 説明
while read line
do
aws iam --profile test001 get-role --role-name $line
done < rolelist.txt
rolelist.txtの一行一行を引数にコマンドを実行します。
rm rolelist.txt 完了後、rolelist.txtを削除します。

・・・(かなり強引。。。)

まとめ

標準のコマンド結果のみでロール一覧とロールの最終使用日時(LastUsedDate)を取得できるのがいいのですが、現状出来ないようなので取得したい場合は何かしら工夫する必要があります。上記のjqコマンドやゴリ押しでの抽出の方法が何かしらの参考になれば幸いです。

以上、大阪オフィスの林がお送りしました!