最近使われていないIAMユーザとIAMロールをCSVで出力

IAMは整理しなければユーザやロールがどんどん増えていくもの。

長期間使用していないユーザは棚卸し漏れの可能性もありますし、定期的にチェックするのが望ましいです。

長期間使われていないからといっていきなり削除するのではなく、関係者にヒアリングしたい場合もあると思うので、エクセルで開きやすいようにCSVで出します。

前提としてAWS CLIとjqコマンドを使うのでまだインストールしていない人は下記参照してください。

コード

次のコードをコピペして保存してください。

#! /bin/bash

# この日付以降使用されていないユーザをリストアップ。IAMロールは400日以上使用されていないものをリストアップ
date=2021-04-01
IFS=$'\n'
echo '種別,名前,ARN,ID,作成日,最終使用日'

aws iam list-users | jq \
  ".Users[] | select(.PasswordLastUsed < \"$date\") | 
   if has(\"PasswordLastUsed\") then . else .PasswordLastUsed|=\"パスワード無しor使用していない\" end |
  [
    \"IAMユーザ\",
    .UserName,
    .Arn,
    .UserId,
    .CreateDate,
    .PasswordLastUsed
  ]
  | @csv" -r

accesskeys=`aws iam list-access-keys --profile ss | jq '.AccessKeyMetadata[].AccessKeyId' -r`
for accesskey in $accesskeys; do
 aws iam get-access-key-last-used --access-key-id $accesskey --profile ss | jq \
 "select(.AccessKeyLastUsed.LastUsedDate < \"$date\") | 
  if .AccessKeyLastUsed.LastUsedDate!=null then . else .AccessKeyLastUsed.LastUsedDate|=\"使用していない\" end |
  [
    \"IAMユーザ アクセスキー\",
    .UserName,
    \"\",
    \"$accesskey\",
    \"\",
    .AccessKeyLastUsed.LastUsedDate
  ] | @csv" -r
done

rolenames=`aws iam list-roles | jq '.Roles[].RoleName' -r`
for role in $rolenames; do
aws iam get-role --role-name $role --profile ss | jq \
  '.Role| select(.RoleLastUsed == {}) | [
    "IAM Role",
    .RoleName,
    .Arn,
    .RoleId,
    .CreateDate,
    "400日以上前"
  ] | @csv' -r
done

保存後は実行権限をつけください。

chmod +x get-unused-iam-users.sh

こんな感じに実行してCSV保存。ロールとかユーザ多いとちょっと時間かかります。

./get-unused-users.sh > unused-iam-users.csv

CSVをエクセル等で開くとこのようにIAMユーザ、IAMユーザのアクセスキー、IAMロールのうち最近使用されていないものを確認できる。

長期間使用されていないIAMユーザやIAMロールをCSVで取得

ロジック

すべてAWS CLIで情報取得し、jqコマンドで整形しています。興味がある方はスクリプト見てみてください。

IAMユーザ

コードの4行目、「date=2021-04-01」というところで基準の日付を設定しています。この日付より以前にしかログインしていないユーザを出力。この日付は自分の好きなものに変更してもらって大丈夫。

最終使用日のカラムに最終使用日の日付と時間がでますが、2015年以前にしか使用していなかったり、パスワードが設定されていないものは、「パスワード無しor使用していない」と表示されます。

IAMユーザ アクセスキー

IAMユーザと同じくコードの4行目、「date=2021-04-01」というところで基準の日付を設定しています。

ARNと作成日は今回は空白で出力されます。

最終使用日のカラムに最終使用日の日付と時間がでますが、2015年以前にしか使用していなかったり、そもそも使っていない場合は「使用していない」と表示されます。

IAMユーザでパスワード使ってマネジメントコンソールにはログインしていないけど、CLIとかでは使っているという場合もあるのでIAMユーザとIAMユーザ アクセスキーの両方を見て管理されるのが良いかと思います。

IAMロール

RoleLastUsedというプロパティを使っています。これには400日以内に何かしらのアクティビティがあれば日付が入り、400日間動きがなければ何も値が入りません。

今回はこのプロパティに何も値が入っていない、つまり400日以上アクティビティがないIAMロールを出力しています。

コメントする

メールアドレスが公開されることはありません。