aws-cdk:我无法向现有 SQS 添加访问权限
aws-cdk: I cannot add access permission to existing SQS
我有一个代码,我需要将消息发送到现有的 sqs 队列。
我在 aws-cdk 中有这段代码。但这是行不通的。没有添加访问权限。
const sqsQ = sqs.Queue.fromQueueArn(this, "some-id", "arn:aws:sqs:us-east-2:SOME-ACCOUNT:QUEUE-NAME");
sqsQ.grantSendMessages(new iam.ServicePrincipal("events.amazonaws.com"));
试试这样的方法
sqsQ.addToResourcePolicy(
new PolicyStatement({
effect: Effect.ALLOW,
principals: [new ServicePrincipal(ServicePrincipals.EVENTS)],
actions: ["sqs:SendMessage"],
resources: [sqsQ.queueArn],
conditions: {
ArnEquals: {
"aws:SourceArn": <ruleArn or whatever needs permissions here>,
},
},
})
);
我认为不可能向 CDK 中的现有资源授予权限。任何时候您使用 fromQueueArn
之类的东西将资源导入堆栈时,您都可以将其视为对该资源的 read-only 引用。
换句话说,您只能更新由您的 CDK 代码管理的资源。
这里基本上有 2 个选项:
- 将原始 SQS 移动到您的 CDK 托管堆栈中。您可以使用 CloudFormation 资源导入功能执行此操作 (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html)
- 在原来定义的地方修改CDK外的SQS权限
我有一个代码,我需要将消息发送到现有的 sqs 队列。
我在 aws-cdk 中有这段代码。但这是行不通的。没有添加访问权限。
const sqsQ = sqs.Queue.fromQueueArn(this, "some-id", "arn:aws:sqs:us-east-2:SOME-ACCOUNT:QUEUE-NAME");
sqsQ.grantSendMessages(new iam.ServicePrincipal("events.amazonaws.com"));
试试这样的方法
sqsQ.addToResourcePolicy(
new PolicyStatement({
effect: Effect.ALLOW,
principals: [new ServicePrincipal(ServicePrincipals.EVENTS)],
actions: ["sqs:SendMessage"],
resources: [sqsQ.queueArn],
conditions: {
ArnEquals: {
"aws:SourceArn": <ruleArn or whatever needs permissions here>,
},
},
})
);
我认为不可能向 CDK 中的现有资源授予权限。任何时候您使用 fromQueueArn
之类的东西将资源导入堆栈时,您都可以将其视为对该资源的 read-only 引用。
换句话说,您只能更新由您的 CDK 代码管理的资源。
这里基本上有 2 个选项:
- 将原始 SQS 移动到您的 CDK 托管堆栈中。您可以使用 CloudFormation 资源导入功能执行此操作 (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html)
- 在原来定义的地方修改CDK外的SQS权限