SQSPolicy 在堆栈创建期间失败

问题描述 投票:0回答:3

我似乎无法弄清楚是什么导致了这次失败。我提到了一篇文章。谁能告诉我可能导致此错误的原因是什么?

AllowSNS2SQSPolicy:
    Type: AWS::SQS::QueuePolicy
    Properties:
      Queues: [ !Ref SQSQueue ]
      PolicyDocument:
        Version: "2012-10-17"
        Id: SQSPolicy
        Statement: 
        - Sid: Allow-SNS-SendMessage    
          Effect: Allow 
          Principal:    
            AWS:
            - 'arn:aws:ecs:${AWS::Region}:${AWS::AccountId:}:cluster/foo'
          Action:   
          - 'sqs:SendMessage'
          - 'sqs:ReceiveMessage' 
        Resource: !GetAtt [SQSQueue, Arn]

错误信息:

参数策略值无效。 (服务:AmazonSQS;状态代码:400,错误代码:InvalidAttributeValue...

aws-cloudformation amazon-sqs
3个回答
3
投票

不确定您是否解决了问题,但这也许对其他人有帮助。

我遇到了这个问题,只是通过允许任何用户访问该资源来解决它。我不知道为什么,但指定

Principal
时我无法让 Json 策略工作?我也没有找到任何使用除
Principal: "*"
...

之外的任何示例

即使您允许所有人访问该资源,您仍然可以使用

Condition
来限制对您的资源的访问。

AllowSNS2SQSPolicy:
    Type: AWS::SQS::QueuePolicy
    Properties:
      Queues: [ !Ref SQSQueue ]
      PolicyDocument:
        Version: "2012-10-17"
        Id: SQSPolicy
        Statement: 
        - Sid: Allow-SNS-SendMessage    
          Effect: Allow 
          Principal: '*'
          Action:   
          - 'sqs:SendMessage'
          - 'sqs:ReceiveMessage' 
          Resource: !GetAtt [SQSQueue, Arn]
          Condition:
            ArnEquals:
              aws:SourceArn: !GetAtt YourEcsClusterResource.Arn

以下是对我有帮助的文档:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-examples-of-sqs-policies.html


1
投票

这应该可以解决它:

AllowSNS2SQSPolicy:
  Type: AWS::SQS::QueuePolicy
  Properties:
    Queues: [ !Ref SQSQueue ]
    PolicyDocument:
      Version: "2012-10-17"
      Id: SQSPolicy
      Statement: 
      - Sid: Allow-SNS-SendMessage    
        Effect: Allow 
        Principal:    
          AWS:'arn:aws:ecs:${AWS::Region}:${AWS::AccountId:}:cluster/foo'
        Action:   
        - 'sqs:SendMessage'
        - 'sqs:ReceiveMessage' 
        Resource: !GetAtt [SQSQueue, Arn]  

1
投票

我的第一个愚蠢错误:我写了

"Principal": <my ARN>

而不是

"Principal": {
   "AWS": <my ARN>
}

第二个错误,不是那么愚蠢:我尝试使用 lambda arn 作为主体,但不得不使用 lambda role arn。因此,对于最初的问题,我建议不要使用 ecs arn,而是使用 ecs role arn。

© www.soinside.com 2019 - 2024. All rights reserved.