繁体   English   中英

跨账户 SNS SQS 订阅设置 (CDK)

[英]Cross account SNS SQS subscription set up (CDK)

我正在尝试在 SQS 队列(帐户 11111111111)和 SNS 主题(帐户 22222222222)之间设置跨帐户订阅。 但是,我一直无法通过 CDK 完成此操作。 任何帮助,将不胜感激。

以下是在 SQS 队列中设置订阅的 CDK 代码(SQS 队列设置为标准,此处省略),

// SNS topic in another account
const snsTopic = sns.Topic.fromTopicArn(
    this,
    'id',
    'arn:aws:sns:us-west-2:22222222222:id',
);

snsTopic.addSubscription(new SqsSubscription(sqsQueue));

然后我按照这篇AWS文章给出了SNS主题访问策略要由账户11111111111订阅。以下是主题的访问策略,

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:Publish",
        "SNS:RemovePermission",
        "SNS:SetTopicAttributes",
        "SNS:DeleteTopic",
        "SNS:ListSubscriptionsByTopic",
        "SNS:GetTopicAttributes",
        "SNS:AddPermission",
        "SNS:Subscribe"
      ],
      "Resource": "arn:aws:sns:us-west-2:22222222222:id",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "22222222222"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "sns:Subscribe",
      "Resource": "arn:aws:sns:us-west-2:22222222222:id",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "11111111111"
        }
      }
    }
  ]
}

正如您在此处看到的,此策略为帐户所有者 (22222222222) 提供完全访问权限,并为另一个帐户 (11111111111) 提供订阅权限。

但是,当我部署我的 CDK 更改时,cloudformation 不断抛出以下错误,表明帐户 11111111111 没有授权订阅 22222222222 中的主题。

User: arn:aws:sts::11111111111:assumed-role/PipelinesChangeSetExec-19a3877f4882528dec93b2760e3771af2ccd62c
6/AWSCloudFormation is not authorized to perform: SNS:Subscribe on resource: arn:aws:sns:us-west-2:2222222
2222:id because no resource-based policy allows the SNS:Subscribe action (Service: AmazonSNS; Status Code:
 403; Error Code: AuthorizationError; Request ID: 45ea9a58-13ce-50b9-8b07-c16de46f3a53; Proxy: null)

我想我正在遵循 AWS 的设置指南。 谁能指出我可能错的地方? 谢谢

所以我想通了。 这是一个有用的视频,它解释了如何在 SNS 和 SQS 之间设置跨账户订阅。 我在澄清 SNS 主题中的访问策略时犯了一个错误。 但是,通过观看视频,我能够部署 SQS 队列并让它订阅另一个帐户中的 SNS 主题。

注意:由于我是 SNS 话题的所有者,所以不需要在 SQS 端确认订阅。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM