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 个选项:

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