我有一个代码,需要将发送消息授予现有的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"));
我认为不可能向CDK中的现有资源授予权限。每当您使用fromQueueArn
之类的东西将资源导入堆栈时,您都可以将其视为对该资源的只读引用。
换句话说,您只能更新由CDK代码管理的资源。
这里基本上有两个选项:
- 将原始SQS移动到CDK管理的堆栈中。您可以使用CloudFormation资源导入功能来完成此操作(https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html)
- 在CDK之外最初定义的地方修改SQS权限
试试这样的
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>,
},
},
})
);