将 Amazon SNS 消息发送到不同账户中的 Amazon SQS 队列 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将 Amazon SNS 消息发送到不同账户中的 Amazon SQS 队列

通过另一账户中的一项或多项 Amazon SQS 队列订阅,您可以向 Amazon SNS 主题发布通知。如果主题和队列在同一账户下,那么您可以采用相同方法设置主题和队列(参阅 扇出到 Amazon SQS 队列)。主要区别在于您处理订阅确认的方式,这取决于您如何为队列订阅主题。

队列拥有者创建订阅

创建 Amazon SQS 队列的账户是队列拥有者。如果订阅由队列所有者创建,那么此订阅无需确认。一旦 Subscribe 操作完成后,队列即开始接收来自主题的通知。主题所有者必须提供队列所有者的账户权限,允许其对主题调用 Subscribe 操作,从而让队列所有者订阅主题所有者的主题。

步骤 1:使用 Amazon Web Services Management Console 设置主题策略

  1. 登录 Amazon SNS 控制台

  2. 在导航面板上,选择 Topics(主题)。

  3. 选择一个主题,然后选择 Edit(编辑)。

  4. Edit MyTopic(编辑 MyTopic)页上,展开 Access policy(访问策略)部分。

  5. 输入以下策略:

    { "Statement":[{ "Effect":"Allow", "Principal":{ "AWS":"111122223333" }, "Action":"sns:Subscribe", "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic" }] }

    此策略授予账户 111122223333 对账户 123456789012 中的 MyTopic 调用 sns:Subscribe 的权限。

    具有账户 111122223333 的凭证的用户可以订阅 MyTopic。此权限允许账户 ID 将权限委派给其 IAM 用户/角色。只有根账户或管理员用户才可以调用 sns:Subscribe。IAM 用户/角色还必须让 sns:subscribe 允许他们的队列订阅。

  6. 选择保存更改

    具有账户 111122223333 的凭证的用户可以订阅 MyTopic。

步骤 2:使用 Amazon Web Services Management Console 将 Amazon SQS 队列订阅添加到另一个 Amazon Web Services 账户 中的主题

在开始之前,请确保您具有主题和队列的 ARN,并且已授予该主题将消息发送到队列的权限

  1. 登录 Amazon SQS 控制台

  2. 在导航窗格中,选择 Queues(队列)。

  3. 从队列列表中,选择 queue(排队)以订阅 Amazon SNS 主题。

  4. Actions(操作)中,选择 Subscribe to Amazon SNS topic(订阅 Amazon SNS 主题)。

  5. Specify an Amazon SNS topic available for this queue menu(指定可用于此队列菜单的 Amazon SNS 主题)中,选择队列的 SNS topic(SNS 主题)。

  6. 选择 Enter Amazon SNS topic ARN(输入 Amazon SNS 主题 ARN),然后输入主题的 Amazon Resource Name (ARN)

  7. 选择保存

    注意
    • 要能够与服务通信,队列必须具有 Amazon SNS 的权限。

    • 由于您是队列的所有者,因此您无需确认订阅。

非队列所有者用户创建订阅

创建订阅但不是队列所有者的任何用户都必须确认订阅。

使用 Subscribe 操作时,Amazon SNS 向队列发送订阅确认。订阅将显示在 Amazon SNS 控制台中,其订阅 ID 设置为等待确认

要确认订阅,具有从队列读取消息权限的用户必须访问订阅 URL。确认订阅前,向主题发布的通知不会发送至队列。要确认订阅,您可以使用 Amazon SQS 控制台或 ReceiveMessage 操作。

注意

在为终端节点订阅主题之前,请通过为队列设置 sqs:SendMessage 权限来确保队列可以接收来自主题的消息。有关更多信息,请参阅步骤 2. 为向 Amazon SQS 队列发送消息的 Amazon SNS 主题授予权限

步骤 2:使用 Amazon Web Services Management Console 将 Amazon SQS 队列订阅添加到另一个 Amazon Web Services 账户 中的主题

在开始之前,请确保您具有主题和队列的 ARN,并且已授予该主题将消息发送到队列的权限

  1. 登录 Amazon SNS 控制台

  2. 在导航面板中,选择 Subscriptions(订阅)。

  3. Subscriptions(订阅)页面上,选择 Create subscription(创建订阅)。

  4. Create subscription(创建订阅)页上的 Details(详细信息)部分中,执行以下操作:

    1. 对于 Topic ARN (主题 ARN),输入主题的 ARN。

    2. 对于 Protocol(协议),选择 Amazon SQS

    3. 对于 Endpoint(终端节点),输入队列的 ARN。

    4. 选择 Create subscription(创建订阅)。

      注意
      • 要能够与服务通信,队列必须具有 Amazon SNS 的权限。

      • 由于您是队列的所有者,因此您无需确认订阅。

使用 Amazon Web Services Management Console确认订阅

  1. 登录 Amazon SQS 控制台

  2. 选择主题处于等待订阅阶段的队列。

  3. 依次选择 Queue Action(队列操作)、View/Delete Messages(查看/删除消息)和 Start Polling for Messages(开始轮询消息)。

    队列中会收到一条带有订阅确认的消息。

  4. Body(正文)列中,执行以下操作:

    1. 选择 More Details(更多详情)。

    2. Message Details(消息详细信息)对话框中,找到并记下 SubscribeURL 值,例如:

      https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:MyTopic&Token=2336412f37fb...
  5. 在 Web 浏览器中,导航到此 URL。

    将显示 XML 响应,例如:

    <ConfirmSubscriptionResponse> <ConfirmSubscriptionResult> <SubscriptionArn>arn:aws:sns:us-east-2:123456789012:MyTopic:1234a567-bc89-012d-3e45-6fg7h890123i</SubscriptionArn> </ConfirmSubscriptionResult> <ResponseMetadata> <RequestId>abcd1efg-23hi-jkl4-m5no-p67q8rstuvw9</RequestId> </ResponseMetadata> </ConfirmSubscriptionResponse>

    已订阅队列已准备好接收来自主题的消息。

  6. (可选)如果您在 Amazon SNS 控制台中查看主题订阅,则可以看到等待确认消息已被 Subscription ID(订阅 ID)列中的订阅 ARN 取代。