Acessando recursos entre contas usando regras AWS IoT - AWS IoT Core

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Acessando recursos entre contas usando regras AWS IoT

Você pode configurar AWS IoT regras para acesso entre contas para que os dados ingeridos nos tópicos do MQTT de uma conta possam ser roteados para os AWS serviços, como Amazon SQS e Lambda, de outra conta. A seguir, explicamos como configurar AWS IoT regras 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 suportados, exceto para o Amazon SQS, você deve definir a regra da mesma forma Região da AWS que o recurso de outro serviço para que a ação da regra possa interagir com esse recurso. Para obter mais informações sobre ações de AWS IoT regras, consulte ações de AWS IoT regras. Para obter mais informações sobre a ação SQS da regra, consulteSQS.

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
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 uma função do IAM que confie no mecanismo de AWS IoT 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 create-topic-rule comando.

    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 AWS IoT regra, consulte ações de AWS IoT 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 uma função do IAM que confie no mecanismo de AWS IoT regras e anexe uma política que permita acesso ao tópico do Amazon SNS da conta B. Por exemplo, comandos e documentos de política, consulte Concedendo AWS IoT o acesso necessário.

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

    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 AWS IoT permissões para enviar a mensagem para o 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 AWS IoT regra, consulte Ações de AWS IoT 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:::ExampleBucket
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 uma função do IAM que confie no mecanismo de AWS IoT regras e anexe uma política que permita acesso ao bucket Amazon S3 da conta B. Por exemplo, comandos e documentos de política, consulte Concedendo AWS IoT o acesso necessário.

  3. Para criar uma regra anexada ao seu bucket do S3 de destino, execute o create-topic-rule comando.

    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": "ExampleBucket", "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 AWS IoT regra, consulte Ações de AWS IoT regras - 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.

    { "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:::ExampleBucket/*" } ] }

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

  3. Para anexar a política do bucket ao bucket especificado, execute o put-bucket-policy comando.

    aws s3api put-bucket-policy --bucket ExampleBucket --policy file://./my-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 de várias contas para AWS Lambda

Cenário: a conta A invoca uma AWS Lambda função 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 create-topic-rule comando para criar uma regra que defina o acesso entre contas à função 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 AWS IoT permissão para passar os dados para a função 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 AWS Lambda ação em uma AWS IoT regra, leia Ações de AWS IoT regras - Lambda.

Realizar as tarefas da Conta B
  1. Configure AWS CLI usando o usuário do IAM da conta B.

  2. Execute o comando add-permission do Lambda para dar permissão às AWS IoT regras para ativar a função 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 poriot.amazonaws.com) chamar a função 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 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.