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

如何使用boto3审计多AWS账户的IAM用户及关联访问密钥

AWS多账户IAM访问密钥巡检脚本实现方案

核心实现思路

  • 提前在~/.aws/credentials中配置好所有需要巡检的AWS账户对应的profile,每个profile对应一个账户的访问凭证
  • 脚本通过遍历指定的profile列表,逐个切换账户调用IAM接口拉取数据
  • 拉取到的用户、密钥、最后使用时间数据直接写入CSV文件,避免终端输出混乱

完整可运行Python脚本

import boto3
import csv
from datetime import datetime

# 替换为你本地配置的AWS profile名称列表
PROFILES = ["prod-account", "test-account", "dev-account"]
OUTPUT_CSV_PATH = "iam_access_keys_report.csv"

def main():
    with open(OUTPUT_CSV_PATH, mode='w', newline='', encoding='utf-8') as csv_file:
        csv_writer = csv.writer(csv_file)
        # 写入CSV表头
        csv_writer.writerow(["所属账户", "IAM用户名", "访问密钥ID", "密钥状态", "密钥创建时间", "最后使用时间", "最后使用区域"])
        
        for profile_name in PROFILES:
            try:
                # 切换对应账户的profile创建客户端
                session = boto3.Session(profile_name=profile_name)
                iam_client = session.client('iam')
                
                # 拉取当前账户所有IAM用户
                all_users = iam_client.list_users()['Users']
                for user in all_users:
                    user_name = user['UserName']
                    # 拉取对应用户的所有访问密钥
                    access_keys = iam_client.list_access_keys(UserName=user_name)['AccessKeyMetadata']
                    for key in access_keys:
                        key_id = key['AccessKeyId']
                        key_status = key['Status']
                        create_time = key['CreateDate'].strftime('%Y-%m-%d %H:%M:%S')
                        
                        # 查询密钥最后使用信息
                        last_used_data = iam_client.get_access_key_last_used(AccessKeyId=key_id)['AccessKeyLastUsed']
                        if 'LastUsedDate' in last_used_data:
                            last_used_time = last_used_data['LastUsedDate'].strftime('%Y-%m-%d %H:%M:%S')
                            last_used_region = last_used_data['Region']
                        else:
                            last_used_time = "从未使用"
                            last_used_region = "-"
                        
                        # 写入单条数据到CSV
                        csv_writer.writerow([profile_name, user_name, key_id, key_status, create_time, last_used_time, last_used_region])
                print(f"账户 {profile_name} 数据拉取完成")
            except Exception as e:
                print(f"处理账户 {profile_name} 失败: {str(e)}")
                continue

if __name__ == "__main__":
    main()

使用方法

  • 先安装依赖库:pip install boto3
  • 把脚本里的PROFILES列表替换成你本地~/.aws/credentials中实际配置的profile名称
  • 运行脚本:python3 iam_key_report.py
  • 运行结束后同目录下会生成iam_access_keys_report.csv文件

注意事项

  • 每个profile对应的IAM凭证需要有iam:ListUsers、iam:ListAccessKeys、iam:GetAccessKeyLastUsed权限
  • 密钥如果从未使用过,最后使用时间字段会显示从未使用
  • 如果不需要扫描某个账户,直接从PROFILES列表中删除对应profile名称即可

内容的提问来源于stack exchange,提问作者S D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:15:01