为什么使用AWS JavaScript SDK调用iam.listUsers仅返回100个IAM用户
问题根因
AWS IAM 开放接口的listUsers默认做了分页限制,单次请求最多返回100条IAM用户数据。你没有加分页处理逻辑,所以只能拿到第一页的100条结果,和你账户下的总用户数无关。
解决方案
如果你使用的是AWS SDK for JavaScript v2
方案1:手动处理分页标记
每次请求返回结果中如果IsTruncated字段值为true,说明还有后续数据,将返回的Marker作为下一次请求的入参传入即可拉取下一页数据,直到IsTruncated为false就拉取完了所有用户:
async function fetchAllIamUsers() { const userList = []; let nextMarker = null; do { const requestParams = nextMarker ? { Marker: nextMarker } : {}; const res = await iam.listUsers(requestParams).promise(); userList.push(...res.Users); nextMarker = res.IsTruncated ? res.Marker : null; } while (nextMarker); return userList; } // 调用获取全量用户 const allUsers = await fetchAllIamUsers();
方案2:使用SDK内置分页工具
v2版本SDK已经内置了分页迭代器,可以更简洁的完成全量数据拉取:
const allUsers = []; for await (const page of iam.listUsers().paginate()) { allUsers.push(...page.Users); }
如果你使用的是AWS SDK for JavaScript v3
v3版本需要引入对应的分页工具来实现全量拉取:
import { IAMClient, paginateListUsers } from "@aws-sdk/client-iam"; const iamClient = new IAMClient({ // 你的客户端配置 }); async function fetchAllIamUsers() { const userList = []; const paginator = paginateListUsers({ client: iamClient }, {}); for await (const page of paginator) { userList.push(...page.Users); } return userList; } const allUsers = await fetchAllIamUsers();
内容的提问来源于stack exchange,提问作者Jahzan Ahamed
相关产品推荐
相关产品推荐

