aws-cdk:我无法向现有 SQS 添加访问权限

Pra*_*egi 3 amazon-sqs aws-cdk

我有一个代码,我需要将发送消息授予现有的 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"));
Run Code Online (Sandbox Code Playgroud)

Tof*_*nov 7

我认为不可能向 CDK 中的现有资源授予权限。每当您使用类似的东西将资源导入堆栈时,fromQueueArn您都可以将其视为对该资源的只读引用。

换句话说,您只能更新由您的 CDK 代码管理的资源。

你基本上有两个选择:

  1. 将原始 SQS 移至 CDK 托管堆栈中。您可以使用 CloudFormation 资源导入功能 ( https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html )来执行此操作
  2. 在 CDK 之外的最初定义的位置修改 SQS 权限。


Ano*_*ias 6

尝试这样的事情

    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>,
          },
        },
      })
    );
Run Code Online (Sandbox Code Playgroud)