Grupos de objetos estáticos - 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.

Grupos de objetos estáticos

Los grupos de objetos estáticos permiten administrar varios objetos a la vez clasificándolos en grupos. Los grupos de objetos estáticos contienen un grupo de objetos que se administran a través de la consola, la CLI o la API. Por otro lado, los grupos de objetos dinámicos contienen objetos que coinciden con una consulta especificada. Los grupos de cosas estáticas también pueden contener otros grupos de cosas estáticas - puede construir una jerarquía de grupos. Puede asociar una política a un grupo principal y sus grupos secundarios la heredarán, así como todos los objetos del grupo y los grupos secundarios. Esto facilita el control de los permisos para un gran número de objetos.

nota

Las políticas de grupos de cosas no permiten el acceso a las operaciones del plano de AWS IoT Greengrass datos. Para permitir que una cosa acceda a una operación del plano de AWS IoT Greengrass datos, añada el permiso a una AWS IoT política que adjunte al certificado de la cosa. Para obtener más información, vea Autenticación y autorización de dispositivos en la guía de desarrolladores de AWS IoT Greengrass .

Esto es lo que puede hacer con los grupos de objetos estáticos:

  • Crear, describir o eliminar un grupo.

  • Añadir un objeto a un grupo o a más de un grupo.

  • Quitar un objeto de un grupo.

  • Enumerar los grupos que ha creado.

  • Enumerar todos los grupos secundarios de un grupo (sus descendientes directos e indirectos).

  • Enumerar los objetos de un grupo, incluidos todos los objetos en sus grupos secundarios.

  • Enumerar todos los grupos antecesores de un grupo (sus grupos principales directos e indirectos).

  • Añadir, eliminar o actualizar los atributos de un grupo. (Los atributos son pares nombre-valor que puede usar para almacenar información acerca de un grupo).

  • asociar una política a un grupo o separarla de él.

  • Enumerar las directivas adjuntadas a un grupo.

  • Enumerar las políticas heredadas por un objeto (en virtud de las políticas adjuntadas a su grupo o uno de sus grupos principales).

  • Configurar opciones de registro para objetos de un grupo. Consulte Configuración AWS IoT registrar.

  • Crear trabajos que se enviarán y se ejecutarán en cada objeto del grupo y sus grupos secundarios. Consulte Trabajos.

nota

Cuando una cosa está asociada a un grupo de cosas estático al que está asociada una AWS IoT Core política, el nombre de la cosa debe coincidir con el ID de cliente.

Los grupos de objetos estáticos tienen algunas limitaciones:

  • Un grupo puede tener como máximo un grupo principal directo.

  • Si un grupo es hijo de otro grupo, especifíquelo en el momento de crearlo.

  • No puede cambiar el principal de un grupo más adelante, así que asegúrese de planificar la jerarquía de grupos y crear un grupo principal antes de crear los grupos secundarios que contiene.

  • El número de grupos a los que puede pertenecer un objeto es limitado.

  • No puede añadir un objeto a más de un grupo en la misma jerarquía. (En otras palabras, no puede agregar un objeto a dos grupos que comparten un principal común).

  • No se puede cambiar el nombre de un grupo.

  • Los nombres de grupos de objetos no pueden contener caracteres internacionales, como û, é o ñ.

  • No utilices información de identificación personal en el nombre de tu grupo de cosas. El nombre del grupo de cosas puede aparecer en comunicaciones e informes no cifrados.

Asociar políticas a grupos y separarlas de ellos puede mejorar la seguridad de las operaciones de AWS IoT de una serie de formas significativas. El método por dispositivo de asociar una política a un certificado, que luego se asocia a un objeto, consume mucho tiempo y dificulta la actualización o cambio rápido de políticas en una flota de dispositivos. Disponer de una política adjunta al grupo de la cosa ahorra pasos cuando hay que rotar los certificados en un objeto. Además, las políticas se aplican dinámicamente a objetos cuando cambian la pertenencia a un grupo, por lo que no es necesario volver a crear un conjunto complejo de permisos cada vez que un dispositivo cambia la pertenencia en un grupo.

Crear un grupo de objetos estático

Utilice el comando CreateThingGroup para crear un grupo de objetos estático:

$ aws iot create-thing-group --thing-group-name LightBulbs

El comando CreateThingGroup devuelve una respuesta que contiene el nombre, el ID y el ARN del grupo de objetos estático:

{ "thingGroupName": "LightBulbs", "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" }
nota

No es recomendable utilizar datos personales en los nombres de grupo de objetos.

A continuación, se muestra un ejemplo que especifica el grupo principal de un grupo de objetos estático durante su creación:

$ aws iot create-thing-group --thing-group-name RedLights --parent-group-name LightBulbs

Al igual que antes, el comando CreateThingGroup devuelve una respuesta que contiene el nombre, el ID y el ARN del grupo de objetos:

{ "thingGroupName": "RedLights", "thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights", }
importante

Tenga en cuenta las siguientes limitaciones cuando cree jerarquías de grupos de objetos:

  • Un grupo de objetos solo puede tener un grupo principal directo.

  • El número de grupos secundarios directos que puede tener un grupo de objetos es limitado.

  • La profundidad máxima de una jerarquía de grupo es limitada.

  • El número de atributos que puede tener un grupo de objetos es limitado. (Los atributos son pares nombre-valor que puede usar para almacenar información acerca de un grupo). La longitud de cada nombre de atributo y cada valor también es limitada.

Descripción de un grupo de objetos

Puede utilizar el comando DescribeThingGroup para obtener información acerca de un grupo de objetos:

$ aws iot describe-thing-group --thing-group-name RedLights

El comando DescribeThingGroup devuelve información acerca del grupo especificado:

{ "thingGroupName": "RedLights", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights", "thingGroupId": "12345678abcdefgh12345678ijklmnop12345678", "version": 1, "thingGroupMetadata": { "creationDate": 1478299948.882 "parentGroupName": "Lights", "rootToParentThingGroups": [ { "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ShinyObjects", "groupName": "ShinyObjects" }, { "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs", "groupName": "LightBulbs" } ] }, "thingGroupProperties": { "attributePayload": { "attributes": { "brightness": "3400_lumens" }, }, "thingGroupDescription": "string" }, }

Agregar un objeto a un grupo de objetos estático

Puede utilizar el comando AddThingToThingGroup para agregar un objeto a un grupo de objetos estático:

$ aws iot add-thing-to-thing-group --thing-name MyLightBulb --thing-group-name RedLights

El comando AddThingToThingGroup no genera una salida.

importante

Puede añadir un objeto a un máximo de 10 grupos. Sin embargo, no puede añadir un objeto a más de un grupo en la misma jerarquía. (En otras palabras, no puede añadir un objeto a dos grupos que comparten un grupo principal común).

Si un objeto pertenece al número máximo de grupos de objetos posible y uno o varios de estos grupos es un grupo de objetos dinámico, puede utilizar la marca overrideDynamicGroups para que los grupos estáticos tengan prioridad sobre los grupos dinámicos.

Eliminar un objeto de un grupo de objetos estático

Puede utilizar el comando RemoveThingFromThingGroup para quitar un objeto de un grupo:

$ aws iot remove-thing-from-thing-group --thing-name MyLightBulb --thing-group-name RedLights

El comando RemoveThingFromThingGroup no genera una salida.

Enumerar los objetos en un grupo de objetos

Puede utilizar el comando ListThingsInThingGroup para listar los objetos que pertenecen a un grupo:

$ aws iot list-things-in-thing-group --thing-group-name LightBulbs

El comando ListThingsInThingGroup devuelve una lista de los objetos en el grupo determinado:

{ "things":[ "TestThingA" ] }

Con el parámetro --recursive, puede enumerar los objetos que pertenecen a un grupo y también los que están en alguno de sus grupos secundarios:

$ aws iot list-things-in-thing-group --thing-group-name LightBulbs --recursive
{ "things":[ "TestThingA", "MyLightBulb" ] }
nota

Esta operación es a largo plazo coherente. En otras palabras, es posible que los cambios en el grupo de cosas no se reflejen de una sola vez.

Enumeración de grupos de objetos

Puede usar el comando ListThingGroups para mostrar los grupos de objetos de la cuenta:

$ aws iot list-thing-groups

El ListThingGroups comando devuelve una lista de los grupos de cosas de su Cuenta de AWS:

{ "thingGroups": [ { "groupName": "LightBulbs", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" }, { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" }, { "groupName": "RedLEDLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLEDLights" }, { "groupName": "RedIncandescentLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedIncandescentLights" } { "groupName": "ReplaceableObjects", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ReplaceableObjects" } ] }

Utilice los filtros opcionales para enumerar los grupos que tienen un grupo determinado como grupo principal (--parent-group) o los grupos cuyo nombre comienza por un prefijo determinado (--name-prefix-filter). El parámetro --recursive le permite listar también todos los grupos secundarios, no los grupos secundarios directos de un grupo de objetos:

$ aws iot list-thing-groups --parent-group LightBulbs

En este caso, el ListThingGroups comando devuelve una lista de los grupos secundarios directos del grupo de cosas definido en su Cuenta de AWS:

{ "childGroups":[ { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" } ] }

Utilice el parámetro --recursive con el comando ListThingGroups para listar todos los grupos secundarios de un grupo de objetos, no solo un elemento secundario directo:

$ aws iot list-thing-groups --parent-group LightBulbs --recursive

El comando ListThingGroups devuelve una lista de todos los grupos secundarios de un grupo de objetos:

{ "childGroups":[ { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" }, { "groupName": "RedLEDLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLEDLights" }, { "groupName": "RedIncandescentLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedIncandescentLights" } ] }
nota

Esta operación es a largo plazo coherente. En otras palabras, es posible que los cambios en el grupo de cosas no se reflejen de una sola vez.

Enumerar grupos para un objeto

Puede utilizar el comando ListThingGroupsForThing para listar los grupos directos a los que pertenece una cosa:

$ aws iot list-thing-groups-for-thing --thing-name MyLightBulb

El comando ListThingGroupsForThing devuelve una lista de los grupos de cosas directos a los que pertenece esta cosa:

{ "thingGroups":[ { "groupName": "LightBulbs", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" }, { "groupName": "RedLights", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights" }, { "groupName": "ReplaceableObjects", "groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ReplaceableObjects" } ] }

Actualizar un grupo de objetos estático

Puede utilizar el comando UpdateThingGroup para actualizar los atributos de un grupo de objetos estático:

$ aws iot update-thing-group --thing-group-name "LightBulbs" --thing-group-properties "thingGroupDescription=\"this is a test group\", attributePayload=\"{\"attributes\"={\"Owner\"=\"150\",\"modelNames\"=\"456\"}}"

El comando UpdateThingGroup devuelve una respuesta que contiene el número de versión del grupo después de la actualización:

{ "version": 4 }
nota

El número de atributos que un objeto puede tener es limitado.

Eliminación de un grupo de objetos

Para eliminar un grupo de objetos, use el comando DeleteThingGroup:

$ aws iot delete-thing-group --thing-group-name "RedLights"

El comando DeleteThingGroup no genera una salida.

importante

Si intenta eliminar un grupo de objetos que tenga grupos secundarios de objetos, aparecerá un error:

A client error (InvalidRequestException) occurred when calling the DeleteThingGroup operation: Cannot delete thing group : RedLights when there are still child groups attached to it.

Antes de eliminar el grupo, elimine primero los grupos secundarios.

Puede eliminar un grupo que tenga objetos secundarios, pero no se seguirán aplicando los permisos concedidos a los objetos por la pertenencia del grupo. Antes de eliminar un grupo que tenga una política adjunta, compruebe detenidamente que la eliminación de esos permisos no hará que los objetos del grupo no funcionen correctamente. Además, los comandos que muestran a qué grupos pertenece un elemento (por ejemploListGroupsForThing) pueden seguir mostrándolo mientras se actualizan los registros en la nube.

Asociar una política a un grupo de objetos estático

Puede usar el comando AttachPolicy para asociar una política a un grupo de objetos estático y, por extensión, a todos los objetos de ese grupo y de sus grupos secundarios:

$ aws iot attach-policy \ --target "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" \ --policy-name "myLightBulbPolicy"

El comando AttachPolicy no genera una salida

importante

Puede asociar un número máximo de dos políticas a un grupo.

nota

No es recomendable utilizar datos personales en los nombres de política.

El parámetro --target puede ser un ARN de grupo de objetos (como más arriba), un ARN del certificado o una identidad de Amazon Cognito. Para obtener más información acerca de las políticas, los certificados y la autenticación, consulte Autenticación.

Para obtener más información, consulte Políticas de AWS IoT Core.

Desconectar una política de un grupo de objetos estático

Puede usar el comando DetachPolicy para separar una política de un grupo de objetos y de esa forma, por extensión, a todos los objetos de ese grupo y a los objetos de cualquiera de sus grupos secundarios:

$ aws iot detach-policy --target "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs" --policy-name "myLightBulbPolicy"

El comando DetachPolicy no genera una salida.

Mostrar las políticas asociadas a un grupo de objetos estático

Puede utilizar el comando ListAttachedPolicies para mostrar las políticas asociadas a un grupo de objetos estático:

$ aws iot list-attached-policies --target "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights"

El parámetro --target puede ser un ARN de grupo de objetos (como más arriba), un ARN del certificado o una identidad de Amazon Cognito.

Agregue el parámetro --recursive opcional para incluir también todas las políticas asociadas a los grupos principales del grupo.

El comando ListAttachedPolicies devuelve una lista de políticas:

{ "policies": [ "MyLightBulbPolicy" ... ] }

Enumeración de los grupos para una política

Puede utilizar el comando ListTargetsForPolicy para enumerar los destinos, incluidos los grupos, a los que se adjunta una política:

$ aws iot list-targets-for-policy --policy-name "MyLightBulbPolicy"

Añada el parámetro --page-size number opcional para especificar el número máximo de resultados que se va a devolver para cada consulta y el parámetro --marker string en las llamadas siguientes para recuperar el siguiente conjunto de resultados, si lo hubiera.

El comando ListTargetsForPolicy devuelve una lista de destinos y el token que usar para recuperar más resultados:

{ "nextMarker": "string", "targets": [ "string" ... ] }

Obtención de políticas en vigor para un objeto

Puede usar el comando GetEffectivePolicies para mostrar las políticas en vigor de un objeto, incluidas las políticas asociadas a grupos a los que pertenece el objeto (si el grupo es un grupo principal directo o un antecesor indirecto):

$ aws iot get-effective-policies \ --thing-name "MyLightBulb" \ --principal "arn:aws:iot:us-east-1:123456789012:cert/a0c01f5835079de0a7514643d68ef8414ab739a1e94ee4162977b02b12842847"

Utilice el parámetro --principal para especificar el ARN del certificado adjunto al objeto. Si utiliza la autenticación de identidad de Amazon Cognito, utilice el parámetro --cognito-identity-pool-id y, opcionalmente, agregue el parámetro --principal para especificar una identidad de Amazon Cognito. Si especifica solo el --cognito-identity-pool-id, se devuelven las políticas asociadas a ese rol del grupo de identidades para usuarios sin autenticar. Si usa ambos, se devuelven las políticas asociadas a ese rol del grupo de identidades para los usuarios autenticados.

El parámetro --thing-name es opcional y puede usarse en lugar del parámetro --principal. Cuando se utiliza, se devolverán las políticas asociadas a cualquier grupo al que pertenece el objeto y las políticas asociadas a grupos principales de estos grupos (hasta el grupo raíz en la jerarquía).

El comando GetEffectivePolicies devuelve una lista de políticas:

{ "effectivePolicies": [ { "policyArn": "string", "policyDocument": "string", "policyName": "string" } ... ] }

Prueba de autorización para acciones de MQTT

Puede utilizar el comando TestAuthorization para probar si se permite la acción de MQTT (Publish, Subscribe) para una cosa:

aws iot test-authorization \ --principal "arn:aws:iot:us-east-1:123456789012:cert/a0c01f5835079de0a7514643d68ef8414ab739a1e94ee4162977b02b12842847" \ --auth-infos "{\"actionType\": \"PUBLISH\", \"resources\": [ \"arn:aws:iot:us-east-1:123456789012:topic/my/topic\"]}"

Utilice el parámetro --principal para especificar el ARN del certificado adjunto al objeto. Si usa la autenticación de identidad de Amazon Cognito, especifique una identidad de Cognito como --principal o use el parámetro --cognito-identity-pool-id, o ambos. (Si especifica solo --cognito-identity-pool-id, se tienen en cuenta las políticas asociadas a ese rol del grupo de identidades para usuarios sin autenticar. Si usa ambos, se tienen en cuenta las políticas asociadas a ese rol del grupo de identidades para los usuarios autenticados.

Especifique una o más acciones de MQTT que desee probar mediante la enumeración de conjuntos de recursos y tipos de acción que siguen al parámetro --auth-infos. El campo actionType debería contener "PUBLISH", "SUBSCRIBE", "RECEIVE" o "CONNECT". El campo resources debe contener una lista de ARN de recursos. Para obtener más información, consulte AWS IoT Core políticas.

Puede probar los efectos de la adición de políticas mediante la especificación de estas con el parámetro --policy-names-to-add. También puede probar los efectos de la eliminación de políticas mediante ellas con el parámetro --policy-names-to-skip.

Puede usar el parámetro --client-id opcional para restringir los resultados.

El comando TestAuthorization devuelve detalles acerca de acciones que se permiten o deniegan para cada conjunto de consultas --auth-infos especificadas:

{ "authResults": [ { "allowed": { "policies": [ { "policyArn": "string", "policyName": "string" } ] }, "authDecision": "string", "authInfo": { "actionType": "string", "resources": [ "string" ] }, "denied": { "explicitDeny": { "policies": [ { "policyArn": "string", "policyName": "string" } ] }, "implicitDeny": { "policies": [ { "policyArn": "string", "policyName": "string" } ] } }, "missingContextValues": [ "string" ] } ] }