Search code examples
amazon-web-servicesamazon-sqsserverless-frameworkamazon-sns

Invalid parameter error when creating SNS policy


I'm trying to give SNS the permission to publish to an SQS queue but I keep getting error:

Invalid parameter: Policy Error: null (Service: AmazonSNS; Status Code: 400; Error Code: InvalidParameter; Request ID: a5459d05-e37a-5906-92c2-c16c4813cca0; Proxy: null)

I am using the serverless framework, and have read multiple posts describing the same issue but none of the fixes seem to work, here is my current version:

MyTopicPolicy:
  Type: AWS::SNS::TopicPolicy
  Properties:
    PolicyDocument:
      Id: 'allowsSNSToSQS'
      Version: '2012-10-17'
      Statement:
        Sid: AllowSNStoPublishToSQS
        Effect: Allow
        Principle: "*"
        Action: 'sqs:SendMessage'
        Resource:
          Fn::GetAtt: [MyQueue , Arn ]
        Condition:
          ArnEquals:
            aws:SourceArn: { "Ref" : "MyTopic" }
    Topics:
      - { "Ref" : "MyTopic" }

Does anyone have any ideas? thanks


Solution

  • Along with the typo I was also using the wrong policy type, I should've been using AWS::SQS::QueuePolicy as can be seen below:

    MyTopicPolicy:
      Type: AWS::SQS::QueuePolicy
      Properties:
        Queues: 
          - {"Ref": "MyQueue"}
        PolicyDocument:
          Id: 'allowsSNSToSQS'
          Version: '2012-10-17'
          Statement:
            Sid: AllowSNStoPublishToSQS
            Effect: Allow
            Principal:
              Service: "sns.amazonaws.com"
            Action: "sqs:SendMessage"
            Resource:
              Fn::GetAtt: [MyQueue , Arn ]
            Condition:
              ArnEquals:
                aws:SourceArn: { "Ref" : "MyTopic" }