为何执行CloudFormation后我的SQS访问策略被覆盖而非新增?
解决SQS队列策略被CloudFormation覆盖的问题
AWS SQS队列仅能关联一个AWS::SQS::QueuePolicy资源。你当前的模板创建了两个独立的QueuePolicy资源并指向同一个队列,部署时后创建的DlqSqsQueuePolicyV2会直接覆盖之前的DlqSqsQueuePolicy,导致旧策略丢失。
正确的做法是把所有需要的策略语句合并到同一个QueuePolicy资源中,示例模板如下:
DlqSqsQueue: Type: AWS::SQS::Queue Properties: QueueName: !Sub name KmsMasterKeyId: alias/aws/sqs KmsDataKeyReusePeriodSeconds: 86400 UpdateReplacePolicy: Delete DeletionPolicy: Delete DlqSqsQueuePolicy: Type: AWS::SQS::QueuePolicy Properties: PolicyDocument: Statement: # 原v1策略语句 - Action: sqs:SendMessage Condition: ArnEquals: aws:SourceArn: !GetAtt rulenamev1.Arn Effect: Allow Principal: Service: events.amazonaws.com Resource: !GetAtt DlqSqsQueue.Arn Sid: v1 # 新增v2策略语句 - Action: sqs:SendMessage Condition: ArnEquals: aws:SourceArn: !GetAtt rulenamev2.Arn Effect: Allow Principal: Service: events.amazonaws.com Resource: !GetAtt DlqSqsQueue.Arn Sid: v2 Version: '2012-10-17' Queues: - !Ref DlqSqsQueue
关键说明:
- 所有权限规则都放在
Statement数组下,每个规则用唯一的Sid区分 - 确保每个语句的
Resource都指向目标队列的ARN - 保留原有
Condition和Principal的配置逻辑,保证权限控制的正确性
内容的提问来源于stack exchange,提问作者Jatin Mehrotra
相关产品推荐
相关产品推荐

