求助:使用AWS CLI获取AWS组织内成员账号标签失败
解决AWS CLI获取组织成员账号标签的问题
首先你的命令存在语法错误,而且如果目标是获取成员账号本身的标签,用resourcegroupstaggingapi是不对的——这个API用于获取账号内资源的标签,而非账号自身的标签。下面分两种场景给出可行方案:
场景1:获取成员账号自身的标签
如果要提取组织中每个成员账号的标签(不是账号内资源的标签),可以用以下脚本:
#!/bin/bash # 遍历组织内所有成员账号ID for account_id in $(aws organizations list-accounts --query 'Accounts[].Id' --output text); do # 获取该账号的标签 aws organizations list-tags-for-resource --resource-id "$account_id" --output table done
场景2:获取成员账号内所有资源的标签
如果你的目标是获取每个成员账号内所有资源的标签,需要修正原命令的语法问题,同时确保执行命令的IAM身份有跨账号访问权限,且成员账号已配置策略允许访问Resource Groups Tagging API:
#!/bin/bash # 遍历组织内所有成员账号ID for account_id in $(aws organizations list-accounts --query 'Accounts[].Id' --output text); do aws resourcegroupstaggingapi get-resources \ --query 'ResourceTagMappingList[].{ResourceARN:ResourceARN,Tags:Tags}' \ --output table \ --resource-type-filters AWS::AllSupported \ --region us-east-1 \ --account-id "$account_id" done
关键注意事项
- 权限配置:执行命令的IAM用户/角色需要具备
organizations:ListAccounts、organizations:ListTagsForResource(场景1)或tag:GetResources(场景2)的权限;跨账号访问资源标签时,成员账号需通过资源策略或信任策略允许主账号身份访问。 - 区域限制:
Resource Groups Tagging API是区域服务,若要获取所有区域的资源标签,需要遍历所有AWS区域执行命令。 - 语法修正:原命令缺少
for循环起始部分,且list-accounts的输出需用--output text才能正确传递给循环变量,避免JSON格式干扰。
内容的提问来源于stack exchange,提问作者user272444
相关产品推荐
相关产品推荐

