

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

# 別のアカウントの Amazon SQS キューへ Amazon SNS メッセージを送信する
<a name="sns-send-message-to-sqs-cross-account"></a>

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

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

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

## キューの所有者がサブスクリプションを作成する
<a name="SendMessageToSQS.cross.account.queueowner"></a>

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

### ステップ 1: を使用してトピックポリシーを設定するには AWS マネジメントコンソール
<a name="sns-tutorial-set-topic-policy"></a>

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

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

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

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

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

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

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

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

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

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

### ステップ 2: AWS アカウント を使用して別の のトピックに Amazon SQS キューサブスクリプションを追加するには AWS マネジメントコンソール
<a name="sns-tutorial-add-sqs-subscription-to-sns-topic-another-account"></a>

開始する前に、トピックおよびキューの ARN を保持していて、[キューにメッセージを送信する許可がトピックに付与されている](subscribe-sqs-queue-to-sns-topic.md#SendMessageToSQS.sqs.permissions)ことを確認してください。

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

1. ナビゲーションパネルで、**[Queues]**(キュー) を選択します。

1.  キューのリストから**キュー**を選択して、Amazon SNS トピックを購読します。

1. **[Subscribe to Amazon SNS topic]** (Amazon SNS トピックを購読する) を選択します。

1. **[Specify an Amazon SNS topic available for this queue menu]** (このキューメニューで使用できる Amazon SNS トピックを指定する) で、キューの **Amazon SNS topic** (Amazon SNS トピック) を選択します。

1. **[Amazon SNS トピックの ARN を入力する]**を選択してから、トピックの **Amazon リソースネーム (ARN)** を入力します。

1. **[保存]** を選択します。
**注記**  
サービスと通信できるようにするには、キューに Amazon SNS へのアクセス権限が必要です。
キューの所有者であるため、サブスクリプションを確認する必要はありません。

## キュー作成サブスクリプションを所有していないユーザー
<a name="SendMessageToSQS.cross.account.notqueueowner"></a>

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

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

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

**注記**  
トピックにエンドポイントをサブスクライブする前に、キューに `sqs:SendMessage` アクセス権限を設定してこのキューがトピックからメッセージを受信できるようにする必要があります。詳細については、「[ステップ 2: Amazon SQS キューにメッセージを送信する許可を Amazon SNS トピックに付与する](subscribe-sqs-queue-to-sns-topic.md#SendMessageToSQS.sqs.permissions)」を参照してください。

### ステップ 1: AWS アカウント を使用して別の のトピックに Amazon SQS キューサブスクリプションを追加するには AWS マネジメントコンソール
<a name="sns-tutorial-add-sqs-subscription-to-sns-topic-another-account"></a>

開始する前に、トピックおよびキューの ARN を保持していて、[キューにメッセージを送信する許可がトピックに付与されている](subscribe-sqs-queue-to-sns-topic.md#SendMessageToSQS.sqs.permissions)ことを確認してください。

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

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

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

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

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

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

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

   1. [**サブスクリプションの作成**] を選択します。
**注記**  
サービスと通信できるようにするには、キューに 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 マネジメントコンソール
<a name="sns-tutorial-confirm-subscription-console"></a>

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

1. トピックへのサブスクリプションが保留になっているキューを選択します。

1. **[Send and receive messages]** (メッセージの送受信) を選択し、**[Poll for messages]** (メッセージのポーリング) を選択します。

   サブスクリプションの確認を含むメッセージがキューで受信されます。

1. [**本文**] 列で、次の操作を行います。

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

   1. **[Message Details]** (メッセージの詳細) ダイアログボックスで、**[SubscribeURL]** の値を見つけてメモします。これはサブスクリプションリンクです (以下に例を示します)。API トークンの検証の詳細については、Amazon SNS API リファレンスの「[https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)」を参照してください。

      ```
      https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:MyTopic&Token=2336412f37fb...
      ```

   1. サブスクリプション確認リンクを書き留めます。URL は、キュー所有者からサブスクリプション所有者に渡す必要があります。サブスクリプションの所有者は、URL を [Amazon SNS コンソール](https://console.aws.amazon.com/sns/v3/home)に入力する必要があります。

1. **サブスクリプション所有者**として [Amazon SNS コンソール](https://console.aws.amazon.com/sns/v3/home)にログインします。サブスクリプション所有者が確認を実行します。

1. 関連する **[topic]** (トピック) を選択します。

1. トピックのサブスクリプション一覧表で、関連する**サブスクリプション**を選択します。「Pending confirmation (保留中の確認)」とラベル付けされています。

1. **[confirm subscription]** (サブスクリプションの確認) を選択します。

1. サブスクリプション確認リンクを求めるモーダルが表示されます。サブスクリプション確認リンクを**貼り付け**ます。

1. モーダルで **[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>
   ```

   サブスクライブしたキューは、トピックからメッセージを受信する準備ができています。

1. (オプション) Amazon SNS コンソールでトピックのサブスクリプションを表示すると、[**保留中の確認**] メッセージが [**サブスクリプション ID**] 列でサブスクリプション ARN に置き換えられています。

## サブスクリプション解除リクエストでサブスクリプションに認証を要求させるにはどうすればよいですか。
<a name="sns-send-message-to-sqs-cross-account-AuthenticateOnUnsubscribe"></a>

サブスクリプションの所有者は、サブスクリプション確認時に `AuthenticateOnUnsubscribe` フラグを true に設定する必要があります。
+ キューの所有者がサブスクリプションを作成すると、`AuthenticateOnUnsubscribe` は自動的に true に設定されます。
+ 認証なしでサブスクリプション確認リンクに移動した場合、`AuthenticateOnUnsubscribe` を true に設定することはできません。