AWS IAMリソースの棚卸し方法をまとめてみた
こんにちは、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-policies
は list-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リソース全体の棚卸しをされているのでこちらも併せてご覧ください。
本記事がどなたかのお役に立てれば幸いです。
以上、べこみんでした。