Le rôle de Cognito authentifié est trop permissif - AWS IoT Device Defender

Le rôle de Cognito authentifié est trop permissif

Une stratégie attachée à un rôle de réserve d'identités Amazon Cognito authentifié est considérée comme trop permissive, car elle accorde l'autorisation d'effectuer les actions suivantes AWS IoT :

  • Gérer ou modifier des objets.

  • Gérer les données ou ressources liées à d’autres éléments que les objets.

Ou, car elle accorde l’autorisation d’effectuer les actions AWS IoT suivantes sur une large gamme d’appareils :

  • Lire les données administratives d’objet.

  • Utiliser MQTT pour la connexion/la publication/l'abonnement aux rubriques réservées (y compris les données shadow ou d'exécution des tâches).

  • Utiliser les commandes d’API pour lire ou modifier les données shadow ou d’exécution des tâches.

En général, les appareils qui se connectent à l'aide d'un rôle de réserve d'identités Amazon Cognito authentifié ne doivent disposer que d'une autorisation limitée pour lire les données administratives spécifiques à un objet, publier et s'abonner à des rubriques MQTT spécifiques à un objet, ou utiliser les commandes API pour lire et modifier des données spécifiques à un objet liés aux données miroir ou d’exécution de tâches.

Cette vérification apparaît comme AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK dans la CLI et l'API.

Gravité : critique

Détails

Pour cette vérification, AWS IoT Device Defender audite tous les groupes d'identités Amazon Cognito qui ont été utilisés pour se connecter à l'agent de messages AWS IoT au cours des 31 jours précédant l'exécution de l'audit. Toutes les réserves d'identité Amazon Cognito à partir desquels une identité Amazon Cognito authentifiée ou non est connectée sont inclus dans l'audit.

Voici les codes de motif renvoyés lorsque ce contrôle trouve un groupe d'identités Amazon Cognito authentifiées non 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

Pourquoi est-ce important ?

Si une identité authentifiée est compromise, elle peut utiliser les actions administratives pour modifier des paramètres du compte, supprimer des ressources ou accéder à des données sensibles.

Comment réparer

Une stratégie attachée à un rôle de groupe d'identités Amazon Cognito authentifiées doit accorder uniquement les autorisations requises pour qu'un appareil fasse son travail. Nous vous recommandons la procédure suivante :

  1. Créez un nouveau rôle conforme.

  2. Créez une réserve d’identités Amazon Cognito et attachez le rôle adéquat.

  3. Vérifiez que vos identités peuvent accéder à AWS IoT à l’aide du nouveau groupe.

  4. Lorsque le contrôle est terminé, attachez le rôle conforme au réserve d'identités Amazon Cognito qui a été signalé comme non conforme.

Vous pouvez également utiliser des actions d’atténuation pour effectuer les actions suivantes :

  • Appliquer l’action d’atténuation PUBLISH_FINDINGS_TO_SNS si vous souhaitez mettre en œuvre une réponse personnalisée pour répondre au message Amazon SNS.

Pour plus d’informations, consultez Actions d'atténuation.

Gérer ou modifier des objets

Les actions d'API AWS IoT suivantes sont utilisées pour gérer ou modifier les objets afin que l'autorisation de les exécuter ne soit pas accordée aux appareils se connectant via un réserve d'identités Amazon Cognito authentifiées :

  • AddThingToThingGroup

  • AttachThingPrincipal

  • CreateThing

  • DeleteThing

  • DetachThingPrincipal

  • ListThings

  • ListThingsInThingGroup

  • RegisterThing

  • RemoveThingFromThingGroup

  • UpdateThing

  • UpdateThingGroupsForThing

Tout rôle qui accorde l’autorisation d’effectuer ces actions sur une seule ressource est considéré comme non conforme.

Gérer les non-objets

Les appareils qui se connectent par le biais d'une réserve d'identités Amazon Cognito authentifiées ne doivent pas être autorisés à effectuer des actions d’API AWS IoT autres que celles présentées dans les sections suivantes. Afin de gérer votre compte avec une application qui se connecte via une réserve d'identités Amazon Cognito authentifiées, créez un autre groupe d'identités non utilisé par les appareils.

Lire les données administratives d’objet

Les actions d'API AWS IoT suivantes sont utilisées pour lire les données des objets afin que les appareils se connectant via une réserve d'identités Amazon Cognito authentifiées reçoive l'autorisation de ne les exécuter que sur un ensemble limité d'objets :

  • DescribeThing

  • ListJobExecutionsForThing

  • ListThingGroupsForThing

  • ListThingPrincipals

  • non conforme :

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

    Cela permet à l’appareil d’effectuer l’action spécifiée sur n’importe quel objet.

  • 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" ] } ] }

    Cela permet à l’appareil d’effectuer les actions spécifiées sur un seul objet.

  • 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*" ] } ] }

    Cela est conforme, car même si la ressource est spécifiée à l’aide d’un caractère générique (« * »), elle est précédée d’une chaîne spécifique qui limite l’ensemble des éléments accessibles à ceux dont les noms ont le préfixe donné.

  • non conforme :

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

    Cela permet à l’appareil d’effectuer l’action spécifiée sur n’importe quel objet.

  • 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" ] } ] }

    Cela permet à l’appareil d’effectuer les actions spécifiées sur un seul objet.

  • 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*" ] } ] }

    Cela est conforme, car même si la ressource est spécifiée à l’aide d’un caractère générique (« * »), elle est précédée d’une chaîne spécifique qui limite l’ensemble des éléments accessibles à ceux dont les noms ont le préfixe donné.

S’abonner/publier sur les rubriques MQTT

Les messages MQTT sont envoyés via l'agent de messages AWS IoT et sont utilisés par les appareils pour effectuer diverses actions, dont l'accès à l'état du shadow et d'exécution des tâches, ainsi que sa modification. Une stratégie qui accorde l’autorisation à un appareil de se connecter à des messages MQTT, de les publier ou de s’y abonner, doit limiter ces actions à des ressources spécifiques comme suit :

Connexion
  • non conforme :

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

    Le caractère générique « * » permet à n’importe quel appareil de se connecter à AWS IoT.

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

    Sauf si iot:Connection.Thing.IsAttached est défini sur true dans les clés de condition, c’est l’équivalent du caractère générique « * » dans l’exemple précédent.

  • 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 spécification de ressource contient une variable qui correspond au nom de l'appareil utilisé pour se connecter et la déclaration de la condition limite plus avant l'autorisation en vérifiant que le certificat utilisé par le client MQTT correspond à celui attaché à l'objet avec le nom utilisé.

Publication
  • non conforme :

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

    Cela permet à l’appareil de mettre à jour le shadow de n’importe quel appareil (* = tous les appareils).

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

    Cela permet à l'appareil de lire/mettre à jour/supprimer le shadow de n'importe quel appareil.

  • 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 spécification de ressource contient un caractère générique, mais il correspond uniquement à une rubrique liée au shadow pour l’appareil dont le nom d’objet est utilisé pour la connexion.

Abonnement
  • non conforme :

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

    Cela permet à l’appareil de s’abonner aux rubriques de shadow ou de tâche réservées pour tous les appareils.

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

    Identique à l’exemple précédent, mais à l’aide du caractère générique #.

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

    Cela permet à l’appareil d’afficher les mises à jour du shadow sur n’importe quel appareil (+ = tous les appareils).

  • 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/*" ], } ] }

    La spécification de ressource contient des caractères génériques, mais ils correspondent uniquement à une rubrique liée au shadow ou à une tâche pour l’appareil dont le nom d’objet est utilisé pour la connexion.

Réception
  • conforme :

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

    Conforme, car l'appareil peut uniquement recevoir des messages à partir de rubriques auxquelles il est autorisé à s'abonner.

Lire ou modifier les données shadow ou de tâche

Une stratégie qui accorde l’autorisation à un appareil d’exécuter une action d’API pour accéder aux données des device shadows ou d’exécution des tâches, ou les modifier, doit limiter ces actions à des ressources spécifiques. Voici les actions d’API :

  • DeleteThingShadow

  • GetThingShadow

  • UpdateThingShadow

  • DescribeJobExecution

  • GetPendingJobExecutions

  • StartNextPendingJobExecution

  • UpdateJobExecution

Exemples

  • non conforme :

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

    Cela permet à l’appareil d’effectuer l’action spécifiée sur n’importe quel objet.

  • 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" ] } ] }

    Cela permet à l’appareil d’effectuer les actions spécifiées sur deux objets uniquement.