如何通过标签过滤检索AWS IAM角色的ARN、名称等详情信息
基于标签检索IAM角色的方法
AWS的Resource Groups Tagging API完全支持过滤IAM角色,你之前使用的过滤IAM策略的命令稍作修改即可满足需求。
方法1:使用resourcegroupstaggingapi直接过滤(推荐)
- 基础查询:列出所有带标签的IAM角色,返回ARN和对应标签
命令如下:aws resourcegroupstaggingapi get-resources --region us-east-1 --resource-type-filters iam:role - 按指定标签过滤,比如筛选标签
Environment=Production的IAM角色:aws resourcegroupstaggingapi get-resources --region us-east-1 --resource-type-filters iam:role --tag-filters Key=Environment,Values=Production - 直接提取所需的ARN和角色名称,用
--query参数裁剪输出:
该命令会直接返回结构化的ARN和角色名列表,无需额外解析。aws resourcegroupstaggingapi get-resources --region us-east-1 --resource-type-filters iam:role --tag-filters Key=Environment,Values=Production --query 'ResourceTagMappingList[].{ARN:ResourceARN,RoleName:ResourceARN.split(`/`)[-1]}'
方法2:遍历角色查询标签(仅适合角色数量少的场景)
如果特殊场景下无法使用Tagging API,可以先列出所有IAM角色,再逐个查询标签过滤:
# 先获取所有角色名 aws iam list-roles --query 'Roles[].RoleName' --output text | tr '\t' '\n' | while read role; do # 查询角色标签 tags=$(aws iam list-role-tags --role-name $role --query 'Tags[?Key==`Environment` && Value==`Production`]' --output text) if [ -n "$tags" ]; then # 匹配到标签就输出ARN和名称 arn=$(aws iam get-role --role-name $role --query 'Role.Arn' --output text) echo "RoleName: $role, ARN: $arn" fi done
Ansible适配方案
针对Ansible原生模块不支持按标签过滤IAM角色的问题,可以直接在Ansible中用shell模块调用上述AWS CLI命令,用register关键字接收输出,再解析为所需变量使用即可。
内容的提问来源于stack exchange,提问作者Alfred
相关产品推荐
相关产品推荐

