

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

# AWS IoT ルールを使用したクロスアカウントリソースへのアクセス
<a name="accessing-cross-account-resources-using-rules"></a>

クロスアカウントアクセスの AWS IoT ルールを設定して、あるアカウントの MQTT トピックに取り込まれたデータを別のアカウントの Amazon SQS や Lambda などの AWS サービスにルーティングできます。次に、あるアカウントの MQTT トピックから別のアカウントの宛先へのクロスアカウントデータ取り込みの AWS IoT ルールを設定する方法について説明します。

クロスアカウントルールは、宛先リソースの[リソースベースのアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#TypesPermissions)を使用して設定できます。したがって、 AWS IoT ルールを使用してクロスアカウントアクセスを有効にすることができるのは、リソースベースのアクセス許可をサポートする送信先のみです。サポートされる宛先には、Amazon SQS、Amazon SNS、Amazon S3、および AWS Lambdaがあります。

**注記**  
Amazon SQS を除くサポートされている送信先については、ルールアクションがそのリソースとやり取りできるように、別のサービスのリソース AWS リージョン と同じ でルールを定義する必要があります。 AWS IoT ルールアクションの詳細については、[AWS IoT 「 ルールアクション](iot-rule-actions.md)」を参照してください。ルールの SQS アクションの詳細については、「[SQS](sqs-rule-action.md)」を参照してください。

## 前提条件
<a name="cross-account-prerequisites"></a>
+ [AWS IoT ルール](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html)に詳しいこと
+ IAM [ユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_identity-management.html),[ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html),および[リソースベースのアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_permissions.html#TypesPermissions)を理解していること
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) がインストールされていること

## Amazon SQS のクロスアカウント設定
<a name="cross-account-sqs"></a>

シナリオ: アカウント A が、MQTT メッセージからアカウント B の Amazon SQS キューにデータを送信します。


| AWS アカウント | アカウントの呼び方  | 説明 | 
| --- | --- | --- | 
| {{1111-1111-1111}} | アカウント A | ルールアクション: sqs:SendMessage | 
| {{2222-2222-2222}} | アカウント B | Amazon SQS キュー [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/accessing-cross-account-resources-using-rules.html)  | 

**注記**  
送信先の Amazon SQS キューが[AWS IoT ルール](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) AWS リージョン と同じ に存在する必要はありません。ルールの SQS アクションの詳細については、「[SQS](sqs-rule-action.md)」を参照してください。

**アカウント A のタスクを実行する**
**メモ**  
次のコマンドを実行するには、リソースがルールの Amazon リソースネーム (ARN) である `iot:CreateTopicRule` へのアクセス許可と、リソースがロールの ARN である `iam:PassRole` アクションへのアクセス許可が IAM ユーザーに必要です。

1. アカウント A の IAM ユーザーを使用して、[AWS CLIを設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)します。

1.  AWS IoT ルールエンジンを信頼する IAM ロールを作成し、アカウント B の Amazon SQS キューへのアクセスを許可するポリシーをアタッチします。[「必要なアクセス権を付与する」の「コマンドとポリシードキュメントの例 AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html)」を参照してください。

1. トピックにアタッチされるルールを作成するために、[create-topic-rule コマンド](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)を実行します。

   ```
   aws iot create-topic-rule --rule-name {{myRule}} --topic-rule-payload file://./{{my-rule.json}}
   ```

   次のペイロードファイル例では、`iot/test` トピックに送信されたすべてのメッセージを指定の Amazon SQS キューに挿入するルールが指定されています。SQL ステートメントによってメッセージがフィルター処理され、ロールの ARN によって Amazon SQS キューにメッセージを追加するアクセス許可が AWS IoT に付与されます。

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"sqs": {
   				"queueUrl": "https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue",
   				"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role",
   				"useBase64": false
   			}
   		}
   	]
   }
   ```

    AWS IoT ルールで Amazon SQS アクションを定義する方法の詳細については、[AWS IoT 「ルールアクション - Amazon SQS](https://docs.aws.amazon.com/iot/latest/developerguide/sqs-rule-action.html)」を参照してください。

**アカウント B のタスクを実行する**

1. アカウント B の IAM ユーザーを使用して、[AWS CLIを設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)します。

1. Amazon SQS キューリソースへのアクセス許可をアカウント A に付与するために、[add-permission コマンド](https://docs.aws.amazon.com/cli/latest/reference/sqs/add-permission.html)を実行します。

   ```
   aws sqs add-permission --queue-url {{https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue}} --label {{SendMessagesToMyQueue}} --aws-account-ids {{1111-1111-1111}} --actions SendMessage
   ```

## Amazon SNS のクロスアカウント設定
<a name="cross-account-sns"></a>

シナリオ: アカウント A が、MQTT メッセージからアカウント B の Amazon SNS トピックにデータを送信します。


| AWS アカウント | アカウントの呼び方  | 説明 | 
| --- | --- | --- | 
| {{1111-1111-1111}} | アカウント A | ルールアクション: sns:Publish | 
| {{2222-2222-2222}} | アカウント B | Amazon SNS トピックの ARN: {{arn:aws:sns:region:2222-2222-2222:ExampleTopic}}  | 

**アカウント A のタスクを実行する**
**注意事項**  
 次のコマンドを実行するには、リソースがルールの ARN である `iot:CreateTopicRule` へのアクセス許可と、リソースがロールの ARN である `iam:PassRole` アクションへのアクセス許可が IAM ユーザーに必要です。

1. アカウント A の IAM ユーザーを使用して、[AWS CLIを設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)します。

1.  AWS IoT ルールエンジンを信頼し、アカウント B の Amazon SNS トピックへのアクセスを許可するポリシーをアタッチする IAM ロールを作成します。コマンドとポリシードキュメントの例については、[「必要なアクセス権 AWS IoT の付与](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html)」を参照してください。

1. トピックにアタッチされるルールを作成するために、[create-topic-rule コマンド](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)を実行します。

   ```
   aws iot create-topic-rule --rule-name {{myRule}} --topic-rule-payload file://./{{my-rule.json}}
   ```

   次のペイロードファイル例では、`iot/test` トピックに送信されたすべてのメッセージを指定の Amazon SNS トピックに挿入するルールが指定されています。SQL ステートメントによってメッセージがフィルター処理され、ロールの ARN によって Amazon SNS トピックへのアクセス許可が AWS IoT に付与されます。

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"sns": {
   				"targetArn": "arn:aws:sns:region:2222-2222-2222:ExampleTopic",
   				"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role"
   			}
   		}
   	]
   }
   ```

    AWS IoT ルールで Amazon SNS アクションを定義する方法の詳細については、[AWS IoT 「ルールアクション - Amazon SNS](https://docs.aws.amazon.com/iot/latest/developerguide/sns-rule-action.html)」を参照してください。

**アカウント B のタスクを実行する**

1. アカウント B の IAM ユーザーを使用して、[AWS CLIを設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)します。

1. Amazon SNS トピックリソースに対するアクセス許可をアカウント A に付与するために、[add-permission コマンド](https://docs.aws.amazon.com/cli/latest/reference/sns/add-permission.html)を実行します。

   ```
   aws sns add-permission --topic-arn {{arn:aws:sns:region:2222-2222-2222:ExampleTopic}} --label {{Publish-Permission}} --aws-account-id {{1111-1111-1111}} --action-name Publish
   ```

## Amazon S3 のクロスアカウント設定
<a name="cross-account-s3"></a>

シナリオ: アカウント A が、MQTT メッセージからアカウント B の Amazon S3 バケットにデータを送信します。


| AWS アカウント | アカウントの呼び方  | 説明 | 
| --- | --- | --- | 
| {{1111-1111-1111}} | アカウント A | ルールアクション: s3:PutObject | 
| {{2222-2222-2222}} | アカウント B | Amazon S3 バケットの ARN: {{arn:aws:s3:::amzn-s3-demo-bucket}}  | 

**アカウント A のタスクを実行する**
**メモ**  
次のコマンドを実行するには、リソースがルールのARN である `iot:CreateTopicRule` に対するアクセス許可と、リソースがロールの ARN である `iam:PassRole` アクションに対するアクセス許可が IAM ユーザーに必要です。

1. アカウント A の IAM ユーザーを使用して、[AWS CLIを設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)します。

1.  AWS IoT ルールエンジンを信頼し、アカウント B の Amazon S3 バケットへのアクセスを許可するポリシーをアタッチする IAM ロールを作成します。コマンドとポリシードキュメントの例については、[「必要なアクセス権 AWS IoT の付与](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html)」を参照してください。

1. ターゲット S3 バケットにアタッチされるルールを作成するために、[create-topic-rule コマンド](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)を実行します。

   ```
   aws iot create-topic-rule --rule-name {{my-rule}} --topic-rule-payload file://./{{my-rule.json}}
   ```

   次のペイロードファイル例では、`iot/test` トピックに送信されたすべてのメッセージを指定の Amazon S3 バケットに挿入するルールが指定されています。SQL ステートメントによってメッセージがフィルター処理され、ロールの ARN によって Amazon S3 バケットにメッセージを追加するアクセス許可が AWS IoT に付与されます。

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"s3": {
   				"bucketName": "amzn-s3-demo-bucket",
   				"key": "${topic()}/${timestamp()}",
   				"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role"
   			}
   		}
   	]
   }
   ```

    AWS IoT ルールで Amazon S3 アクションを定義する方法の詳細については、[AWS IoT 「ルールアクション - Amazon S3](https://docs.aws.amazon.com/iot/latest/developerguide/s3-rule-action.html)」を参照してください。

**アカウント B のタスクを実行する**

1. アカウント B の IAM ユーザーを使用して、[AWS CLIを設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)します。

1. アカウント A のプリンシパルを信頼するバケットポリシーを作成します。

   次のペイロードファイル例では、別のアカウントのプリンシパルを信頼するバケットポリシーを定義します。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AddCannedAcl",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::123456789012:root"
                   ]
           },
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
           }
       ]
   }
   ```

   詳しくは、[バケットポリシーの例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-1)を参照してください。

1. 指定したバケットにバケットポリシーをアタッチするために、[put-bucket-policy コマンド](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-policy.html)を実行します。

   ```
   aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://./{{amzn-s3-demo-bucket-policy.json}}
   ```

1. クロスアカウントアクセスが機能するように、**パブリックアクセスをすべてブロック**が正しく設定されていることを確認してください。詳しくは、[Amazon S3 のセキュリティベストプラクティス](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)を参照してください。

## のクロスアカウント設定 AWS Lambda
<a name="cross-account-lambda"></a>

シナリオ: アカウント A はアカウント B の AWS Lambda 関数を呼び出し、MQTT メッセージを渡します。


| AWS アカウント | アカウントの呼び方  | 説明 | 
| --- | --- | --- | 
| {{1111-1111-1111}} | アカウント A | ルールアクション: lambda:InvokeFunction | 
| {{2222-2222-2222}} | アカウント B | Lambda 関数の ARN: {{ arn:aws:lambda:region:2222-2222-2222:function:example-function}}  | 

**アカウント A のタスクを実行する**
**注意事項**  
 次のコマンドを実行するには、リソースがルールのARN である `iot:CreateTopicRule` に対するアクセス許可と、リソースがロールの ARN である `iam:PassRole` アクションに対するアクセス許可が IAM ユーザーに必要です。

1. アカウント A の IAM ユーザーを使用して、[AWS CLIを設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)します。

1. [create-topic-rule コマンド](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html)を実行して、アカウント B の Lambda 関数へのクロスアカウントアクセスを定義するルールを作成します。

   ```
   aws iot create-topic-rule --rule-name {{my-rule}} --topic-rule-payload file://./{{my-rule.json}}
   ```

   次のペイロードファイル例では、`iot/test` トピックに送信されたすべてのメッセージを指定の Lambda 関数に挿入するルールが指定されています。SQL ステートメントによってメッセージがフィルター処理され、ロールの ARN によって Lambda 関数にデータを渡すアクセス許可が AWS IoT に付与されます。

   ```
   {
   	"sql": "SELECT * FROM 'iot/test'",
   	"ruleDisabled": false,
   	"awsIotSqlVersion": "2016-03-23",
   	"actions": [
   		{
   			"lambda": {
   				"functionArn": "arn:aws:lambda:region:2222-2222-2222:function:example-function"
   			}
   		}
   	]
   }
   ```

   ルールで AWS Lambda AWS IoT アクションを定義する方法の詳細については、[AWS IoT ルールアクション - Lambda](https://docs.aws.amazon.com/iot/latest/developerguide/lambda-rule-action.html) を参照してください。

**アカウント B のタスクを実行する**

1. アカウント B の IAM ユーザーを使用して、[AWS CLIを設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)します。

1. [Lambda の add-permission コマンド](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html)を実行して、Lambda 関数をアクティブ化するアクセス許可を AWS IoT ルールに付与します。次のコマンドを実行するには、`lambda:AddPermission` アクションに対するアクセス許可が IAM ユーザーに必要です。

   ```
   aws lambda add-permission --function-name {{example-function}} --region {{us-east-1}} --principal iot.amazonaws.com --source-arn {{arn:aws:iot:region:1111-1111-1111:rule/example-rule}} --source-account {{1111-1111-1111}} --statement-id {{"unique_id"}} --action "lambda:InvokeFunction"
   ```

   **オプション:**

   **--プリンシパル**

    このフィールドは AWS IoT 、Lambda 関数を呼び出すアクセス許可を ( によって表される`iot.amazonaws.com`) に付与します。

   **--source-arn**

   このフィールドは、 AWS IoT の `arn:aws:iot:region:1111-1111-1111:rule/example-rule` のみがこのLambda 関数をトリガーし、同じアカウントまたは異なるアカウント内の他のルールはこの Lambda 関数をアクティブ化できないことを確認します。

   **--source-account**

   このフィールドは、 が`1111-1111-1111`アカウントに代わってのみこの Lambda 関数を AWS IoT アクティブ化することを確認します。
**注意事項**  
 AWS Lambda 関数のコンソールの [**Configuration**] (設定) の下に「ルールが見つかりませんでした」というエラーメッセージが表示される場合は、エラーメッセージを無視して、接続のテストに進みます。