

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Autorizzazione
<a name="iot-authorization"></a>

L'autorizzazione è il processo di concessione delle autorizzazioni a un'identità autenticata. Concedi le autorizzazioni per AWS IoT Core l'utilizzo AWS IoT Core delle politiche IAM. In questo argomento vengono illustrate le policy AWS IoT Core . Per ulteriori informazioni sulla creazione di policy IAM, consulta [Gestione delle identità e degli accessi per AWS IoT](security-iam.md) e [Come AWS IoT funziona con IAM](security_iam_service-with-iam.md).

AWS IoT Core le politiche determinano cosa può fare un'identità autenticata. Un'identità autenticata viene usata da dispositivi, applicazioni per dispositivi mobili, applicazioni Web e applicazioni desktop. Un'identità autenticata può anche essere un utente che digita i comandi CLI AWS IoT Core . Un'identità può eseguire AWS IoT Core operazioni solo se dispone di una politica che le concede l'autorizzazione per tali operazioni.

Sia AWS IoT Core le policy che le policy IAM vengono utilizzate AWS IoT Core per controllare le operazioni che un'identità (chiamata anche *principale*) può eseguire. Il tipo di policy utilizzato dipende dal tipo di identità con AWS IoT Core cui si effettua l'autenticazione. 

AWS IoT Core le operazioni sono suddivise in due gruppi: 
+ L'API control-plane ti permette di eseguire attività di amministrazione come la creazione o l'aggiornamento di certificati, oggetti, regole e così via.
+ L'API Data Plane consente di inviare e ricevere dati da AWS IoT Core. 

Il tipo di policy usato dipende dall'API in uso, control-plane o data-plane.

La tabella seguente mostra i tipi di identità, i protocolli usati da ciascuno e i tipi di policy che possono essere usati per l'autorizzazione.


**AWS IoT Core API del piano dati e tipi di policy**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/iot-authorization.html)


**AWS IoT Core API e tipi di policy del piano di controllo**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/iot-authorization.html)

AWS IoT Core le politiche sono allegate ai certificati X.509, alle identità di Amazon Cognito o ai gruppi di oggetti. Le policy IAM sono collegate a un utente, un gruppo o un ruolo IAM. Se utilizzi la AWS IoT console o la AWS IoT Core CLI per allegare la policy (a un certificato, Amazon Cognito Identity o Thing Group), utilizzi una policy. AWS IoT Core Altrimenti, utilizzi una policy IAM. AWS IoT Core le politiche allegate a un gruppo di cose si applicano a qualsiasi cosa all'interno di quel gruppo di cose. Affinché la AWS IoT Core policy abbia effetto, il nome `clientId` e il nome dell'oggetto devono corrispondere.

L'autorizzazione basata sulle policy è uno strumento potente Ti offre il controllo completo sulle operazioni che dispositivi, utenti o applicazioni possono eseguire in AWS IoT Core. Ad esempio, si consideri un dispositivo a cui si AWS IoT Core connette un certificato. Puoi permettere al dispositivo di accedere a tutti gli argomenti MQTT oppure puoi limitarne l'accesso a un singolo argomento. In un altro esempio supponi che un utente digiti comandi nella riga di comando. Utilizzando una policy, è possibile consentire o negare l'accesso a qualsiasi comando o AWS IoT Core risorsa per l'utente. Puoi inoltre controllare l'accesso di un'applicazione alle risorse AWS IoT Core .

Le modifiche apportate a una policy possono richiedere alcuni minuti per diventare effettive a causa della modalità in cui AWS IoT memorizza nella cache i documenti delle policy. In particolare, potrebbero essere necessari alcuni minuti per accedere a una risorsa a cui è stato concesso l'accesso di recente e una risorsa potrebbe essere accessibile per alcuni minuti dopo la revoca dell'accesso.

## AWS formazione e certificazione
<a name="iot-authorization-training"></a>

Per informazioni sull'autorizzazione AWS IoT Core, segui il corso [Deep Dive into AWS IoT Core Authentication and Authorization](https://www.aws.training/Details/Curriculum?id=42335) sul sito web di AWS Training and Certification.

# AWS IoT Core politiche
<a name="iot-policies"></a>

AWS IoT Core le politiche sono documenti JSON. Seguono le stesse convenzioni delle politiche IAM. AWS IoT Core supporta politiche denominate in modo che molte identità possano fare riferimento allo stesso documento di policy. Le policy denominate hanno più versioni in modo da semplificarne il rollback.

AWS IoT Core le politiche consentono di controllare l'accesso al piano AWS IoT Core dati. Il piano dati AWS IoT Core è costituito dalle operazioni che ti permettono di connetterti al broker di messaggi AWS IoT Core , inviare e ricevere messaggi MQTT e ottenere o aggiornare il Device Shadow di un oggetto.

Una AWS IoT Core policy è un documento JSON che contiene una o più dichiarazioni di policy. Ogni dichiarazione contiene:
+ `Effect`, specifica se l'operazione sarà permessa o negata.
+ `Action`, specifica l'operazione permessa o negata dalla policy.
+ `Resource`, specifica la risorsa o le risorse in cui l'operazione è permessa o negata.

Le modifiche apportate a una policy possono richiedere dai 6 agli 8 minuti per diventare effettive, a causa del modo in cui i documenti relativi alle policy vengono AWS IoT memorizzati nella cache. In particolare, potrebbero essere necessari alcuni minuti per accedere a una risorsa a cui è stato concesso l'accesso di recente e una risorsa potrebbe essere accessibile per alcuni minuti dopo la revoca dell'accesso.

AWS IoT Core le politiche possono essere allegate ai certificati X.509, alle identità di Amazon Cognito e ai gruppi di oggetti. Le policy associate a un gruppo di oggetti si applicano a qualsiasi elemento all'interno di quel gruppo. Affinché la policy diventi effettiva, il `clientId` e il nome dell'oggetto devono corrispondere. Le policy  AWS IoT Core  seguono la stessa logica di valutazione delle policy IAM. Per impostazione predefinita, tutte le policy vengono negate implicitamente. Un'autorizzazione esplicita in una policy basata su identità o su risorse sostituisce questo comportamento predefinito. Un rifiuto esplicito in una policy sostituisce qualsiasi permesso. Per ulteriori informazioni, consulta [Logica di valutazione delle policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) nella *AWS Identity and Access Management Guida per l'utente*.

**Topics**
+ [AWS IoT Core azioni politiche](iot-policy-actions.md)
+ [AWS IoT Core risorse d'azione](iot-action-resources.md)
+ [AWS IoT Core variabili politiche](iot-policy-variables.md)
+ [Prevenzione del confused deputy tra servizi](cross-service-confused-deputy-prevention.md)
+ [AWS IoT Core esempi di politiche](example-iot-policies.md)
+ [Autorizzazione con identità Amazon Cognito](cog-iot-policies.md)

# AWS IoT Core azioni politiche
<a name="iot-policy-actions"></a>

Le operazioni di policy seguenti sono definite da AWS IoT Core:Operazioni di policy MQTT

`iot:Connect`  
Rappresenta l'autorizzazione a connettersi al broker di AWS IoT Core messaggi. L'autorizzazione `iot:Connect` viene controllata ogni volta che viene inviata una richiesta `CONNECT` al broker. Il broker di messaggi non permette a due client con lo stesso ID client di restare connessi contemporaneamente. Dopo la connessione del secondo client, il broker chiude la connessione esistente. L'autorizzazione `iot:Connect` può essere usata per garantire che solo i client autorizzati possano connettersi usando un ID client specifico.

`iot:DeleteConnection`  
Rappresenta l'autorizzazione a disconnettere un client MQTT connesso da. AWS IoT Core L'`iot:DeleteConnection`autorizzazione viene verificata ogni volta che viene effettuata una richiesta di disconnessione forzata di un client. Quando si disconnette un client, AWS IoT Core chiude la connessione di rete del client e, facoltativamente, pulisce lo stato della sessione.

`iot:GetRetainedMessage`  
Rappresenta l'autorizzazione per ottenere il contenuto di un singolo messaggio conservato. I messaggi conservati sono i messaggi che sono stati pubblicati con il flag RETAIN impostato e archiviati da. AWS IoT Core Per ottenere un elenco di tutti i messaggi conservati dell'account, consulta [iot:ListRetainedMessages](#action_listretainedmessages).

`iot:ListRetainedMessages`  
Rappresenta l'autorizzazione per recuperare informazioni di riepilogo sui messaggi conservati dell'account, ma non sul contenuto dei messaggi. I messaggi conservati sono i messaggi che sono stati pubblicati con il flag RETAIN impostato e archiviati da. AWS IoT Core La risorsa ARN specificata per questa azione deve essere `*`. Per ottenere l'autorizzazione per ottenere il contenuto di un singolo messaggio conservato, consulta [iot:GetRetainedMessage](#action_getretainpublish).

`iot:Publish`  
Rappresenta l'autorizzazione per pubblicare in un argomento MQTT. Questa autorizzazione viene controllata ogni volta che viene inviata una richiesta PUBLISH al broker. Questa può essere usata per permettere ai client di pubblicare in modelli di argomento specifici.  
Per concedere l'autorizzazione `iot:Publish`, devi concedere anche l'autorizzazione `iot:Connect`.

`iot:Receive`  
Rappresenta l'autorizzazione a ricevere un messaggio da AWS IoT Core. L'autorizzazione `iot:Receive` viene confermata ogni volta che viene recapitato un messaggio a un client. Poiché questa autorizzazione viene controllata a ogni recapito, può essere usata per revocare le autorizzazioni ai client che hanno attualmente sottoscritto un argomento.

`iot:RetainPublish`  
Rappresenta l'autorizzazione per pubblicare un messaggio MQTT con il set di flag RETAIN.  
Per concedere l'autorizzazione `iot:RetainPublish`, devi concedere anche l'autorizzazione `iot:Publish`.

`iot:Subscribe`  
Rappresenta l'autorizzazione a sottoscrivere un filtro di argomenti. Questa autorizzazione viene controllata ogni volta che viene inviata una richiesta SUBSCRIBE al broker. Questa può essere usata per permettere ai client di sottoscrivere argomenti corrispondenti a modelli di argomento specifici.  
Per concedere l'autorizzazione `iot:Subscribe`, devi concedere anche l'autorizzazione `iot:Connect`.Operazioni di policy per Device Shadow

`iot:DeleteThingShadow`  
Rappresenta l'autorizzazione a eliminare il Device Shadow di un oggetto. L'autorizzazione `iot:DeleteThingShadow` viene controllata ogni volta che viene effettuata una richiesta di eliminazione dei contenuti di un Device Shadow di un oggetto.

`iot:GetThingShadow`  
Rappresenta l'autorizzazione a recuperare un Device Shadow di un oggetto. L'autorizzazione `iot:GetThingShadow` viene controllata ogni volta che viene effettuata una richiesta di recupero dei contenuti di un Device Shadow di un oggetto.

`iot:ListNamedShadowsForThing`  
Rappresenta l'autorizzazione per elencare le copie shadow di un oggetto. L'autorizzazione `iot:ListNamedShadowsForThing` viene controllata ogni volta che viene effettuata una richiesta per elencare la copia shadow di un oggetto.

`iot:UpdateThingShadow`  
Rappresenta l'autorizzazione ad aggiornare una copia shadow di un dispositivo. L'autorizzazione `iot:UpdateThingShadow` viene controllata ogni volta che viene effettuata una richiesta di aggiornamento dei contenuti del Device Shadow di un oggetto.

**Nota**  
La policy sull'esecuzione delle operazioni si applica solo all'endpoint TLS HTTP. Se utilizzi l'endpoint MQTT devi utilizzare le operazioni di policy MQTT definite in questo argomento.  
Per un esempio di criterio di policy di esecuzione dei processi che dimostra ciò, consulta [Esempi di policy di processo base](basic-jobs-example.md) che funziona con il protocollo MQTT.Azioni AWS IoT Core politiche sulle esecuzioni di Job Executions

`iotjobsdata:DescribeJobExecution`  
Rappresenta l'autorizzazione a recuperare l'esecuzione di un processo per un dato oggetto. L'autorizzazione `iotjobsdata:DescribeJobExecution` viene controllata ogni volta che viene richiesto di ottenere l'esecuzione di un processo.

`iotjobsdata:GetPendingJobExecutions`  
Rappresenta l'autorizzazione a recuperare l'elenco dei processi che non si trovano in uno stato terminale per un oggetto. L'autorizzazione `iotjobsdata:GetPendingJobExecutions` viene controllata ogni volta che viene effettuata una richiesta di recupero dell'elenco. 

`iotjobsdata:UpdateJobExecution`  
Rappresenta l'autorizzazione ad aggiornare l'esecuzione di un processo. L'autorizzazione `iotjobsdata:UpdateJobExecution` viene controllata ogni volta che viene effettuata una richiesta di aggiornamento dell'esecuzione di un processo.

`iotjobsdata:StartNextPendingJobExecution`  
Rappresenta l'autorizzazione a ottenere e avviare la successiva esecuzione in sospeso di un processo per un oggetto (ossia, per aggiornare l'esecuzione di un processo con stato da QUEUED a IN\$1PROGRESS). L'autorizzazione `iotjobsdata:StartNextPendingJobExecution` viene controllata ogni volta che viene effettuata una richiesta di avvio della successiva esecuzione in sospeso di un processo.AWS IoT Core Azione politica per i fornitori di credenziali

`iot:AssumeRoleWithCertificate`  
Rappresenta l'autorizzazione a chiamare il provider di AWS IoT Core credenziali per assumere un ruolo IAM con l'autenticazione basata su certificati. L'`iot:AssumeRoleWithCertificate`autorizzazione viene verificata ogni volta che viene effettuata una richiesta al provider di AWS IoT Core credenziali per assumere un ruolo.

# AWS IoT Core risorse d'azione
<a name="iot-action-resources"></a>

Per specificare una risorsa per un'azione AWS IoT Core politica, utilizza l'Amazon Resource Name (ARN) della risorsa. Tutte le risorse ARNs seguono il seguente formato:

```
arn:partition:iot:region:AWS-account-ID:Resource-type/Resource-name
```

La tabella seguente mostra la risorsa da specificare per ogni tipo di azione. Gli esempi ARN riguardano l'ID dell'account`123456789012`, nella partizione `aws` e sono specifici della regione. `us-east-1` Per ulteriori informazioni sui formati per ARNs, consulta [Amazon Resource Names (ARNs)](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference-arns.html) dalla AWS Identity and Access Management User Guide.


| Azione | Tipo di risorsa | Nome risorsa | Esempio di ARN | 
| --- | --- | --- | --- | 
| iot:Connect | client |  ID client del client  | arn:aws:iot:us-east-1:123456789012:client/myClientId | 
| iot:DeleteConnection | client |  ID client del client  | arn:aws:iot:us-east-1:123456789012:client/myClientId | 
| iot:DeleteThingShadow | thing |  Il nome dell’oggetto e il nome della copia shadow, se applicabile  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iotjobsdata:DescribeJobExecution | thing |  Nome dell'oggetto  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iotjobsdata:GetPendingJobExecutions | thing |  Nome dell'oggetto  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:GetRetainedMessage | topic |  Un argomento del messaggio conservato  |  arn:aws:iot:us-east-1:123456789012:topic/myTopicName  | 
| iot:GetThingShadow | thing |  Il nome dell'oggetto e il nome della copia shadow, se applicabile  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iot:ListNamedShadowsForThing | Tutti | Tutti |  \$1 | 
| iot:ListRetainedMessages | Tutti | Tutti |  \$1 | 
| iot:Publish | topic |  Una stringa di argomenti  | arn:aws:iot:us-east-1:123456789012:topic/myTopicName | 
| iot:Receive | topic |  Una stringa di argomenti  | arn:aws:iot:us-east-1:123456789012:topic/myTopicName | 
| iot:RetainPublish | topic |  Argomento da pubblicare con il set di flag RETAIN  |  arn:aws:iot:us-east-1:123456789012:topic/myTopicName  | 
| iotjobsdata:StartNextPendingJobExecution | thing |  Nome dell'oggetto  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:Subscribe | topicfilter | Una stringa di filtro dell'argomento | arn:aws:iot:us-east-1:123456789012:topicfilter/myTopicFilter | 
| iotjobsdata:UpdateJobExecution | thing |  Nome dell'oggetto  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:UpdateThingShadow | thing |  Il nome dell'oggetto e il nome della copia shadow, se applicabile  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iot:AssumeRoleWithCertificate | rolealias |  Un alias del ruolo che punta a un ARN di ruolo  |  arn:aws:iot:us-east-1:123456789012:rolealias/CredentialProviderRole\$1alias | 

# AWS IoT Core variabili politiche
<a name="iot-policy-variables"></a>

AWS IoT Core definisce le variabili di policy che possono essere utilizzate nelle AWS IoT Core politiche del `Condition` blocco `Resource` or. Quando una policy viene valutata, le variabili vengono sostituite dai valori effettivi. Ad esempio, se un dispositivo è connesso al broker di AWS IoT Core messaggi con un ID client di 100-234-3456, la variabile di policy viene sostituita nel documento di `iot:ClientId` policy da 100-234-3456.

AWS IoT Core le policy possono utilizzare caratteri jolly e seguire una convenzione simile alle policy IAM. L'inserimento di un `*` (asterisco) nella stringa può essere considerato come carattere jolly corrispondente a qualsiasi carattere. Puoi ad esempio usare `*` per descrivere più nomi di argomenti MQTT nell'attributo `Resource` di una policy. I caratteri `+` e `#` sono trattati come stringhe letterali in una policy. Per una policy di esempio che illustra come utilizzare i caratteri jolly, consulta[Utilizzo di caratteri jolly in MQTT e nelle policy AWS IoT Core](pub-sub-policy.md#pub-sub-policy-cert).

È inoltre possibile utilizzare variabili di policy predefinite con valori fissi per rappresentare caratteri che altrimenti hanno un significato speciale. Questi caratteri speciali sono `$(*)`, `$(?)` e `$($)`. Per ulteriori informazioni sulle variabili di policy e sui caratteri speciali, consulta [Elementi delle policy IAM: variabili e tag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html) e [Creazione di una condizione con più chiavi o valori](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html).

**Topics**
+ [Variabili AWS IoT Core politiche di base](basic-policy-variables.md)
+ [Variabili delle policy di oggetto](thing-policy-variables.md)
+ [Variabili della politica del certificato AWS IoT Core X.509](cert-policy-variables.md)

# Variabili AWS IoT Core politiche di base
<a name="basic-policy-variables"></a>

AWS IoT Core definisce le seguenti variabili politiche di base:
+ `aws:SourceIp`: l'indirizzo IP del client connesso al broker di AWS IoT Core messaggi.
+ `iot:ClientId`: ID client usato per la connessione al broker di messaggi AWS IoT Core .
+ `iot:DomainName`: il nome di dominio del client a cui è connesso AWS IoT Core.

**Topics**
+ [Esempi `ClientId` di variabili `SourceIp` politiche](#basic-policy-variables-example)
+ [Esempi di variabili `iot:DomainName` politiche](#basic-policy-variables-example-domain)

## Esempi `ClientId` di variabili `SourceIp` politiche
<a name="basic-policy-variables-example"></a>

La seguente AWS IoT Core politica mostra una politica che utilizza variabili di politica. `aws:SourceIp`può essere utilizzato nell'elemento Condition della politica per consentire ai responsabili di effettuare richieste API solo all'interno di un intervallo di indirizzi specifico. Per alcuni esempi, consulta [Autorizzazione di utenti e servizi cloud a utilizzare Jobs AWS IoT](iam-policy-users-jobs.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
			],
			"Condition": {
				"IpAddress": {
					"aws:SourceIp": "123.45.167.89"
				}
			}
		}
	]
}
```

In questi esempi, `${iot:ClientId}` viene sostituito dall'ID del client connesso al broker di AWS IoT Core messaggi quando viene valutata la politica. Quando usi variabili delle policy come `${iot:ClientId}`, puoi aprire inavvertitamente l'accesso ad argomenti indesiderati. Ad esempio, se usi una policy che usa `${iot:ClientId}` per specificare un filtro di argomenti:

```
{
	"Effect": "Allow",
	"Action": [
		"iot:Subscribe"
	],
	"Resource": [
		"arn:aws:iot:us-east-1:123456789012:topicfilter/my/${iot:ClientId}/topic"
	]
}
```

Un client può connettersi usando `+` come ID client. Questo permette all'utente di sottoscrivere qualsiasi argomento corrispondente al filtro di argomenti `my/+/topic`. Per proteggerti da tali lacune di sicurezza, utilizza l'azione `iot:Connect` politica per controllare quale client IDs può connettersi. Ad esempio, questa policy permette di connettersi solo a quei client il cui ID client è `clientid1`:

****  

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

**Nota**  
L'utilizzo della variabile di policy `${iot:ClientId}` con `Connect` non è consigliato. Non esiste alcun controllo sul valore di `ClientId`, quindi un collegamento con un ID client diverso può superare la convalida ma causare la disconnessione. Poiché qualsiasi `ClientId` è consentito, l'impostazione di un ID client casuale può aggirare le policy del gruppo di oggetti.

## Esempi di variabili `iot:DomainName` politiche
<a name="basic-policy-variables-example-domain"></a>

È possibile aggiungere la variabile di `iot:DomainName` policy per limitare i domini che possono essere utilizzati. L'aggiunta della variabile di `iot:DomainName` policy consente ai dispositivi di connettersi solo a endpoint configurati specifici.

La seguente politica consente ai dispositivi di connettersi al dominio specificato.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "AllowConnectionsToSpecifiedDomain",
		"Effect": "Allow",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

La seguente politica impedisce ai dispositivi di connettersi al dominio specificato.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "DenyConnectionsToSpecifiedDomain",
		"Effect": "Deny",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

Per ulteriori informazioni sull'operatore condizionale della policy, consulta [IAM JSON Policy elements:](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) Condition operators. Per ulteriori informazioni sulle configurazioni dei domini, consulta [Cos'è una](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html) configurazione di dominio? .

# Variabili delle policy di oggetto
<a name="thing-policy-variables"></a>

Le variabili Thing Policy consentono AWS IoT Core di scrivere policy che concedono o negano le autorizzazioni in base alle proprietà degli oggetti, come i nomi degli oggetti, i tipi di oggetti e i valori degli attributi degli oggetti. È possibile utilizzare le variabili Thing Policy per applicare la stessa policy per controllare più dispositivi. AWS IoT Core Per ulteriori informazioni sul provisioning dei dispositivi, consulta [Provisioning dei dispositivi](iot-provision.html).

Se si utilizza un'associazione di oggetti non esclusiva, è possibile allegare lo stesso certificato a più elementi. Per mantenere un'associazione chiara ed evitare potenziali conflitti, è necessario abbinare l'ID cliente al nome dell'oggetto. In questo caso, si ottiene il nome dell'oggetto dall'ID client nel `Connect` messaggio MQTT inviato quando un oggetto si connette a AWS IoT Core.

Tenere presente quanto segue quando si utilizzano le variabili delle policy dell'oggetto nelle policy AWS IoT Core .
+ Usa l'[AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html)API per allegare certificati o principali (identità autenticate di Amazon Cognito) a un oggetto.
+ Se è attiva un'associazione di oggetti non esclusiva, quando sostituisci i nomi degli oggetti con variabili di policy degli oggetti, il valore di contenuto nel messaggio di connessione MQTT o `clientId` nella connessione TLS deve corrispondere esattamente al nome dell'oggetto.

Sono disponibili le variabili delle policy di oggetto seguenti:
+ `iot:Connection.Thing.ThingName`

  Si risolve nel nome dell'elemento nel AWS IoT Core registro per il quale viene valutata la policy. AWS IoT Core utilizza il certificato che il dispositivo presenta al momento dell'autenticazione per determinare quale elemento utilizzare per verificare la connessione. Questa variabile di policy è disponibile solo quando un dispositivo si connette tramite MQTT o MQTT tramite il protocollo. WebSocket 
+ `iot:Connection.Thing.ThingTypeName`

  Questa variabile restituisce il tipo di oggetto associato all'oggetto per cui viene valutata la policy. L'ID client della WebSocket connessione MQTT/ deve essere lo stesso del nome dell'oggetto. Questa variabile di policy è disponibile solo quando ci si connette tramite MQTT o MQTT tramite il protocollo. WebSocket
+ `iot:Connection.Thing.Attributes[attributeName]`

  Questa variabile restituisce il valore dell'attributo specificato associato all'oggetto per cui viene valutata la policy. A un oggetto possono essere associati fino a 50 attributi. Ogni attributo è disponibile come variabile di politica: `iot:Connection.Thing.Attributes[attributeName]` dove *attributeName* è il nome dell'attributo. L'ID client della MQTT/WebSocket connessione deve essere lo stesso del nome dell'oggetto. Questa variabile di policy è disponibile solo quando ci si connette tramite MQTT o MQTT tramite il WebSocket protocollo.
+ `iot:Connection.Thing.IsAttached`

  `iot:Connection.Thing.IsAttached: ["true"]`impone che solo i dispositivi registrati AWS IoT e collegati al principale possano accedere alle autorizzazioni previste dalla policy. Puoi utilizzare questa variabile per impedire la connessione a un dispositivo AWS IoT Core se presenta un certificato che non è collegato a un elemento IoT nel AWS IoT Core registro. Questa variabile ha dei valori `true` o `false` indica che l'elemento di connessione è collegato al certificato o all'identità di Amazon Cognito nel registro utilizzando l'API. [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html) Il nome dell'oggetto è preso come ID client. 

Se l'ID client corrisponde al nome dell'oggetto o se alleghi il certificato esclusivamente a un oggetto, l'utilizzo di variabili di policy nella definizione della policy può semplificare la gestione delle policy. Invece di creare policy individuali per ogni elemento IoT, puoi definire una singola policy utilizzando le variabili della policy del thing. Questa policy può essere applicata a tutti i dispositivi in modo dinamico. Di seguito è riportato un esempio di policy per mostrarne il funzionamento. Per ulteriori informazioni, consulta [Associazione di qualsiasi AWS IoT cosa a una connessione client MQTT](exclusive-thing.md).

****  

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

Questo esempio di policy consente agli elementi a cui connettersi AWS IoT Core se il loro ID client termina con il valore del loro `envType` attributo. Potranno connettersi solo gli elementi con un modello di ID client corrispondente.

# Variabili della politica del certificato AWS IoT Core X.509
<a name="cert-policy-variables"></a>

Le variabili delle politiche dei certificati X.509 aiutano a scrivere le politiche. AWS IoT Core Queste politiche concedono autorizzazioni basate sugli attributi del certificato X.509. Le seguenti sezioni descrivono come utilizzare queste variabili della politica dei certificati.

**Importante**  
Se il certificato X.509 non include un particolare attributo di certificato ma nel documento di policy viene utilizzata la corrispondente variabile di politica del certificato, la valutazione della politica potrebbe portare a un comportamento imprevisto.

## CertificateId
<a name="cert-policy-variables-certid"></a>

Nell'[RegisterCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCertificate.html)API, `certificateId` viene visualizzato nel corpo della risposta. Per ottenere informazioni sul certificato, utilizza il comando `certificateId` in [DescribeCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeCertificate.html).

## Attributi dell'autorità emittente
<a name="issuer-attributes"></a>

Le seguenti variabili di AWS IoT Core policy supportano l'autorizzazione o la negazione delle autorizzazioni, in base agli attributi del certificato impostati dall'emittente del certificato.
+ `iot:Certificate.Issuer.DistinguishedNameQualifier`
+ `iot:Certificate.Issuer.Country`
+ `iot:Certificate.Issuer.Organization`
+ `iot:Certificate.Issuer.OrganizationalUnit`
+ `iot:Certificate.Issuer.State`
+ `iot:Certificate.Issuer.CommonName`
+ `iot:Certificate.Issuer.SerialNumber`
+ `iot:Certificate.Issuer.Title`
+ `iot:Certificate.Issuer.Surname`
+ `iot:Certificate.Issuer.GivenName`
+ `iot:Certificate.Issuer.Initials`
+ `iot:Certificate.Issuer.Pseudonym`
+ `iot:Certificate.Issuer.GenerationQualifier` 

## Attributi soggetto
<a name="subject-attributes"></a>

Le seguenti variabili di AWS IoT Core policy supportano la concessione o la negazione delle autorizzazioni, in base agli attributi dell'oggetto del certificato impostati dall'emittente del certificato.
+ `iot:Certificate.Subject.DistinguishedNameQualifier`
+ `iot:Certificate.Subject.Country`
+ `iot:Certificate.Subject.Organization`
+ `iot:Certificate.Subject.OrganizationalUnit`
+ `iot:Certificate.Subject.State`
+ `iot:Certificate.Subject.CommonName`
+ `iot:Certificate.Subject.SerialNumber`
+ `iot:Certificate.Subject.Title`
+ `iot:Certificate.Subject.Surname`
+ `iot:Certificate.Subject.GivenName`
+ `iot:Certificate.Subject.Initials`
+ `iot:Certificate.Subject.Pseudonym`
+ `iot:Certificate.Subject.GenerationQualifier` 

I certificati X.509 offrono a questi attributi la possibilità di contenere uno o più valori. Per impostazione predefinita, le variabili delle policy per ogni attributo con più valori restituiscono il primo valore. Ad esempio, l'attributo `Certificate.Subject.Country` potrebbe contenere un elenco di nomi di paese, ma quando viene valutato in una policy, `iot:Certificate.Subject.Country` viene sostituito con il nome del primo paese.

Puoi richiedere un valore di attributo specifico diverso dal primo usando un indice a base uno. Ad esempio, `iot:Certificate.Subject.Country.1` viene sostituito dal secondo nome di paese nell'attributo `Certificate.Subject.Country`. Se specifichi un valore di indice che non esiste, ad esempio se richiedi un terzo valore quando all'attributo ne sono assegnati solo due, non viene eseguita alcuna sostituzione e l'autorizzazione non riesce. Puoi anche usare il suffisso `.List` nel nome di variabile della policy per specificare tutti i valori dell'attributo.

## Attributi dei nomi alternativi dell'autorità emittente
<a name="issuer-alternate-name-attributes"></a>

Le seguenti variabili di AWS IoT Core policy supportano la concessione o la negazione delle autorizzazioni, in base agli attributi alternativi del nome dell'emittente impostati dall'emittente del certificato.
+ `iot:Certificate.Issuer.AlternativeName.RFC822Name`
+ `iot:Certificate.Issuer.AlternativeName.DNSName`
+ `iot:Certificate.Issuer.AlternativeName.DirectoryName`
+ `iot:Certificate.Issuer.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Issuer.AlternativeName.IPAddress`

## Attributi dei nomi alternativi di oggetto
<a name="subject-alternate-name-attributes"></a>

Le seguenti variabili di AWS IoT Core policy supportano la concessione o la negazione delle autorizzazioni, in base agli attributi del nome alternativo del soggetto impostati dall'emittente del certificato.
+ `iot:Certificate.Subject.AlternativeName.RFC822Name`
+ `iot:Certificate.Subject.AlternativeName.DNSName`
+ `iot:Certificate.Subject.AlternativeName.DirectoryName`
+ `iot:Certificate.Subject.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Subject.AlternativeName.IPAddress`

## Altri attributi
<a name="other-attributes"></a>

È possibile utilizzare `iot:Certificate.SerialNumber` per consentire o negare l'accesso alle AWS IoT Core risorse, in base al numero di serie di un certificato. La variabile di policy `iot:Certificate.AvailableKeys` contiene il nome di tutte le variabili delle policy di certificato che contengono valori.

# Utilizzo delle variabili di policy dei certificati X.509
<a name="use-policy-variables"></a>

Questo argomento fornisce dettagli su come utilizzare le variabili delle politiche dei certificati. Le variabili delle politiche di certificato X.509 sono essenziali quando si creano AWS IoT Core politiche che forniscono autorizzazioni basate sugli attributi del certificato X.509. Se il certificato X.509 non include un particolare attributo di certificato ma nel documento di policy viene utilizzata la corrispondente variabile di politica del certificato, la valutazione della politica potrebbe portare a un comportamento imprevisto. Questo perché la variabile di policy mancante non viene valutata nella dichiarazione politica.

**Topics**
+ [Esempio di certificato X.509](#certificate-example)
+ [Utilizzo degli attributi dell'emittente del certificato come variabili della politica del certificato](#issuer-attributes-policy)
+ [Utilizzo degli attributi dell'oggetto del certificato come variabili della politica del certificato](#subject-attributes-policy)
+ [Utilizzo degli attributi di nome alternativi dell'emittente del certificato come variabili della politica del certificato](#issuer-alternate-name-attributes-policy)
+ [Utilizzo degli attributi del nome alternativo del soggetto del certificato come variabili della politica del certificato](#subject-alternate-name-attributes-policy)
+ [Utilizzo di un altro attributo di certificato come variabile di politica del certificato](#other-attributes-policy)
+ [Limitazioni per le variabili delle policy di certificato X.509](#policy-limits)
+ [Politiche di esempio che utilizzano variabili di policy relative ai certificati](#example-attributes-policy)

## Esempio di certificato X.509
<a name="certificate-example"></a>

Un tipico certificato X.509 potrebbe apparire come segue. Questo certificato di esempio include gli attributi del certificato. Durante la valutazione delle AWS IoT Core politiche, i seguenti attributi del certificato verranno compilati come variabili dei criteri di certificazione:`Serial Number`,`Issuer`, `Subject``X509v3 Issuer Alternative Name`, e`X509v3 Subject Alternative Name`.

```
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            92:12:85:cb:b7:a5:e0:86
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=IoT Devices, OU=SmartHome, ST=WA, CN=IoT Devices Primary CA, 
				GN=Primary CA1/initials=XY/dnQualifier=Example corp,
				SN=SmartHome/ title=CA1/pseudonym=Primary_CA/generationQualifier=2/serialNumber=987		
        Validity
            Not Before: Mar 26 03:25:40 2024 GMT
            Not After : Apr 28 03:25:40 2025 GMT
        Subject: C=US, O=IoT Devices, OU=LightBulb, ST=NY, CN=LightBulb Device Cert, 
				GN=Bulb/initials=ZZ/dnQualifier=Bulb001, 
				SN=Multi Color/title=RGB/pseudonym=RGB Device/generationQualifier=4/serialNumber=123
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    << REDACTED >>
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name: 
                DNS:example.com, IP Address:1.2.3.4, URI:ResourceIdentifier001, email:device1@example.com, DirName:/C=US/O=IoT/OU=SmartHome/CN=LightBulbCert
            X509v3 Issuer Alternative Name: 
                DNS:issuer.com, IP Address:5.6.7.8, URI:PrimarySignerCA, email:primary@issuer.com, DirName:/C=US/O=Issuer/OU=IoT Devices/CN=Primary Issuer CA
    Signature Algorithm: sha256WithRSAEncryption
         << REDACTED >>
```

## Utilizzo degli attributi dell'emittente del certificato come variabili della politica del certificato
<a name="issuer-attributes-policy"></a>

La tabella seguente fornisce dettagli su come gli attributi dell'emittente del certificato verranno inseriti in una politica. AWS IoT Core 


**Attributi dell'emittente da inserire in una politica**  

| Attributi dell'emittente del certificato | Variabili della politica dei certificati | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/use-policy-variables.html)  | 

## Utilizzo degli attributi dell'oggetto del certificato come variabili della politica del certificato
<a name="subject-attributes-policy"></a>

La tabella seguente fornisce dettagli su come gli attributi dell'oggetto del certificato verranno inseriti in una AWS IoT Core politica.


**Attributi del soggetto da inserire in una politica**  

| Attributi dell'oggetto del certificato | Variabili della politica dei certificati | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/use-policy-variables.html)  | 

## Utilizzo degli attributi di nome alternativi dell'emittente del certificato come variabili della politica del certificato
<a name="issuer-alternate-name-attributes-policy"></a>

La tabella seguente fornisce dettagli su come gli attributi dei nomi alternativi dell'emittente del certificato verranno inseriti in una politica. AWS IoT Core 


**Attributi del nome alternativi dell'emittente da inserire in una policy**  

| Nome alternativo dell'emittente X509v3 | Attributo in una politica | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/use-policy-variables.html)  | 

## Utilizzo degli attributi del nome alternativo del soggetto del certificato come variabili della politica del certificato
<a name="subject-alternate-name-attributes-policy"></a>

La tabella seguente fornisce dettagli su come gli attributi del nome alternativo del soggetto del certificato verranno inseriti in una politica. AWS IoT Core 


**Attributi del nome alternativo del soggetto da inserire in una policy**  

| Nome alternativo del soggetto X509v3 | Attributo in una politica | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/use-policy-variables.html)  | 

## Utilizzo di un altro attributo di certificato come variabile di politica del certificato
<a name="other-attributes-policy"></a>

La tabella seguente fornisce dettagli su come gli altri attributi del certificato verranno inseriti in una AWS IoT Core politica.


**Altri attributi da inserire in una policy**  

| Altro attributo del certificato | Variabile di politica del certificato | 
| --- | --- | 
|  `Serial Number: 92:12:85:cb:b7:a5:e0:86`  |  `iot:Certificate.SerialNumber = 10525622389124227206`  | 

## Limitazioni per le variabili delle policy di certificato X.509
<a name="policy-limits"></a>

Alle variabili delle policy di certificato X.509 si applicano le limitazioni seguenti:

Variabili di policy mancanti  
Se il certificato X.509 non include un particolare attributo di certificato ma nel documento di policy viene utilizzata la corrispondente variabile di policy del certificato, la valutazione della policy potrebbe portare a un comportamento imprevisto. Questo perché la variabile di policy mancante non viene valutata nella dichiarazione politica.

Formato del certificato SerialNumber   
AWS IoT Core considera il numero di serie del certificato come la rappresentazione in formato stringa di un numero intero decimale. Ad esempio, se una policy consente solo connessioni con ID client corrispondente al numero di serie del certificato, l'ID client deve essere il numero di serie in formato decimale.

Caratteri jolly  
Se negli attributi del certificato sono presenti caratteri jolly, la variabile policy non viene sostituita dal valore dell'attributo certificate. Questo lascerà il `${policy-variable}` testo nel documento di policy. Questo comportamento può provocare un errore di autenticazione. È possibile utilizzare i seguenti caratteri jolly: `*`, `$`, `+`, `?` e `#`.

Campi di matrice  
Gli attributi di certificato che contengono matrici sono limitati a cinque elementi. Gli elementi aggiuntivi vengono ignorati.

Lunghezza delle stringhe  
Tutti i valori di stringa sono limitati a 1024 caratteri. Se un attributo di certificato contiene una stringa più lunga di 1024 caratteri, la variabile policy non viene sostituita dal valore dell'attributo certificate. Questo lascerà il nome `${policy-variable}` nel documento relativo alla policy. Questo comportamento può provocare un errore di autenticazione.

Caratteri speciali  
Qualsiasi carattere speciale, ad esempio `,`, `"`, `\`, `+`, `=`, `<`, `>` e `;` deve essere preceduto da una barra rovesciata (`\`) quando viene utilizzato in una variabile di policy. Ad esempio `Amazon Web Services O=Amazon.com Inc. L=Seattle ST=Washington C=US` diventa `Amazon Web Service O\=Amazon.com Inc. L\=Seattle ST\=Washington C\=US`.

## Politiche di esempio che utilizzano variabili di policy relative ai certificati
<a name="example-attributes-policy"></a>

Il seguente documento di policy consente le connessioni con un ID client che corrisponde al numero di serie del certificato e la pubblicazione sull'argomento che corrisponde al modello:`${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*`. 

**Importante**  
Se il certificato X.509 non include un particolare attributo di certificato ma nel documento di policy viene utilizzata la corrispondente variabile di policy del certificato, la valutazione della policy potrebbe portare a un comportamento imprevisto. Questo perché la variabile di policy mancante non viene valutata nella dichiarazione politica. Ad esempio, se alleghi il seguente documento di policy a un certificato che non contiene l'`iot:Certificate.Subject.Organization`attributo, le variabili di policy del `iot:Certificate.Subject.Organization` certificato non verranno compilate durante la valutazione della policy.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Certificate.SerialNumber}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*"
			]
		}
	]
}
```

È inoltre possibile utilizzare l'[operatore di condizione Null](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null) per garantire che le variabili della politica dei certificati utilizzate in una politica vengano compilate durante la valutazione della politica. Il seguente documento di policy consente l'utilizzo `iot:Connect` di certificati solo quando sono presenti gli attributi Certificate Serial Number e Certificate Subject Common name.

Tutte le variabili della politica del certificato hanno valori String, quindi tutti [gli operatori di condizione String](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String) sono supportati.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/*"
			],
			"Condition": {
				"Null": {
					"iot:Certificate.SerialNumber": "false",
					"iot:Certificate.Subject.CommonName": "false"
				}
			}
		}
	]
}
```

# Prevenzione del confused deputy tra servizi
<a name="cross-service-confused-deputy-prevention"></a>

Il *problema confused deputy* è un problema di sicurezza in cui un’entità che non dispone dell’autorizzazione per eseguire un’azione può costringere un’entità maggiormente privilegiata a eseguire l’azione. Inoltre AWS, l'impersonificazione tra servizi può causare il confuso problema del vicesceriffo. La rappresentazione tra servizi può verificarsi quando un servizio (il *servizio chiamante*) effettua una chiamata a un altro servizio (il *servizio chiamato*). Il servizio chiamante può essere manipolato per utilizzare le proprie autorizzazioni e agire sulle risorse di un altro cliente, a cui normalmente non avrebbe accesso. Per evitare ciò, AWS fornisce alcuni strumenti che consentono di proteggere i dati per tutti i servizi che dispongono di principali del servizio a cui è stato consentito l’accesso alle risorse del tuo account. 

Per limitare le autorizzazioni che AWS IoT assegnano un altro servizio alla risorsa, consigliamo di utilizzare le chiavi di contesto [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)e le chiavi di contesto della condizione [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)globale nelle politiche delle risorse. Se si utilizzano entrambe le chiavi di contesto delle condizioni globali, il valore `aws:SourceAccount` e l’account nel valore `aws:SourceArn` devono utilizzare lo stesso ID account nella stessa istruzione di policy.

Il modo più efficace per proteggersi dal problema "confused deputy" è quello di usare la chiave di contesto della condizione globale `aws:SourceArn` con l'Amazon Resource Name (ARN) completo della risorsa. Perché AWS IoT, è `aws:SourceArn` necessario rispettare il formato: `arn:aws:iot:region:account-id:resource-type/resource-id` per le autorizzazioni specifiche delle risorse o. `arn:aws:iot:region:account-id:*` Il resource-id può essere il nome o l'ID della risorsa consentita o una dichiarazione con caratteri jolly della risorsa consentita. IDs Assicurati che corrisponda alla tua AWS IoT regione e che *region* corrisponda all'ID del *account-id* tuo account cliente. 

L'esempio seguente mostra come prevenire il problema confuso del vicesceriffo utilizzando le chiavi del contesto `aws:SourceArn` e della condizione `aws:SourceAccount` globale nella politica di fiducia dei AWS IoT ruoli. Per ulteriori esempi, consulta [Esempi dettagliati di prevenzione confusa](#cross-service-confused-deputy-prevention-examples).

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:*"
        }
         }
      }
   ]
}
```

**Nota**  
Se si verificano errori di negazione dell'accesso, può essere dovuto al fatto che l'integrazione del servizio con AWS Security Token Service (STS) non supporta le chiavi `aws:SourceArn` e di `aws:SourceAccount` contesto.

## Esempi dettagliati di prevenzione confusa
<a name="cross-service-confused-deputy-prevention-examples"></a>

**Questa sezione fornisce esempi dettagliati di come prevenire il problema confuso dei vicesceriffi utilizzando `aws:SourceArn` le chiavi relative al contesto della condizione `aws:SourceAccount` globale nella politica di fiducia nei AWS IoT ruoli.**
+ [Provisioning del parco istanze](#cross-service-confused-deputy-prevention-fleet-provision)
+ [JITP](#cross-service-confused-deputy-prevention-JITP)
+ [Fornitore di credenziali](#cross-service-confused-deputy-prevention-credential-provider)

### Provisioning del parco istanze
<a name="cross-service-confused-deputy-prevention-fleet-provision"></a>

È possibile configurare il [provisioning della flotta](https://docs.aws.amazon.com/iot/latest/developerguide/iot-provision.html) utilizzando una risorsa modello di provisioning. Quando un modello di provisioning fa riferimento a un ruolo di provisioning, la policy di attendibilità di quel ruolo può includere le `aws:SourceArn` chiavi e condition. `aws:SourceAccount` Queste chiavi limitano le risorse per le quali la configurazione può richiamare la richiesta. `sts:AssumeRole`

Il ruolo con la seguente policy di trust può essere assunto solo dal principale IoT (`iot.amazonaws.com`) per il modello di provisioning specificato in. `SourceArn`

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:provisioningtemplate/example_template"
        }
         }
      }
   ]
}
```

### JITP
<a name="cross-service-confused-deputy-prevention-JITP"></a>

Nel [just-in-time provisioning (JITP)](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html), è possibile utilizzare il modello di provisioning come risorsa separata dalla CA o definire il corpo del modello e il ruolo come parte della configurazione del certificato CA. Il valore della policy di `aws:SourceArn` attendibilità del AWS IoT ruolo dipende da come si definisce il modello di provisioning.

#### Definizione del modello di provisioning come risorsa separata
<a name="cross-service-confused-deputy-prevention-JITP-template"></a>

Se si definisce il modello di provisioning come risorsa separata, il valore di `aws:SourceArn` può essere. `"arn:aws:iot:region:account-id:provisioningtemplate/example_template"` È possibile utilizzare lo stesso esempio di policy in[Provisioning del parco istanze](#cross-service-confused-deputy-prevention-fleet-provision).

#### Definizione di un modello di provisioning in un certificato CA
<a name="cross-service-confused-deputy-prevention-JITP-CA"></a>

Se si definisce il modello di provisioning all'interno di una risorsa di certificato CA, il valore di `aws:SourceArn` può essere `"arn:aws:iot:region:account-id:cacert/cert_id"` o. `"arn:aws:iot:region:account-id:cacert/*"` È possibile utilizzare un carattere jolly quando l'identificatore della risorsa, ad esempio l'ID di un certificato CA, è sconosciuto al momento della creazione.

Il ruolo con la seguente policy di fiducia può essere assunto solo dal principale IoT (`iot.amazonaws.com`) per il certificato CA specificato in`SourceArn`.

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:cacert/8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e"
        }
         }
      }
   ]
}
```

Quando si crea un certificato CA, è possibile fare riferimento a un ruolo di provisioning nella configurazione di registrazione. La politica di fiducia del ruolo di provisioning può essere utilizzata `aws:SourceArn` per limitare le risorse per cui il ruolo può essere assunto. [Tuttavia, durante la CACertificate chiamata iniziale di Register per registrare il certificato CA, non avresti l'ARN del certificato CA da specificare nella `aws:SourceArn` condizione.](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html)

Per ovviare a questo problema, ad esempio per specificare la policy di attendibilità del ruolo di provisioning per lo specifico certificato CA con cui è registrato AWS IoT Core, puoi fare quanto segue:
+ Innanzitutto, chiama [Register CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) senza fornire il `RegistrationConfig` parametro.
+ Dopo aver registrato il certificato CA AWS IoT Core, chiama [Update CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) su di esso.

  Nella CACertificate chiamata Update, fornisci una policy `RegistrationConfig` che includa la policy di attendibilità del ruolo di provisioning `aws:SourceArn` impostata sull'ARN del certificato CA appena registrato.

### Fornitore di credenziali
<a name="cross-service-confused-deputy-prevention-credential-provider"></a>

Per il [provider di AWS IoT Core credenziali](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html), usa lo stesso Account AWS che usi per creare l'alias del ruolo in `aws:SourceAccount` e specifica un'istruzione che corrisponda all'ARN della risorsa del tipo di risorsa rolealias in. `aws:SourceArn` Quando crei un ruolo IAM da utilizzare con il provider di AWS IoT Core credenziali, devi includere nella `aws:SourceArn` condizione gli alias ARNs di ruolo che potrebbero dover assumere il ruolo, autorizzando così la richiesta interservizio. `sts:AssumeRole`

Il ruolo con la seguente politica di fiducia può essere assunto solo dal principale fornitore di AWS IoT Core credenziali (`credentials.iot.amazonaws.com`) per il RoleAlias specificato in. `SourceArn` Se un principale tenta di recuperare le credenziali per un alias di ruolo diverso da quello specificato nella `aws:SourceArn` condizione, la richiesta verrà rifiutata, anche se l'altro alias del ruolo fa riferimento allo stesso ruolo IAM.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "credentials.iot.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:iot:us-east-1:123456789012:rolealias/example_rolealias"
        }
      }
    }
  ]
}
```

# AWS IoT Core esempi di politiche
<a name="example-iot-policies"></a>

I criteri di esempio in questa sezione illustrano i documenti della policy utilizzati per completare le attività comuni in AWS IoT Core. È possibile utilizzarli come esempi per iniziare dalla creazione delle policy per le tue soluzioni.<a name="example-iot-policies-elements"></a>

Gli esempi in questa sezione utilizzano questi elementi di policy:
+ [AWS IoT Core azioni politiche](iot-policy-actions.md)
+ [AWS IoT Core risorse d'azione](iot-action-resources.md)
+ [AWS IoT esempi di politiche basate sull'identità](security_iam_id-based-policy-examples.md)
+ [Variabili AWS IoT Core politiche di base](basic-policy-variables.md)
+ [Variabili della politica del certificato AWS IoT Core X.509](cert-policy-variables.md)

**Topics**
+ [Esempi di policy di connessione](connect-policy.md)
+ [Esempi di policy di pubblicazione/sottoscrizione](pub-sub-policy.md)
+ [Esempi di policy di connessione e pubblicazione](connect-and-pub.md)
+ [Esempi di policy per i messaggi conservati](retained-message-policy-examples.md)
+ [Esempi di policy di certificato](certificate-policy-examples.md)
+ [Esempi di policy di oggetto](thing-policy-examples.md)
+ [Esempi di policy di processo base](basic-jobs-example.md)

# Esempi di policy di connessione
<a name="connect-policy"></a>

La seguente politica nega l'autorizzazione al client IDs `client1` e `client2` a cui connettersi AWS IoT Core, mentre consente ai dispositivi di connettersi utilizzando un ID client. L'ID client corrisponde al nome di un elemento registrato nel AWS IoT Core registro e allegato al principale utilizzato per la connessione:

**Nota**  
Per i dispositivi registrati, è consigliabile utilizzare [variabili delle policy di oggetto](thing-policy-variables.md) per azioni `Connect` e collegare l'oggetto al principale utilizzato per la connessione.

****  

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

La seguente politica concede l'autorizzazione alla connessione AWS IoT Core con l'ID client. `client1` Questo esempio di policy è relativa a dispositivi non registrati.

****  

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

## Esempi di policy di sessioni persistenti MQTT
<a name="persistent-sessions-examples"></a>

`connectAttributes` consente di specificare quali attributi si desidera utilizzare nel messaggio di connessione nelle policy IAM, ad esempio `PersistentConnect` e `LastWill`. Per ulteriori informazioni, consulta [Utilizzo degli Attributi Connect](mqtt.md#connect-attribute).

La seguente policy permette di connettersi con la funzionalità `PersistentConnect`:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		}
	]
}
```

La seguente policy non consente `PersistentConnect`, sono consentite altre funzionalità:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringNotEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		}
	]
}
```

La policy di cui sopra può essere espressa anche utilizzando `StringEquals`, è consentita qualsiasi altra funzionalità, inclusa la nuova funzionalità:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1"
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

La seguente policy permette la connessione sia tramite `PersistentConnect` che `LastWill`, qualsiasi altra nuova funzionalità non è consentita:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect",
						"LastWill"
					]
				}
			}
		}
	]
}
```

La seguente policy consente la connessione pulita da parte dei client con o senza `LastWill`, non saranno consentite altre funzionalità:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "iot:Connect"
        ],
        "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
        "Condition": {
            "StringEquals": {
                "iot:ConnectAttributes": "LastWill"
        }
        }
    }]
}
```

La seguente policy consente la connessione solo utilizzando le funzionalità predefinite:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": []
				}
			}
		}
	]
}
```

La seguente policy permette di connettersi solo a `PersistentConnect`, qualsiasi nuova funzionalità è consentita fintanto che la connessione utilizza `PersistentConnect`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

La seguente policy indica che la connessione deve avere sia `PersistentConnect` che `LastWill`, non è consentita alcuna nuova funzionalità:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect",
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": []
				}
			}
		}
	]
}
```

La seguente policy non deve avere `PersistentConnect` ma può avere `LastWill`, qualsiasi altra nuova funzionalità non è consentita:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "iot:ConnectAttributes": [
                        "LastWill"
                    ]
            }
        }
        }
    ]
}
```

La seguente policy consente la connessione solo da client che dispongono di un `LastWill` con argomento `"my/lastwill/topicName"`, qualsiasi funzionalità è consentita purché utilizzi l'argomento `LastWill`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ArnEquals": {
                "iot:LastWillTopic": "arn:aws:iot:us-east-1:123456789012:topic/my/lastwill/topicName"
            }
        }
        }
    ]
}
```

La seguente policy consente solo la connessione pulita utilizzando un `LastWillTopic`, qualsiasi funzionalità è consentita purché utilizzi `LastWillTopic`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ArnEquals": {
                "iot:LastWillTopic": "arn:aws:iot:us-east-1:123456789012:topic/my/lastwill/topicName"
            }
        }
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

# Esempi di policy di pubblicazione/sottoscrizione
<a name="pub-sub-policy"></a>

La politica che usi dipende dal modo in cui ti connetti. AWS IoT CoreÈ possibile connettersi AWS IoT Core utilizzando un client MQTT, HTTP o WebSocket. Quando ti connetti con un client MQTT, l'autenticazione viene eseguita con un certificato X.509. Quando ti connetti tramite HTTP o il WebSocket protocollo, ti autentichi con Signature Version 4 e Amazon Cognito. 

**Nota**  
Per i dispositivi registrati, è consigliabile utilizzare [variabili delle policy di oggetto](thing-policy-variables.md) per azioni `Connect` e collegare l'oggetto al principale utilizzato per la connessione. 

**Topics**
+ [Utilizzo di caratteri jolly in MQTT e nelle policy AWS IoT Core](#pub-sub-policy-cert)
+ [Politiche per la pubblicazione, la sottoscrizione e la ricezione di messaggi (argomenti to/from specifici)](#pub-sub-specific-topic)
+ [Politiche per la pubblicazione, la sottoscrizione e la ricezione di messaggi, argomenti con un prefisso specifico to/from](#pub-sub-policy-specific-topic-prefix)
+ [Politiche per la pubblicazione, la sottoscrizione e la ricezione di messaggi (argomenti specifici per ogni dispositivo) to/from](#pub-sub-specific-topic-device)
+ [Politiche per la pubblicazione, la sottoscrizione e la ricezione di messaggi ( to/from argomenti con l'attributo thing nel nome dell'argomento)](#pub-sub-topic-attribute)
+ [Policy per rifiutare la pubblicazione di messaggi in argomenti secondari di un nome di argomento](#pub-sub-deny-publish)
+ [Policy per rifiutare la ricezione di messaggi da argomenti secondari di un nome di argomento](#pub-sub-deny-receive)
+ [Policy per effettuare la sottoscrizione agli argomenti utilizzando caratteri jolly MQTT](#pub-sub-topic-wildcard)
+ [WebSocket Politiche per HTTP e client](#pub-sub-policy-cognito)

## Utilizzo di caratteri jolly in MQTT e nelle policy AWS IoT Core
<a name="pub-sub-policy-cert"></a>

MQTT e AWS IoT Core le policy hanno caratteri jolly diversi e dovreste sceglierli dopo un'attenta valutazione. In MQTT, i caratteri `+` jolly `#` vengono utilizzati nei [filtri degli argomenti MQTT per sottoscrivere più nomi di argomenti](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html#topicfilters). AWS IoT Core [le politiche utilizzano `*` e `?` come caratteri jolly e seguono le convenzioni delle politiche IAM.](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#policies-grammar-json) In un documento di policy, `*` rappresenta qualsiasi combinazione di caratteri e il punto interrogativo `?` rappresenta qualsiasi singolo carattere. Nei documenti delle policy, i caratteri jolly MQTT, `+` e `#` sono trattati come caratteri senza alcun significato speciale. Per descrivere più nomi e filtri di argomenti nell'attributo `resource` di una policy, utilizza i caratteri jolly `*` e `?` al posto dei caratteri jolly MQTT.

Quando scegliete i caratteri jolly da utilizzare in un documento di policy, tenete presente che il `*` carattere non è limitato a un singolo livello di argomento. Il `+` carattere è limitato a un singolo livello di argomento in un filtro per argomenti MQTT. Per contribuire a vincolare una specifica di carattere jolly a un singolo livello di filtro di argomento MQTT, considera l'utilizzo di più caratteri `?`. Per ulteriori informazioni sull'uso dei caratteri jolly in una risorsa politica e altri esempi di ciò che corrispondono, consultate [Using jolly](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_resource.html#reference_policies_elements_resource_wildcards) in resource. ARNs

La tabella seguente mostra i diversi caratteri jolly utilizzati in MQTT e le policy AWS IoT Core per client MQTT.


| Carattere jolly. | È un carattere jolly MQTT | Esempio in MQTT | È un carattere jolly AWS IoT Core di policy | Esempio AWS IoT Core di policy per i client MQTT | 
| --- | --- | --- | --- | --- | 
| \$1 | Sì | some/\$1 | No | N/D | 
| \$1 | Sì | some/\$1/topic | No | N/D | 
| \$1 | No | N/D | Sì | `topicfilter/some/*/topic` `topicfilter/some/sensor*/topic`  | 
| ? | No | N/D | Sì |  `topic/some/?????/topic` `topicfilter/some/sensor???/topic`  | 

## Politiche per la pubblicazione, la sottoscrizione e la ricezione di messaggi (argomenti to/from specifici)
<a name="pub-sub-specific-topic"></a>

Di seguito sono riportati esempi di dispositivi registrati e non registrati per pubblicare, sottoscrivere e ricevere messaggi to/from sull'argomento denominato «some\$1specific\$1topic». Gli esempi evidenziano anche che `Publish` e `Receive` utilizzano "topic" come la risorsa e che `Subscribe` utilizza "topicfilter" come la risorsa.

------
#### [ Registered devices ]

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi con ClientID che corrisponde al nome di un elemento nel registro. Inoltre, fornisce le autorizzazioni `Publish`, `Subscribe` e `Receive` per l'argomento denominato "some\$1specific\$1topic".

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi utilizzando ClientID1, ClientID2 o ClientID3. Inoltre, fornisce le autorizzazioni `Publish`, `Subscribe` e `Receive` per l'argomento denominato "some\$1specific\$1topic".

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        }
    ]
}
```

------

## Politiche per la pubblicazione, la sottoscrizione e la ricezione di messaggi, argomenti con un prefisso specifico to/from
<a name="pub-sub-policy-specific-topic-prefix"></a>

Di seguito sono riportati esempi di dispositivi registrati e non registrati per pubblicare, sottoscrivere e ricevere messaggi to/from su argomenti con il prefisso «topic\$1prefix».

**Nota**  
Nota l'uso del carattere jolly in questo esempio. `*` Sebbene `*` sia utile fornire le autorizzazioni per più nomi di argomenti in un'unica istruzione, può portare a conseguenze indesiderate fornendo ai dispositivi più privilegi del necessario. Si consiglia quindi di utilizzare il carattere `*` jolly solo dopo un'attenta valutazione.

------
#### [ Registered devices ]

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi con ClientID che corrisponde al nome di un elemento nel registro. Inoltre, fornisce le autorizzazioni `Publish`, `Subscribe` e `Receive` per gli argomenti preceduti dal prefisso "topic\$1prefix".

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi utilizzando ClientID1, ClientID2 o ClientID3. Inoltre, fornisce le autorizzazioni `Publish`, `Subscribe` e `Receive` per gli argomenti preceduti dal prefisso "topic\$1prefix".

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish",
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
            ]
        }
    ]
}
```

------

## Politiche per la pubblicazione, la sottoscrizione e la ricezione di messaggi (argomenti specifici per ogni dispositivo) to/from
<a name="pub-sub-specific-topic-device"></a>

Di seguito sono riportati esempi di dispositivi registrati e non registrati per la pubblicazione, la sottoscrizione e la ricezione di messaggi to/from su argomenti specifici per un determinato dispositivo.

------
#### [ Registered devices ]

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi con ClientID che corrisponde al nome di un elemento nel registro. Fornisce l'autorizzazione per pubblicare nell'argomento specifico dell'oggetto (`sensor/device/${iot:Connection.Thing.ThingName}`), nonché effettuare la sottoscrizione e ricevere messaggi dall'argomento specifico dell'oggetto (`command/device/${iot:Connection.Thing.ThingName}`). Se il nome dell'oggetto nel registro è «thing1", il dispositivo sarà in grado di pubblicare sull'argomento" 1". sensor/device/thing1". The device will also be able to subscribe to and receive from the topic "command/device/thing

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi utilizzando ClientID1, ClientID2 o ClientID3. Fornisce l'autorizzazione per pubblicare nell'argomento specifico del client (`sensor/device/${iot:ClientId}`), nonché effettuare la sottoscrizione e ricevere messaggi dall'argomento specifico del client (`command/device/${iot:ClientId}`). Se il dispositivo si connette con ClientID come ClientID1, sarà in grado di pubblicare sull'argomento "1". sensor/device/clientId Il dispositivo sarà inoltre in grado di abbonarsi e ricevere messaggi dall'argomento. `device/clientId1/command`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
            ]
        }
    ]
}
```

------

## Politiche per la pubblicazione, la sottoscrizione e la ricezione di messaggi ( to/from argomenti con l'attributo thing nel nome dell'argomento)
<a name="pub-sub-topic-attribute"></a>

Di seguito viene illustrato un esempio di dispositivi registrati per la pubblicazione, la sottoscrizione e la ricezione di to/from argomenti di messaggi i cui nomi includono attributi di oggetto.

**Nota**  
Gli attributi degli oggetti esistono solo per i dispositivi registrati nel AWS IoT Core Registro di sistema. Non esiste un esempio corrispondente per dispositivi non registrati.

------
#### [ Registered devices ]

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi con ClientID che corrisponde al nome di un elemento nel registro. Fornisce l'autorizzazione per pubblicare nell'argomento (`sensor/${iot:Connection.Thing.Attributes[version]}`), nonché effettuare la sottoscrizione e ricevere messaggi dall'argomento (`command/${iot:Connection.Thing.Attributes[location]}`) dove il nome di argomento include gli attributi dell'oggetto. Se il nome dell'oggetto nel registro è impostato su `version=v1` and`location=Seattle`, il dispositivo sarà in grado di pubblicare nell'argomento "sensor/v1", and subscribe to and receive from the topic "command/Seattle».

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/${iot:Connection.Thing.Attributes[version]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/${iot:Connection.Thing.Attributes[location]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/${iot:Connection.Thing.Attributes[location]}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Poiché gli attributi dell'oggetto esistono solo per i dispositivi registrati nel AWS IoT Core registro, non esiste un esempio corrispondente per gli elementi non registrati.

------

## Policy per rifiutare la pubblicazione di messaggi in argomenti secondari di un nome di argomento
<a name="pub-sub-deny-publish"></a>

Di seguito vengono illustrati esempi di dispositivi registrati e non registrati per pubblicare messaggi in tutti gli argomenti tranne determinati argomenti secondari.

------
#### [ Registered devices ]

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi con ClientID che corrisponde al nome di un elemento nel registro. Fornisce l'autorizzazione per pubblicare in tutti gli argomenti preceduti dal prefisso "department/" ma non nell'argomento secondario "department/admins".

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/*"
			]
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/admins"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi utilizzando ClientID1, ClientID2 o ClientID3. Fornisce l'autorizzazione per pubblicare in tutti gli argomenti preceduti dal prefisso "department/" ma non nell'argomento secondario "department/admins".

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/admins"
            ]
        }
    ]
}
```

------

## Policy per rifiutare la ricezione di messaggi da argomenti secondari di un nome di argomento
<a name="pub-sub-deny-receive"></a>

Di seguito vengono illustrati esempi di dispositivi registrati e non registrati per effettuare la sottoscrizione e ricevere messaggi da argomenti con prefissi specifici tranne determinati argomenti secondari.

------
#### [ Registered devices ]

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi con ClientID che corrisponde al nome di un elemento nel registro. La policy consente ai dispositivi di effettuare la sottoscrizione a qualsiasi argomento preceduto dal prefisso "topic\$1prefix". Utilizzando `NotResource` nell'istruzione for`iot:Receive`, consentiamo al dispositivo di ricevere messaggi da tutti gli argomenti a cui il dispositivo è abbonato, ad eccezione degli argomenti con il prefisso «topic\$1». prefix/restricted". For example, with this policy, devices can subscribe to "topic\$1prefix/topic1" and even "topic\$1prefix/restricted", however, they will only receive messages from the topic "topic\$1prefix/topic1" and no messages from the topic "topic\$1prefix/restricted

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi utilizzando ClientID1, ClientID2 o ClientID3. La policy consente ai dispositivi di effettuare la sottoscrizione a qualsiasi argomento preceduto dal prefisso "topic\$1prefix". Utilizzando `NotResource` nell'istruzione for`iot:Receive`, consentiamo al dispositivo di ricevere messaggi da tutti gli argomenti a cui il dispositivo è abbonato, ad eccezione degli argomenti con il prefisso «topic\$1». prefix/restricted". For example, with this policy, devices can subscribe to "topic\$1prefix/topic1" and even "topic\$1prefix/restricted". However, they will only receive messages from the topic "topic\$1prefix/topic1" and no messages from the topic "topic\$1prefix/restricted

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
        }
    ]
}
```

------

## Policy per effettuare la sottoscrizione agli argomenti utilizzando caratteri jolly MQTT
<a name="pub-sub-topic-wildcard"></a>

I caratteri jolly MQTT \$1 e \$1 vengono trattati come stringhe letterali, ma non vengono trattati come caratteri jolly quando vengono utilizzati nelle policy. AWS IoT Core In MQTT, i caratteri \$1 e \$1 vengono trattati come caratteri jolly solo quando si effettua la sottoscrizione a un filtro di argomenti, ma come una stringa letterale in tutti gli altri contesti. Si consiglia di utilizzare questi caratteri jolly MQTT come parte delle policy solo dopo un'attenta valutazione. AWS IoT Core 

Di seguito sono riportati esempi di elementi registrati e non registrati che utilizzano i caratteri jolly MQTT nelle politiche. AWS IoT Core Questi caratteri jolly vengono trattati come stringhe letterali.

------
#### [ Registered devices ]

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi con ClientID che corrisponde al nome di un elemento nel registro. La policy consente ai dispositivi di effettuare la sottoscrizione agli argomenti "department/\$1/employees" e "location/\$1". Poiché \$1 e \$1 sono considerati stringhe letterali nelle AWS IoT Core policy, i dispositivi possono sottoscrivere l'argomento «reparto/\$1/employees» ma non anche l'argomento "". department/engineering/employees". Similarly, devices can subscribe to the topic "location/\$1" but not to the topic "location/Seattle". However, once the device subscribes to the topic "department/\$1/employees", the policy will allow them to receive messages from the topic "department/engineering/employees". Similarly, once the device subscribes to the topic "location/\$1", they will receive messages from the topic "location/Seattle

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica consente ai dispositivi di connettersi utilizzando ClientID1, ClientID2 o ClientID3. La policy consente ai dispositivi di effettuare la sottoscrizione agli argomenti "department/\$1/employees" e "location/\$1". Poiché \$1 e \$1 sono considerati stringhe letterali nelle AWS IoT Core politiche, i dispositivi possono sottoscrivere l'argomento «reparto/\$1/dipendenti» ma non anche l'argomento "". department/engineering/employees". Similarly, devices can subscribe to the topic "location/\$1" but not "location/Seattle". However, once the device subscribes to the topic "department/\$1/employees", the policy will allow them to receive messages from the topic "department/engineering/employees". Similarly, once the device subscribes to the topic "location/\$1", they will receive messages from the topic "location/Seattle

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
        }
    ]
}
```

------

## WebSocket Politiche per HTTP e client
<a name="pub-sub-policy-cognito"></a>

Quando ti connetti tramite HTTP o il WebSocket protocollo, ti autentichi con Signature Version 4 e Amazon Cognito. Idenitità di Amazon Cognito possono essere autenticate e non autenticate. Le identità autenticate appartengono agli utenti autenticati da qualsiasi provider di identità supportato. Solitamente le identità non autenticate appartengono in genere agli utenti guest che non sono in grado di effettuare l'autenticazione con un provider di identità. Amazon Cognito fornisce un identificatore e AWS credenziali univoci per supportare identità non autenticate. Per ulteriori informazioni, consulta [Autorizzazione con identità Amazon Cognito](cog-iot-policies.md).

Per le seguenti operazioni, AWS IoT Core utilizza AWS IoT Core le policy collegate alle identità di Amazon Cognito tramite l'API. `AttachPolicy` In questo modo vengono ridotte le autorizzazioni associate al pool di identità di Amazon Cognito con identità autenticate.
+ `iot:Connect`
+ `iot:Publish`
+ `iot:Subscribe`
+ `iot:Receive`
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

Ciò significa che un'identità di Amazon Cognito necessita dell'autorizzazione della policy del ruolo IAM e della AWS IoT Core policy. Puoi collegare la policy del ruolo IAM al pool e la AWS IoT Core policy all'identità di Amazon Cognito tramite l' AWS IoT Core `AttachPolicy`API.

Gli utenti autenticati e non autenticati sono diversi tipi di identità. Se non alleghi una AWS IoT policy all'identità di Amazon Cognito, un utente autenticato non ottiene l'autorizzazione AWS IoT e non ha accesso a AWS IoT risorse e azioni.

**Nota**  
Per altre AWS IoT Core operazioni o per identità non autenticate, AWS IoT Core non limita le autorizzazioni associate al ruolo del pool di identità di Amazon Cognito. Per le identità autenticate e non autenticate, questa è la policy più permissiva che consigliamo di collegare al ruolo del pool di Amazon Cognito.

**HTTP**

Per permettere alle identità non autenticate di Amazon Cognito di pubblicare messaggi tramite HTTP in un argomento specifico di Amazon Cognito Identity, collega la seguente policy IAM al ruolo del pool di identità di Amazon Cognito:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"
            ]
        }
    ]
}
```

Per consentire l'autenticazione degli utenti, collega la policy precedente al ruolo del pool di Amazon Cognito Identity e all'Amazon Cognito Identity utilizzando l'API. AWS IoT Core [AttachPolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html)

**Nota**  
Quando autorizzi le identità di Amazon Cognito AWS IoT Core , considera entrambe le politiche e concede i privilegi minimi specificati. Un'operazione è consentita solo se entrambe le policy consentono l'operazione richiesta. Se una policy non consente un'operazione, quest'ultima non è autorizzata.

**MQTT**

Per consentire alle identità di Amazon Cognito non autenticate di pubblicare messaggi MQTT WebSocket su un argomento specifico di Amazon Cognito Identity nel tuo account, collega la seguente policy IAM al ruolo del pool di Amazon Cognito Identity:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${cognito-identity.amazonaws.com:sub}"]
        }
    ]
}
```

Per consentire l'autenticazione degli utenti, collega la policy precedente al ruolo del pool di Amazon Cognito Identity e all'Amazon Cognito Identity utilizzando l'API. AWS IoT Core [AttachPolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html)

**Nota**  
Quando autorizzi le identità di Amazon Cognito AWS IoT Core , considera entrambe e concede i privilegi minimi specificati. Un'operazione è consentita solo se entrambe le policy consentono l'operazione richiesta. Se una policy non consente un'operazione, quest'ultima non è autorizzata.

# Esempi di policy di connessione e pubblicazione
<a name="connect-and-pub"></a>

Per i dispositivi registrati come oggetti nel AWS IoT Core registro, la seguente politica concede l'autorizzazione a connettersi AWS IoT Core con un ID client che corrisponde al nome dell'oggetto e limita la pubblicazione del dispositivo su un argomento MQTT specifico dell'ID client o del nome dell'oggetto. Affinché una connessione abbia esito positivo, il nome dell'oggetto deve essere registrato nel AWS IoT Core registro ed essere autenticato utilizzando un'identità o un principale associato all'oggetto:

****  

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

Per i dispositivi non registrati come elementi nel AWS IoT Core registro, la seguente politica concede l'autorizzazione alla connessione AWS IoT Core con l'ID client `client1` e limita il dispositivo alla pubblicazione su un argomento MQTT specifico per ClientID:

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/${iot:ClientId}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:client/client1"
      ]
    }
  ]
}
```

# Esempi di policy per i messaggi conservati
<a name="retained-message-policy-examples"></a>

L'utilizzo di [messaggi conservati](mqtt.md#mqtt-retain) richiede politiche specifiche. I messaggi conservati sono messaggi MQTT pubblicati con il flag RETAIN impostato e archiviati da. AWS IoT Core Questa sezione presenta esempi di policy che consentono l'uso comune dei messaggi conservati.

**Topics**
+ [Policy per la connessione e la pubblicazione di messaggi conservati](#retained-message-policy-examples-publish)
+ [Criteri per connettere e pubblicare i messaggi Will conservati](#retained-message-policy-examples-publish-lwt)
+ [Policy per elencare e ricevere messaggi conservati](#retained-message-policy-examples-list-get)

## Policy per la connessione e la pubblicazione di messaggi conservati
<a name="retained-message-policy-examples-publish"></a>

Affinché un dispositivo pubblichi i messaggi conservati, il dispositivo deve essere in grado di connettersi, pubblicare (qualsiasi messaggio MQTT) e pubblicare messaggi conservati MQTT. Il seguente criterio concede queste autorizzazioni per l'argomento: `device/sample/configuration` al client **device1**. Per un altro esempio che concede l'autorizzazione per connettersi, consulta[Esempi di policy di connessione e pubblicazione](connect-and-pub.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/device1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:RetainPublish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/device/sample/configuration"
			]
		}
	]
}
```

## Criteri per connettere e pubblicare i messaggi Will conservati
<a name="retained-message-policy-examples-publish-lwt"></a>

I client possono configurare un messaggio che AWS IoT Core verrà pubblicato quando il client si disconnette inaspettatamente. MQTT chiama un messaggio di tipo [messaggio *Will*](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag). Un client deve disporre di una condizione aggiuntiva aggiunta all'autorizzazione di connessione per includerli. 

Il seguente documento di policy concede a tutti i client l'autorizzazione per connettersi e pubblicare un messaggio Will, identificato dal relativo argomento, `will`, di cui AWS IoT Core lo manterrà.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/device1"
			],
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:RetainPublish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/will"
			]
		}
	]
}
```

## Policy per elencare e ricevere messaggi conservati
<a name="retained-message-policy-examples-list-get"></a>

Servizi e applicazioni possono accedere ai messaggi conservati senza la necessità di supportare un client MQTT chiamando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html) e [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html). I servizi e le applicazioni che chiamano queste azioni devono essere autorizzati utilizzando una policy come l'esempio seguente.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:ListRetainedMessages"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/device1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:GetRetainedMessage"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/foo"
            ]
        }
    ]
}
```

# Esempi di policy di certificato
<a name="certificate-policy-examples"></a>

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica concede l'autorizzazione a connettersi a AWS IoT Core un ID client che corrisponde al nome di un oggetto e a pubblicare su un argomento il cui nome è uguale al certificato utilizzato dal `certificateId` dispositivo per autenticarsi:

****  

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

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica concede l'autorizzazione alla connessione AWS IoT Core con il client IDs `client3` e alla pubblicazione su un argomento il cui nome è uguale al `certificateId` certificato utilizzato dal dispositivo per l'autenticazione: `client1` `client2`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:CertificateId}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        }
    ]
}
```

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica concede l'autorizzazione a AWS IoT Core connettersi a un ID client che corrisponde al nome dell'oggetto e a pubblicare su un argomento il cui nome è uguale al `CommonName` campo dell'oggetto del certificato utilizzato dal dispositivo per l'autenticazione:

****  

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

**Nota**  
In questo esempio, il nome comune dell'oggetto del certificato viene utilizzato come identificatore dell'argomento, presumendo che il nome comune dell'oggetto sia univoco per ogni certificato registrato. Se i certificati sono condivisi tra più dispositivi, il nome comune dell'oggetto è identico per tutti i dispositivi che condividono il certificato, concedendo quindi privilegi di pubblicazione nello stesso argomento da più dispositivi (opzione non consigliata).

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica concede l'autorizzazione alla connessione AWS IoT Core con il client IDs `client3` e alla pubblicazione su un argomento il cui nome è uguale al `CommonName` campo dell'oggetto del certificato utilizzato dal dispositivo per l'autenticazione: `client1` `client2`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.CommonName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        }
    ]
}
```

**Nota**  
In questo esempio, il nome comune dell'oggetto del certificato viene utilizzato come identificatore dell'argomento, presumendo che il nome comune dell'oggetto sia univoco per ogni certificato registrato. Se i certificati sono condivisi tra più dispositivi, il nome comune dell'oggetto è identico per tutti i dispositivi che condividono il certificato, concedendo quindi privilegi di pubblicazione nello stesso argomento da più dispositivi (opzione non consigliata).

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica concede l'autorizzazione a connettersi a AWS IoT Core un ID client che corrisponde al nome dell'oggetto e a pubblicare su un argomento il cui nome ha il prefisso `admin/` quando il certificato utilizzato per l'autenticazione del dispositivo ha il `Subject.CommonName.2` campo impostato su`Administrator`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/*"],
            "Condition": {
                "StringEquals": {
                    "iot:Certificate.Subject.CommonName.2": "Administrator"
            }
        }
        }
    ]
}
```

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica concede l'autorizzazione alla connessione AWS IoT Core con il client IDs `client1` `client3` e alla pubblicazione su un argomento il cui nome è preceduto da `admin/` quando il certificato utilizzato per l'autenticazione del dispositivo ha il `Subject.CommonName.2` campo impostato su`Administrator`: `client2`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/*"],
            "Condition": {
                "StringEquals": {
                    "iot:Certificate.Subject.CommonName.2": "Administrator"
            }
        }
        }
    ]
}
```

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica consente a un dispositivo di utilizzare il proprio nome oggetto per pubblicare su un argomento specifico, `admin/` seguito da `ThingName` quando il certificato utilizzato per l'autenticazione del dispositivo ha uno dei suoi `Subject.CommonName` campi impostato su`Administrator`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/${iot:Connection.Thing.ThingName}"],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:Certificate.Subject.CommonName.List": "Administrator"
            }
        }
        }
    ]
}
```

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica concede l'autorizzazione AWS IoT Core alla connessione al client IDs `client1` `client3` e alla pubblicazione sull'argomento `admin` quando uno dei `Subject.CommonName` campi del certificato utilizzato per l'autenticazione del dispositivo è impostato su: `client2` `Administrator`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin"],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:Certificate.Subject.CommonName.List": "Administrator"
            }
        }
        }
    ]
}
```

# Esempi di policy di oggetto
<a name="thing-policy-examples"></a>

La seguente politica consente a un dispositivo di connettersi se il certificato utilizzato per l'autenticazione AWS IoT Core è allegato all'oggetto per cui viene valutata la politica:

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {  
            "Effect":"Allow",
            "Action":["iot:Connect"],
            "Resource":[ "*" ],
            "Condition": {
                "Bool": {
                    "iot:Connection.Thing.IsAttached": ["true"]
            }
        }
        }
    ]
}
```

La seguente policy consente a un dispositivo di pubblicare se il certificato è collegato a un oggetto con un particolare tipo di oggetto e se l'oggetto ha un attributo di `attributeName` con valore `attributeValue`. Per ulteriori informazioni sulle variabili delle policy di oggetto, consulta [Variabili delle policy di oggetto](thing-policy-variables.md).

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/device/stats",
      "Condition": {
        "StringEquals": {
          "iot:Connection.Thing.Attributes[attributeName]": "attributeValue",
          "iot:Connection.Thing.ThingTypeName": "Thing_Type_Name"
        },
        "Bool": {
          "iot:Connection.Thing.IsAttached": "true"
        }
      }
    }
  ]
}
```

La seguente policy consente a un dispositivo di pubblicare su un argomento che inizia con un attributo dell'oggetto. Se il certificato del dispositivo non è associato all'oggetto, questa variabile non verrà risolta e genererà un errore di accesso negato. Per ulteriori informazioni sulle variabili delle policy di oggetto, consulta [Variabili delle policy di oggetto](thing-policy-variables.md).

****  

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

# Esempi di policy di processo base
<a name="basic-jobs-example"></a>

Questo esempio mostra le dichiarazioni delle policy richieste per un obiettivo di processo che è un singolo dispositivo per ricevere una richiesta di processo e comunicare lo stato di esecuzione del processo con AWS IoT.

Sostituisci *us-west-2:57EXAMPLE833* con i tuoi Regione AWS, un carattere con i due punti (:) e il tuo Account AWS numero a 12 cifre, quindi sostituiscilo *uniqueThingName* con il nome della risorsa oggetto che rappresenta il dispositivo in. AWS IoT

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:client/uniqueThingName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/job/*",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic",
                "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/events/jobExecution/*",
                "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iotjobsdata:DescribeJobExecution",
                "iotjobsdata:GetPendingJobExecutions",
                "iotjobsdata:StartNextPendingJobExecution",
                "iotjobsdata:UpdateJobExecution"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName"
            ]
        }
    ]
}
```

# Autorizzazione con identità Amazon Cognito
<a name="cog-iot-policies"></a>

Esistono due tipi di identità di Amazon Cognito: non autenticate e autenticate. Se l'app supporta identità Amazon Cognito non autenticate, non viene eseguita alcuna autenticazione in modo da non sapere chi è l'utente. 

**Identità non autenticate:** per le identità Amazon Cognito non autenticate, viene concessa l'autorizzazione collegando un ruolo IAM a un pool di identità non autenticato. Consigliamo di concedere l'accesso solo alle risorse che si desidera rendere disponibili agli utenti sconosciuti.

**Importante**  
Per gli utenti non autenticati che si connettono AWS IoT Core ad Amazon Cognito, consigliamo di concedere l'accesso a risorse molto limitate nelle policy IAM.

**Identità autenticate:** per le identità Amazon Cognito autenticate, è necessario specificare autorizzazioni in due posizioni: 
+ Collega una policy IAM al pool di identità di Amazon Cognito autenticato e
+ Allega una AWS IoT Core policy all'identità di Amazon Cognito (utente autenticato).

## Esempi di policy per utenti Amazon Cognito non autenticati e autenticati che si connettono a AWS IoT Core
<a name="cog-iot-policies-auth-unauth-examples"></a>

Nell'esempio seguente vengono illustrate le autorizzazioni nella policy IAM e nella policy IoT di un'identità Amazon Cognito. L'utente autenticato desidera pubblicare su un argomento specifico del dispositivo (ad esempio). device/DEVICE\$1ID/status

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/Client_ID"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/device/Device_ID/status"
            ]
        }
    ]
}
```

L'esempio seguente mostra le autorizzazioni in una policy IAM di un ruolo non autenticato di Amazon Cognito. L'utente non autenticato desidera pubblicare in argomenti non specifici del dispositivo che non richiedono l'autenticazione.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/non_device_specific_topic"
            ]
        }
    ]
}
```

## GitHub esempi
<a name="cog-iot-policies-github"></a>

I seguenti esempi di applicazioni web GitHub mostrano come incorporare l'allegato delle policy agli utenti autenticati nel processo di registrazione e autenticazione degli utenti.
+ [Applicazione web MQTT publish/subscribe React che utilizza e AWS AmplifySDK per dispositivi AWS IoT per JavaScript](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp)
+ [Applicazione web MQTT publish/subscribe React che utilizza AWS AmplifySDK per dispositivi AWS IoT per JavaScript, la e una funzione Lambda](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda)

Amplify è un insieme di strumenti e servizi che ti aiuta a creare applicazioni web e mobili che si integrano con i servizi. AWS Per ulteriori informazioni su Amplify, consulta [Amplify Framework Documentation (Documentazione Amplify Framework)](https://docs.amplify.aws/).

Entrambi gli esempi eseguono la seguente procedura.

1. Quando un utente si registra per un account, l'applicazione crea un bacino d'utenza e un'identità di Amazon Cognito.

1. Quando un utente si autentica, l'applicazione crea e allega una policy all'identità. Ciò consente all'utente di pubblicare e sottoscrivere le autorizzazioni.

1. L'utente può utilizzare l'applicazione per pubblicare e iscriversi ad argomenti MQTT.

Il primo esempio utilizza l'operazione API `AttachPolicy` direttamente all'interno dell'operazione di autenticazione. Nell'esempio seguente viene illustrato come implementare questa chiamata API all'interno di un'applicazione Web React che utilizza Amplify e SDK per dispositivi AWS IoT per JavaScript.

```
function attachPolicy(id, policyName) {
    var Iot = new AWS.Iot({region: AWSConfiguration.region, apiVersion: AWSConfiguration.apiVersion, endpoint: AWSConfiguration.endpoint});
    var params = {policyName: policyName, target: id};

    console.log("Attach IoT Policy: " + policyName + " with cognito identity id: " + id);
    Iot.attachPolicy(params, function(err, data) {
         if (err) {
               if (err.code !== 'ResourceAlreadyExistsException') {
                  console.log(err);
               }
          }
         else  {
            console.log("Successfully attached policy with the identity", data);
         }
     });
}
```

Questo codice viene visualizzato nel [AuthDisplayfile.js.](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp/blob/d1c307b36357be934db9dda020140fa337709cd9/src/AuthDisplay.js#L45)

Il secondo esempio implementa l'operazione API `AttachPolicy` in una funzione Lambda. Nell'esempio seguente viene illustrato in che modo Lambda utilizza questa chiamata API.

```
iot.attachPolicy(params, function(err, data) {
     if (err) {
           if (err.code !== 'ResourceAlreadyExistsException') {
              console.log(err);
              res.json({error: err, url: req.url, body: req.body});
           }
      }
     else  {
        console.log(data);
        res.json({success: 'Create and attach policy call succeed!', url: req.url, body: req.body});
     }
 });
```

Questo codice viene visualizzato all'interno della funzione `iot.GetPolicy` nel file[app.js](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda/blob/e493039581d2aff0faa3949086deead20a2c5385/amplify/backend/function/amplifyiotlambda/src/app.js#L50).

**Nota**  
Quando chiami la funzione con AWS le credenziali ottenute tramite i pool di identità di Amazon Cognito, l'oggetto di contesto nella funzione Lambda contiene un valore per. `context.cognito_identity_id` Per ulteriori informazioni, consulta gli argomenti seguenti.   
[AWS Lambda oggetto di contesto in Node.js](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html)
[AWS Lambda oggetto di contesto in Python](https://docs.aws.amazon.com/lambda/latest/dg/python-context.html)
[AWS Lambda oggetto di contesto in Ruby](https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html)
[AWS Lambda oggetto di contesto in Java](https://docs.aws.amazon.com/lambda/latest/dg/java-context.html)
[AWS Lambda oggetto contestuale in Go](https://docs.aws.amazon.com/lambda/latest/dg/golang-context.html)
[AWS Lambda oggetto di contesto in C\$1](https://docs.aws.amazon.com/lambda/latest/dg/csharp-context.html)
[AWS Lambda oggetto di contesto in PowerShell](https://docs.aws.amazon.com/lambda/latest/dg/powershell-context.html)

# Autorizzazione di chiamate dirette ai AWS servizi utilizzando il provider di AWS IoT Core credenziali
<a name="authorizing-direct-aws"></a>

I dispositivi possono utilizzare i certificati X.509 a cui connettersi AWS IoT Core utilizzando i protocolli di autenticazione reciproca TLS. [Altri AWS servizi non supportano l'autenticazione basata su certificati, ma possono essere richiamati utilizzando AWS credenziali in formato Signature Version 4.AWS](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) L'[algoritmo Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) richiede normalmente che il chiamante disponga di un ID di chiave di accesso e di una chiave di accesso segreta. AWS IoT Core dispone di un provider di credenziali che consente di utilizzare il [certificato X.509](x509-client-certs.html) integrato come identità univoca del dispositivo per autenticare le richieste. AWS Ciò elimina la necessità di archiviare un ID chiave di accesso e la chiave di accesso segreta sul dispositivo.

Il fornitore di credenziali autentica un intermediario usando un certificato X.509 ed emette un token temporaneo di sicurezza con privilegi limitati. Il token può essere utilizzato per firmare e autenticare qualsiasi richiesta. AWS Questo metodo di autenticazione delle AWS richieste richiede la creazione e la configurazione di un ruolo [AWS Identity and Access Management (IAM) e l'associazione di politiche IAM appropriate al ruolo](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles.html) in modo che il fornitore delle credenziali possa assumere il ruolo per conto dell'utente. Per ulteriori informazioni su AWS IoT Core e IAM, consulta [Gestione delle identità e degli accessi per AWS IoT](security-iam.md).

 AWS IoT richiede che i dispositivi inviino l'[estensione SNI (Server Name Indication)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) al protocollo Transport Layer Security (TLS) e forniscano l'indirizzo completo dell'endpoint sul campo. `host_name` Il campo `host_name` deve contenere l'endpoint che si sta chiamando e deve essere:
+ Il `endpointAddress` restituito da `aws iot [describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html) --endpoint-type iot:CredentialProvider`.

Le connessioni tentate dai dispositivi senza il valore `host_name` corretto non andranno a buon fine.

Lo schema seguente illustra il flusso di lavoro del fornitore di credenziali.

![\[AWS IoT Core flusso di lavoro del provider di credenziali.\]](http://docs.aws.amazon.com/it_it/iot/latest/developerguide/images/credentials-provider-diagram.png)


1. Il AWS IoT Core dispositivo invia una richiesta HTTPS al provider di credenziali per un token di sicurezza. La richiesta include il certificato X.509 del dispositivo per l'autenticazione.

1. Il provider di credenziali inoltra la richiesta al modulo di AWS IoT Core autenticazione e autorizzazione per convalidare il certificato e verificare che il dispositivo sia autorizzato a richiedere il token di sicurezza.

1. Se il certificato è valido e dispone dell'autorizzazione per richiedere un token di sicurezza, il modulo di AWS IoT Core autenticazione e autorizzazione restituisce l'esito positivo. In caso contrario, invia un'eccezione al dispositivo.

1. Una volta completata la convalida del certificato, il fornitore di credenziali richiama il [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) per usare il ruolo IAM creato.

1. AWS STS restituisce un token di sicurezza temporaneo con privilegi limitati al fornitore delle credenziali.

1. Il fornitore di credenziali restituisce il token di sicurezza al dispositivo.

1. Il dispositivo utilizza il token di sicurezza per firmare una AWS richiesta con AWS Signature Version 4.

1. Il servizio richiesto richiama IAM per convalidare la firma e autorizzare la richiesta in base alle policy di accesso collegate al ruolo IAM creato per il fornitore di credenziali.

1. Se IAM convalida la firma correttamente e autorizza la richiesta, questa va a buon fine. In caso contrario, IAM invia un'eccezione.

La sezione seguente descrive come utilizzare un certificato per ottenere un token di sicurezza. Si basa su presupposto che tu abbia già [registrato un dispositivo](register-device.html) e [creato e attivato il relativo certificato](device-certs-your-own.html).

## Come utilizzare un certificato per ottenere un token di sicurezza
<a name="authorizing-direct-aws.walkthrough"></a>

1. Configura il ruolo IAM che il fornitore di credenziali assume per conto del tuo dispositivo. Collega la seguente policy di attendibilità al ruolo.   
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Principal": {"Service": "credentials.iot.amazonaws.com"},
           "Action": "sts:AssumeRole"
       }
   }
   ```

   Per ogni AWS servizio che desideri chiamare, allega una politica di accesso al ruolo. Il fornitore di credenziali supporta le seguenti variabili di policy:
   + `credentials-iot:ThingName`
   + `credentials-iot:ThingTypeName`
   + `credentials-iot:AwsCertificateId`

   Quando il dispositivo fornisce il nome dell'oggetto nella richiesta di un servizio AWS , il fornitore di credenziali aggiunge `credentials-iot:ThingName` e `credentials-iot:ThingTypeName` come variabili di contesto al token di sicurezza. Il fornitore di credenziali fornisce `credentials-iot:AwsCertificateId` come variabile di contesto, anche se il dispositivo non fornisce il nome dell'oggetto nella richiesta. Il nome dell'oggetto viene passato come valore dell'intestazione di richiesta HTTP `x-amzn-iot-thingname`.

   Queste tre variabili funzionano solo con le policy IAM, non con le policy AWS IoT Core .

1. Assicurati che l'utente che esegue la fase successiva (creando un alias del ruolo) disponga dell'autorizzazione per trasferire questo ruolo appena creato a AWS IoT Core. La seguente politica fornisce entrambe `iam:GetRole` le `iam:PassRole` autorizzazioni a un AWS utente. L'autorizzazione `iam:GetRole` consente all'utente di ottenere informazioni sul ruolo appena creato. L'`iam:PassRole`autorizzazione consente all'utente di passare il ruolo a un altro AWS servizio.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": [
               "iam:GetRole",
               "iam:PassRole"
           ],
           "Resource": "arn:aws:iam::123456789012:role/your role name"
       }
   }
   ```

1. Crea un alias di AWS IoT Core ruolo. Il dispositivo che effettuerà chiamate dirette ai AWS servizi deve sapere a quale ruolo ARN utilizzare durante la connessione. AWS IoT Core L'impostazione hardcoded dell'ARN del ruolo non è una buona soluzione, perché richiede di aggiornare il dispositivo ogni volta che l'ARN del ruolo cambia. Una soluzione migliore consiste nell'utilizzare l'API `CreateRoleAlias` per creare un alias del ruolo che punti all'ARN del ruolo. Se l'ARN del ruolo viene modificato, è sufficiente aggiornare l'alias del ruolo. Non è richiesta alcuna modifica sul dispositivo. Questa API accetta i parametri seguenti:  
`roleAlias`  
Obbligatorio. Stringa arbitraria che identifica l'alias del ruolo. Opera come chiave primaria nel modello di dati dell'alias del ruolo. Contiene da 1 a 128 caratteri e deve includere solo caratteri alfanumerici e i simboli =, @ e -. Sono consentite le lettere maiuscole e minuscole. Gli alias dei ruoli fanno distinzione tra maiuscole e minuscole.  
`roleArn`  
Obbligatorio. ARN del ruolo cui fa riferimento l'alias del ruolo.  
`credentialDurationSeconds`  
Opzionale. Tempo di validità (in secondi) della credenziale. Il valore minimo è di 900 secondi (15 minuti). Il valore massimo è di 43.200 secondi (12 ore). Il valore predefinito è 3.600 secondi (1 ora).   
Il AWS IoT Core Credential Provider può emettere una credenziale con una durata massima di 43.200 secondi (12 ore). La validità della credenziale fino a 12 ore può aiutare a ridurre il numero di chiamate verso il provider di credenziali memorizzando nella cache più a lungo la credenziale.  
Il valore `credentialDurationSeconds` deve essere minore di o uguale alla durata massima della sessione del ruolo IAM a cui fa riferimento l'alias del ruolo. Per ulteriori informazioni, vedere [Modifica della durata massima della sessione (AWS API) di un ruolo nella](https://docs.aws.amazon.com//IAM/latest/UserGuide/roles-managingrole-editing-api.html#roles-modify_max-session-duration-api) AWS Identity and Access Management User Guide.

   Per ulteriori informazioni sull'API, consulta [CreateRoleAlias](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateRoleAlias.html). 

1. Collega una policy al certificato del dispositivo. La policy collegata al certificato del dispositivo deve concedere al dispositivo l'autorizzazione necessaria per assumere il ruolo. A questo scopo, devi concedere l'autorizzazione per l'operazione `iot:AssumeRoleWithCertificate` sull'alias del ruolo, come indicato nel seguente esempio.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iot:AssumeRoleWithCertificate",
               "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/your role alias"
           }
       ]
   }
   ```

1. Effettuare una richiesta HTTPS al fornitore di credenziali per ottenere un token di sicurezza. Fornire le seguenti informazioni:
   + *Certificato*: trattandosi di una richiesta HTTP tramite autenticazione reciproca TLS, fornisci il certificato e la chiave privata per il client durante la richiesta. Usa lo stesso certificato e la stessa chiave privata che hai usato quando hai registrato il certificato con AWS IoT Core.

     Per assicurarti che il tuo dispositivo stia comunicando con AWS IoT Core (e non un servizio che lo impersona), consulta [Autenticazione del server](x509-client-certs.html#server-authentication), segui i collegamenti per scaricare i certificati CA appropriati, quindi copiali sul tuo dispositivo.
   + *RoleAlias*: il nome dell'alias di ruolo che hai creato per il provider di credenziali. I nomi degli alias dei ruoli fanno distinzione tra maiuscole e minuscole e devono corrispondere all'alias di ruolo creato in. AWS IoT Core
   + *ThingName*: Il nome dell'oggetto che hai creato quando l'hai AWS IoT Core registrato. Viene trasferito come valore dell'intestazione HTTP `x-amzn-iot-thingname`. Questo valore è richiesto solo se si utilizzano gli attributi degli oggetti come variabili di policy nelle AWS IoT Core o nelle policy IAM.
**Nota**  
L'*ThingName*input fornito `x-amzn-iot-thingname` deve corrispondere al nome della risorsa AWS IoT Thing assegnata a un certificato. Se non corrisponde, viene restituito un errore 403.

   Esegui il comando seguente in AWS CLI per ottenere l'endpoint del provider di credenziali per il tuo. Account AWS Per ulteriori informazioni sull'API, consulta [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html). Per gli endpoint compatibili con FIPS, vedere. [AWS IoT Core- endpoint del fornitore di credenziali](iot-connect-fips.md#iot-connect-fips-credential)

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   Il seguente oggetto JSON è l'output di esempio del comando **describe-endpoint**. Contiene il valore `endpointAddress` utilizzato per richiedere un token di sicurezza.

   ```
   {
       "endpointAddress": "your_aws_account_specific_prefix.credentials.iot.your region.amazonaws.com"
   }
   ```

   Utilizza l'endpoint per effettuare una richiesta HTTPS al fornitore di credenziali per restituire un token di sicurezza. Il comando di esempio seguente utilizza `curl`, ma è possibile utilizzare qualsiasi client HTTP.
**Nota**  
Il nome *RoleAlias* fa distinzione tra maiuscole e minuscole e deve corrispondere all'alias del ruolo creato in. AWS IoT

   ```
   curl --cert your certificate --key your private key -H "x-amzn-iot-thingname: your thing name" --cacert AmazonRootCA1.pem https://your endpoint /role-aliases/your role alias/credentials
   ```

   Questo comando restituisce un oggetto token di sicurezza che contiene `accessKeyId`, `secretAccessKey`, `sessionToken` e una scadenza. Il seguente oggetto JSON è l'output di esempio del comando `curl`.

   ```
       {"credentials":{"accessKeyId":"access key","secretAccessKey":"secret access key","sessionToken":"session token","expiration":"2018-01-18T09:18:06Z"}}
   ```

   È quindi possibile utilizzare i `sessionToken` valori `accessKeyId``secretAccessKey`, e per firmare le richieste ai servizi. AWS *Per una end-to-end dimostrazione, vedi [Come eliminare la necessità di AWS credenziali codificate nei dispositivi utilizzando il post di blog AWS IoT Credential Provider](https://aws.amazon.com/blogs/security/how-to-eliminate-the-need-for-hardcoded-aws-credentials-in-devices-by-using-the-aws-iot-credentials-provider/) sul Security Blog.AWS *

# Accesso tra account con IAM
<a name="cross-account-access"></a>

AWS IoT Core consente di consentire a un principale di pubblicare o sottoscrivere un argomento definito in un Account AWS argomento che non è di proprietà del principale. Per configurare l'accesso tra account, devi creare una policy IAM; e un ruolo IAM; e quindi collegare la policy al ruolo.

Innanzitutto, crea una policy IAM gestita del cliente come descritto in [Creazione di policy IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_create.html), come faresti per altri utenti e certificati nell'account Account AWS. 

Per i dispositivi registrati nel AWS IoT Core registro, la seguente politica concede l'autorizzazione ai dispositivi a cui si connette AWS IoT Core utilizzando un ID client che corrisponde al nome dell'oggetto del dispositivo e a pubblicare con il nome dell'oggetto `my/topic/thing-name ` dove *thing-name* è il nome dell'oggetto del dispositivo:

****  

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

Per i dispositivi non registrati nel AWS IoT Core registro, la seguente politica concede l'autorizzazione a un dispositivo a utilizzare il nome oggetto `client1` registrato nel AWS IoT Core registro dell'account (123456789012) per connettersi AWS IoT Core e pubblicare su un argomento specifico dell'ID client il cui nome è preceduto da: `my/topic/`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
            ]
        }
    ]
}
```

Quindi, segui le fasi nella pagina [Creazione di un ruolo per delegare le autorizzazioni a un utente IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html). Immetti l'ID dell'account Account AWS con cui desideri condividere l'accesso. Quindi, nella fase finale, collega la policy appena creata al ruolo. Se in un secondo momento devi modificare l'ID account AWS cui desideri concedere l'accesso, potrai usare il seguente formato di policy di trust: 

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::567890123456:user/MyUser"
        },
            "Action": "sts:AssumeRole"
        }
    ]
}
```