Como acessar recursos entre contas usando regras AWS IoT - AWS IoT Core

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

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
1111-1111-1111 Conta A Ação da regra: sqs:SendMessage
2222-2222-2222 Conta B Fila do Amazon SQS
  • ARN: arn:aws:sqs:region:2222-2222-2222:ExampleQueue

  • URL: https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue

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.

  1. Configure AWS CLI usando o usuário do IAM da conta A.

  2. 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.

  3. Para criar uma regra anexada a um tópico, execute o comando criar-tópico-regra.

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

    Veja a seguir um exemplo de arquivo de carga útil com uma regra que insere todas as mensagens enviadas ao tópico iot/test na 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
  1. Configure AWS CLI usando o usuário do IAM da conta B.

  2. 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-url https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue --label SendMessagesToMyQueue --aws-account-ids 1111-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
1111-1111-1111 Conta A Ação da regra: sns:Publish
2222-2222-2222 Conta B ARN do tópico do Amazon SNS: arn:aws:sns:region:2222-2222-2222:ExampleTopic
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.

  1. Configure AWS CLI usando o usuário do IAM da conta A.

  2. 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.

  3. Para criar uma regra anexada a um tópico, execute o comando criar-tópico-regra.

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

    Veja a seguir um exemplo de arquivo de carga útil com uma regra que insere todas as mensagens enviadas ao tópico iot/test no 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
  1. Configure AWS CLI usando o usuário do IAM da conta B.

  2. 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-arn arn:aws:sns:region:2222-2222-2222:ExampleTopic --label Publish-Permission --aws-account-id 1111-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
1111-1111-1111 Conta A Ação da regra: s3:PutObject
2222-2222-2222 Conta B Bucket do Amazon S3: arn:aws:s3:::amzn-s3-demo-bucket
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.

  1. Configure AWS CLI usando o usuário do IAM da conta A.

  2. 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.

  3. Para criar uma regra anexada ao bucket S3 de destino, execute o comando criar-tópico-regra.

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

    Veja a seguir um exemplo de arquivo de carga útil com uma regra que insere todas as mensagens enviadas ao tópico iot/test no 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
  1. Configure AWS CLI usando o usuário do IAM da conta B.

  2. 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.

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

    Para obter mais informações, consulte Exemplos de políticas de bucket.

  3. 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
  4. 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
1111-1111-1111 Conta A Ação da regra: lambda:InvokeFunction
2222-2222-2222 Conta B ARN da função do Lambda: arn:aws:lambda:region:2222-2222-2222:function:example-function
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.

  1. Configure AWS CLI usando o usuário do IAM da conta A.

  2. 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-name my-rule --topic-rule-payload file://./my-rule.json

    Veja a seguir um exemplo de arquivo de carga útil com uma regra que insere todas as mensagens enviadas para o tópico iot/test em 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
  1. Configure AWS CLI usando o usuário do IAM da conta B.

  2. 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:AddPermission agir.

    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"

    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-rule nos 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.