AI要約
この記事ではこんな内容が読めます!
- Amazon Q Developerで複数AWSアカウントのIAMロール棚卸を自動化した事例
- プロンプト1つで実用的なPythonスクリプトを自動生成
- AWS SSOの仕組みを活用し、1回のログインで全アカウントを調査
- 手動なら数時間かかる作業を自動化
目次
はじめに
こんにちは!株式会社ゼンリンデータコムの安井です。
今回は、Amazon Q Developerを使って複数のAWSアカウントからスイッチロール用のIAMロールを一括検索するスクリプトを自動生成した話をします。
スイッチロールとは?
スイッチロールは、AWSで複数のアカウントを管理する際に、アカウント間でロールを切り替えてアクセスする仕組みです。詳細はAWS公式ドキュメントをご覧ください。
当社では、3桁以上の数がある大量のAWSアカウントに対して、コンソール操作権限を必要な人に払い出すためにスイッチロールの仕組みを活用しています。これにより、各アカウントで個別にIAMユーザーを作成することなく、一元的な権限管理が可能になっています。
しかし、アカウント数が増えるにつれて、スイッチロールの管理や棚卸が重要な課題となっていました。
その課題を解決するために必要な、手動だと数時間かかる作業を、Amazon Q Developerに依頼したらスクリプトを自動生成してくれました。
やりたかったこと
3桁以上のAWSアカウントから、特定の文字列を含むIAMロールを一括で抽出して、CSV形式で出力したい。
※今回は例としてXXXXXXという名前を含むロールを検索しますが、検索文字列を変えるだけで任意のロール名パターンに対応できます。
背景:
- 各アカウントに配布したスイッチロール用のIAMロールを棚卸する必要がある
- 「どのアカウントにどんなロールがあるのか」を把握したい
課題:
- 手動で各アカウントにログインして確認するのは時間がかかり非現実的
- 確認漏れや記録ミスのリスク
Amazon Q Developerへの依頼
ステップ1: スクリプト生成の依頼
以下のプロンプトを送信しました:
アクセス可能なアカウントの内、スイッチロール元アカウント以外のすべてのアカウントにおいて、
IAMロールの中で、XXXXXXという言葉が入っているロールの一覧が欲しいです。
一覧にはそのロールがあるアカウントも併せて記載してください。
ポイント: やりたいことを日本語で伝えるだけ。技術的な実装方法は指定していません。
Amazon Q Developerは、AWS CLIの設定ファイル(~/.aws/config)を確認して、Pythonスクリプトと必要なパッケージ(requirements.txt)を自動生成してくれました。

生成されたPythonスクリプトとrequirements.txt
ステップ2: スクリプトの実行依頼
スクリプト生成後、内容を確認してから以下のプロンプトを送信しました:
- スクリプトの処理内容を確認し、参照系API(
list_roles)のみで変更操作がないこと - 読み取り専用権限でログインしており、意図せずリソースに変更が加えられることがないこと
作成したスクリプトを実行してください
ポイント:
- Amazon Q Developerは、AWS SSOへのログイン確認から実行まで、すべて自動で行ってくれました
生成されたスクリプト
Amazon Q Developerが生成したスクリプトは、以下の処理を自動で行います:
- AWS CLIの設定ファイル(~/.aws/config)から全プロファイルを読み込み
- 各アカウントに接続してIAMロールを検索(指定した文字列を含むロールのみ抽出)
- 結果をCSV形式で保存(アカウントID、ロール名、ARN、作成日時など)
生成されたファイル:
├── search_XXXXXX_roles.py # メインスクリプト
├── requirements.txt # 必要なパッケージ
└── XXXXXX_roles_YYYYMMDD_HHMMSS.csv # 実行結果
スクリプトの特徴:
- 検索条件のカスタマイズ可能(検索キーワードを変更するだけで、管理者ロールや閲覧専用ロールなど、様々なロールパターンを検索できる)
- エラーハンドリング(アクセスできないアカウントはスキップ)
- ページネーション対応(大量のロールも全て取得)
- 見やすい出力(コンソールサマリー + CSV)
実行結果
Amazon Q Developerが自動実行した結果、以下のような出力が得られました。
実行例(3アカウントの場合)
コンソール出力:
================================================================================
AWS IAMロール検索ツール - 「XXXXXX」を含むロールを検索
================================================================================
AWS CLIの設定ファイル(~/.aws/config)からプロファイルを読み込み中...
対象プロファイル: 3 個
検索を開始します...
OK account-a: 95 ロール発見
OK account-b: 18 ロール発見
OK account-c: 19 ロール発見
================================================================================
検索完了: 132 個のロールを発見
================================================================================
結果を保存しました: XXXXXX_roles_20260220_193554.csv
合計: 132 ロール
CSV出力結果(一部抜粋):
| ProfileName | AccountId | RoleName | CreateDate |
|---|---|---|---|
| account-a | 123456789012 | xxx-XXXXXX-role | 2025-11-14T01:17:31+00:00 |
| account-a | 123456789012 | yyy-XXXXXX-role | 2025-11-14T01:17:32+00:00 |
| account-b | 234567890123 | zzz-XXXXXX-role | 2025-06-06T06:15:42+00:00 |
| account-c | 345678901234 | aaa-XXXXXX-role | 2025-11-14T01:36:28+00:00 |
成果: 手動なら数時間かかる作業が、わずか数十秒で完了しました。全アカウント(3桁以上の数)で実行する場合でも10~20分程度で完了します。
複数アカウント対応の仕組み
今回、1回のログインで複数アカウントを調査できたのは、AWS SSOの運用方法によるものです。
AWS SSO設定の構成
今回の環境では、以下のようにAWS SSOを設定しています:
# ~/.aws/config の設定例
[profile account-a]
sso_start_url = https://example.awsapps.com/start
sso_region = ap-northeast-1
sso_account_id = 123456789012
sso_role_name = ViewerRole
[profile account-b]
sso_start_url = https://example.awsapps.com/start # 同じSSO URL
sso_region = ap-northeast-1
sso_account_id = 234567890123 # 異なるアカウントID
sso_role_name = ViewerRole
[profile account-c]
sso_start_url = https://example.awsapps.com/start # 同じSSO URL
sso_region = ap-northeast-1
sso_account_id = 345678901234 # 異なるアカウントID
sso_role_name = ViewerRole
マルチアカウントアクセスの流れ
1. 初回ログイン
aws sso login --profile account-a
↓
2. ブラウザで認証(1回のみ)
↓
3. SSOトークン取得
※ sso_start_url 単位で保存される
↓
4. 全アカウントにアクセス可能
account-a, account-b, account-c すべて認証済み
ポイント: 全プロファイルが同じsso_start_urlを共有しているため、1回の認証で全アカウントにアクセスできます。boto3が各プロファイルのsso_account_idとsso_role_nameを使って、自動的に適切なアカウント・ロールに切り替えてくれます。
この運用により、Amazon Q Developerにマルチアカウント環境で作業をしてもらうことが可能になります。
おわりに
Amazon Q Developerを活用することで、複数アカウントにまたがるIAMロール棚卸を簡単に自動化できました。この活用方法は以下のことにも使えると思います。
ぜひ、あなたの環境に合わせてカスタマイズして活用してください!
活用シーン:
-
セキュリティ監査
adminやpoweruserを含むロールの棚卸 -
コンプライアンスチェック
命名規則に従ったロールの存在確認 -
一時ロールの洗い出し
tempやtestを含むロールの検出 -
他のリソースへの応用
検索条件を変更してS3、Lambda、EC2等の棚卸にも対応

