傳送 Amazon SNS 訊息至其他帳戶中的 Amazon SQS 佇列 - Amazon Simple Notification Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

傳送 Amazon SNS 訊息至其他帳戶中的 Amazon SQS 佇列

本文件說明如何將通知發佈至其他帳戶中具有一個或多個 Amazon SQS 佇列訂閱的 Amazon SNS 主題。如果主題和佇列在相同帳戶中,您要以相同方式設定主題和佇列 (請參閱向 Amazon SQS 佇列發出 Amazon SNS 通知以進行非同步處理 Amazon SQS )。主要差異是您處理訂閱確認的方式,而這取決於您如何將佇列訂閱至主題。

最佳實務是在可能的情況下按照佇列擁有者建立訂閱一節中所述的步驟進行,因為當佇列擁有者建立訂閱時會自動確認。

注意

如果 Amazon SQS 佇列具有大量訊息,建議佇列擁有者建立訂閱。

佇列擁有者建立訂閱

建立 Amazon SQS 佇列的帳戶是佇列擁有者。當佇列擁有者建立訂閱,訂閱並不需要確認。Subscribe 動作一完成,佇列就會開始接收來自主題的通知。若要讓佇列擁有者訂閱主題擁有者的主題,主題擁有者必須提供佇列擁有者許可,以呼叫主題的 Subscribe動作。

步驟 1:使用 AWS Management Console設定主題政策

  1. 登入 Amazon SNS 主控台

  2. 在導覽面板上,選擇 Topics (主題)

  3. 選取主題,然後選擇 Edit (編輯)

  4. Edit MyTopic (編輯 MyTopic)頁面上,展開存取政策區段。

  5. 輸入下列政策:

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

    此政策授予帳戶 111122223333 呼叫帳戶 123456789012MyTopic 上之 sns:Subscribe 的許可。

    擁有帳戶 111122223333 憑證的使用者可以訂閱 MyTopic。這項許可允許帳戶 ID 將許可委派給其 IAM 使用者/角色。唯有根帳戶或管理員使用者可以呼叫 sns:Subscribe。IAM 使用者/角色也必須擁有 sns:subscribe 才能允許其佇列訂閱。

  6. 選擇 Save changes (儲存變更)。

    擁有帳戶 111122223333 的登入資料的使用者可以訂閱 MyTopic。

步驟 2: AWS 帳戶 使用 將 Amazon SQS 佇列訂閱新增至另一個 中的主題 AWS Management Console

開始之前,請確定您有主題和佇列的 ARN 且您已授予主題可傳送訊息至佇列的許可

  1. 請登入 Amazon SQS 主控台

  2. 在導覽面板中選擇 Queues (佇列)。

  3. 在佇列清單中選擇要訂閱 Amazon SNS 主題的 佇列

  4. 選擇 Subscribe to Amazon SNS topic (訂閱 Amazon SNS 主題)。

  5. Specify an Amazon SNS topic available for this queue menu (為此佇列選單指定可用的 Amazon SNS 主題) 中,為您的佇列選擇 Amazon SNS topic (Amazon SNS 主題)

  6. 選擇 Enter Amazon SNS topic ARN (輸入 Amazon SNS 主題 ARN),然後輸入主題的 Amazon Resource Name (ARN)

  7. 選擇 Save (儲存)。

    注意
    • 若要能夠與服務進行通訊,佇列必須擁有 Amazon SNS 的許可。

    • 如果您是該佇列的擁有者,則無須確認訂閱。

沒有擁有佇列的使用者建立訂閱

建立訂閱但不是佇列擁有者的任何使用者皆須確認訂閱。

當您使用 Subscribe 動作時,Amazon SNS 會傳送訂閱確認至佇列。訂閱會在 Amazon SNS 主控台中顯示,且其訂閱 ID 設為 Pending Confirmation (訂閱確認)

若要確認訂閱,具備可讀取佇列中訊息之許可的使用者必須擷取訂閱確認 URL,且訂閱擁有者必須使用訂閱確認 URL 來確認訂閱。直到確認訂閱完成,都不會有發佈至主題的通知傳送至佇列。若要確認訂閱,您可以使用 Amazon SQS 主控台或 ReceiveMessage 動作。

注意

讓端點訂閱主題之前,請設定佇列的 sqs:SendMessage 許可,以確定佇列可以接收主題的訊息。如需詳細資訊,請參閱步驟 2:將許可提供給 Amazon SNS 主題,以將訊息傳送至 Amazon SQS 佇列。

步驟 1: AWS 帳戶 使用 將 Amazon SQS 佇列訂閱新增至另一個 中的主題 AWS Management Console

開始之前,請確定您有主題和佇列的 ARN 且您已授予主題可傳送訊息至佇列的許可

  1. 登入 Amazon SNS 主控台

  2. 在導覽面板上,選擇 Subscriptions (訂閱)

  3. 訂閱頁面,選擇建立訂閱

  4. 建立訂閱頁面上,於詳細資訊區段中,執行以下作業:

    1. Topic ARN (主題 ARN) 中,輸入主題的 ARN。

    2. Protocol (通訊協定) 中,選擇Amazon SQS

    3. 針對 Endpoint (端點),輸入佇列的 ARN。

    4. 選擇 Create subscription (建立訂閱)。

      注意
      • 若要能夠與服務進行通訊,佇列必須擁有 Amazon SNS 的許可。

以下範例政策陳述式允許 Amazon SNS 主題將訊息傳送至 Amazon SQS 佇列。

{ "Sid": "Stmt1234", "Effect": "Allow", "Principal": "*", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-west-2:111111111111:QueueName", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-west-2:555555555555:TopicName" } } }

步驟 2:使用 確認訂閱 AWS Management Console

  1. 請登入 Amazon SQS 主控台

  2. 選取具有待訂閱主題的佇列。

  3. 選擇 Send and receive messages (傳送和接收訊息),然後選擇 Poll for messages (訊息輪詢)。

    有訂閱確認的訊息會在佇列中收到。

  4. Body (本文) 欄位中,執行下列操作:

    1. 選擇 More Details (更多詳細資訊)

    2. Message Details (訊息詳細資訊) 對話方塊中,找到並記下 SubscribeURL 值。這是您的訂閱連結 (如下方範例)。有關 API 字符驗證的其他詳細資料,請參閱《Amazon SNS API 參考》中的 ConfirmSubscription

      https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:MyTopic&Token=2336412f37fb...
    3. 記下訂閱確認連結。URL 必須從佇列擁有者傳遞給訂閱擁有者。訂閱擁有者必須將 URL 輸入到 Amazon SNS 主控台

  5. 訂閱擁有者身分登入 Amazon SNS 主控台。訂閱擁有者執行確認。

  6. 選擇相關主題

  7. 選擇主題訂閱清單表格中相關的訂閱。標記為「Pending confirmation (待確認)」。

  8. 選擇確認訂閱 (Confirm subscription)

  9. 出現一個模式,提示訂閱確認連結。貼上訂閱確認連結。

  10. 選取模式中的 Confirm subscription (確認訂閱)

    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>

    訂閱的佇列已準備好接收來自主題的訊息。

  11. 如果您在 Amazon SNS 主控台中檢視主題訂閱,您現在將會看到該訂閱 ARN 取代 Subscription ID (訂閱 ID) 欄位中的 Pending Confirmation (待確認中) 訊息。

如何強制訂閱以要求對取消訂閱請求進行身分驗證?

訂閱擁有者必須在訂閱確認時將AuthenticateOnUnsubscribe 標記設定為 true。

  • 當佇列擁有者建立訂閱時,AuthenticateOnUnsubscribe 將自動設定為 True。

  • 當瀏覽至訂閱確認連結而不進行身分驗證時,無法將 AuthenticateOnUnsubscribe 設定為 True。