この記事はトラストバンクAdventCalendar 12日目になります
トラストバンク SREグループの @kgkukoaoisi です
IAMユーザの一覧を見たとき、「ぱっと見、使ってなさそう」なユーザっていますよね。
でも、「えいや」で削除して、実は重要なバッチ処理が動いていてサービス影響が…なんて事故は絶対に起こしたくありません。
使っていないことを確認しつつ、慎重にIAMユーザを削除した方法をご紹介します!
なんでIAMユーザーを消すの?
結論から言うと、セキュリティリスクを抱え続けないためです。
例えば、
GitHub ActionsやJenkinsなどのCI/CDツールからAWSリソースを操作するために、
IAMユーザーを使っているケースがあります。
また、dev/stg/prdのAWSアカウントごとに別々のIAMユーザでコンソールにログインするという経験もしてます
(インフラ担当だったので割と強めの権限をもらっていました。。。弊社はIdentity Center使っているのでご安心ください)
万が一そのアクセスキーが流出したらどうなるでしょう。
- データの削除・持ち出し
- 環境の破壊
- 不正な高額インスタンスの大量起動(クリプトジャッキング) などなど
こういったリスクを避けるため、以下のような使い分けが推奨されています。
- 人間が使う場合: IAMユーザーではなく、AWS IAM Identity Center を使う。
- システムが使う場合: 永続的なアクセスキーではなく、IAMロール を使う。
つまり、「IAMユーザー(永続的な鍵)」を減らすこと自体がセキュリティ対策になります。
利用状況を確認するステップ
「じゃあ消そう!」といって削除ボタンを即クリックするのは現実的には難しいです。
まずは、以下の3箇所で利用状況を確認しました。
1. IAMコンソール
まずはAWSマネジメントコンソールのIAMユーザーにて対象ユーザの利用状況を確認します。
- 最近使われている: → 即座に削除NG。利用者や用途の特定へ。
- 「なし」または数年前: → 削除候補。
アクセスキーの利用があるか (セキュリティ認証情報のタブで見れます)

💡 Tips: IAM Access Analyzer
IAM Access Analyzer の「未使用のアクセスの分析」機能を使うと、長期間使用されていないIAMユーザーやロールをリストアップしてくれるので便利です。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/what-is-access-analyzer.html
お金がかかるのでご注意ください!
https://aws.amazon.com/jp/iam/access-analyzer/pricing/
2. CloudTrail
Cloudtrailで対象IAMユーザが何か操作をしていないか確認します
IAMユーザ名を元に検索します
S3のオブジェクト操作(GetObject など)
標準のCloudTrailログには記録されず、有料の データイベント が有効でないと見えません。
有効にして一定期間データを取得した後、Amazon Athena を使ってクエリをかけ、該当ユーザ(アクセスキーID)のアクセス履歴を検索する必要があります。
3. コードベースとCI/CD設定を確認
今回削除したユーザはCI/CDで使われているものだったので、
ソースコードやGitHub Actions、Jenkinsを一通り確認しました
ユーザ名やIAMユーザが行っている操作を元に、探す場所にあたりをつけると良いと思います
IAMユーザの移行と削除
1. IAMロールなどへの移行
もし使われているユーザが見つかったら、削除の前にIAMロールなどへ移行します。
-
GitHub Actions / GitLab CI など
- アクセスキーをSecretsに埋めるのをやめ、OIDC (OpenID Connect) プロバイダーを設定してIAMロールを引き受ける(AssumeRole)形に書き換え
-
EC2上のアプリケーション
- 設定ファイルにキーを書くのをやめ、EC2インスタンスにIAMロール(インスタンスプロファイル)をアタッチ
-
ローカル開発環境やコンソールへのアクセス
-
~/.aws/credentialsにキーを置くのをやめ、AWS IAM Identity Center 経由でのログインに切り替え
-
2. 削除の前に無効化
念のため、削除の前に 無効化 してみます。
- コンソールへのログインを無効化
- アクセスキーを「非アクティブ」にする
このアクセスキーを使うと下記のようにエラーが返ってくるようになります
% aws s3 ls
An error occurred (InvalidAccessKeyId) when calling the ListBuckets operation: The AWS Access Key Id you provided does not exist in our records.
この状態で1〜2週間ほど放置します。
もし誰かが使っていれば、「繋がらないんですけど!」と連絡が来るはずです。
無効化ならすぐに戻せるのでこれで様子見しましょう。
3. 削除
無効化して一定期間(2週間〜1ヶ月程度)誰からも連絡がなければ、削除します。
最後に
IAMユーザーの棚卸しは地味で神経を使う作業ですが、セキュリティインシデントを防ぐためには避けて通れません。
「不要なものは消す」が鉄則ですが、サービス影響がないよう慎重に行う必要があります。
今回はIAMユーザですが、他のリソースも使ってないかしっかり確認して安全に削除をしていきます!
トラストバンクでは、一緒に働く仲間を絶賛募集しています。
AdventCalendar を見て、少しでも気になった方は、是非ご連絡ください。




