具有附加层的SNS跨帐户订阅



我们拥有一个AWS帐户,帐户A。我们依靠外部团队向他们帐户B中的SNS主题发布消息。我们使用帐户A中的SQS队列订阅帐户B中SNS主题。帐户B的所有者已将帐户A列入白名单,以订阅SNS主题。

现在,我们想为多个(新(帐户订阅帐户B中的SNS主题。然而,拥有帐户B的团队没有能力手动将我们将创建的许多帐户列入白名单。

我们有没有办法通过在账户a中创建的IAM角色等方式,将账户a的权限委派或代理给我们正在创建的所有新账户?

问题是帐户B试图将权限授予帐户a的特定用户。正如您所提到的,如果您需要设置多个帐户,这可能是一个问题。

你可以用多种方法来解决这个问题。

  1. 帐户B授予帐户A的权限。然后,帐户A具有将访问权限委派给任何IAM角色/用户的完全权限。这是一篇包含此设置方法的博客文章https://aws.amazon.com/blogs/compute/cross-account-integration-with-amazon-sns/
  2. 在帐户A中创建IAM组,并将用户分配给该组。然后,在帐户B中,将权限授予帐户A的组,而不是特定用户。以下是通过组提供访问的示例

请注意,如果使用解决方案#1,帐户A中的任何IAM用户都可以访问SNS资源。如果多个应用程序在帐户A中运行,这可能是一个问题。

您当前的情况是:

  • 您拥有的Account-A中的Amazon SQS队列(Queue-A(
  • 其他人拥有的Account-B中的亚马逊SNS主题(Topic-B(
  • 权限已添加到Topic-B,允许Account-A订阅主题

上述操作效果良好。

新要求:

  • 允许Account-CAccount-D订阅Topic-B
  • Account-B的所有者不希望修改Topic-B上的权限以允许这些订阅请求

解决方案

与其让Account-CAccount-D发送Subscribe()请求,不如让Topic-B的所有者直接订阅新队列

你说"拥有帐户B的团队没有能力手动将我们将创建的许多帐户列入白名单。">

这是基于Account-CAccount-D本身应该向Topic-B发送Subscribe请求的想法。相反,我建议您将Queue-CQueue-D的ARN提供给拥有Topic-B的团队,并要求他们将这些队列添加为订阅者。这不需要对Topic-B上的权限策略进行任何更改。

然而,有几件事需要注意:

  • Queue-CQueue-D将需要确认订阅。最简单的方法是查看订阅主题后发送到队列的初始消息,复制消息中显示的订阅URL,然后将其粘贴到web浏览器中。这是一个一次性的过程
  • CCD_ 25和CCD_ 26将需要添加允许CCD_。您可能已经为Queue-A准备好了这个。该政策看起来像:
{
"Version": "2012-10-17",
"Id": "arn:aws:sqs:ap-southeast-2:ccc:my-queue/SQSDefaultPolicy",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "sqs:SendMessage",
"Resource": "arn:aws:sqs:ap-southeast-2:ccc:my-queue",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:sns:ap-southeast-2:bbb:their-topic"
}
}
}
]
}

另请参阅:

  • 将亚马逊SNS消息发送到其他帐户中的亚马逊SQS队列-亚马逊简单通知服务
  • 使用亚马逊SNS进行系统到系统的消息传递,并将亚马逊SQS队列作为订阅者-亚马逊简单通知服务

如果你不能依靠Account-B的所有者为你做任何事情,那么你唯一的选择就是:

  • 在Account-A(Topic-A(中创建您自己的SNS主题,您可以在其中管理订阅
  • 创建一个将向Topic-A发送消息的AWS Lambda函数
  • 将Lambda函数订阅到现有的Queue-A,这样发送到Queue-A的任何消息都将重新发送到Topic-A
  • 让所有帐户都像使用Topic-B一样使用Topic-A

通过这种方式,您可以使用现有的SQS队列(Queue-A(作为您控制下的新SNS主题(Topic-A(的"中继"。您还需要将从Queue-A消费的当前应用程序更改为从订阅了Topic-A的新队列消费。

相关内容

  • 没有找到相关文章

最新更新