Python boto3调用IAM list_users仅返回100个用户如何解决
问题原因
这不是AWS控制台设置的限制,是AWS IAM服务ListUsers接口的原生分页规则:所有AWS List类型的API默认单次调用最多返回100条资源,你代码中只调用了一次list_users(),仅拉取了第一页的100条用户数据,因此统计到100就停止了。该分页机制是AWS API的通用设计,不存在所谓「解除限制」的设置,通过分页拉取就能获取全量的IAM用户数据。
解决方法
有两种常用的实现方案:
- 方案1:手动处理分页标记:每次调用API后检查返回结果中的
IsTruncated字段,若为True则携带返回的Marker参数再次调用接口拉取下一页数据,直到IsTruncated为False即可拉取全量数据。 - 方案2:使用boto3内置的paginator分页器(更简便,无需手动处理标记逻辑),boto3已经封装好了完整的分页处理逻辑,直接调用即可自动拉取所有页面的数据。
修改后的完整代码参考:
#!/usr/bin/env python3 import boto3 def main(): Usercount = 0 client = boto3.client( 'iam', aws_access_key_id="XXXXXXXXXXXXXX", aws_secret_access_key="XXXXXXXXXXXXXXXXXXXXXX" ) try: # 初始化list_users接口的分页器 paginator = client.get_paginator('list_users') # 遍历所有页面的用户数据 for page in paginator.paginate(): for user in page['Users']: Usercount +=1 print(Usercount) except Exception as e: print(f"Error getting user count: {e}") if __name__ == "__main__": main()
额外注意事项
- 不要将AWS访问密钥硬编码在代码中,生产环境推荐使用IAM角色、本地凭证配置文件或环境变量传递凭证,避免密钥泄露风险。
list_users接口支持手动指定MaxItems参数,最大可设置为1000,即单次调用最多返回1000条用户数据,但若用户量超过1000仍需通过分页处理拉取全量数据。
内容的提问来源于stack exchange,提问作者data-bite
相关产品推荐
相关产品推荐

