如何修复AWS提示「预算无权限向指定主题发送通知」的跨账号报错
修复步骤
1. 修正根账号SNS主题的访问策略
你当前策略中AWSBudgetsSNSPublishingPermissions语句的Condition配置错误,跨账号场景下AWS:SourceOwner限制会阻止成员账号的Budgets服务请求。替换该语句为以下配置即可,如果你需要允许整个AWS组织内的所有成员账号推送,可使用组织ID做条件限制,安全性更高:
{ "Sid": "AWSBudgetsSNSPublishingPermissions", "Effect": "Allow", "Principal": { "Service": "budgets.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-1:ROOT_ACCOUNT_ID:AWS_Sandbox_Budget", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-xxxxxxxxx" // 替换为你AWS组织的实际ID } } }
如果只允许单个成员账号(XYZ)推送,可将Condition改为:
"Condition": { "StringEquals": { "AWS:SourceAccount": "MEMBER_ACCOUNT_ID" // 替换为成员账号XYZ的12位账号ID } }
同时建议删除原有默认语句中过度宽松的权限配置,避免安全风险,仅保留必要的权限即可。
2. 确认区域匹配
AWS Budgets为全局服务,所有通知推送的SNS主题必须部署在us-east-1(弗吉尼亚北部)区域,你当前的SNS主题ARN已经符合该要求,只需确认成员账号配置预算时未指定其他区域的SNS主题即可。
3. 配置成员账号侧的验证权限
你在成员账号控制台配置预算时,系统会先使用你当前登录的IAM身份校验SNS主题的可访问性,因此需要给你当前使用的IAM用户/角色添加sns:ValidateTopic和sns:GetTopicAttributes权限,允许访问根账号的SNS主题ARN,示例权限策略如下:
{ "Effect": "Allow", "Action": [ "sns:ValidateTopic", "sns:GetTopicAttributes" ], "Resource": "arn:aws:sns:us-east-1:ROOT_ACCOUNT_ID:AWS_Sandbox_Budget" }
以上配置完成后等待1-2分钟策略生效,再重新在成员账号的预算配置页填写SNS主题ARN即可通过校验。
内容的提问来源于stack exchange,提问作者Nikhil K Murali
相关产品推荐
相关产品推荐

