

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

# Amazon SNS トピックへ Amazon SQS キューをサブスクライブする
<a name="subscribe-sqs-queue-to-sns-topic"></a>

Amazon SNS トピックから Amazon SQS キューにメッセージを送信できるようにするには、次のいずれかを行います。
+ プロセスを簡素化するため、[Amazon SQS コンソール](https://console.aws.amazon.com/sqs/)を使用します。詳細については、『*Amazon Simple Queue Service デベロッパーガイド*』の「[Amazon SNS トピックへの Amazon SQS キューのサブスクライブ ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-subscribe-queue-sns-topic.html)」を参照してください。
+ 以下のステップを使用します。

  1. [メッセージの送信先にするキューとキューをサブスクライブするトピックの Amazon Resource Name (ARN) を取得します。](#SendMessageToSQS.arn)

  1. [Amazon SNS トピックに `sqs:SendMessage` 許可を付与し、キューにメッセージを送信できるようにします。](#SendMessageToSQS.sqs.permissions)

  1. [キューを Amazon SNS トピックへサブスクライブします。](#SendMessageToSQS.subscribe)

  1. [IAM ユーザーまたは AWS アカウント に、Amazon SNS トピックに発行し、Amazon SQS キューからのメッセージを読むための許可を付与します。](#SendMessageToSQS.iam.permissions)

  1. [トピックにメッセージを発行し、キューからのメッセージを読むことでテストします。](#SendMessageToSQS.test)

別の AWSアカウントにあるキューにメッセージを送信するようにトピックをセットアップする方法については、「[別のアカウントの Amazon SQS キューへ Amazon SNS メッセージを送信する](sns-send-message-to-sqs-cross-account.md)」を参照してください。

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

## ステップ 1: キューとトピックの ARN を取得する
<a name="SendMessageToSQS.arn"></a>

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

キューの ARN を取得するには、Amazon SQS コンソールまたは [GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryGetQueueAttributes.html) API アクションを使用できます。

**キューの ARN を Amazon SQS コンソールから取得するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/) で Amazon SQS コンソールを開きます。

1. ARN を取得するキューのチェックボックスをオンにします。

1. [**詳細**] タブから、Amazon SNS トピックへのサブスクライブに使用できるように ARN 値をコピーします。

トピックの ARN を取得するには、Amazon SNS コンソール、`[sns-get-topic-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-topic-attributes.html)` コマンド、または `[GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryGetQueueAttributes.html)` API アクションを使用できます。

**トピックの ARN を Amazon SNS コンソールから取得するには**

1. [Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)にサインインします。

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

1. **詳細**セクションで、**ARN** 値を使用して Amazon SNS トピックがメッセージを送信する許可を取得できるようにします。

## ステップ 2: Amazon SQS キューにメッセージを送信する許可を Amazon SNS トピックに付与する
<a name="SendMessageToSQS.sqs.permissions"></a>

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

トピックにキューをサブスクライブする前に、トピックとキューが必要です。トピックやキューをまだ作成していない場合は、ここで作成します。詳細については、「[トピックの作成](sns-create-topic.md)」と、「Amazon Simple Queue Service デベロッパーガイド」の「[キューの作成](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/step-create-queue.html)」を参照してください。

キューにポリシーを設定するには、Amazon SQS コンソールまたは [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QuerySetQueueAttributes.html) API アクションを使用できます。開始する前に、キューにメッセージを送信できるようにするトピックの ARN があることを確認してください。複数のトピックにキューをサブスクライブする場合、ポリシーにはトピックごとに 1 つの `Statement` 要素が含まれている必要があります。

**Amazon SQS コンソールを使用してキューに SendMessage ポリシーを設定するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/) で Amazon SQS コンソールを開きます。

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

1. [**アクセスポリシー**] セクションで、キューにアクセスできるユーザーを定義します。
   + トピックにアクションを許可する条件を追加します。
   + 以下の例に示すように、Amazon SNS サービスを `Principal` に設定します。
   + [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) または [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) グローバル条件キーを使用して、[混乱した代理](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)シナリオから保護します。これらの条件キーを使用するには、値をトピックの 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 トピックへサブスクライブします。
<a name="SendMessageToSQS.subscribe"></a>

トピックを介してキューにメッセージを送信するには、キューを Amazon SNS トピックにサブスクライブする必要があります。キューは ARN で指定します。トピックにサブスクライブするには、Amazon SNS コンソール、`[sns-subscribe](https://docs.aws.amazon.com/cli/latest/reference/sns/subscribe.html)` CLI コマンド、または `[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)` API アクションを使用できます。開始する前に、サブスクライブするキューの ARN があることを確認してください。

1. [Amazon SNS コンソール](https://console.aws.amazon.com/sns/home)にサインインします。

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

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

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

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

   1. [**トピックの ARN**] を検証します。

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

   1. [**エンドポイント**] に、 Amazon SQS キューの ARN を入力します。

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

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

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

## ステップ 4: 適切なトピックおよびキューアクションに対するアクセス権限をユーザーに付与する
<a name="SendMessageToSQS.iam.permissions"></a>

 AWS Identity and Access Management (IAM) を使用して、適切なユーザーのみが Amazon SNS トピックに発行し、Amazon SQS キューからのメッセージの読み取り/削除を許可する必要があります。IAM ユーザーに対するトピックおよびキューに対するアクションの制御の詳細については、「[Amazon SNS でのアイデンティティベースのポリシーを使用する](sns-using-identity-based-policies.md)」および『Amazon Simple Queue Service デベロッパーガイド』の「[Amazon SQS での Identity and Access Management](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/UsingIAM.html)」を参照してください。

トピックまたはキューへのアクセスは、以下の 2 つの方法で制御します。
+ [IAM ユーザーまたはグループにポリシーを追加する](#SendMessageToSQS.iam.permissions.user)。ユーザーにトピックやキューへのアクセス権限を付与する最も簡単な方法として、グループを作成し、そのグループに適切なポリシーとユーザーを追加することができます。個々のユーザーに設定するポリシーを継続的に追跡するよりも、グループに対してユーザーを追加または削除する方がはるかに簡単です。
+ [トピックまたはキューにポリシーを追加する](#SendMessageToSQS.iam.permissions.resource)。トピックまたはキューへのアクセス許可を別の AWS アカウントに付与する場合は、アクセス許可を付与 AWS アカウント するプリンシパルとして を持つポリシーを追加することしかできません。

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

### IAM ユーザーまたはグループにポリシーを追加する
<a name="SendMessageToSQS.iam.permissions.user"></a>

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

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

IAM ユーザーまたはグループに次のポリシーを追加した場合、ユーザーまたはそのグループのメンバーに、キューの「MyQueue 1」と「MyQueu 2」に対して `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"
      ]
    }
  ]
}
```

### トピックまたはキューにポリシーを追加する
<a name="SendMessageToSQS.iam.permissions.resource"></a>

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

**注記**  
アカウントのリソースへの別の AWS アカウント アクセスを許可すると、そのリソースへの管理者レベルのアクセス (ワイルドカードアクセス) アクセス許可を持つ IAM ユーザーにも付与されます。他のアカウントの他のすべての IAM ユーザーは、自動的にリソースへのアクセスが拒否されます。その AWS アカウント アクセスの特定の IAM ユーザーにリソースへのアクセス権を付与する場合、管理者レベルアクセス権を持っているアカウントまたは IAM ユーザーは、そのリソースのアクセス権限をそれらの IAM ユーザーに委任する必要があります。クロスアカウントの委任の詳細については、『*IAM ガイドの使用*』の「[Enabling Cross-Account Access](https://docs.aws.amazon.com/IAM/latest/UserGuide/Delegation.html)」を参照してください。

アカウント 123456789012 の「マイトピック」トピックに次のポリシーを追加した場合、そのトピックで `sns:Publish` アクションを実行するアクセス権限をアカウント 111122223333 に付与したことになります。

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

アカウント 123456789012 のキュー「マイキュー」に以下のポリシーを追加した場合、そのキューで `sqs:DeleteMessage` および `sqs:ReceiveMessage` アクションを実行する許可をアカウント 111122223333 に付与したことになります。

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

## ステップ 5: トピックのキューサブスクリプションをテストする
<a name="SendMessageToSQS.test"></a>

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

**Amazon SNS コンソールを使用してトピックに発行するには**

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

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

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

**Amazon SQS コンソールを使用してトピックからのメッセージを表示するには**

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

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

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

1. [**本文**] カラムで、[**詳細**] を選択します。[**メッセージ詳細**] ボックスに、トピックに発行した件名とメッセージを含む 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"
   }
   ```

1. [**閉じる**] を選択します。キューに通知メッセージを送信するトピックへの発行は、正常に終了しました。