繁体   English   中英

SNS跨账户订阅,附加层

[英]SNS cross account subscription with additional layer

我们拥有一个 AWS 账户,账户 A。我们依靠外部团队将消息发布到他们的账户 B 中的 SNS 主题。我们使用账户 A 中的 SQS 队列订阅账户 B 中的 SNS 主题。账户 A已被账号 B 的所有者列入订阅 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中的 Amazon 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的想法。 相反,我建议您将Queue-CQueue-D的 ARN 提供给拥有Topic-B的团队,并要求他们将这些队列添加为订阅者。 不需要Topic-B的权限策略进行任何更改。

但是,有几点需要注意:

  • Queue-CQueue-D需要确认订阅。 最简单的方法是查看订阅主题后发送到队列的初始消息,复制消息中显示的订阅 URL,然后将其粘贴到 web 浏览器中。 这是一个一次性的过程。
  • Queue-CQueue-D将需要添加权限以允许Topic-B向其队列发送消息。 您可能已经为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"
        }
      }
    }
  ]
}

也可以看看:

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

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

这样,您可以使用现有的 SQS 队列 ( Queue-A ) 作为您控制下的新 SNS 主题 ( Topic-A ) 的“中继”。 您还需要将当前从Queue-A使用的应用程序更改为从订阅Topic-A的新队列中使用。

暂无
暂无

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

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