如何通过AWS CLI访问跨账号CloudWatch指标?GUI可行CLI失败求助
跨账号CloudWatch CLI访问问题排查方案
我来帮你梳理下这个问题——既然GUI能正常跨账号访问CloudWatch指标,那核心问题大概率出在CLI的身份验证逻辑或者命令配置上,咱们一步步排查:
1. 先确认CLI当前使用的身份是否正确
GUI能访问说明跨账号的IAM权限(角色信任策略、资源策略)是没问题的,但CLI可能默认用了主账号的本地凭证,而非你在GUI中切换的跨账号角色。
先执行这条命令确认当前CLI的身份:
aws sts get-caller-identity
对比返回的Account字段,看是不是你要访问的次级账号ID。如果是主账号ID,那就是身份没切换对。
2. 配置CLI的跨账号角色Profile
如果需要通过角色切换访问次级账号,最稳妥的方式是在CLI配置文件里设置专门的profile:
编辑~/.aws/config(Windows用户是C:\Users\<你的用户名>\.aws\config),添加如下配置:
[profile secondary-cloudwatch] role_arn = arn:aws:iam::[你的次级账号ID]:role/[跨账号访问角色名] source_profile = default # 这里填你主账号的CLI profile名称(通常是default) region = us-east-1 # 替换成你要访问的CloudWatch区域
保存后,用这个profile执行CloudWatch命令,比如:
aws cloudwatch list-metrics --profile secondary-cloudwatch
3. 检查命令的区域参数
CloudWatch是区域级服务,GUI可能自动切换到了目标区域,但CLI默认区域可能不匹配。如果profile里没指定region,记得在命令里显式添加:
aws cloudwatch get-metric-statistics --namespace "AWS/EC2" --metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-1234567890abcdef0 --start-time 2024-01-01T00:00:00Z --end-time 2024-01-02T00:00:00Z --period 3600 --statistics Average --profile secondary-cloudwatch --region ap-southeast-1
4. 排查凭证缓存问题
如果之前切换过角色,CLI可能缓存了过期的临时凭证,导致权限验证失败。可以删除CLI的缓存目录:
rm -rf ~/.aws/cli/cache # Linux/Mac # Windows用户执行: # Remove-Item -Recurse -Force $env:USERPROFILE\.aws\cli\cache
之后重新执行带profile的命令,让CLI重新获取新的临时凭证。
5. 验证权限是否生效
如果还是有问题,可以用IAM模拟策略来验证当前身份是否有权限访问次级账号的CloudWatch:
aws iam simulate-principal-policy \ --policy-source-arn [当前身份的ARN(从get-caller-identity获取)] \ --action-names cloudwatch:GetMetricData cloudwatch:GetMetricStatistics \ --resource-arns arn:aws:cloudwatch:[目标区域]:[次级账号ID]:metric/*
看返回结果里的EvalDecision字段,如果是allowed,说明权限没问题,问题出在命令或配置上;如果是denied,则需要检查次级账号的角色信任策略或主账号用户的权限。
内容的提问来源于stack exchange,提问作者rahuls36
相关产品推荐
相关产品推荐

