[英]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,账户 A 中的任何 IAM 用户都将能够访问 SNS 资源。 如果多个应用程序在帐户 A 中运行,这可能是一个问题。
你现在的情况是:
Account-A
中的 Amazon SQS 队列 ( Queue-A
)Account-B
中的 Amazon SNS 主题 ( Topic-B
)Topic-B
添加权限,允许Account-A
订阅该主题以上效果很好。
新要求:
Account-C
和Account-D
订阅Topic-B
Account-B
的所有者不希望修改Topic-B
的权限以允许这些订阅请求解决方案
不是Account-C
和Account-D
发送Subscribe()
请求,而是要求Topic-B
的所有者直接订阅新队列。
你说“拥有账户 B 的团队没有能力手动将我们将创建的许多账户列入白名单。”
这是基于Account-C
和Account-D
应该自己将订阅请求发送到Topic-B
的想法。 相反,我建议您将Queue-C
和Queue-D
的 ARN 提供给拥有Topic-B
的团队,并要求他们将这些队列添加为订阅者。 这不需要对Topic-B
的权限策略进行任何更改。
但是,有几点需要注意:
Queue-C
和Queue-D
需要确认订阅。 最简单的方法是查看订阅主题后发送到队列的初始消息,复制消息中显示的订阅 URL,然后将其粘贴到 web 浏览器中。 这是一个一次性的过程。Queue-C
和Queue-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
的所有者为您做任何事情,那么您唯一的选择是:
Topic-A
) 中创建您自己的 SNS 主题,您可以在其中管理订阅Topic-A
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.