未使用の IAM ユーザーの棚卸し

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、「[IAM.8] 未使用の IAM ユーザー認証情報は削除する必要があります」について解説します。

ポリシーの説明
IAM の Security Hub コントロール – AWS Security Hub
このコントロールは、IAM ユーザーが 90 日間使用されていないパスワードまたはアクティブなアクセスキーを持っているかどうかをチェックします。
IAM ユーザーは、パスワードやアクセスキーなど、さまざまなタイプの認証情報を使用して AWS リソースにアクセスできます。
Security Hub では、90 日以上使用されていないすべての認証情報を削除または非アクティブ化することを推奨します。不要な認証情報を無効化または削除することにより、侵害または放棄されたアカウントに関連付けられている認証情報が使用される可能性が少なくなります。
リスク
90日以上パスワードによるログインがされていないIAMユーザーアカウントが存在することは、以下のようなセキュリティリスクを高めます。
- 不正アクセスのリスク: 退職した従業員やプロジェクトから離脱したメンバーのアカウントが放置されている場合、悪意のある第三者によって悪用される可能性があります。特に、アクセス権限が付与されたままになっている場合、機密情報への不正アクセスやリソースの悪用につながる可能性があります。
- 監査ログの複雑化: 不要なアカウントが残っていると、監査ログの分析が複雑になり、セキュリティインシデント発生時の追跡や原因究明が困難になることがあります。
- コンプライアンス上の問題: 組織のポリシーや規制によっては、不要になったアカウントを適切に管理し、削除することが求められる場合があります。
- 管理の負担増: 不要なアカウントの存在は、アカウント管理者の負担を増やし、誤った管理や設定ミスにつながる可能性を高めます。
対策
未使用のIAMユーザーアカウントを特定し、適切な対応(削除または一時停止)を行うことが重要です。
- 定期的な棚卸しと監査: IAMユーザーアカウントの使用状況を定期的に監査し、最終ログイン日時が90日以上前のアカウントを特定します。AWS IAM Access Advisor を利用すると、IAMエンティティが最後にいつAWSサービスにアクセスしたかを確認できます。
- 未使用アカウントの特定と無効化: 特定された未使用アカウントについて、その必要性を再評価します。不要なアカウントは速やかに削除します。一時的に利用されていないだけで今後利用する可能性がある場合は、アカウントを一時的に無効化(パスワードを無効化するなど)することを検討します。
- アカウントライフサイクル管理の確立: IAMユーザーアカウントの作成、変更、削除を含むライフサイクル全体を管理するプロセスを確立します。アカウント作成時には有効期限を設定したり、プロジェクト終了時にはアカウントを削除する手順を組み込んだりすることが有効です。
- 自動化の検討: 未使用アカウントの特定と通知、または自動的な無効化・削除を行うためのスクリプトやツール(AWS Lambda、AWS CLIなど)の導入を検討します。
修復方法
AWSコンソールでの修復手順
AWSコンソールを用いて、90日以上パスワードによるログインがされていないIAMユーザーアカウントを特定し、削除または無効化します。
- AWSコンソールにログインします。
- ナビゲーションペインから IAM を選択します。
- 左側のメニューから ユーザー を選択します。
- ユーザーリストのヘッダーにある歯車のアイコン(列の表示/非表示の管理)をクリックし、パスワード最終使用 の列を表示します。
- パスワード最終使用 の列でソートし、90日以上前、または「なし」となっているユーザーアカウントを確認します。
- 不要なユーザーアカウントを選択し、ユーザーの削除 ボタンをクリックします。
- 確認ダイアログが表示されるので、削除するユーザー名を入力し、削除 をクリックします。
- 一時的に無効化する場合は、該当するユーザーを選択し、セキュリティ認証情報 タブを開き、パスワード セクションの パスワードの管理 ボタンをクリックしてパスワードを無効化します。または、アクセスキーが存在する場合はそれらを削除します。

Terraformでの修復手順
TerraformでIAMユーザーを管理している場合、不要になったユーザーを削除するには、該当する aws_iam_user
リソースを Terraform の設定から削除し、terraform apply
を実行します。
resource "aws_iam_user" "user_to_keep" {
name = "active-user"
}
# 90日以上使用されていない不要なユーザーの定義を削除
# resource "aws_iam_user" "unused_user" {
# name = "old-user"
# # ... その他の設定 ...
# }
上記の例では、aws_iam_user.unused_user
の定義を削除し、terraform apply
を実行することで、対応するAWS上のIAMユーザーが削除されます。
Terraform自体には、最終ログイン日時を直接監視して自動的にユーザーを削除する機能はありません。このような自動化を実現するには、AWS CloudWatch Events (EventBridge) でIAMのログインイベントを監視し、一定期間ログインがないユーザーを特定して削除するAWS Lambda関数などを別途作成し、連携させる必要があります。
最後に
この記事では、90日以上使用されていないIAMユーザーアカウントが存在することによるセキュリティリスクと、それを是正するための対策について解説しました。未使用のアカウントは不正アクセスの経路となる可能性があるため、定期的な監査と適切な管理を行い、不要なアカウントは速やかに削除することが重要です。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。