【问题标题】:Subscribe a sqs queue to a sns topic that is in a different account, using aws cdk(typescript)使用 aws cdk(typescript) 将 sqs 队列订阅到不同帐户中的 sns 主题
【发布时间】:2020-01-27 10:03:00
【问题描述】:

我想使用 cdk (typescript) 将 sqs 队列连接到不同帐户中的 sns 主题。下面是我认为应该可以工作的代码(此代码在堆栈中),但我在代码下方列出了一些疑问(我还没有部署此尚未,仍在尝试先学习如何执行此操作)。

    const topic = Topic.fromTopicArn(
      this,
      `${stackName}-topic`,
      `arn:aws:sns:${region}:${accountno}:SubscriptionChanges`
    );

    topic.addSubscription(
      new SqsSubscription(queue, {
        filterPolicy: {
          type: SubscriptionFilter.stringFilter({
            whitelist: [
              'filter1',
            ],
          })
        },
      })
    );
  }
  • 我使用 fromTopicArn 来启动主题构造。如果我不是主题的所有者,我是否可以这样做(主题是在不同的帐户中定义的,因此我尝试跨帐户进行此操作)?
  • 有没有一种方法可以创建一个 sqs 订阅而不在上面的第一行创建 topic 变量?

我已经阅读了documentation,并且有示例代码,但它只显示了如何在同一个帐户中执行此操作。有人有这方面的经验吗?

【问题讨论】:

  • 我不知道 CDK,但您从另一个 AWS 账户访问资源的方式是使用 STS。您可以在要访问的帐户中创建一个角色,并从您用来访问它的帐户中代入该角色。 docs.aws.amazon.com/IAM/latest/UserGuide/…
  • 是的,一般来说,这绝对是一种通过 aws 部署某些东西的方法。这个问题更具体一些,并且与通过 cdk 进行相关,因此文档对很多帮助没有帮助,但无论如何谢谢!

标签: typescript amazon-web-services amazon-sqs amazon-sns aws-cdk


【解决方案1】:

所以经过一番研究,我有了一些答案。

即使您不拥有该主题,您也可以创建主题构造,并且可以将队列连接到该主题,但您(或更具体地说,您的帐号)必须获得主题所有者的访问权限。

const queue = make_my_queue();
const topic = sns.Topic.fromTopicArn(
  this, // assuming `this` is your Deployment Stack object.
  "myTopicId",
  "arn:aws:sns:eu-west-1:123123123123:MyFriendsGreatSnsTopic");

topic.addSubscription(new snsSubs.SqsSubscription(queue), {
   rawMessageDelivery: true // or false if you want
});

【讨论】:

  • 嗨@Bashar Mengana,你能提供更多关于你做了什么的细节吗?如何授予访问权限? SQS 用户可以在他们的代码中使用“.addSubscription(topic)”吗?他们是否需要等到授予访问权限后才能执行此操作?
【解决方案2】:

使用下面提供跨帐户访问的主题所有者

        topic.addToResourcePolicy(new PolicyStatement({
            sid: "Allow Access to subscribe",
            effect: Effect.ALLOW,
            principals: [new AccountPrincipal(<***>)],
            actions: [
                "SNS:Subscribe"
            ],
            resources: [
                topic.topicArn
            ]
        }))

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多