You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨账号SNS Topic发布报错:CloudWatch告警无SNS:Publish权限如何解决

跨账号SNS发布权限错误修复方案

核心问题

当前配置存在两处错误:

  • 账号B侧的资源政策修改完全无效:通过fromTopicArn导入的其他AWS账号的SNS Topic属于只读引用,你在账号B的CDK中调用addToResourcePolicy尝试修改账号A的SNS Topic资源政策,AWS会直接拒绝该操作,这段配置不会产生任何效果。
  • 账号A的SNS Topic授权范围不匹配:你仅给账号B的根账号主体授予了SNS:Publish权限,但实际发起请求的主体是账号B的CloudWatch服务,不属于根账号主体范畴,因此触发权限拒绝。

修复步骤

  1. 删除账号B中多余的无效配置,移除以下代码段:
ACCOUNTBTopic.addToResourcePolicy(new PolicyStatement({
  resources: ['ACCOUNT-A-ARN'],
  actions: ['SNS:Publish'],
  effect: Effect.ALLOW,
}))

账号B侧仅需要保留导入SNS Topic、配置CloudWatch告警SNS Action的代码即可。

  1. 修改账号A的CDK配置,给账号B的CloudWatch服务补充授权:
const accountATopic= new sns.Topic(this, 'accountATopic', {
   displayName: 'accountATopic'
 });
 accountATopic.addSubscription(new snsSubscriptions.UrlSubscription('Externalurl'));
 
 // 原有账号B根账号授权保留,可满足账号B其他服务调用SNS的需求
 accountATopic.grantPublish(new iam.AccountPrincipal('ACCOUNTB'));
 // 新增账号B CloudWatch服务发布授权,添加条件限制避免权限过宽
 accountATopic.grantPublish(new iam.ServicePrincipal('cloudwatch.amazonaws.com', {
   conditions: {
     StringEquals: {
       "aws:SourceAccount": "ACCOUNTB"
     },
     ArnLike: {
       "aws:SourceArn": "arn:aws:cloudwatch:*:ACCOUNTB:alarm:*"
     }
   }
 }));
  1. 重新部署账号A的CDK栈,等待资源政策更新完成后即可验证告警通知是否能正常发送到SNS Topic。

可选验证项

如果配置后仍有报错,可逐一检查以下配置:

  • 确认两个账号的ID、SNS Topic ARN填写无拼写错误
  • 确认两个账号属于同一AWS分区(中国区/国际区/GovCloud不能跨分区调用)
  • 登录账号A的SNS控制台,检查Topic的资源政策是否已经包含CloudWatch服务的授权条目

内容的提问来源于stack exchange,提问作者user17071347

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:39:01