AWS IAMリソースの棚卸し方法をまとめてみた

不要なIAMリソースは削除しよう
2022.10.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。

皆さんは定期的にIAMリソースの棚卸しや管理をしていますか?いつの間にか溜まっちゃってる不要なIAMユーザーやIAMポリシーは無いですか?

不要なIAMリソースを放置することはセキュリティ的に危険です。不要なものは定期的に削除しちゃいましょう。

そこで今回は不要なIAMリソースを少しでも楽に棚卸しする方法をまとめてみました。下記ターゲットに当てはまる方は是非ご一読ください。

本記事のターゲット

  • IAMリソースを管理していない方/出来ていない方
  • IAMリソースの棚卸しをマネジメントコンソール上から手動でポチポチやって時間がかかっている方

やりたいこと

  • あまり時間をかけずにIAMリソースの棚卸しをしたい
  • 普段使っていないIAMリソースや新規作成したIAMリソースを定期的に確認したい

やってみた

今回は以下の3つのリソースに対してAWS CLI等を使ってリソースの棚卸しをしてみます。

  • IAMユーザー
  • IAMロール
  • IAMポリシー

IAMユーザー

IAMユーザーの棚卸しには認証情報レポートの活用が有効です。

認証情報レポートはIAMのコンソール上からダウンロード可能で、IAMユーザのパスワードやアクセスキーに関する情報が記載されたIAMユーザーの一覧をCSV形式で取得出来ます。

詳細は下記公式ドキュメントを参照してください。

IAMロール

IAMロールの棚卸しにはAWS CLIコマンド aws iam list-roles を使ってみます。

list-roles はその名の通りIAMロールをリストアップしてくれるコマンドです。

公式ドキュメントはこちら↓

list-roles — AWS CLI 2.8.4 Command Reference

ただ、このコマンドをそのまま実行するとAWSが勝手に作ってくれるAWSサービス用のIAMロールも引っかかってしまいます。

そこでこのコマンドをカスタマイズしてみます。

やりたいことは以下

  • ユーザーが作成したIAMロールのみ表示したい
  • 表示するものはIAMロール名と最終使用日
    • 使用していないものは削除したい
  • CSV形式で出力したい

ということでカスタマイズしたコマンドがこちら ↓

aws iam list-roles \
 --query='Roles[?!(starts_with(RoleName,`AWSServiceRoleFor`))]' \
 | jq -r  '.[].RoleName' | xargs -L 1 aws iam get-role --role-name \
 | jq -r '.[]|[.RoleName,.RoleLastUsed.LastUsedDate]|@csv'

2行目で AWSServiceRoleFor から始まるIAMロール以外を出力するように指定しています。

また、最終使用日は list-roles コマンドで取得出来ないため、3行目ではxargsコマンドで新たにIAMロールの詳細情報を取得する get-role を実行しています。

そして最後の4行目で出力項目と出力形式(CSV)を指定しています。出力項目は get-role で出力される項目を指定してください。

IAMポリシー

IAMポリシーの棚卸しにはAWS CLIコマンド aws iam list-policies を使います。

list-policieslist-roles 同様にIAMポリシーをリストアップしてくれるコマンドです。

公式ドキュメントはこちら↓

list-policies — AWS CLI 2.8.4 Command Reference

IAMロールのコマンド同様、こちらもやりたいことに応じてカスタマイズします。

やりたいことは以下

  • ユーザーが作成したIAMポリシーのみ表示したい
  • 表示するものはIAMポリシー名と作成日
  • アタッチされていない(現在使用されていない)もののみ表示したい
  • CSV形式で出力したい

そして出来たコマンドがこちら ↓

aws iam list-policies \
 --scope Local \
 --query='Policies[?AttachmentCount==`0`]' \
 | jq -r '.[] | [.PolicyName,.CreateDate] | @csv'

2行目は scope オプションを使用することでユーザーが作成したIAMポリシーのみを表示するようにしています。 --scope AWS と記述するとAWSマネージドなもののみを出力可能です。何も指定しない(デフォルト)、もしくは --scope All とすることで全てのIAMポリシーを出力可能です。

3行目ではアタッチされていないもののみを出力するようにフィルタリングしています。

4行目ではIAMロールのコマンド同様、出力項目と出力形式(CSV)を指定しています。

参考

今回の棚卸しコマンドを作成するにあたって、下記記事を参考にさせていただきました。

最後に

かなりニッチな記事ですが、IAMリソースの棚卸しに多くの時間を割いている人はご活用してみてはいかがでしょうか。

また、CLIコマンドの実行には僕の大好きなサービス、AWS CloudShellを使用しましょう。CLI実行環境をすぐに用意出来る最高のサービスです。

古い記事ですが、CloudShellの使い方は下記記事を参照してください。

本記事でご紹介したコマンドを自分なりにカスタマイズしてみるのも楽しいかもしれません。

下記記事ではAWSリソース全体の棚卸しをされているのでこちらも併せてご覧ください。

本記事がどなたかのお役に立てれば幸いです。

以上、べこみんでした。