本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS IoT 規則存取跨帳戶資源
您可以設定跨帳戶存取的 AWS IoT 規則,以便將擷取到一個帳戶MQTT主題的資料路由到另一個帳戶的 AWS 服務,例如 Amazon SQS和 Lambda。以下說明如何設定跨帳戶資料擷取的 AWS IoT 規則,從一個帳戶中MQTT的主題到另一個帳戶中的目的地。
跨帳戶規則可使用資源型許可,在目的地資源上進行配至。因此,只有支援資源型許可的目的地才能為具有 AWS IoT 規則的跨帳戶存取啟用。支援的目的地包括 Amazon SQS、Amazon SNS、Amazon S3 和 AWS Lambda。
注意
對於支援的目的地,除了 Amazon SQS之外,您必須在與其他服務資源 AWS 區域 相同的 中定義規則,以便規則動作可以與該資源互動。如需 AWS IoT 規則動作的詳細資訊,請參閱AWS IoT 規則動作 。如需規則SQS動作的詳細資訊,請參閱 SQS。
必要條件
-
熟悉 AWS IoT 規則
-
安裝了 AWS CLI
Amazon 的跨帳戶設定 SQS
案例:帳戶 A 從MQTT訊息傳送資料到帳戶 B 的 Amazon SQS佇列。
AWS 帳戶 | 帳戶稱為 | 描述 |
---|---|---|
|
帳戶 A | 規則動作:sqs:SendMessage |
|
帳戶 B | Amazon SQS佇列
|
注意
您的目的地 Amazon SQS佇列不必 AWS 區域 與AWS IoT 規則 位於相同位置。如需規則SQS動作的詳細資訊,請參閱 SQS。
執行帳戶 A 任務
注意
若要執行下列命令,您的IAM使用者應該具有 的許可,iot:CreateTopicRule
以規則的 Amazon Resource Name (ARN) 作為資源,以及以 資源作為角色 iam:PassRole
的動作許可ARN。
-
使用帳戶 A IAM的使用者進行設定 AWS CLI。
-
建立信任 AWS IoT 規則引擎IAM的角色,並連接允許存取帳戶 B Amazon SQS佇列的政策。請參閱授予 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會授予 AWS IoT 將訊息新增至 Amazon SQS佇列的許可。{ "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 任務
備註
若要執行下列命令,您的IAM使用者應具有 的許可iot:CreateTopicRule
,以 規則ARN做為資源,以及以 資源做為角色 iam:PassRole
的動作許可ARN。
-
使用帳戶 A IAM的使用者進行設定 AWS CLI。
-
建立信任 AWS IoT 規則引擎IAM的角色,並連接允許存取帳戶 B Amazon SNS主題的政策。如需命令和政策文件的範例,請參閱授予 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授予 AWS IoT 許可,以將訊息傳送至 Amazon SNS主題。{ "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 任務
注意
若要執行下列命令,您的IAM使用者應具有 的許可,iot:CreateTopicRule
以 規則ARN做為資源,並具有以 資源做為角色 iam:PassRole
的動作許可ARN。
-
使用帳戶 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授予 AWS IoT 許可,以將訊息新增至 Amazon S3 儲存貯體。{ "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 任務
備註
若要執行下列命令,您的IAM使用者應具有 的許可iot:CreateTopicRule
,以規則ARN作為資源,以及以資源作為角色 iam:PassRole
的動作許可ARN。
-
使用帳戶 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會授予 AWS IoT 許可,以將資料傳遞至 Lambda 函數。{ "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 IoT 規則中定義 AWS Lambda 動作的詳細資訊,請參閱AWS IoT 規則動作 - Lambda 。
執行帳戶 B 任務
-
使用帳戶 B IAM的使用者進行設定 AWS CLI。
-
執行 Lambda 的 add-permission 命令,以授予啟用 Lambda 函數的 AWS IoT 規則許可。若要執行下列命令,您的IAM使用者應具有
lambda:AddPermission
動作的許可。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"選項:
--principal
此欄位授予 AWS IoT (由 代表
iot.amazonaws.com
) 呼叫 Lambda 函數的許可。--source-arn
此欄位確認僅 AWS IoT 中的
arn:aws:iot:region:1111-1111-1111:rule/example-rule
會觸發此 Lambda 函數,且相同或不同帳戶中的任何其他規則皆無法啟動此 Lambda 函數。--source-account
此欄位會確認 僅代表
1111-1111-1111
帳戶 AWS IoT 啟用此 Lambda 函數。備註
若您看到來自 AWS Lambda 函數主控台 Configuration (組態) 之下的錯誤訊息「找不到規則」,請略過錯誤訊息並繼續測試連線。