如何使用boto3列出绑定到角色的所有内联策略
问题原因
你调用的list_attached_role_policies接口设计用途就是查询绑定到指定IAM角色的托管策略(包含AWS托管策略、用户自主创建的客户托管策略),本身不会返回内联策略数据。
正确实现方法
获取角色绑定的内联策略需要使用IAM客户端的内联策略专属接口:
- 第一步:调用
list_role_policies接口,获取绑定到目标角色的所有内联策略名称列表,该接口默认分页返回,单次最多返回100条结果,策略数量较多时需要处理分页逻辑 - 第二步:如果需要获取内联策略的具体权限文档,遍历第一步拿到的策略名列表,逐个调用
get_role_policy接口,传入角色名和对应策略名即可。
可直接运行的代码示例
import boto3 # 初始化IAM客户端 iam_client = boto3.client('iam') role_name = "替换为你的目标角色名" # 自动处理分页,获取所有内联策略名 inline_policy_names = [] paginator = iam_client.get_paginator('list_role_policies') for page in paginator.paginate(RoleName=role_name): inline_policy_names.extend(page['PolicyNames']) print(f"绑定到角色{role_name}的内联策略列表:{inline_policy_names}") # 如需获取每个内联策略的具体权限内容,执行以下逻辑 inline_policy_details = [] for policy_name in inline_policy_names: policy_resp = iam_client.get_role_policy( RoleName=role_name, PolicyName=policy_name ) inline_policy_details.append({ "PolicyName": policy_name, "PolicyDocument": policy_resp['PolicyDocument'] }) # 打印策略详情 for policy in inline_policy_details: print(f"\n内联策略{policy['PolicyName']}的权限内容:") print(policy['PolicyDocument'])
注意:执行上述代码需要确保你使用的身份拥有
iam:ListRolePolicies、iam:GetRolePolicy对应权限,否则会触发权限不足报错。
内容的提问来源于stack exchange,提问作者Navdeep
相关产品推荐
相关产品推荐

