You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java CDK中为AWS SQS死信队列(DLQ)设置Redrive allow policy?

解决Java CDK中SQS死信队列(DLQ)的Redrive Allow Policy配置问题

你当前的代码仅完成了主队列与DLQ的关联,但DLQ默认没有配置资源策略允许主队列向它发送消息,所以需要手动添加Redrive Allow Policy。

修改后的完整代码如下:

import software.amazon.awscdk.services.sqs.Queue;
import software.amazon.awscdk.services.sqs.DeadLetterQueue;
import software.amazon.awscdk.services.iam.PolicyStatement;
import software.amazon.awscdk.services.iam.Effect;
import java.util.List;
import java.util.Map;

// 创建死信队列
Queue queueDlq = Queue.Builder.create(this, "queue-dlq")
        .build();

// 创建主队列并绑定DLQ
Queue queue = Queue.Builder.create(this, "queue")
        .deadLetterQueue(DeadLetterQueue.builder()
                .queue(queueDlq)
                .maxReceiveCount(5)
                .build())
        .build();

// 给DLQ添加资源策略,允许主队列发送消息到该DLQ
queueDlq.addToResourcePolicy(PolicyStatement.Builder.create()
        .effect(Effect.ALLOW)
        .principals(List.of(queue.getGrantPrincipal()))
        .actions(List.of("sqs:SendMessage"))
        .resources(List.of(queueDlq.getQueueArn()))
        .conditions(Map.of(
                "ArnEquals", Map.of("aws:SourceArn", queue.getQueueArn())
        ))
        .build());

关键说明:

  • addToResourcePolicy:用于给SQS队列附加资源级权限策略
  • principals:指定允许执行操作的主体,这里直接引用主队列的身份主体,确保权限精准
  • conditions:通过ArnEquals限制只有指定的主队列(匹配SourceArn)能发送消息到DLQ,符合最小权限原则

如果需要允许多个主队列向该DLQ发送消息,只需在conditions的aws:SourceArn里添加多个主队列的ARN即可。

内容的提问来源于stack exchange,提问作者Caesar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:01:01