

# AWS IoTPolicy eccessivamente permissive di
<a name="audit-chk-iot-policy-permissive"></a>

Una policy AWS IoT concede autorizzazioni troppo ampie/illimitate. Concede l’autorizzazione per inviare o ricevere messaggi MQTT per un’ampia gamma di dispositivi oppure concede l’autorizzazione per accedere o modificare le copie shadow e i dati di processi di esecuzione per un’ampia gamma di dispositivi. 

In generale, una policy per un dispositivo deve concedere l’accesso a risorse associate solo al dispositivo interessato e a nessun altro dispositivo oppure a pochi altri. Con alcune eccezioni, l’uso di un carattere jolly (ad esempio"\$1") per specificare le risorse in una policy è considerato troppo ampio/illimitato.

Questo controllo viene visualizzato come `IOT_POLICY_OVERLY_PERMISSIVE_CHECK` nell’interfaccia a riga di comando e nell’API.

**Severità:** critica

## Informazioni
<a name="audit-chk-iot-policy-permissive-details"></a>

Quando questo controllo trova una policy AWS IoT non conforme, viene restituito il codice di motivo seguente:
+ ALLOWS\$1BROAD\$1ACCESS\$1TO\$1IOT\$1DATA\$1PLANE\$1ACTIONS

## Perché è importante
<a name="audit-chk-iot-policy-permissive-why-it-matters"></a>

Un certificato, un’identità Amazon Cognito o un gruppo di oggetti con una policy eccessivamente permissiva possono, se compromessi, avere un impatto sulla sicurezza di tutto l’account. Un utente malintenzionato potrebbe sfruttare tale accesso ampio per leggere o modificare copie shadow, processi o esecuzioni dei processi per tutti i dispositivi. Oppure un utente malintenzionato potrebbe usare un certificato compromesso per connettere dispositivi dannosi o sferrare un attacco DDOS nella rete.

## Come risolvere il problema
<a name="audit-chk-iot-policy-permissive-how-to-fix"></a>

Segui queste fasi per correggere eventuali policy non conformi collegate a oggetti, gruppi di oggetti o altre entità:

1. Utilizza [CreatePolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePolicyVersion.html) per creare una nuova versione conforme ai requisiti della policy. Imposta il flag `setAsDefault` su "true". (In questo modo questa nuova versione è operativa per tutte le entità che utilizzano la policy.)

1. Utilizza [ListTargetsForPolicy](https://docs.aws.amazon.com/iot/latest/apireference/API_ListTargetsForPolicy.html) per ottenere un elenco delle destinazioni (certificati, gruppi di oggetti) a cui è collegata la policy e stabilire quali dispositivi sono inclusi nei gruppi o quali utilizzano i certificati per connettersi.

1. Verificare che tutti i dispositivi associati possano connettersi a AWS IoT. Se un dispositivo non è in grado di connettersi, eseguire il rollback della policy predefinita alla versione precedente usando [ SetPolicyVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_SetPolicyVersion.html), rivedere la policy e riprovare. 

Puoi usare le operazioni di mitigazione per:
+ Applicare l’operazione di mitigazione `REPLACE_DEFAULT_POLICY_VERSION` sui risultati di audit per apportare questa modifica. 
+ Applica l’operazione di mitigazione `PUBLISH_FINDINGS_TO_SNS` per implementare una risposta personalizzata al messaggio di Amazon SNS. 

Per ulteriori informazioni, consulta [Operazioni di mitigazione](dd-mitigation-actions.md). 

Usare le [variabili delle policy AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-variables.html) per fare riferimento in modo dinamico a risorse AWS IoT nelle policy.

## Autorizzazioni MQTT
<a name="audit-chk-iot-policy-permissive-mqtt-permissions"></a>

I messaggi MQTT vengono inviati tramite il broker di messaggi AWS IoT e sono usati dai dispositivi per eseguire numerose operazioni diverse, tra cui l’accesso allo stato delle copie shadow e dell’esecuzione dei processi e la modifica di tali stati. Una policy che concede a un dispositivo l’autorizzazione di connessione, pubblicazione o sottoscrizione per i messaggi MQTT deve limitare queste operazioni a risorse specifiche, come illustrato di seguito:

**Connessione**  
+ noncompliant:

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

  Il carattere jolly \$1 permette a qualsiasi dispositivo di connettersi a AWS IoT.

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

  Se `iot:Connection.Thing.IsAttached` non è impostato su "true" nelle chiavi delle condizioni, questo equivale al carattere jolly \$1 come nell’esempio precedente.
+ conforme:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
        ]
      }
    ]
  }
  ```

------

  La risorsa specifica contiene una variabile che corrisponde al nome del dispositivo utilizzato per connettersi. L’istruzione condizionale limita ulteriormente il permesso controllando che il certificato utilizzato dal client MQTT corrisponda a quello associato all’oggetto con il nome utilizzato.

**Pubblica**  
+ noncompliant:

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

  Questo esempio permette al dispositivo di aggiornare la copia shadow di qualsiasi dispositivo (\$1 = tutti i dispositivi).

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

  Questo esempio permette al dispositivo di leggere, aggiornare o eliminare la copia shadow di qualsiasi dispositivo.
+ conforme:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "iot:Publish"
              ],
              "Resource": [
                  "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*"
              ]
          }
      ]
  }
  ```

------

  La specifica della risorsa contiene un carattere jolly, che tuttavia corrisponde solo agli argomenti correlati alla copia shadow per il dispositivo il cui nome di oggetto viene usato per la connessione.

**Subscribe**  
+ noncompliant:

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

  Questo esempio permette al dispositivo di sottoscrivere le copie shadow riservate o gli argomenti dei processi per tutti i dispositivi.

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

  Equivale all’esempio precedente, ma con l’uso del carattere jolly \$1.

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

  Questo esempio permette al dispositivo di visualizzare gli aggiornamenti delle copie shadow di qualsiasi dispositivo (\$1 = tutti i dispositivi).
+ conforme:

------
#### [ JSON ]

****  

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

------

  Le specifiche della risorsa contengono caratteri jolly, che tuttavia corrispondono solo agli argomenti correlati alla copia shadow e agli argomenti correlati ai processi per il dispositivo il cui nome di oggetto viene usato per la connessione.

**Ricezione**  
+ conforme:

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

  Questo esempio è appropriato perché il dispositivo può ricevere solo i messaggi dagli argomenti per i quali ha l’autorizzazione di sottoscrizione.

## Autorizzazioni shadow e di attività
<a name="shadow-job-permissions"></a>

Una policy che concede a un dispositivo l’autorizzazione per eseguire un’operazione API per l’accesso a o la modifica di copie shadow dei dispositivi o dati di esecuzione dei processi deve limitare queste operazioni a risorse specifiche. Di seguito sono riportate le operazioni API:
+ `DeleteThingShadow`
+ `GetThingShadow`
+ `UpdateThingShadow`
+ `DescribeJobExecution`
+ `GetPendingJobExecutions`
+ `StartNextPendingJobExecution`
+ `UpdateJobExecution`

**Esempi**
+ noncompliant:

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

  Questo esempio permette al dispositivo di eseguire l’operazione specificata su qualsiasi oggetto.
+ conforme:

------
#### [ JSON ]

****  

  ```
  {
    "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:us-east-1:123456789012:thing/MyThing1",
          "arn:aws:iot:us-east-1:123456789012:thing/MyThing2"
        ]
      }
    ]
  }
  ```

------

  Questo esempio permette al dispositivo di eseguire le operazioni specificate solo su due oggetti specifici.