web-dev-qa-db-ja.com

IAMユーザー、そのグループ、およびポリシーを取得するにはどうすればよいですか?

すべてのawsユーザー、それに対応するグループ、ポリシーを取得し、mfaがアクティブ化されているかどうかを取得する必要があります。誰かがawscliまたはbotoを介してそれを行う方法を教えてもらえますか?.

私はawsのすべてのユーザーだけをフェッチするスクリプトを持っています。

  import boto3
    from boto3 import *
    import argparse

    access_key = ''
    secret_key = ''

    def get_iam_uses_list():
    client =  boto3.client('iam',
                aws_access_key_id=access_key,
                aws_secret_access_key=secret_key)
       my_list=list()
       iam_all_users = client.list_users(MaxItems=200)
       for user in iam_all_users['Users']:
        my_list.append(user['UserName'])
#

    for i in my_list:
        print i

#    print "read complete"
#
#    for i in my_list:
#        iam_user_policy=client.list_attached_user_policies(UserName=i)
#        for policy in iam_user_policy['AttachedPolicies']:
#               print "%s \t %s" %(i, policy['PolicyName'])

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('access_key', help='Access Key');
    parser.add_argument('secret_key', help='Secret Key');
    args = parser.parse_args()
    global access_key
    global secret_key
    access_key = args.access_key
    secret_key = args.secret_key
get_iam_uses_list()

if  __name__ =='__main__':main()
6
batman

ここでは、botoコマンドを使用して4つの操作を実行しています-

  1. すべてのユーザーを一覧表示します
  2. 各ユーザーに添付されているリストポリシー
  3. 各ユーザーに追加された役割を一覧表示します
  4. MFAデバイスを一覧表示して、MFAがユーザーによって構成されているかどうかを確認します(ここでは、MFAが有効になっていないかどうかを確認していませんが、デバイスがユーザーによって構成されているかどうかを確認しています)。

AWSアカウントへのIAM接続を取得

import boto3
client = boto3.client('iam',aws_access_key_id="XXX",aws_secret_access_key="XXX") 

IAMユーザーの取得これにより、すべてのユーザー名が出力されます。他の詳細も印刷したい場合は、カスタマイズできます。

users = client.list_users()
for key in users['Users']:
    print key['UserName']

各ユーザーに添付されたポリシーのリストの取得

for key in users['Users']:
    List_of_Policies =  client.list_user_policies(UserName=key['UserName'])
    for key in List_of_Policies['PolicyNames']:
        print key['PolicyName']

各ユーザーに関連付けられているグループのリストを取得する

for key in users['Users']:
    List_of_Groups =  client.list_groups_for_user(UserName=key['UserName'])
       for key in List_of_Groups['Groups']:
           print key['GroupName']

MFAデバイスが構成されているかどうかの確認

for key in users['Users']:
    List_of_MFA_Devices = client.list_mfa_devices(UserName=key['UserName'])
    for key in List_of_MFA_Devices['MFADevices']:
          print key

List_of_MFA_Devices ['MFADevices']が空かどうかをさらに確認できます。空の場合、MFAデバイスは構成されていません。

各インデックスにdictが含まれるDictのリストとして出力を追加する場合は、userName、Groups、Policy、isMFA_flag_configuredの値のペアがあります。次のコードを使用してください-

import boto3
client = boto3.client('iam',aws_access_key_id="XXXX",aws_secret_access_key="YYY")
users = client.list_users()
user_list = []
for key in users['Users']:
    result = {}
    Policies = []
    Groups=[]

    result['userName']=key['UserName']
    List_of_Policies =  client.list_user_policies(UserName=key['UserName'])

    result['Policies'] = List_of_Policies['PolicyNames']

    List_of_Groups =  client.list_groups_for_user(UserName=key['UserName'])

    for Group in List_of_Groups['Groups']:
        Groups.append(Group['GroupName'])
    result['Groups'] = Groups

    List_of_MFA_Devices = client.list_mfa_devices(UserName=key['UserName'])

    if not len(List_of_MFA_Devices['MFADevices']):
        result['isMFADeviceConfigured']=False   
    else:
        result['isMFADeviceConfigured']=True    
    user_list.append(result)

for key in user_list:
    print key

上記のコードの出力-

{'userName': 'user1'、 'Groups':['grp1'、 'grp2']、 'Policies':['policy1'、 'policy2]、' isMFADeviceConfigured ':False/True}

{'userName': 'user2'、 'Groups':['grp1'、 'grp2']、 'Policies':['policy1'、 'policy2]、' isMFADeviceConfigured ':False/True}

19
Arora20