如何筛选AWS IAM中Team标签为red的完整用户记录?
解决AWS IAM用户按Team标签筛选完整记录的问题
情况1:原脚本输出文本格式(按用户分块,块间空行分隔)
如果你的原脚本输出是每个用户信息占一块、块之间用空行分隔的文本(比如包含用户ARN、创建时间、标签行、所属组等),可以用awk按块筛选,避免只输出匹配的单行:
# 替换成你的原脚本路径 ./your-original-iam-script.sh | awk ' BEGIN { current_block = ""; match_flag = 0 } # 累积当前用户块的每一行 { current_block = current_block $0 "\n" # 根据你原脚本的标签格式调整正则,示例匹配"Tag: Key=Team, Value=red"格式 if ($0 ~ /Tag: Key=Team, Value=red/) { match_flag = 1 } } # 遇到空行(块结束)时,检查匹配状态并输出 /^$/ { if (match_flag) { print current_block } current_block = "" match_flag = 0 next } # 处理最后一个无空行结尾的用户块 END { if (match_flag) { print current_block } } '
关键说明:
- 用
current_block变量完整累积单个用户的所有信息行,而非仅处理单行 - 当块内出现目标标签行时,标记
match_flag为1 - 块结束(空行)时,根据标记决定是否输出整个用户块
- 务必根据原脚本的实际标签格式修改正则(比如标签行是
Team: red,就把正则改成/Team: red/)
情况2:原脚本输出JSON格式(推荐用jq更可靠)
如果原脚本是调用AWS CLI输出JSON(比如用aws iam get-account-authorization-details --filter User),直接用jq筛选更精准,不受文本格式变化影响:
aws iam get-account-authorization-details --filter User | jq '.UserDetailList[] | select(.Tags[]? | .Key == "Team" and .Value == "red")'
逻辑说明:
.UserDetailList[]遍历所有用户详情条目select(.Tags[]? | .Key == "Team" and .Value == "red")只保留包含Team=red标签的用户,输出完整的用户记录(包括标签、所属组等信息)
内容的提问来源于stack exchange,提问作者xtonehari
相关产品推荐
相关产品推荐

