AWS SNS 主题策略 Cloudformation

Posted

技术标签:

【中文标题】AWS SNS 主题策略 Cloudformation【英文标题】:AWS SNS Topic Policy Cloudformation 【发布时间】:2017-12-14 15:27:10 【问题描述】:

尝试使用云形成脚本创建 SNS 主题。一切正常,除了主题策略。

这是我们默认得到的,

我想使用云形成脚本如下更新政策。

关于如何实现这一点的任何建议?

【问题讨论】:

【参考方案1】:

正如其中一个 cmets 所指出的,您不想使用 AWS:* 作为委托人,因为它授予任何拥有 AWS 账户访问权限的人。

要创建 SNS 主题并限制对某些服务或帐户中任何人的访问,请使用以下示例。

“AllowServices”SID 显示如何添加多个服务,而 AllowAWS 允许帐户中的任何内容访问它。

---
AWSTemplateFormatVersion: '2010-09-09'

Parameters:
  Email:
    Type: String
    Default: <your name here>

Resources:
  Topic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: TestTopic
      Subscription:
      - Endpoint: !Ref Email
        Protocol: email

  TopicPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties:
      PolicyDocument:
        Statement:
          - Sid: AllowServices
            Effect: Allow
            Principal:
              Service:
                - events.amazonaws.com
                - cloudwatch.amazonaws.com
            Action: 'sns:Publish'
            Resource:
              - !Ref Topic
          - Sid: AllowAWS
            Effect: Allow
            Principal:
              AWS: !Sub "arn:aws:iam::$AWS::AccountId:root"
            Action: 'sns:Publish'
            Resource:
              - !Ref Topic
      Topics:
        - !Ref Topic

【讨论】:

【参考方案2】:

你可以使用这个-我已经删除了锁定自己帐户的默认条件

SNSAccessPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties:
     PolicyDocument:
       Id: <Yourtopic>
       Statement:
         -
           Action: 
            - "sns:Publish"
            - "SNS:GetTopicAttributes"
            - "SNS:SetTopicAttributes"
            - "SNS:AddPermission"
            - "SNS:RemovePermission"
            - "SNS:DeleteTopic"
            - "SNS:Subscribe"
            - "SNS:ListSubscriptionsByTopic"
            - "SNS:Publish"
            - "SNS:Receive"
           Effect: Allow
           Principal:
             AWS: "*"
           Resource:
             Ref: <Yourtopic>
     Topics:
       -
         Ref: <Yourtopic>

【讨论】:

不要使用它 - 它授予任何拥有您的 SNS 的人删除、修改等的能力。 我将它用于我的用例,它只需要事件服务的“sns:Publish”权限【参考方案3】:

我认为您需要一个 AWS::SNS::TopicPolicy 资源。看看这个链接AWS::SNS::TopicPolicy

【讨论】:

以上是关于AWS SNS 主题策略 Cloudformation的主要内容,如果未能解决你的问题,请参考以下文章

来自账户 A 的 AWS Cloudwatch 警报无法发布到账户 B 中的 SNS 主题

AWS SNS ConfirmSubscription 授权从未授予 IAM 用户

Amazon SQS/SNS 策略错误

AWS Eventbridge 通知无法使用 SNS 主题

我如何通过AWS SNS设置有关上传事件的AWS S3?

使用适用于 Ruby 的 AWS 开发工具包发布到 SNS 主题时指定区域