別のアカウントの Amazon SQS キューへ Amazon SNS メッセージを送信する - Amazon Simple Notification Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

別のアカウントの Amazon SQS キューへ Amazon SNS メッセージを送信する

このドキュメントでは、別のアカウントの Amazon SQS キューに 1 つ以上のサブスクリプションがある Amazon SNS トピックに通知を発行する方法について説明します。同じアカウント内にある場合と同じ方法でトピックとキューをセットアップします (「Amazon SQS キューへのファンアウト」を参照)。主な相違点はサブスクリプションの確認の処理方法で、トピックへのキューのサブスクライブ方法によって異なります。

キューの所有者がサブスクリプションを作成すると確認が自動的に実行されるため、可能な場合は「キューの所有者がサブスクリプションを作成する」セクションで参照されている手順に従うことがベストプラクティスです。

注記

Amazon SQS キューに大量のメッセージがある場合は、キュー所有者がサブスクリプションを作成することをお勧めします。

キューの所有者がサブスクリプションを作成する

Amazon SQS キューを作成したアカウントがキューの所有者です。キューの所有者がサブスクリプションを作成するとき、サブスクリプションを確認する必要はありません。Subscribe アクションが完了するとすぐに、キューはトピックからの通知の受信を開始します。キューの所有者がトピック所有者のトピックにサブスクライブできるようにするには、トピック所有者が、トピックに対して Subscribe アクションを呼び出す許可をキューの所有者のアカウントに付与する必要があります。

ステップ 1: AWS Management Console を使用してトピックポリシーを設定するには

  1. Amazon SNS コンソールにサインインします。

  2. ナビゲーションパネルで、[トピック] を選択します。

  3. トピックを選択し、[編集] を選択します。

  4. [Edit MyTopic] ページで [アクセスポリシー] セクションを展開します。

  5. 以下のポリシーを入力します。

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

    このポリシーは、123456789012 アカウント内で MyTopicsns:Subscribe を呼び出す許可を 111122223333 アカウントに付与します。

    111122223333 のアカウントに対する認証情報が持っているユーザーは、MyTopic に登録できます。この許可によって、アカウント ID は、アクセス許可 を IAM ユーザー/ロールに委任できます。呼び出しは、ルートアカウントまたは管理者ユーザーのみに許可されます。また、IAM ユーザー/ロールは、キューにサブスクリプションを許可するために sns:subscribe を持つ必要があります。

  6. [Save changes] (変更の保存) をクリックします。

    111122223333 アカウントに対する認証情報があるユーザーは、MyTopic に登録できます。

ステップ 2: AWS Management Console を使用して別の AWS アカウント のトピックに Amazon SQS キューのサブスクリプションを追加するには

開始する前に、トピックおよびキューの 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. [Amazon SNS トピックの ARN を入力する]を選択してから、トピックの Amazon リソースネーム (ARN) を入力します。

  7. [Save (保存)] を選択します。

    注記
    • サービスと通信できるようにするには、キューに Amazon SNS へのアクセス権限が必要です。

    • キューの所有者であるため、サブスクリプションを確認する必要はありません。

キュー作成サブスクリプションを所有していないユーザー

サブスクリプションを作成するユーザーがキューの所有者ではない場合、そのサブスクリプションを確認する必要があります。

Subscribe アクションを使用すると、Amazon SNS はサブスクリプションの確認をキューに送信します。サブスクリプションが Amazon SNS コンソールに表示され、サブスクリプション ID が [保留中の確認] に設定されます。

サブスクリプションを確認するには、キューからメッセージを読み取る権限を持つユーザーがサブスクリプションの確認 URL を取得し、サブスクリプションの所有者がサブスクリプションの確認 URL を使用してサブスクリプションを確認する必要があります。サブスクリプションが確認されるまで、トピックに対して発行された通知はキューに送信されません。サブスクリプションを確認するには、Amazon SQS コンソールまたは ReceiveMessage アクションを使用できます。

注記

トピックにエンドポイントをサブスクライブする前に、キューに sqs:SendMessage アクセス権限を設定してこのキューがトピックからメッセージを受信できるようにする必要があります。詳細については、「ステップ 2: Amazon SQS キューにメッセージを送信する許可を Amazon SNS トピックに付与する」を参照してください。

ステップ 1: AWS Management Console を使用して別の AWS アカウント のトピックに Amazon SQS キューのサブスクリプションを追加するには

開始する前に、トピックおよびキューの ARN を保持していて、キューにメッセージを送信する許可がトピックに付与されていることを確認してください。

  1. Amazon SNS コンソールにサインインします。

  2. ナビゲーションパネルで、[サブスクリプション] を選択します。

  3. [サブスクリプション] ページで [サブスクリプションの作成] を選択します。

  4. [サブスクリプションの作成] ページで [詳細] セクションで、以下を実行します。

    1. [トピック ARN] にトピックの ARN を入力します。

    2. [プロトコル] で、[Amazon SQS] を選択します。

    3. [エンドポイント] にキューの ARN を入力します。

    4. [サブスクリプションの作成] を選択します。

      注記
      • サービスと通信できるようにするには、キューに 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. [本文] 列で、次の操作を行います。

    1. [詳細] を選択します。

    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. 関連する [topic] (トピック) を選択します。

  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 コンソールでトピックのサブスクリプションを表示すると、[保留中の確認] メッセージが [サブスクリプション ID] 列でサブスクリプション ARN に置き換えられています。

サブスクリプション解除リクエストでサブスクリプションに認証を要求させるにはどうすればよいですか。

サブスクリプションの所有者は、サブスクリプション確認時に AuthenticateOnUnsubscribe フラグを true に設定する必要があります。

  • キューの所有者がサブスクリプションを作成すると、AuthenticateOnUnsubscribe は自動的に true に設定されます。

  • 認証なしでサブスクリプション確認リンクに移動した場合、AuthenticateOnUnsubscribe を true に設定することはできません。