翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS IoT ルールを使用したクロスアカウントリソースへのアクセス
クロスアカウントアクセスの AWS IoT ルールを設定して、あるアカウントの MQTT トピックに取り込まれたデータを別のアカウントの Amazon SQS や Lambda などの AWS サービスにルーティングできます。次に、あるアカウントの MQTT トピックから別のアカウントの宛先へのクロスアカウントデータ取り込みの AWS IoT ルールを設定する方法について説明します。
クロスアカウントルールは、宛先リソースのリソースベースのアクセス許可を使用して設定できます。したがって、 AWS IoT ルールを使用してクロスアカウントアクセスを有効にすることができるのは、リソースベースのアクセス許可をサポートする送信先のみです。サポートされる宛先には、Amazon SQS、Amazon SNS、Amazon S3、および AWS Lambdaがあります。
注記
Amazon SQS を除くサポートされている送信先については、ルールアクションがそのリソースとやり取りできるように、別のサービスのリソース AWS リージョン と同じ でルールを定義する必要があります。 AWS IoT ルールアクションの詳細については、AWS IoT 「 ルールアクション」を参照してください。ルールの SQS アクションの詳細については、「SQS」を参照してください。
前提条件
-
AWS IoT ルールに詳しいこと
-
IAM ユーザー,ロール,およびリソースベースのアクセス許可を理解していること
-
AWS CLI がインストールされていること
Amazon SQS のクロスアカウント設定
シナリオ: アカウント A が、MQTT メッセージからアカウント B の Amazon SQS キューにデータを送信します。
AWS アカウント | アカウントの呼び方 | 説明 |
---|---|---|
|
アカウント A | ルールアクション: sqs:SendMessage |
|
アカウント B | Amazon SQS キュー
|
注記
送信先の Amazon SQS キューがAWS IoT ルール AWS リージョン と同じ に存在する必要はありません。ルールの SQS アクションの詳細については、「SQS」を参照してください。
アカウント A のタスクを実行する
メモ
次のコマンドを実行するには、リソースがルールの Amazon リソースネーム (ARN) である iot:CreateTopicRule
へのアクセス許可と、リソースがロールの ARN である iam:PassRole
アクションへのアクセス許可が IAM ユーザーに必要です。
-
アカウント A の IAM ユーザーを使用して、AWS CLIを設定します。
-
AWS IoT ルールエンジンを信頼し、アカウント B の Amazon SQS キューへのアクセスを許可するポリシーをアタッチする IAM ロールを作成します。「必要なアクセス権を付与する」の「コマンドとポリシードキュメントの例 AWS IoT」を参照してください。
-
トピックにアタッチされるルールを作成するために、create-topic-rule コマンドを実行します。
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」を参照してください。
アカウント B のタスクを実行する
-
アカウント B の IAM ユーザーを使用して、AWS CLIを設定します。
-
Amazon SQS キューリソースへのアクセス許可をアカウント A に付与するために、add-permission コマンドを実行します。
aws sqs add-permission --queue-url
https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue
--labelSendMessagesToMyQueue
--aws-account-ids1111-1111-1111
--actions SendMessage
Amazon SNS のクロスアカウント設定
シナリオ: アカウント A が、MQTT メッセージからアカウント B の Amazon SNS トピックにデータを送信します。
AWS アカウント | アカウントの呼び方 | 説明 |
---|---|---|
|
アカウント A | ルールアクション: sns:Publish |
|
アカウント B | Amazon SNS トピックの ARN: |
アカウント A のタスクを実行する
メモ
次のコマンドを実行するには、リソースがルールの ARN である iot:CreateTopicRule
へのアクセス許可と、リソースがロールの ARN である iam:PassRole
アクションへのアクセス許可が IAM ユーザーに必要です。
-
アカウント A の IAM ユーザーを使用して、AWS CLIを設定します。
-
AWS IoT ルールエンジンを信頼し、アカウント B の Amazon SNS トピックへのアクセスを許可するポリシーをアタッチする IAM ロールを作成します。コマンドとポリシードキュメントの例については、「必要なアクセス権 AWS IoT の付与」を参照してください。
-
トピックにアタッチされるルールを作成するために、create-topic-rule コマンドを実行します。
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」を参照してください。
アカウント B のタスクを実行する
-
アカウント B の IAM ユーザーを使用して、AWS CLIを設定します。
-
Amazon SNS トピックリソースに対するアクセス許可をアカウント A に付与するために、add-permission コマンドを実行します。
aws sns add-permission --topic-arn
arn:aws:sns:region:2222-2222-2222:ExampleTopic
--labelPublish-Permission
--aws-account-id1111-1111-1111
--action-name Publish
Amazon S3 のクロスアカウント設定
シナリオ: アカウント A が、MQTT メッセージからアカウント B の Amazon S3 バケットにデータを送信します。
AWS アカウント | アカウントの呼び方 | 説明 |
---|---|---|
|
アカウント A | ルールアクション: s3:PutObject |
|
アカウント B | Amazon S3 バケットの ARN: |
アカウント A のタスクを実行する
メモ
次のコマンドを実行するには、リソースがルールのARN である iot:CreateTopicRule
に対するアクセス許可と、リソースがロールの ARN である iam:PassRole
アクションに対するアクセス許可が IAM ユーザーに必要です。
-
アカウント A の IAM ユーザーを使用して、AWS CLIを設定します。
-
AWS IoT ルールエンジンを信頼し、アカウント B の Amazon S3 バケットへのアクセスを許可するポリシーをアタッチする IAM ロールを作成します。コマンドとポリシードキュメントの例については、「必要なアクセス権 AWS IoT の付与」を参照してください。
-
ターゲット S3 バケットにアタッチされるルールを作成するために、create-topic-rule コマンドを実行します。
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」を参照してください。
アカウント B のタスクを実行する
-
アカウント B の IAM ユーザーを使用して、AWS CLIを設定します。
-
アカウント A のプリンシパルを信頼するバケットポリシーを作成します。
次のペイロードファイル例では、別のアカウントのプリンシパルを信頼するバケットポリシーを定義します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddCannedAcl", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::1111-1111-1111:root" ] }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }
詳しくは、バケットポリシーの例を参照してください。
-
指定したバケットにバケットポリシーをアタッチするために、put-bucket-policy コマンドを実行します。
aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://./
amzn-s3-demo-bucket-policy.json
-
クロスアカウントアクセスが機能するように、パブリックアクセスをすべてブロックが正しく設定されていることを確認してください。詳しくは、Amazon S3 のセキュリティベストプラクティスを参照してください。
のクロスアカウント設定 AWS Lambda
シナリオ: アカウント A はアカウント B の AWS Lambda 関数を呼び出し、MQTT メッセージを渡します。
AWS アカウント | アカウントの呼び方 | 説明 |
---|---|---|
|
アカウント A | ルールアクション: lambda:InvokeFunction |
|
アカウント B | Lambda 関数の ARN: |
アカウント A のタスクを実行する
メモ
次のコマンドを実行するには、リソースがルールのARN である iot:CreateTopicRule
に対するアクセス許可と、リソースがロールの ARN である iam:PassRole
アクションに対するアクセス許可が IAM ユーザーに必要です。
-
アカウント A の IAM ユーザーを使用して、AWS CLIを設定します。
-
create-topic-rule コマンドを実行して、アカウント 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 を参照してください。
アカウント B のタスクを実行する
-
アカウント B の IAM ユーザーを使用して、AWS CLIを設定します。
-
Lambda の add-permission コマンドを実行して、Lambda 関数をアクティブ化するアクセス許可を AWS IoT ルールに付与します。次のコマンドを実行するには、
lambda:AddPermission
アクションに対するアクセス許可が IAM ユーザーに必要です。aws lambda add-permission --function-name
example-function
--regionus-east-1
--principal iot.amazonaws.com --source-arnarn:aws:iot:region:1111-1111-1111:rule/example-rule
--source-account1111-1111-1111
--statement-id"unique_id"
--action "lambda:InvokeFunction"オプション:
--プリンシパル
このフィールドは、Lambda 関数を呼び出すアクセス許可を AWS IoT ( によって表されます
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] (設定) の下に「ルールが見つかりませんでした」というエラーメッセージが表示される場合は、エラーメッセージを無視して、接続のテストに進みます。