【问题标题】:Amazon AWS SQS - Apply QueuePolicy to existing QueueAmazon AWS SQS - 将 QueuePolicy 应用于现有队列
【发布时间】:2019-10-17 16:38:08
【问题描述】:

如果我通过 Cloudformation 创建 SQS 队列,是否可以在创建 SQS 队列后附加第二个 QueuePolicy?

如果我确实运行以下配置:

Resources:
  SQSQueue:
    Properties:
      QueueName: !Ref SQSQueuename
    Type: 'AWS::SQS::Queue'
  QueuePolicy:
    Type: 'AWS::SQS::QueuePolicy'
    Properties:
      PolicyDocument:
        Id: !Ref SQSQueuename
        Statement:
          - Sid: QueuePolicy2-SendMessage-To-Queue-From-SNS-Topic
            Effect: Allow
            Principal:
              AWS: !Ref AccountID
            Action:
              - 'sqs:*'
            Resource: 'arn:aws:sqs:eu-central-1:123456789010:${SQSQueuename}'
      Queues:
        - !Ref SQSQueue 
   DependsOn:
     - SQSQueue

我是否能够创建附加到已创建队列的另一个 QueuePolicy?我将如何附加它?通过 ARN?

Resources:
  SecondQueuePolicy:
    Type: 'AWS::SQS::QueuePolicy'
    Properties:
      PolicyDocument:
        Id: !Ref SQSQueuename
        Statement:
          - Sid: QueuePolicy2-SendMessage-To-Queue-From-SNS-Topic
            Effect: Allow
            Principal:
              AWS: !Ref AccountID
            Action:
              - 'sqs:*'
            Resource: 'arn:aws:sqs:eu-central-1:123456789010:${SQSQueuename}'
      Queues:
        - !Ref SQSQueue <-- how do i ref to the Queue ?
   DependsOn:
     - SQSQueue

【问题讨论】:

  • 第二个策略是否会成为第二个 CloudFormation 堆栈的一部分?如果是这种情况,您可以使用Fn::ImportValue

标签: amazon-web-services amazon-cloudformation amazon-sqs


【解决方案1】:

确保在您的第一个模板中导出队列 URL 和名称:

Outputs: 
  QueueURL: 
    Value: !Ref SQSQueue
    Export:
      Name: ExampleStack-QueueURL
  QueueName: 
    Value: !GetAtt SQSQueue.QueueName
    Export:
      Name: ExampleStack-QueueName

在第二个模板中导入新导出的值(不需要 DependsOn):

  SecondQueuePolicy:
    Type: 'AWS::SQS::QueuePolicy'
    Properties:
      PolicyDocument:
        Id: !Ref SQSQueuename
        Statement:
          - Sid: QueuePolicy2-SendMessage-To-Queue-From-SNS-Topic
            Effect: Allow
            Principal:
              AWS: !Ref AccountID
            Action:
              - 'sqs:*'
            Resource:
              Fn::Sub:
                - 'arn:aws:sqs:eu-central-1:123456789010:${QueueName}'
                - QueueName:
                    Fn::ImportValue: ExampleStack-QueueName
      Queues:
        - Fn::ImportValue: ExampleStack-QueueURL

【讨论】:

  • SQSQueuename 取自最初的问题,但不相关。使用SQSQueue.Arn 确实会更好。也许它在 2017 年不可用,或者我当时忽略了它。感谢您指出这一点。
猜你喜欢
  • 1970-01-01
  • 2019-12-31
  • 2017-04-12
  • 2016-01-18
  • 2019-04-11
  • 2012-11-15
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多