【问题标题】:SQSPolicy Fails during stack creationSQSPolicy 在堆栈创建期间失败
【发布时间】:2020-08-21 16:22:26
【问题描述】:

我似乎无法弄清楚导致此故障的原因。我提到了一个article。谁能告诉我可能导致此错误的原因是什么?

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]

错误信息:

Invalid value for parameter Policy. (Service: AmazonSQS; Status Code: 400, Error Code: InvalidAttributeValue...

【问题讨论】:

  • 您想通过您的 ECS 集群作为 Principal 实现什么目标?
  • 我正在努力让ECS集群可以访问Sqs队列

标签: amazon-cloudformation amazon-sqs


【解决方案1】:

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

我遇到了这个问题,只是通过允许任何用户访问资源来解决它。我不知道为什么,但是当指定 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

【讨论】:

  • 这对我有用(抱歉,cmets 中没有代码):主体:服务:“events.amazonaws.com”
  • 我们可以使用“sqs.amazonaws.com”吗?
【解决方案2】:

这应该解决它:

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]  

【讨论】:

    【解决方案3】:

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

    "Principal": <my ARN>

    而不是

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 2021-01-16
      相关资源
      最近更新 更多