1. システムとオフィスの融合
  2. media
  3. AWS 高速PoC Open AI
  4. ChatGPT活用 - AWS の IAMユーザーに紐づくIAMポリシーを一覧化するスクリプトを回答してもらう

QESブログ

ChatGPT活用 - AWS の IAMユーザーに紐づくIAMポリシーを一覧化するスクリプトを回答してもらう

  • LINEで送る
  • このエントリーをはてなブックマークに追加

こんにちは。システムソリューション営業本部の安藤です。

ChatGPTを用いてスクリプトを作成し楽に管理を行う方法を試しましたのでご紹介いたします。
今回の対象はAWSの基本となるIAMについてです。

ChatGPT
https://openai.com/blog/chatgpt/

ChatGPTの使い方については多くの情報が出回っているため、ここでは割愛いたします。
IAMユーザーとIAMポリシーの関係を一覧で取得する方法を試しました。

まずは簡単なところから

ChatGPTへの質問:

AWSのIAMユーザーを全て取得し、各IAMユーザーが持つIAMポリシーを一覧化するプログラムについて教えてください。

ChatGPTからの回答:

AWSのIAMユーザーを全て取得し、各IAMユーザーが持つIAMポリシーを一覧化するプログラムは、以下のように実装できます。
import boto3

# AWSの認証情報を設定する
session = boto3.Session(profile_name='your-profile-name')
iam = session.client('iam')

# 全てのIAMユーザーを取得する
all_users = []
response = iam.list_users()
while response['IsTruncated']:
    all_users += response['Users']
    response = iam.list_users(Marker=response['Marker'])
all_users += response['Users']

# 各IAMユーザーが持つIAMポリシーを一覧化する
for user in all_users:
    user_name = user['UserName']
    user_policies = []
    response = iam.list_attached_user_policies(UserName=user_name)
    user_policies += response['AttachedPolicies']
    while response['IsTruncated']:
        response = iam.list_attached_user_policies(UserName=user_name, Marker=response['Marker'])
        user_policies += response['AttachedPolicies']

    # IAMポリシーを一覧表示する
    print(f"IAMユーザー: {user_name}")
    for policy in user_policies:
        policy_arn = policy['PolicyArn']
        print(f"  IAMポリシー: {policy_arn}")

まず、boto3ライブラリを使用してAWSのIAMクライアントを作成し、AWSの認証情報を設定します。次に、list_usersメソッドを使用して全てのIAMユーザーを取得し、各ユーザーが持つIAMポリシーを一覧化します。

list_attached_user_policiesメソッドを使用することで、各IAMユーザーが持つIAMポリシーを取得できます。このメソッドは、ユーザー名を指定して、そのユーザーがアタッチされているポリシーの一覧を取得します。取得したポリシーが1回の取得で全て取得できない場合には、IsTruncatedTrueになりますので、Markerを指定して続きのポリシーを取得することができます。

IAMポリシーを取得した後は、IAMユーザーとIAMポリシーを表示するために、各IAMポリシーのPolicyArnを取得しています。上記の例では、IAMユーザーとIAMポリシーの情報をコンソールに表示していますが、Excelファイルに出力するためには、別途Excelファイルに書き込む処理を追加する必要があります。また、例外エラーが発生した場合には、try-except構文を使用して例外をキャッチして、エラーログを出力するようにしてください。

ChatGPTのスクリプト実行結果:

IAMユーザー: iam-user-a
  IAMポリシー: arn:aws:iam::aws:policy/AdministratorAccess
  IAMポリシー: arn:aws:iam::aws:policy/AWSServiceCatalogEndUserFullAccess
  IAMポリシー: arn:aws:iam::aws:policy/AWSOrganizationsFullAccess
IAMユーザー: iam-user-b
  IAMポリシー: arn:aws:iam::aws:policy/AdministratorAccess
  IAMポリシー: arn:aws:iam::aws:policy/IAMUserChangePassword


⇒あっという間にサンプルコードを提示したうえで解説までしてくれました。

IAMユーザーが所属するIAMグループのIAMポリシー情報を取得しExcelで一覧化したい。ついでにエラー制御も

ChatGPTへの質問:

AWSのIAMユーザーを全て取得し、各IAMユーザーが持つIAMグループを全て取得し、各IAMグループが持つIAMポリシーを全て取得後、IAMユーザー、IAMグループ、IAMポリシーの順で一覧化したExcelファイルを作成する方法について教えて下さい。また、そのプログラムは例外エラー発生時にエラーログを出力するようにして下さい。

ChatGPTからの回答:

AWSのIAMユーザーを全て取得し、各IAMユーザーが持つIAMグループを全て取得し、各IAMグループが持つIAMポリシーを全て取得後、IAMユーザー、IAMグループ、IAMポリシーの順で一覧化したExcelファイルを作成するためには、PythonでAWS SDKとOpenpyxlを使用することができます。

以下は、Python 3.xを使用したAWS SDKとOpenpyxlを使ったサンプルコードです。AWS SDKとOpenpyxlのセットアップが完了していることを前提としています。

import boto3
import openpyxl
import logging

# IAMクライアントの作成
iam = boto3.client('iam')

# Excelファイルの作成
workbook = openpyxl.Workbook()
worksheet = workbook.active

# ヘッダー行の設定
worksheet.cell(row=1, column=1, value='IAMユーザー')
worksheet.cell(row=1, column=2, value='IAMグループ')
worksheet.cell(row=1, column=3, value='IAMポリシー名')
worksheet.cell(row=1, column=4, value='IAMポリシーARN')

# 行の開始位置
row_num = 2

try:
    # すべてのIAMユーザーを取得する
    users = iam.list_users()['Users']

    # IAMユーザーごとに処理する
    for user in users:
        # IAMユーザーが所属するすべてのIAMグループを取得する
        groups = iam.list_groups_for_user(UserName=user['UserName'])['Groups']
        for group in groups:
            # IAMグループが持つIAMポリシーを取得する
            policies = iam.list_attached_group_policies(GroupName=group['GroupName'])['AttachedPolicies']
            for policy in policies:
                # Excelファイルに書き込む
                worksheet.cell(row=row_num, column=1, value=user['UserName'])
                worksheet.cell(row=row_num, column=2, value=group['GroupName'])
                worksheet.cell(row=row_num, column=3, value=policy['PolicyName'])
                worksheet.cell(row=row_num, column=4, value=policy['PolicyArn'])
                row_num += 1

    # Excelファイルの保存
    workbook.save('IAM_Policies.xlsx')

except Exception as e:
    logging.error(e)

このコードは、AWS SDKとOpenpyxlを使用してIAMクライアントを作成し、すべてのIAMユーザーを取得します。次に、IAMユーザーごとに、IAMグループを取得します。IAMグループごとに、IAMポリシーを取得し、Excelファイルに書き込みます。

Excelファイルに書き込むデータを格納するために、OpenpyxlのWorkbookオブジェクトを作成し、ヘッダー行を設定します。Excelファイルに書き込
※途中でChatGPTからの回答が切れてしまいました

ChatGPTのスクリプト実行結果:

qes-blog-a247-01.png

⇒Excelの表作成やエラー制御についてもスクリプトを提示のうえ解説をしてくれました。さらに質問にはIAMポリシーとしか書いていなかったのにIAMポリシー名に加えてARNも良い感じに追加されています。これは凄い。

まとめ

最後までお読みいただき、誠にありがとうございました!
ChatGPTは少なくとも簡単なAWS管理スクリプトは作成できるようです。
最新仕様の反映や実運用への適用にはカスタマイズが必要かもしれませんが、ChatGPTを利用するのとしないのでは業務効率が大きく変わる可能性があります。

本記事をご活用頂き運用の一助にして頂ければ幸いです。

もし「このサービスについて知りたい」「AWS環境の構築、移行」などのリクエストがございましたら、弊社お問合せフォームまでお気軽にご連絡ください! のちほど当ブログにてご紹介させていただくか、複雑な内容に関するお問い合わせの内容の場合には直接営業からご連絡を差し上げます。

また、よろしければ以下のリンクもご覧ください!
<QES関連ソリューション/ブログ>

<QESが参画しているAWSのセキュリティ推進コンソーシアムがホワイトペーパーを公開しました>

※Amazon Web Services、”Powered by Amazon Web Services”ロゴ、およびブログで使用されるその他のAWS商標は、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。
※その他の会社名、製品名は各社の登録商標または商標です。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

お気軽にお問い合わせください。

ページのトップへ