今回の私のお題
AWSのAPIを使って、
ユーザ名、参加しているグループ名、MFAの有効状況を取得しようと思います。
みんな大好き(?)エクセルやスプレッドシートにコピペできるようにしたいと思います。
また、ついでに存在しているグループにアタッチしているポリシー名も別途出力します。
(スプレッドシートに転記するならGASで組めばいいじゃんと思いますが・・・)
今回の中身
#!/usr/bin/env python3 import sys import boto3 from boto3.session import Session if(len(sys.argv) != 2): print(sys.argv[0] + ' [aws cli profile name]') sys.exit() session = Session(profile_name=sys.argv[1]) iam = session.client('iam') def get_users(): user_lists = [] res = iam.list_users() for lists in res['Users']: userlist = lists['UserName'] user_lists.append(userlist) return user_lists def get_groups(username): group_lists = [] res = iam.list_groups_for_user(UserName=username) for lists in res['Groups']: groupnames = lists['GroupName'] group_lists.append(groupnames) return group_lists def get_mfa_stats(username): res = iam.list_mfa_devices(UserName=username) if not res['MFADevices']: mfa_stats = 'False' else: mfa_stats = 'True' return mfa_stats def get_avail_groups(): avail_groups = [] res = iam.list_groups() for lists in res['Groups']: avail_group = lists['GroupName'] avail_groups.append(avail_group) return avail_groups def get_policies(groupname): avail_policies = [] res = iam.list_attached_group_policies(GroupName=groupname) for lists in res['AttachedPolicies']: avail_policy = lists['PolicyName'] avail_policies.append(avail_policy) return avail_policies def main(): print('### Userlists') for user_list in get_users(): groupname = get_groups(user_list) mfa_stats = get_mfa_stats(user_list) print(user_list, ':'.join(groupname), mfa_stats, sep=',') print('\n### GroupLists') for group_list in get_avail_groups(): policyname = get_policies(group_list) print(group_list, ':'.join(policyname), sep=',') if __name__ == '__main__': main()
出力例
出力結果としては、カンマ区切りで各カラムは以下のような形。
###UsaerLists
UserName, GroupName, MFA Status
### GroupLists
GroupName, AttachPolicy
(複数のグループ所属の場合は「:」区切りで表示します。)
$ ./get_userlist.py [実行するaws cliのprofile名] ### Userlists dev-user01,Adm:test1,True read-user01,ReadOnly,False ### GroupLists Adm,AdministratorAccess ReadOnly,ReadOnlyAccess test1,ReadOnlyAccess:BillingFullAccess
そもそもでクラウドを使ったり、どれだけ楽をするかと言われている中でユーザ情報を別途管理するような形はナンセンスと思いますが、
何かのドキュメント作成などに利用したりできればと。