Politiques AWS IoT trop permissives
Une stratégie AWS IoT accorde des autorisations qui sont trop larges ou illimitées. Elle accorde l'autorisation d'envoyer ou de recevoir des messages MQTT pour une large gamme d'appareils, ou accorde l'autorisation d'accéder aux données shadow et d'exécution des tâches (ou de les modifier) pour un vaste éventail d'appareils.
En général, une stratégie pour un appareil doit accorder l'accès à des ressources associées pratiquement à ce seul appareil. Avec certaines exceptions, l'utilisation d'un caractère générique (par exemple, « * ») pour spécifier des ressources dans une telle stratégie est considérée comme trop large ou illimitée.
Cette vérification apparaît comme IOT_POLICY_OVERLY_PERMISSIVE_CHECK
dans la CLI et l'API.
Gravité : critique
Détails
Le code de motif suivant est renvoyé lorsque ce contrôle trouve une stratégie AWS IoT non conforme :
-
ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS
Pourquoi est-ce important ?
Un certificat, une identité Amazon Cognito ou un groupe d'objets avec une stratégie trop permissive, peuvent influer, en cas de compromission, sur la sécurité de l'ensemble de votre compte. Un pirate informatique pourrait utiliser un tel accès étendu pour lire ou modifier les shadows, les tâches ou les exécutions de tâche de tous vos appareils. Ou un pirate peut utiliser un certificat mis en danger pour connecter des appareils malveillantes ou lancer une attaque DDOS sur votre réseau.
Comment réparer
Suivez ces étapes pour corriger les stratégies non conformes attachées à des objets, des groupes d’objets ou d’autres entités :
-
Utilisez CreatePolicyVersion pour créer une nouvelle version conforme de la stratégie. Définissez l’indicateur
setAsDefault
sur true. (Cela rend cette nouvelle version opérationnelle pour toutes les entités qui utilisent la stratégie.) -
Utilisez ListTargetsForPolicy pour obtenir la liste des cibles (certificats, groupes d'objets) auxquelles la stratégie est attachée et déterminer les appareils qui sont inclus dans les groupes ou qui utilisent les certificats pour se connecter.
-
Vérifiez que tous les appareils associés sont en mesure de se connecter à AWS IoT. Si un appareil n'est pas en mesure de se connecter, utilisez SetPolicyVersion pour restaurer la stratégie par défaut à la version précédente, révisez la stratégie et faites une nouvelle tentative.
Vous pouvez utiliser des actions d’atténuation pour effectuer les actions suivantes :
-
Appliquer l’action d’atténuation
REPLACE_DEFAULT_POLICY_VERSION
sur vos résultats d’audit pour effectuer ce changement. -
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 en savoir plus, consultez Actions d'atténuation.
Consultez Variables de stratégie AWS IoT Core pour faire référence de manière dynamique aux ressources AWS IoT dans vos politiques.
Autorisations MQTT
Les messages MQTT sont envoyés via l’agent de messages AWS IoT et sont utilisés par les appareils afin d’effectuer diverses actions, dont l’accès à l’état du shadow et sa modification, ainsi que l’état de l’exécution des tâches. 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 « * » comme 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 la connexion. L’instruction de condition limite encore l’autorisation en vérifiant que le certificat utilisé par le client MQTT correspondent à celui attaché à l’objet avec le nom utilisé.
-
- Publish
-
-
non conforme :
arn:aws:iot:
region
:account-id
:topic/$aws/things/*/shadow/updateCela 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 ou 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.
-
- S’abonner
-
-
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/updateCela 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
:topic/$aws/things/*Conforme, car l'appareil peut uniquement recevoir des messages à partir de rubriques auxquelles il est autorisé à s'abonner.
-
Autorisations de tâche et de shadow
Une stratégie qui accorde l'autorisation à un appareil d'exécuter une action d'API pour accéder aux données des shadows d'appareil 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", "iotjobsdata:DescribeJobExecution", "iotjobsdata:GetPendingJobExecutions", "iotjobsdata:StartNextPendingJobExecution", "iotjobsdata: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.