请求编写Python Boto3脚本获取未激活MFA设备的IAM用户信息
获取未激活MFA的IAM用户脚本(Python + Boto3)
嗨!作为Python和Boto3新手,能想到用脚本自动化这个需求真的很棒~手动查凭证报告确实不够高效,下面我给你一个完整的解决方案,还会解释每个部分的作用,方便你理解。
前提准备
- 已经配置好AWS凭证:可以通过
aws configure命令设置,或者配置环境变量/本地凭证文件。 - 拥有足够的IAM权限:需要
iam:ListUsers和iam:ListMFADevices权限,最简单的方式是给你的IAM用户附加IAMReadOnlyAccess策略。
完整脚本
import boto3 def get_users_without_mfa(): # 创建IAM客户端,用于与AWS IAM服务交互 iam = boto3.client('iam') # 获取所有IAM用户的基础信息 users = iam.list_users()['Users'] # 初始化列表,用来存储未激活MFA的用户信息 users_without_mfa = [] for user in users: username = user['UserName'] # 查询当前用户的MFA设备列表 mfa_devices = iam.list_mfa_devices(UserName=username)['MFADevices'] # 如果MFA设备列表为空,说明该用户未激活MFA if not mfa_devices: users_without_mfa.append({ 'UserName': username, 'UserId': user['UserId'], 'CreateDate': user['CreateDate'].strftime('%Y-%m-%d %H:%M:%S') }) return users_without_mfa if __name__ == "__main__": # 调用函数获取结果 users_without_mfa = get_users_without_mfa() # 根据结果输出信息 if users_without_mfa: print("以下IAM用户未激活MFA设备:") for user in users_without_mfa: print(f"用户名: {user['UserName']}, 用户ID: {user['UserId']}, 创建时间: {user['CreateDate']}") else: print("所有IAM用户都已激活MFA设备!")
代码解释
- 导入Boto3:
import boto3是使用AWS Python SDK的基础,它帮我们封装了和AWS服务交互的所有细节。 - 创建IAM客户端:
boto3.client('iam')建立与IAM服务的连接,后续所有操作都通过这个客户端完成。 - 获取所有用户:
list_users()返回AWS账户下的所有IAM用户,包含用户名、用户ID、创建时间等基础信息。 - 检查MFA设备:对每个用户调用
list_mfa_devices(),如果返回的设备列表为空,就把该用户的关键信息收集起来。 - 结果输出:最后把收集到的用户信息打印出来,一目了然。
扩展功能:保存结果到CSV文件
如果需要把结果导出到CSV方便后续处理,可以添加以下代码到主函数中:
import csv # 在获取users_without_mfa之后添加: with open('users_without_mfa.csv', 'w', newline='') as csvfile: # 定义CSV表头 fieldnames = ['UserName', 'UserId', 'CreateDate'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() # 逐行写入用户信息 for user in users_without_mfa: writer.writerow(user)
运行脚本后,会在当前目录生成一个users_without_mfa.csv文件,包含所有未激活MFA的用户信息。
内容的提问来源于stack exchange,提问作者Ebin Davis
相关产品推荐
相关产品推荐

