用户未被授权在资源上执行SNS:CreateTopic操作。

7

我希望使用CloudWatch监控特定参数(TotalErrorRate和Latency),并希望通过“Simple Notification Service” (SNS)在云监控发生告警时向我发送电子邮件。

EscalationTopic:
  Type: "AWS::SNS::Topic"
  Properties:
    DisplayName: My Monitoring
    Subscription:
      - Endpoint: !Ref EmailForNotification
        Protocol: email

EscalationTopicEmailSubscriber:
  Type: "AWS::SNS::Subscription"
  Properties:
    Endpoint: !Ref EmailForNotification
    Protocol: email
    TopicArn: !Ref EscalationTopic

但是我收到了这个错误信息: 用户未被授权在 AmazonSNS 资源上执行 SNS:CreateTopic 操作(Service: AmazonSNS; Status Code: 403; Error Code: AuthorizationError)(请参见屏幕截图) enter image description here 为了解决这个问题,我创建了一个主题策略:
   SNSTopicPolicy:
     Type: 'AWS::SNS::TopicPolicy'
     Properties:
       Topics:
         - !Ref EscalationTopic
       PolicyDocument:
         Version: '2012-10-17'
         Statement:
           - Effect: Allow
             Action: 'sns:CreateTopic'
             Resource: !Ref EscalationTopic
             Principal:
               AWS: '*'

但问题仍然存在。
编辑: 在SNS控制台中,我可以手动创建新主题。这难道不意味着我已经获得了创建主题的权限吗?

1
看起来您的 IAM 用户没有足够的权限。请向账户管理员请求授予您创建主题的能力。 - klubi
@SuryavelTR 我遇到了和你完全相同的问题。我拥有 AmazonSNSFullAccess 权限,并且可以在 AWS 控制台 UI 中执行所有操作,但是在 AWS CLI 或 SDK/编程方面却无法执行任何操作。你解决了这个问题吗? - miiiii
@miiiii 是的。对于Android,我必须在aws-configuration.json中提供CredentialsProvider才能使其工作。https://gist.github.com/xvelx/767c4f44ee3f1e169a0f9769a8e52f2c同样地,我还必须在服务器端进行类似的配置,以便我的API可以发布通知。我不记得我做了什么。我会检查一下是否还有旧项目。 - Suryavel TR
@SuryavelTR非常感谢您回复我的评论,但在我的情况下,自账户创建以来就没有任何配置问题,但突然有一天,当通过SDK使用时,它开始给我错误代码403,而通过CLI使用时则会出现“发生错误(AuthorizationError)”。但是AWS控制台UI仍在工作。其他同事的帐户也发生了同样的情况。AWS管理员在此期间未更改任何权限,而我的帐户具有AmazonSNSFullAccess权限。我还没有找到根本原因。 :( - miiiii
@SuryavelTR 我认为这不是我的凭据提供程序的问题,因为我可以看到 aws sts get-caller-identity 的输出非常正确地显示了账户ID/用户ID。 - miiiii
显示剩余2条评论
2个回答

2

0
错误信息非常准确地说明了问题。用于创建 CloudFormation 堆栈的凭据(可能是您的登录凭据,除非在堆栈创建期间指定了角色)未被授权创建 Amazon SNS 主题。
您应该查看与您的 IAM 用户关联的权限并添加必要的权限。
添加 SNS 主题策略不会产生影响,因为它用于给 SNS 一组权限,而您需要权限来创建主题本身。

2
在SNS控制台中,我可以手动创建一个新主题。这难道不意味着我已经获得了创建主题的权限吗? - thadeuszlay
我在想问题是否与与主题相关联的订阅有关?尝试创建一个非常简单的堆栈,只包含 AWS::SNS::Topic 而没有 Subscription 子部分。如果这样可以工作,再添加回 Subscription 并查看是否会出现错误。从小处着手,尝试成功,然后逐步恢复,直到发现问题。 - John Rotenstein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接