作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 2 个具有不同 Cloudformation YAML 模板的服务,并且想要向生产者服务中定义的队列策略添加另一个策略(以允许使用者接收和删除消息)。但是,我当前的解决方案只是覆盖现有策略而不是附加它(即策略中仅保留消费者服务角色)。
这是生产者的 Cloudformation 模板 SQS 部分:
ProducerQueuePolicy:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Version: '2012-10-17'
Id: SQSPolicy
Statement:
- Effect: Allow
Principal:
AWS:
- !GetAtt ServiceRole.Arn
Resource: !GetAtt ProducerQueue.Arn
Action:
- 'sqs:DeleteMessage'
- 'sqs:ReceiveMessage'
- 'sqs:ListQueues'
- 'sqs:SendMessage'
- 'sqs:GetQueueUrl'
- 'sqs:GetQueueAttributes'
Queues: [ !Ref ProducerQueue ]
ProducerDeadLetterQueue:
Type: 'AWS::SQS::Queue'
Properties:
QueueName: !Sub "${AWS::StackName}-ProducerDLQ.fifo"
FifoQueue: true
ContentBasedDeduplication: false
ProducerQueue:
Type: 'AWS::SQS::Queue'
Properties:
QueueName: !Sub "${AWS::StackName}-ProducerQueue.fifo"
FifoQueue: true
MessageRetentionPeriod: 1209600
ContentBasedDeduplication: false
RedrivePolicy:
deadLetterTargetArn: !GetAtt ProducerDeadLetterQueue.Arn
maxReceiveCount: 9
# Outputs -------------------------------------------------------------------------
Outputs:
ProducerQueueUrl:
Value: !Ref ProducerQueue
Export:
Name: ProducerQueueUrl
ProducerQueueArn:
Value: !GetAtt ProducerQueue.Arn
Export:
Name: ProducerQueueArn
这是面向消费者的 Cloudformation:
#SQS policy configuration for consumer
ProducerQueueConsumptionPolicy:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Version: '2012-10-17'
Id: SQSConsumptionPolicy
Statement:
- Effect: Allow
Principal:
AWS:
- !GetAtt ServiceRole.Arn
Resource:
Fn::ImportValue: ProducerQueueArn
Action:
- 'sqs:DeleteMessage'
- 'sqs:ReceiveMessage'
- 'sqs:GetQueueUrl'
- 'sqs:GetQueueAttributes'
Queues:
- Fn::ImportValue: ProducerQueueUrl
需要做什么才能改变这种行为?
最佳答案
如果您只想合并队列策略,请编写一个 cloudformation 宏,该宏从模板中读取策略定义并将其与现有队列策略合并。该宏获得模板的 json 版本,您可以在 lambda 中按照您喜欢的方式操作它,以便您可以检查现有队列策略并适当更新模板。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html
另一种方法是削弱队列策略,以便帐户中的任何内容都允许大多数操作。然后通过单独的角色添加对队列读取和写入的权限(例如 lambda)。因此,执行读取操作的 lambda 将使用一种允许读取的角色,而执行写入操作的 lambda 将使用另一种允许写入的角色。
显然,这可能不符合您安排安全的方式,因此可能不合适。
关于amazon-web-services - 如何从另一个模板向现有 SQS QueuePolicy 添加新语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58379911/
我是一名优秀的程序员,十分优秀!