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

boto3调用IAM接口分页时最后一个marker失效问题求助

问题根因
  • AWS IAM的分页查询marker是基于请求发起时刻的资源集合快照生成的,你在每次拿到单页策略后直接执行了解绑操作,修改了角色当前绑定的策略总集合,后续请求使用旧marker查询时,资源集合的偏移位置已经发生变化,因此出现第三轮请求返回空列表、遗漏策略的问题。
  • 你设置的MaxItems=1放大了这个问题:每次只返回1条,每拉1条就修改资源集合,分页偏移直接失效。
修复方案

调整执行逻辑:先全量拉取该角色所有绑定的策略,存入本地列表后,再统一遍历执行解绑/删除操作,避免拉取过程中修改资源集合导致分页异常。

修正后代码示例
def get_policies(role_name):
    marker = None
    # 先全量收集所有绑定的策略
    all_attached_policies = []
    # 第一步:全量拉取策略,不做修改操作
    while True:
        if marker:
            resp = iam.list_attached_role_policies(
                RoleName=role_name,
                Marker=marker
            )
        else:
            resp = iam.list_attached_role_policies(
                RoleName=role_name
            )
        all_attached_policies.extend(resp['AttachedPolicies'])
        if resp['IsTruncated']:
            marker = resp['Marker']
        else:
            break
    # 第二步:遍历本地列表执行解绑/删除
    for policy in all_attached_policies:
        detach_policy_from_entities(policy['PolicyArn'])
        print(f"{policy['PolicyName']} 已解绑")
        # 按需打开删除策略的注释
        # iam.delete_policy(PolicyArn=policy['PolicyArn'])
        # print(f"{policy['PolicyName']} 已删除")
    print("策略处理完成")
    return "finished"

内容的提问来源于stack exchange,提问作者Reyansh Kharga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:24:05