Amazon SQSキューを Amazon SNSトピックにサブスクライブする - Amazon Simple Notification Service

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

Amazon SQSキューを Amazon SNSトピックにサブスクライブする

Amazon SNSトピックが Amazon SQSキューにメッセージを送信できるようにするには、次のいずれかを実行します。

別の AWSアカウントにあるキューにメッセージを送信するようにトピックをセットアップする方法については、「別のアカウントの Amazon SQSキューに Amazon SNSメッセージを送信する」を参照してください。

2 つのキューにメッセージを送信するトピックを作成する AWS CloudFormation テンプレートを確認するには、「」を参照してくださいを使用して Amazon から Amazon SNSへのSQSメッセージングを自動化する AWS CloudFormation

ステップ 1: キューとトピックARNの を取得する

トピックにキューをサブスクライブするときは、ARNキューの のコピーが必要です。同様に、トピックにキューにメッセージを送信するアクセス許可を付与する場合は、トピックARNの のコピーが必要です。

キュー を取得するにはARN、Amazon SQSコンソールまたは GetQueueAttributesAPIアクションを使用できます。

Amazon SQSコンソールARNからキューを取得するには
  1. にサインイン AWS Management Console し、 で Amazon SQSコンソールを開きますhttps://console.aws.amazon.com/sqs/

  2. ARN 取得するキューのボックスを選択します。

  3. 詳細セクションから、ARN値をコピーして Amazon SNSトピックへのサブスクライブに使用できます。

トピック を取得するにはARN、Amazon SNSコンソール、 sns-get-topic-attributes コマンド、または GetQueueAttributesAPIアクションを使用できます。

Amazon SNSコンソールARNからトピックを取得するには
  1. Amazon SNSコンソール にサインインします。

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

  3. 詳細セクションからARN、値をコピーして、Amazon SNSトピックがキューにメッセージを送信するためのアクセス許可を付与できるようにします。

ステップ 2: Amazon SQSキューにメッセージを送信するアクセス許可を Amazon SNSトピックに付与する

Amazon SNSトピックがキューにメッセージを送信できるようにするには、Amazon SNSトピックがsqs:SendMessageアクションを実行できるようにするポリシーをキューに設定する必要があります。

トピックにキューをサブスクライブする前に、トピックとキューが必要です。トピックやキューをまだ作成していない場合は、ここで作成します。詳細については、「トピックの作成」と、「Amazon Simple Queue Service デベロッパーガイド」の「キューの作成」を参照してください。

キューにポリシーを設定するには、Amazon SQSコンソールまたは SetQueueAttributesAPIアクションを使用できます。開始する前に、キューへのメッセージの送信を許可するトピックARNの があることを確認してください。複数のトピックにキューをサブスクライブする場合、ポリシーにはトピックごとに 1 つの Statement 要素が含まれている必要があります。

Amazon SQSコンソールを使用してキューに SendMessage ポリシーを設定するには
  1. にサインイン AWS Management Console し、 で Amazon SQSコンソールを開きますhttps://console.aws.amazon.com/sqs/

  2. ポリシーを設定するキューのチェックボックスをオンにし、[アクセスポリシー] タブを選択してから、[編集] を選択します。

  3. [アクセスポリシー] セクションで、キューにアクセスできるユーザーを定義します。

    • トピックにアクションを許可する条件を追加します。

    • 以下の例に示すように、 を Amazon SNSサービスPrincipalに設定します。

    • aws:SourceArn または aws:SourceAccount グローバル条件キーを使用して、混乱した代理シナリオから保護します。これらの条件キーを使用するには、 値をトピックARNの に設定します。キューを複数のトピックにサブスクライブしている場合は、代わりに aws:SourceAccount を使用できます。

    例えば、次のポリシーでは、 が MyTopic にメッセージを送信することを許可します MyQueue。

    { "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-2:123456789012:MyQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:MyTopic" } } } ] }

ステップ 3: キューを Amazon SNSトピックにサブスクライブする

トピックを介してキューにメッセージを送信するには、キューを Amazon SNSトピックにサブスクライブする必要があります。キューは で指定しますARN。トピックをサブスクライブするには、Amazon SNSコンソール、 sns-subscribe CLI コマンド、または SubscribeAPIアクションを使用できます。開始する前に、サブスクライブするキューARNの があることを確認してください。

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

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

  3. [トピック] ページでトピックを選択します。

  4. MyTopic 「」ページの「サブスクリプションの作成」を選択します。

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

    1. トピック ARNを確認します。

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

    3. エンドポイント には、Amazon SQSキューARNの を入力します。

    4. [Create Subscription] を選択します。

    サブスクリプションが確認されると、新しいサブスクリプションの [サブスクリプション ID] にサブスクリプション ID が表示されます。キューの所有者がサブスクリプションを作成する場合、サブスクリプションは自動的に確認され、ほぼ瞬時にアクティブになります。

    通常は、自分のアカウントの自分のトピックに自分のキューをサブスクライブします。ただし、別のアカウントのキューを自分のトピックにサブスクライブすることもできます。サブスクリプションを作成するユーザーがキューの所有者ではない場合 (例えば、アカウント A のユーザーがアカウント A のトピックにアカウント B のキューをサブスクライブする場合)、サブスクリプションの確認が必要です。別のアカウントのキューをサブスクライブし、サブスクリプションを確認する方法の詳細については、「別のアカウントの Amazon SQSキューに Amazon SNSメッセージを送信する」を参照してください。

ステップ 4: 適切なトピックおよびキューアクションに対するアクセス権限をユーザーに付与する

AWS Identity and Access Management (IAM) を使用して、適切なユーザーのみが Amazon SNSトピックに発行できるようにし、Amazon SQSキューからメッセージを読み取る/削除できるようにする必要があります。IAM ユーザーのトピックとキューに対するアクションの制御の詳細については、Amazon Simple Queue Service デベロッパーガイドのAmazon でのアイデンティティベースのポリシーの使用 SNS「」および「Amazon での Identity and Access ManagementSQS」を参照してください。

トピックまたはキューへのアクセスは、以下の 2 つの方法で制御します。

  • IAM ユーザーまたはグループ にポリシーを追加します。ユーザーにトピックやキューへのアクセス権限を付与する最も簡単な方法として、グループを作成し、そのグループに適切なポリシーとユーザーを追加することができます。個々のユーザーに設定するポリシーを継続的に追跡するよりも、グループに対してユーザーを追加または削除する方がはるかに簡単です。

  • トピックまたはキューにポリシーを追加する。トピックまたはキューへのアクセス許可を別の AWS アカウントに付与する場合は、アクセス許可を付与 AWS アカウント するプリンシパルとして を持つポリシーを追加することしかできません。

ほとんどの場合は、最初の方法 (ポリシーをグループに適用し、適切なユーザーをグループに追加または削除することでアクセス権限を管理する) を使用します。別のアカウントのユーザーにアクセス権限を付与する場合は、2 番目の方法を使用する必要があります。

IAM ユーザーまたはグループへのポリシーの追加

次のポリシーをIAMユーザーまたはグループに追加した場合、そのユーザーまたはそのグループのメンバーに、トピック sns:Publishに対してアクションを実行するアクセス許可を付与します MyTopic。

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

次のポリシーをIAMユーザーまたはグループに追加した場合、そのユーザーまたはそのグループのメンバーに、キュー MyQueue1 および MyQueue2 で sqs:ReceiveMessageおよび sqs:DeleteMessageアクションを実行するアクセス許可を付与します。

{ "Statement": [ { "Effect": "Allow", "Action": [ "sqs:ReceiveMessage", "sqs:DeleteMessage" ], "Resource": [ "arn:aws:sqs:us-east-2:123456789012:MyQueue1", "arn:aws:sqs:us-east-2:123456789012:MyQueue2" ] } ] }

トピックまたはキューにポリシーを追加する

以下のサンプルポリシーは、トピックとキューに別のアカウントのアクセス権限を付与する方法を示しています。

注記

アカウント内のリソースへの別の AWS アカウント アクセスを許可すると、そのリソースへの管理者レベルのアクセス (ワイルドカードアクセス) アクセス許可を持つIAMユーザーにも付与されます。他のアカウントの他のすべてのIAMユーザーは、リソースへのアクセスを自動的に拒否されます。その AWS アカウント リソースへのアクセス権をその の特定のIAMユーザーに付与する場合、アカウントまたは管理者レベルのアクセス権を持つIAMユーザーは、リソースのアクセス許可をそれらのIAMユーザーに委任する必要があります。クロスアカウント委任の詳細については、「 ガイド」の「クロスアカウントアクセスの有効化」を参照してください。 IAM

MyTopic アカウント 123456789012 のトピックに次のポリシーを追加した場合、そのトピックsns:Publishに対してアクションを実行するアクセス許可をアカウント 111122223333 に付与します。

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

アカウント 123456789012 のキューに次のポリシーを追加した場合、そのキュー MyQueue で sqs:ReceiveMessageおよび sqs:DeleteMessageアクションを実行するアクセス許可をアカウント 111122223333 に付与します。

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": [ "arn:aws:sqs:us-east-2:123456789012:MyQueue" ] } ] }

ステップ 5: トピックのキューサブスクリプションをテストする

トピックのキューサブスクリプションは、トピックに発行し、トピックがキューに送信したメッセージを表示することでテストできます。

Amazon SNSコンソールを使用してトピックに発行するには
  1. トピックに発行するアクセス許可を持つ AWS アカウント または IAM ユーザーの認証情報を使用して、 にサインイン AWS Management Console し、 で Amazon SNSコンソールを開きますhttps://console.aws.amazon.com/sns/

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

  3. [件名] ボックスに件名 (「Testing publish to queue」など) を入力し、[メッセージ] ボックスに任意のテキスト (「Hello world!」など) を入力して、[メッセージの発行] を選択します。「Your message has been successfully published.」というメッセージが表示されます。

Amazon SQSコンソールを使用してトピックからのメッセージを表示するには
  1. キュー内のメッセージを表示するアクセス許可を持つ AWS アカウント またはIAMユーザーの認証情報を使用して、 にサインイン AWS Management Console し、 で Amazon SQSコンソールを開きますhttps://console.aws.amazon.com/sqs/

  2. トピックにサブスクライブされている [queue] (キュー) を選択します。

  3. [Send and receive messages] (メッセージの送受信) を選択し、[Poll for messages] (メッセージのポーリング) を選択します。タイプが [通知] のメッセージが表示されます。

  4. [本文] カラムで、[詳細] を選択します。メッセージの詳細ボックスには、トピックに発行した件名とメッセージを含むJSONドキュメントが含まれています。メッセージは次のJSONドキュメントのようになります。

    { "Type" : "Notification", "MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "Testing publish to subscribed queues", "Message" : "Hello world!", "Timestamp" : "2012-03-29T05:12:16.901Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEnTrFPa3...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c7fe3a54-ab0e-4ec2-88e0-db410a0f2bee" }
  5. [閉じる] を選択します。キューに通知メッセージを送信するトピックへの発行は、正常に終了しました。