You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:02:38