Como acessar recursos entre contas usando regras AWS IoT
Você pode configurar regras AWS IoT para acesso entre contas para que os dados ingeridos nos tópicos do MQTT de uma conta possam ser roteados para os serviços AWS, como Amazon SQS e Lambda, de outra conta. A seguir, explicamos como configurar regras AWS IoT para a ingestão de dados entre contas, de um tópico do MQTT em uma conta até um destino em outra conta.
As regras entre contas podem ser configuradas usando permissões baseadas em recursos no recurso de destino. Portanto, somente destinos que oferecem suporte a permissões baseadas em recursos podem ser habilitados para o acesso entre contas com regras AWS IoT. Os destinos compatíveis incluem Amazon SQS, Amazon SNS, Amazon S3 e AWS Lambda.
nota
Para os destinos com suporte, exceto por Amazon SQS, defina a regra no mesmo Região da AWS que o do recurso de outro serviço para que a ação da regra possa interagir com esse recurso. Para obter mais informações sobre as AWS IoT ações de regra, consulte AWS IoT ações de regra. Para obter mais informações sobre a ação de SQS da regra, consulte SQS.
Pré-requisitos
-
Familiaridade com as AWS IoT regras
-
Uma compreensão dos usuários, funções e permissões baseadas em recursos do IAM
-
Tendo AWS CLI instalado
Configuração entre contas para o Amazon SQS
Cenário: a conta A envia dados de uma mensagem MQTT para a fila do Amazon SQS da conta B.
| Conta da AWS | Conta referida como | Descrição |
|---|---|---|
|
Conta A | Ação da regra: sqs:SendMessage |
|
Conta B | Fila do Amazon SQS
|
nota
Sua fila de destino do Amazon SQS não precisa estar na mesma Região da AWS que a da regra de AWS IoT. Para obter mais informações sobre a ação de SQS da regra, consulte SQS.
Realizar as tarefas da Conta A
Observação
Para executar os comandos a seguir, seu usuário do IAM deve ter permissões para iot:CreateTopicRule usar o nome do recurso da Amazon (ARN) da regra como um recurso e permissões para iam:PassRole agir com um recurso como o ARN da função.
-
Configure AWS CLI usando o usuário do IAM da conta A.
-
Crie um perfil do IAM que confie no AWS IoT mecanismo de regras e anexe uma política que permita acesso à fila do Amazon SQS da conta B. Veja exemplos de comandos e documentos de política em Concedendo AWS IoT o acesso necessário.
-
Para criar uma regra anexada a um tópico, execute o comando criar-tópico-regra.
aws iot create-topic-rule --rule-namemyRule--topic-rule-payload file://./my-rule.jsonVeja a seguir um exemplo de arquivo de carga útil com uma regra que insere todas as mensagens enviadas ao tópico
iot/testna fila especificada do Amazon SQS. A instrução SQL filtra as mensagens e o ARN da função concede permissões AWS IoT para adicionar a mensagem à fila do 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 } } ] }Para obter mais informações sobre como definir uma ação do Amazon SQS em uma regra AWS IoT, consulte AWS IoT ações de regras - Amazon SQS.
Realizar as tarefas da Conta B
-
Configure AWS CLI usando o usuário do IAM da conta B.
-
Para conceder permissões para o recurso de fila do Amazon SQS para a conta A, execute o comando adicionar-permissão.
aws sqs add-permission --queue-urlhttps://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue--labelSendMessagesToMyQueue--aws-account-ids1111-1111-1111--actions SendMessage
Configuração entre contas para o Amazon SNS
Cenário: a conta A envia dados de uma mensagem MQTT para um tópico do Amazon SNS da conta B.
| Conta da AWS | Conta referida como | Descrição |
|---|---|---|
|
Conta A | Ação da regra: sns:Publish |
|
Conta B | ARN do tópico do Amazon SNS: |
Realizar as tarefas da Conta A
Observações
Para executar os comandos a seguir, seu usuário do IAM deve ter permissões para iot:CreateTopicRule usar o ARN da regra como recurso e permissões para a ação iam:PassRole com um recurso como ARN da função.
-
Configure AWS CLI usando o usuário do IAM da conta A.
-
Crie um perfil do IAM que confie AWS IoT no mecanismo de regras e anexe uma política que permita acesso ao tópico do Amazon SNS da conta B. Veja exemplos de comandos e documentos da política em Concedendo AWS IoT o acesso necessário.
-
Para criar uma regra anexada a um tópico, execute o comando criar-tópico-regra.
aws iot create-topic-rule --rule-namemyRule--topic-rule-payload file://./my-rule.jsonVeja a seguir um exemplo de arquivo de carga útil com uma regra que insere todas as mensagens enviadas ao tópico
iot/testno tópico especificado do Amazon SNS. A instrução SQL filtra as mensagens e o ARN da função concede permissões AWS IoT para enviar a mensagem ao tópico do 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" } } ] }Para obter mais informações sobre como definir uma ação do Amazon SNS em uma regra AWS IoT, consulte AWS IoT ações de regras - Amazon SNS.
Realizar as tarefas da Conta B
-
Configure AWS CLI usando o usuário do IAM da conta B.
-
Para conceder permissão no recurso de tópico do Amazon SNS à conta A, execute o comando adicionar-permissão.
aws sns add-permission --topic-arnarn:aws:sns:region:2222-2222-2222:ExampleTopic--labelPublish-Permission--aws-account-id1111-1111-1111--action-name Publish
Configuração entre contas para o Amazon S3
Cenário: a conta A envia dados de uma mensagem MQTT para um bucket do Amazon S3 da conta B.
| Conta da AWS | Conta referida como | Descrição |
|---|---|---|
|
Conta A | Ação da regra: s3:PutObject |
|
Conta B | Bucket do Amazon S3: |
Realizar as tarefas da Conta A
Observação
Para executar os comandos a seguir, seu usuário do IAM deve ter permissões para iot:CreateTopicRule usar o ARN da regra como um recurso e permissões para iam:PassRole agir com um recurso como ARN da função.
-
Configure AWS CLI usando o usuário do IAM da conta A.
-
Crie um perfil do IAM que confie no AWS IoT mecanismo de regras e anexe uma política que permita acesso ao bucket do Amazon S3 da conta B. Veja exemplos de comandos e documentos da política em Concedendo AWS IoT o acesso necessário.
-
Para criar uma regra anexada ao bucket S3 de destino, execute o comando criar-tópico-regra.
aws iot create-topic-rule --rule-namemy-rule--topic-rule-payload file://./my-rule.jsonVeja a seguir um exemplo de arquivo de carga útil com uma regra que insere todas as mensagens enviadas ao tópico
iot/testno bucket do Amazon S3 especificado. A instrução SQL filtra as mensagens e o ARN da função concede permissões AWS IoT para adicionar a mensagem ao bucket do 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" } } ] }Para obter mais informações sobre como definir uma ação do Amazon S3 em uma regra AWS IoT, consulte AWS IoT ações de regra – Amazon S3.
Realizar as tarefas da Conta B
-
Configure AWS CLI usando o usuário do IAM da conta B.
-
Crie uma política de bucket que confie na entidade principal da conta A.
Veja a seguir um exemplo de arquivo de carga útil que define uma política de bucket que confia na entidade principal de outra conta.
Para obter mais informações, consulte Exemplos de políticas de bucket.
-
Para anexar a política de bucket ao bucket especificado, execute o comando aplicar-política-bucket.
aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://./amzn-s3-demo-bucket-policy.json -
Para fazer o acesso entre contas funcionar, certifique-se de ter as configurações corretas de Bloquear todo o acesso público. Para obter mais informações, consulte Práticas recomendadas de segurança para o Amazon S3.
Configuração entre contas para AWS Lambda
Cenário: a conta A invoca uma função AWS Lambda da conta B, transmitindo uma mensagem MQTT.
| Conta da AWS | Conta referida como | Descrição |
|---|---|---|
|
Conta A | Ação da regra: lambda:InvokeFunction |
|
Conta B | ARN da função do Lambda: |
Realizar as tarefas da Conta A
Observações
Para executar os comandos a seguir, seu usuário do IAM deve ter permissões para iot:CreateTopicRule usar o ARN da regra como um recurso e permissões para iam:PassRole agir com o recurso como ARN da função.
-
Configure AWS CLI usando o usuário do IAM da conta A.
-
Execute o comando criar-tópico-regra para criar uma regra que defina o acesso entre contas à função do Lambda da conta B.
aws iot create-topic-rule --rule-namemy-rule--topic-rule-payload file://./my-rule.jsonVeja a seguir um exemplo de arquivo de carga útil com uma regra que insere todas as mensagens enviadas para o tópico
iot/testem uma função do Lambda especificada. A instrução SQL filtra as mensagens e o ARN da função concede permissão AWS IoT para transmitir os dados para a função do 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" } } ] }Para obter mais informações sobre como definir uma ação AWS Lambda em uma regra AWS IoT, leia AWS IoT ações de regra - Lambda.
Realizar as tarefas da Conta B
-
Configure AWS CLI usando o usuário do IAM da conta B.
-
Execute o comando adicionar-permissão do Lambda para conceder AWS IoT permissão às regras para ativar a função do Lambda. Para executar o comando a seguir, seu usuário do IAM deve ter permissão para
lambda:AddPermissionagir.aws lambda add-permission --function-nameexample-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"Opções:
--entidade principal
Esse campo dá permissão para AWS IoT (representado por
iot.amazonaws.com) chamar a função do Lambda.--arn de origem
Este campo confirma que apenas
arn:aws:iot:region:1111-1111-1111:rule/example-rulenos acionadores AWS IoT esta função do Lambda e nenhuma outra regra na mesma conta ou em conta diferente pode ativar esta função do Lambda.--conta de origem
Esse campo confirma que AWS IoT ativa essa função do Lambda somente em nome da conta
1111-1111-1111.Observações
Se você vir uma mensagem de erro "A regra não foi encontrada" no console da sua AWS Lambda função em Configuração, ignore a mensagem de erro e prossiga para testar a conexão.