Acceder a los recursos de varias cuentas mediante reglas AWS IoT - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Acceder a los recursos de varias cuentas mediante reglas AWS IoT

Puede configurar AWS IoT reglas para el acceso entre cuentas para que los datos ingeridos en los temas de MQTT de una cuenta puedan enrutarse a los AWS servicios, como Amazon SQS y Lambda, de otra cuenta. A continuación, se explica cómo configurar AWS IoT reglas para la ingesta de datos entre cuentas, desde un tema de MQTT de una cuenta hasta un destino de otra cuenta.

Las reglas multicuenta se pueden configurar mediante permisos basados en recursos en el recurso de destino. Por lo tanto, solo los destinos que admiten permisos basados en recursos pueden habilitarse para el acceso entre cuentas mediante reglas. AWS IoT Entre los destinos admitidos se incluyen Amazon SQS, Amazon S3 y AWS Lambda.

nota

Para los destinos admitidos, excepto Amazon SQS, debe definir la regla al Región de AWS igual que el recurso de otro servicio para que la acción de la regla pueda interactuar con ese recurso. Para obtener más información sobre las acciones de las AWS IoT reglas, consulte las acciones de las AWS IoT reglas. Para obtener más información sobre la acción SQS de la regla, consulteSQS.

Requisitos previos

Configuración de varias cuentas para Amazon SQS

Escenario: la cuenta A envía datos de un mensaje MQTT a la cola de Amazon SQS de la cuenta B.

Cuenta de AWS Cuenta denominada Descripción
1111-1111-1111 Cuenta A Acción de la regla: sqs:SendMessage
2222-2222-2222 Cuenta B Cola de Amazon SQS
  • ARN: arn:aws:sqs:region:2222-2222-2222:ExampleQueue

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

nota

La cola de Amazon SQS de destino no tiene por qué coincidir con la Región de AWS regla.AWS IoT Para obtener más información sobre la acción SQS de la regla, consulte. SQS

Realizar las tareas de la cuenta A
Nota

Para ejecutar los siguientes comandos, el usuario de IAM debe tener permisos para iot:CreateTopicRule con el nombre de recurso de Amazon (ARN) de la regla como recurso y permisos para iam:PassRole con un recurso como ARN del rol.

  1. Configure AWS CLI con el usuario de IAM de la cuenta A.

  2. Cree un rol de IAM que confíe en el motor de AWS IoT reglas y adjunte una política que permita el acceso a la cola Amazon SQS de la cuenta B. Consulte ejemplos de comandos y documentos de política en Concesión AWS IoT del acceso requerido.

  3. Para crear una regla adjunta a un tema, ejecute el create-topic-rule comando.

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

    A continuación se muestra un archivo de carga útil de ejemplo con una regla que inserta todos los mensajes enviados al tema iot/test en la cola de Amazon SQS especificada. La sentencia SQL filtra los mensajes y el rol ARN concede los permisos AWS IoT para añadir el mensaje a la cola de 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 obtener más información sobre cómo definir una acción de Amazon SQS en una AWS IoT regla, consulte AWS IoT Rule actions: Amazon SQS.

Realizar las tareas de la cuenta B
  1. Configure AWS CLI con el usuario de IAM de la cuenta B.

  2. Para conceder permisos para el recurso de cola de Amazon SQS a la cuenta A, ejecute el comando add-permission.

    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

Configuración de varias cuentas para Amazon SNS

Escenario: La cuenta A envía datos de un mensaje MQTT a un tema de Amazon SNS de la cuenta B.

Cuenta de AWS Cuenta denominada Descripción
1111-1111-1111 Cuenta A Acción de la regla: sns:Publish
2222-2222-2222 Cuenta B ARN del tema de Amazon SNS: arn:aws:sns:region:2222-2222-2222:ExampleTopic
Realizar las tareas de la cuenta A
Notas

Para ejecutar los siguientes comandos, su usuario de IAM debe tener permisos para iot:CreateTopicRule con la regla ARN como recurso y permisos para la acción iam:PassRole con un recurso como rol ARN.

  1. Configure AWS CLI con el usuario de IAM de la cuenta A.

  2. Cree un rol de IAM que confíe en el motor de AWS IoT reglas y adjunte una política que permita el acceso al tema Amazon SNS de la cuenta B. Para ver ejemplos de comandos y documentos de políticas, consulte Concesión AWS IoT del acceso requerido.

  3. Para crear una regla adjunta a un tema, ejecute el create-topic-rule comando.

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

    A continuación se muestra un archivo de carga útil de ejemplo con una regla que inserta todos los mensajes enviados al tema iot/test en el tema de Amazon SNS especificado. La sentencia SQL filtra los mensajes y el ARN del rol concede AWS IoT permisos para enviar el mensaje al tema de 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 obtener más información sobre cómo definir una acción de Amazon SNS en una AWS IoT regla, consulte AWS IoT Rule actions: Amazon SNS.

Realizar las tareas de la cuenta B
  1. Configure AWS CLI con el usuario de IAM de la cuenta B.

  2. Para dar permiso sobre el recurso de temas de Amazon SNS a la cuenta A, ejecute el comando add-permission.

    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

Configuración de varias cuentas para Amazon S3

Escenario: La cuenta A envía datos de un mensaje MQTT a un bucket de Amazon S3 de la cuenta B.

Cuenta de AWS Cuenta denominada Descripción
1111-1111-1111 Cuenta A Acción de la regla: s3:PutObject
2222-2222-2222 Cuenta B ARN del bucket de Amazon S3: arn:aws:s3:::ExampleBucket
Realizar las tareas de la cuenta A
Nota

Para ejecutar los siguientes comandos, su usuario de IAM debe tener permisos para iot:CreateTopicRule con la regla ARN como recurso y permisos para la acción iam:PassRole con un recurso como rol ARN.

  1. Configure AWS CLI con el usuario de IAM de la cuenta A.

  2. Cree un rol de IAM que confíe en el motor de AWS IoT reglas y adjunte una política que permita el acceso al bucket de Amazon S3 de la cuenta B. Para ver ejemplos de comandos y documentos de políticas, consulte Otorgar AWS IoT el acceso requerido.

  3. Para crear una regla que se adjunte al bucket S3 de destino, ejecuta el create-topic-rule comando.

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

    A continuación, se muestra un ejemplo de archivo de carga con una regla que inserta todos los mensajes enviados al tema iot/test en el bucket de Amazon S3 especificado. La sentencia SQL filtra los mensajes y el rol ARN concede los permisos AWS IoT para añadir el mensaje al bucket de 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 obtener más información sobre cómo definir una acción de Amazon S3 en una AWS IoT regla, consulte AWS IoT Rule actions: Amazon S3.

Realizar las tareas de la cuenta B
  1. Configure AWS CLI con el usuario de IAM de la cuenta B.

  2. Cree una política de bucket que confíe en la entidad principal de la cuenta A.

    El siguiente es un ejemplo de archivo de carga útil que define una política de bucket que confía en la entidad principal de otra cuenta.

    { "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 obtener más información, consulte Ejemplos de política de bucket.

  3. Para adjuntar la política de bucket al bucket especificado, ejecute el put-bucket-policy comando.

    aws s3api put-bucket-policy --bucket ExampleBucket --policy file://./my-bucket-policy.json
  4. Para que el acceso entre cuentas funcione, asegúrese de que tiene la configuración correcta de Bloquear todo acceso público. Para obtener más información, consulte Prácticas recomendadas de seguridad para Amazon S3.

Configuración multicuenta para AWS Lambda

Escenario: la cuenta A invoca una AWS Lambda función de la cuenta B y envía un mensaje MQTT.

Cuenta de AWS Cuenta denominada Descripción
1111-1111-1111 Cuenta A Acción de la regla: lambda:InvokeFunction
2222-2222-2222 Cuenta B ARN de la función de Lambda: arn:aws:lambda:region:2222-2222-2222:function:example-function
Realizar las tareas de la cuenta A
Notas

Para ejecutar los siguientes comandos, su usuario de IAM debe tener permisos para iot:CreateTopicRule con la regla ARN como recurso y permisos para la acción iam:PassRole con un recurso como rol ARN.

  1. Configure AWS CLI con el usuario de IAM de la cuenta A.

  2. Ejecute el create-topic-rule comando para crear una regla que defina el acceso entre cuentas a la función Lambda de la cuenta B.

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

    A continuación se muestra un archivo de carga útil de ejemplo con una regla que inserta todos los mensajes enviados al tema iot/test en la función de Lambda especificada. La sentencia SQL filtra los mensajes y el ARN del rol concede AWS IoT permiso para pasar los datos a la función 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 obtener más información sobre cómo definir una AWS Lambda acción en una AWS IoT regla, lee Acciones de la AWS IoT regla: Lambda.

Realizar las tareas de la cuenta B
  1. Configure AWS CLI con el usuario de IAM de la cuenta B.

  2. Ejecute el comando add-permission de Lambda para dar permiso a AWS IoT las reglas para activar la función Lambda. Para ejecutar el siguiente comando, su usuario de IAM debe tener permiso para una acción lambda:AddPermission.

    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"

    Opciones:

    --entidad principal

    Este campo da permiso a AWS IoT (representado poriot.amazonaws.com) para llamar a la función Lambda.

    --source-arn

    Este campo confirma que solo arn:aws:iot:region:1111-1111-1111:rule/example-rule en AWS IoT activa esta función de Lambda y que ninguna otra regla de la misma cuenta o de otra diferente puede activar esta función de Lambda.

    --source-account

    Este campo confirma que AWS IoT activa esta función Lambda solo en nombre de la 1111-1111-1111 cuenta.

    Notas

    Si aparece el mensaje de error “No se ha encontrado la regla” en la consola de la función AWS Lambda , en la sección Configuración, ignore el mensaje de error y proceda a probar la conexión.