

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 di chiamate dirette a AWS servizi che utilizzano AWS IoT Core fornitore di credenziali
<a name="authorizing-direct-aws"></a>

I dispositivi possono utilizzare X.509 i certificati per 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 le credenziali nel [AWS formato Signature Version 4. ](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) L'algoritmo [ Signature Version 4 richiede ](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) normalmente che il chiamante disponga di un ID della chiave di accesso e di una chiave di accesso segreta. AWS IoT Core dispone di un provider di credenziali che consente di utilizzare il [ X.509 certificato integrato ](x509-client-certs.html) come identità univoca del dispositivo per AWS autenticare le richieste. Ciò elimina la necessità di archiviare un ID chiave di accesso e la chiave di accesso segreta sul dispositivo.

Il provider di credenziali autentica un chiamante utilizzando un X.509 certificato ed emette un token di sicurezza temporaneo con privilegi limitati. Il token può essere utilizzato per firmare e autenticare qualsiasi richiesta. AWS Questo metodo di autenticazione delle AWS richieste richiede di creare e configurare un ruolo [AWS Identity and Access Management (IAM) e di allegare le politiche IAM appropriate al ruolo ](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles.html) in modo che il fornitore di 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 fornitore 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 fornitore delle credenziali per un token di sicurezza. La richiesta include il X.509 certificato del dispositivo per l'autenticazione.

1. Il provider delle credenziali inoltra la richiesta al modulo di AWS IoT Core autenticazione e autorizzazione per convalidare il certificato e verificare che il dispositivo disponga dell'autorizzazione per 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 [Servizio di token di sicurezza AWS (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 provider 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 quale ruolo ARN utilizzare per la connessione. AWS IoT Core Hard-coding il ruolo ARN non è una buona soluzione perché richiede l'aggiornamento del dispositivo ogni volta che il ruolo ARN 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 fornitore di AWS IoT Core credenziali 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, consulta [ Modificare la durata massima della sessione (AWS API) di un ruolo nella Guida per l' AWS utente ](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-api.html#roles-modify_max-session-duration-api) di Identity and Access Management.

   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 AWS IoT Core (e non un servizio che lo impersona), vedi Autenticazione [ server](x509-client-certs.html#server-authentication), segui i collegamenti per scaricare i certificati CA appropriati e copiali sul tuo dispositivo.
   + *RoleAlias*: il nome dell'alias di ruolo che hai creato per il fornitore di credenziali. I nomi degli alias di ruolo 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 lo hai AWS IoT Core registrato. Viene trasferito come valore dell'intestazione HTTP `x-amzn-iot-thingname`. Questo valore è obbligatorio solo se si utilizzano gli attributi degli oggetti come variabili di policy nelle AWS IoT Core policy IAM.
**Nota**  
Il * ThingName * valore 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 seguente comando 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 FIPS-enabled endpoint, consulta. [AWS IoT Core - endpoint con fornitori 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 di 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 dimostrazione completa, consulta il post del blog [ Come eliminare la necessità di Hard-Coded AWS credenziali nei dispositivi utilizzando il AWS IoT Credential Provider nel ](https://aws.amazon.com/blogs/security/how-to-eliminate-the-need-for-hardcoded-aws-credentials-in-devices-by-using-the-aws-iot-credentials-provider/) blog sulla sicurezza. *AWS *