El rol de Cognito autenticado es demasiado permisivo - AWS IoT Device Defender

El rol de Cognito autenticado es demasiado permisivo

Una política asociada a un rol de grupo de identidades de Amazon Cognito autenticado se considera excesivamente permisivo porque otorga permiso para realizar las siguientes acciones de AWS IoT:

  • Administrar o modificar objetos

  • Administrar datos o recursos relacionados con elementos que no sean objetos

O bien porque otorga permiso para realizar las siguientes acciones de AWS IoT en un amplio conjunto de dispositivos:

  • Leer datos administrativos de objetos

  • Utilizar MQTT para conectar/publicar/suscribirse a temas reservados (incluidos los datos de ejecución de sombras o de trabajos)

  • Utilizar comandos de la API para leer o modificar los datos de ejecución de sombras o de trabajos

En general, los dispositivos que se conectan usando un rol de grupo de identidades de Amazon Cognito autenticado solo deben tener permisos limitados para leer datos administrativos específicos de los objetos, publicar y suscribirse a temas de MQTT específicos o usar los comandos de la API para leer y modificar datos específicos de los objetos relacionados con los datos de ejecución de sombras o de trabajos.

Esta comprobación aparece como AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK en la CLI y la API.

Gravedad: crítica

Detalles

Para esta comprobación, AWS IoT Device Defender realiza auditorías a todos los grupos de identidades de Amazon Cognito que se han utilizado para conectarse al agente de mensajes de AWS IoT durante los 31 días anteriores a la ejecución de la auditoría. En la auditoría se incluyen todos los grupos de identidades de Amazon Cognito a partir de los cuales se ha conectado una identidad de Amazon Cognito autenticada o no autenticada.

Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra un rol de grupo de identidades de Amazon Cognito autenticado no conforme:

  • ALLOWS_BROAD_ACCESS_TO_IOT_THING_ADMIN_READ_ACTIONS

  • ALLOWS_ACCESS_TO_IOT_NON_THING_ADMIN_ACTIONS

  • ALLOWS_ACCESS_TO_IOT_THING_ADMIN_WRITE_ACTIONS

¿Por qué importa?

Si se ha puesto en riesgo una identidad autenticada, se podrían usar acciones administrativas para modificar la configuración de la cuenta, eliminar recursos u obtener acceso a información confidencial.

Cómo solucionarlo

Una política asociada a un rol de grupo de identidades de Amazon Cognito autenticado debería otorgar solo los permisos necesarios para que un dispositivo haga su trabajo. Recomendamos los siguientes pasos:

  1. Crear un nuevo rol conforme.

  2. Crear un nuevo grupo de identidades de Amazon Cognito y asociarlo al rol conforme.

  3. Verificar que sus identidades puedan obtener acceso a AWS IoT con el nuevo grupo.

  4. Una vez que se complete la verificación, asociar el nuevo rol conforme al grupo de identidades de Amazon Cognito marcado como no conforme.

También puede utilizar acciones de mitigación para:

  • Aplique la acción de mitigación PUBLISH_FINDINGS_TO_SNS para implementar una respuesta personalizada al mensaje de Amazon SNS.

Para obtener más información, consulte Acciones de mitigación.

Administrar o modificar objetos

Las siguientes acciones de la API de AWS IoT se usan para administrar o modificar objetos, por lo que no se debe otorgar permiso para realizarlas a los dispositivos que se conectan a través de un grupo de identidades de Amazon Cognito autenticado:

  • AddThingToThingGroup

  • AttachThingPrincipal

  • CreateThing

  • DeleteThing

  • DetachThingPrincipal

  • ListThings

  • ListThingsInThingGroup

  • RegisterThing

  • RemoveThingFromThingGroup

  • UpdateThing

  • UpdateThingGroupsForThing

Cualquier rol que otorgue permiso para realizar estas acciones, incluso en un solo recurso, se considera no conforme.

Administrar elementos que no sean objetos

A los dispositivos que se conectan a través de un grupo de identidades de Amazon Cognito autenticado no se les debe conceder permiso para realizar acciones de la API de AWS IoT distintas de las que se indican en estas secciones. Para administrar su cuenta con una aplicación que se conecta a través de un grupo de identidades de Amazon Cognito autenticado, cree un grupo de identidades independiente no utilizado por los dispositivos.

Leer datos administrativos de objetos

Las siguientes acciones de la API de AWS IoT se utilizan para leer datos de objetos, por lo que a los dispositivos que se conectan a través de un grupo de identidades de Amazon Cognito autenticado se les debe dar permiso para realizarlas solamente en un conjunto limitado de objetos:

  • DescribeThing

  • ListJobExecutionsForThing

  • ListThingGroupsForThing

  • ListThingPrincipals

  • no conforme:

    arn:aws:iot:region:account-id:thing/*

    Esto permite al dispositivo realizar la acción especificada en cualquier objeto.

  • conforme:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing" ] } ] }

    Esto permite al dispositivo realizar las acciones especificadas solo en un objeto.

  • conforme:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing*" ] } ] }

    Esto es conforme porque, aunque el recurso se especifica con un carácter comodín (*), va precedido de una cadena específica y esta limita el acceso al conjunto de objetos que tienen el prefijo concreto.

  • no conforme:

    arn:aws:iot:region:account-id:thing/*

    Esto permite al dispositivo realizar la acción especificada en cualquier objeto.

  • conforme:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing" ] } ] }

    Esto permite al dispositivo realizar las acciones especificadas solo en un objeto.

  • conforme:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeThing", "iot:ListJobExecutionsForThing", "iot:ListThingGroupsForThing", "iot:ListThingPrincipals" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing*" ] } ] }

    Esto es conforme porque, aunque el recurso se especifica con un carácter comodín (*), va precedido de una cadena específica y esta limita el acceso al conjunto de objetos que tienen el prefijo concreto.

Suscribirse/publicar en temas de MQTT

Los mensajes de MQTT se envían a través del agente de mensajes de AWS IoT y los dispositivos los usan para realizar muchas acciones diferentes, incluido el acceso y la modificación del estado de la sombra y el estado de ejecución del trabajo. Una política que otorga permiso a un dispositivo para conectarse, publicar o suscribirse a mensajes de MQTT debe restringir estas acciones a recursos específicos de la siguiente manera:

Conectar
  • no conforme:

    arn:aws:iot:region:account-id:client/*

    El carácter comodín * permite que cualquier dispositivo se conecte a AWS IoT.

    arn:aws:iot:region:account-id:client/${iot:ClientId}

    A menos que iot:Connection.Thing.IsAttached se establezca en true en la claves de condición, es equivalente al carácter comodín * del ejemplo anterior.

  • conforme:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:region:account-id:client/${iot:Connection.Thing.ThingName}" ], "Condition": { "Bool": { "iot:Connection.Thing.IsAttached": "true" } } } ] }

    La especificación del recurso contiene una variable que coincide con el nombre del dispositivo utilizado para conectarse, y la instrucción de condición restringe aún más el permiso verificando que el certificado utilizado por el cliente MQTT coincida con el que está asociado al objeto con el nombre utilizado.

Publicación
  • no conforme:

    arn:aws:iot:region:account-id:topic/$aws/things/*/shadow/update

    Esto permite que el dispositivo actualice la sombra de cualquier dispositivo (* = todos los dispositivos).

    arn:aws:iot:region:account-id:topic/$aws/things/*

    Esto permite que el dispositivo lea/actualice/elimine la sombra de cualquier dispositivo.

  • conforme:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" ], } ] }

    La especificación del recurso contiene un comodín, pero solo coincide con cualquier tema relacionado con la sombra para el dispositivo cuyo nombre de objeto se utilice para conectarse.

Suscribirse
  • no conforme:

    arn:aws:iot:region:account-id:topicfilter/$aws/things/*

    Esto permite que el dispositivo se suscriba a temas de sombra o de trabajo reservados para todos los dispositivos.

    arn:aws:iot:region:account-id:topicfilter/$aws/things/#

    Lo mismo que el ejemplo anterior, pero usando el comodín #.

    arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update

    Esto permite que el dispositivo vea las actualizaciones de la sombra en cualquier dispositivo (+ = todos los dispositivos).

  • conforme:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*" ], } ] }

    Las especificaciones de recursos contienen caracteres comodín pero solo coinciden con cualquier tema relacionado con la sombra y cualquier tema relacionado con el trabajo para el dispositivo cuyo nombre de objeto se use para conectarse.

Recibir
  • conforme:

    arn:aws:iot:region:account-id:topicfilter/$aws/things/*

    Esto es conforme porque el dispositivo solo puede recibir mensajes de temas en los que tiene permiso para suscribirse.

Leer o modificar datos de trabajo o sombras

Una política que concede permiso a un dispositivo para realizar una acción de la API para obtener acceso a datos de ejecución de sombras o trabajos o modificarlos debe restringir estas acciones a recursos específicos. Las acciones de la API son las siguientes:

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

Ejemplos

  • no conforme:

    arn:aws:iot:region:account-id:thing/*

    Esto permite al dispositivo realizar la acción especificada en cualquier objeto.

  • conforme:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DeleteThingShadow", "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DescribeJobExecution", "iot:GetPendingJobExecutions", "iot:StartNextPendingJobExecution", "iot:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:region:account-id:/thing/MyThing1", "arn:aws:iot:region:account-id:/thing/MyThing2" ] } ] }

    Esto permite al dispositivo realizar las acciones especificadas solo en dos objetos.