gpt4 book ai didi

amazon-web-services - 如何从另一个模板向现有 SQS QueuePolicy 添加新语句?

转载 作者:行者123 更新时间:2023-12-03 07:35:53 26 4
gpt4 key购买 nike

我有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com