Tutorial: Creazione di un'autorizzazione ad hoc per AWS IoT Core - AWS IoT Core

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à.

Tutorial: Creazione di un'autorizzazione ad hoc per AWS IoT Core

Questo tutorial illustra i passaggi per creare, convalidare e utilizzare l'autenticazione ad hoc utilizzando il AWS CLI. Facoltativamente, utilizzando questo tutorial, è possibile utilizzare Postman per inviare dati ad AWS IoT Core utilizzando l'API HTTP Publish.

In questo tutorial viene illustrato come creare una funzione Lambda di esempio che implementa la logica di autorizzazione e autenticazione e un'autorizzazione personalizzata utilizzando la chiamata create-authorizer con la firma dei token abilitata. L'autorizzatore viene quindi convalidato utilizzando e infine è possibile inviare dati utilizzando l'test-invoke-authorizerAPI HTTP Publish a AWS IoT Core un argomento MQTT di test. La richiesta di esempio specificherà l'autorizzatore da richiamare utilizzando l'x-amz-customauthorizer-nameintestazione e passerà le intestazioni e nella richiesta. token-key-name x-amz-customauthorizer-signature

Cosa imparerai in questo tutorial:
  • Come creare una funzione Lambda per essere un gestore di autorizzazioni ad hoc

  • Come creare un autorizzatore personalizzato utilizzando l'opzione con firma con token abilitata AWS CLI

  • Come testare la tua autorizzazione ad hoc utilizzando il comando test-invoke-authorizer

  • Come pubblicare un argomento MQTT utilizzando lo strumento Postman e convalidare la richiesta con la tua autorizzazione ad hoc

Questo tutorial dura circa 60 minuti.

Prima di iniziare questo tutorial, assicurati di disporre di:
  • Configurare Account AWS

    Avrai bisogno della tua Account AWS AWS IoT console per completare questo tutorial.

    L'account che utilizzi per questo tutorial funziona meglio quando include almeno queste policy gestite da AWS :

    Importante

    Le policy IAM utilizzate in questo tutorial sono più permissive di quelle che si dovrebbero seguire in un'implementazione di produzione. In un ambiente di produzione, assicurati che le policy dell'account e delle risorse concedano solo le autorizzazioni necessarie.

    Quando si creano policy IAM per la produzione, determinare l'accesso necessario agli utenti e ai ruoli e quindi progettare le policy che consentono loro di eseguire solo tali attività.

    Per ulteriori informazioni, consulta la sezione Best practice per la sicurezza in IAM

  • Hai installato il AWS CLI

    Per informazioni su come installare AWS CLI, consulta Installazione della AWS CLI. Questo tutorial richiede una AWS CLI versione aws-cli/2.1.3 Python/3.7.4 Darwin/18.7.0 exe/x86_64 o successiva.

  • Strumenti OpenSSL

    Gli esempi di questo tutorial utilizzano LibreSSL 2.6.5. È possibile utilizzare anche gli strumenti OpenSSL v1.1.1i per questo tutorial.

  • Aver rivisto la panoramica di AWS Lambda

    Se non l'hai mai usato AWS Lambda prima, AWS Lambdaconsulta la sezione Guida introduttiva a Lambda per conoscerne i termini e i concetti.

  • Esaminato come creare richieste con lo strumento Postman

    Per ulteriori informazioni, consulta la sezione Building requests (Richieste di compilazione).

  • Autorizzazioni ad hoc rimosse dal tutorial precedente

    Account AWS È possibile configurare solo un numero limitato di autorizzatori personalizzati alla volta. Per informazioni su come rimuovere un'autorizzazione ad hoc, consulta Fase 8: Pulizia.

Fase 1: Creazione di una funzione Lambda per la propria autorizzazione ad hoc

L'autenticazione personalizzata AWS IoT Core utilizza risorse di autorizzazione create dall'utente per autenticare e autorizzare i client. La funzione che creerai in questa sezione autentica e autorizza i client durante la connessione e l'accesso alle risorse. AWS IoT Core AWS IoT

La funzione Lambda; svolge le operazioni seguenti:

  • Se proviene una richiesta da test-invoke-authorizer, restituisce una policy IAM con un'azione Deny.

  • Se una richiesta proviene da Postman tramite HTTP e il actionToken parametro ha un valore diallow, restituisce una policy IAM con un'azione. Allow In alternativa, restituisce una policy IAM con un'azione Deny.

Creazione di una funzione Lambda per la propria autorizzazione ad hoc
  1. Nella console Lambda, apri Functions (Funzioni).

  2. Scegli Crea funzione.

  3. Conferma che l'opzione Author from scratch (Crea da zero) sia selezionata.

  4. In Basic information (Informazioni di base):

    1. In Function name (Nome funzione) immettere custom-auth-function.

    2. In Runtime, conferma Node.js 18.x

  5. Scegli Crea funzione.

    Lambda crea una funzione in Node.js e un ruolo di esecuzione che concede alla funzione l'autorizzazione di caricare i log. La funzione Lambda assume il ruolo di esecuzione quando si richiama la funzione e utilizza il ruolo di esecuzione per creare credenziali per l' AWS SDK e leggere i dati dalle fonti degli eventi.

  6. Per visualizzare il codice e la configurazione della funzione nell'AWS Cloud9editor, scegliete custom-auth-functionnella finestra di progettazione, quindi scegliete index.js nel pannello di navigazione dell'editor.

    Per i linguaggi di script come Node.js, Lambda include una funzione di base che restituisce una risposta positiva. Puoi utilizzare l'editor di AWS Cloud9 per modificare le funzioni purché il codice sorgente superi i 3 MB.

  7. Sostituisci il codice index.js nell'editor con il seguente codice:

    // A simple Lambda function for an authorizer. It demonstrates // How to parse a CLI and Http password to generate a response. export const handler = async (event, context, callback) => { //Http parameter to initiate allow/deny request const HTTP_PARAM_NAME='actionToken'; const ALLOW_ACTION = 'Allow'; const DENY_ACTION = 'Deny'; //Event data passed to Lambda function var event_str = JSON.stringify(event); console.log('Complete event :'+ event_str); //Read protocolData from the event json passed to Lambda function var protocolData = event.protocolData; console.log('protocolData value---> ' + protocolData); //Get the dynamic account ID from function's ARN to be used // as full resource for IAM policy var ACCOUNT_ID = context.invokedFunctionArn.split(":")[4]; console.log("ACCOUNT_ID---"+ACCOUNT_ID); //Get the dynamic region from function's ARN to be used // as full resource for IAM policy var REGION = context.invokedFunctionArn.split(":")[3]; console.log("REGION---"+REGION); //protocolData data will be undefined if testing is done via CLI. // This will help to test the set up. if (protocolData === undefined) { //If CLI testing, pass deny action as this is for testing purpose only. console.log('Using the test-invoke-authorizer cli for testing only'); callback(null, generateAuthResponse(DENY_ACTION,ACCOUNT_ID,REGION)); } else{ //Http Testing from Postman //Get the query string from the request var queryString = event.protocolData.http.queryString; console.log('queryString values -- ' + queryString); /* global URLSearchParams */ const params = new URLSearchParams(queryString); var action = params.get(HTTP_PARAM_NAME); if(action!=null && action.toLowerCase() === 'allow'){ callback(null, generateAuthResponse(ALLOW_ACTION,ACCOUNT_ID,REGION)); }else{ callback(null, generateAuthResponse(DENY_ACTION,ACCOUNT_ID,REGION)); } } }; // Helper function to generate the authorization IAM response. var generateAuthResponse = function(effect,ACCOUNT_ID,REGION) { var full_resource = "arn:aws:iot:"+ REGION + ":" + ACCOUNT_ID + ":*"; console.log("full_resource---"+full_resource); var authResponse = {}; authResponse.isAuthenticated = true; authResponse.principalId = 'principalId'; var policyDocument = {}; policyDocument.Version = '2012-10-17'; policyDocument.Statement = []; var statement = {}; statement.Action = 'iot:*'; statement.Effect = effect; statement.Resource = full_resource; policyDocument.Statement[0] = statement; authResponse.policyDocuments = [policyDocument]; authResponse.disconnectAfterInSeconds = 3600; authResponse.refreshAfterInSeconds = 600; console.log('custom auth policy function called from http'); console.log('authResponse --> ' + JSON.stringify(authResponse)); console.log(authResponse.policyDocuments[0]); return authResponse; }
  8. Seleziona Deploy (Implementa).

  9. Dopo aver visualizzato Changes deployed (Modifiche implementate) in alto nell'editor:

    1. Scorri fino alla sezione Function overview (Panoramica delle funzioni) in alto nell'editor.

    2. Copia la Function ARN (Funzione ARN) e salvala per utilizzarla più avanti in questo tutorial.

  10. Prova la tua funzione .

    1. Seleziona la scheda Test.

    2. Utilizzando le impostazioni di test di default, fai clic su Invoke (Richiama).

    3. Se il test ha avuto esito positivo, in Execution results (Risultati dell'esecuzione), apri la visualizzazione Details (Dettagli). Dovresti vedere il documento di policy restituito dalla funzione.

      Se il test non è riuscito o non viene visualizzato un documento di policy, esaminare il codice per trovare e correggere gli errori.

Fase 2: Creazione di una coppia di chiavi pubblica e privata per le tue autorizzazioni ad hoc

La tua autorizzazioni ad hoc richiede una chiave pubblica e privata per autenticarla. I comandi di questa sezione utilizzano gli strumenti OpenSSL per creare questa coppia di chiavi.

Creazione di una coppia di chiavi pubblica e privata per le tue autorizzazioni ad hoc
  1. Creazione del file della chiave privata.

    openssl genrsa -out private-key.pem 4096
  2. Verificare il file della chiave privata appena creato.

    openssl rsa -check -in private-key.pem -noout

    Se il comando non mostra errori, il file della chiave privata è valido.

  3. Creazione del file della chiave pubblica.

    openssl rsa -in private-key.pem -pubout -out public-key.pem
  4. Verificare il file della chiave pubblica.

    openssl pkey -inform PEM -pubin -in public-key.pem -noout

    Se il comando non mostra errori, il file della chiave pubblica è valido.

Passaggio 3: Crea una risorsa di autorizzazione personalizzata e la relativa autorizzazione

L'autorizzatore AWS IoT personalizzato è la risorsa che unisce tutti gli elementi creati nei passaggi precedenti. In questa sezione, creerai una risorsa di autorizzazione ad hoc e la autorizzerai ad eseguire la funzione Lambda creata in precedenza. È possibile creare una risorsa di autorizzazione personalizzata utilizzando la AWS IoT console AWS CLI, l'o l' AWS API.

Per questo tutorial, è sufficiente creare una sola autorizzazione ad hoc. Questa sezione descrive come creare utilizzando la AWS IoT console e il AWS CLI, in modo da poter utilizzare il metodo più conveniente per te. Non c'è differenza tra le risorse delle autorizzazioni ad hoc create da entrambi i metodi.

Crea una risorsa di autorizzazione personalizzata

Scegli una di queste opzioni per creare la risorsa dell'autorizzazione ad hoc
Per creare un'autorizzazione ad hoc (console)
  1. Apri la pagina dell'autorizzazione personalizzata della AWS IoT console e scegli Crea autorizzazione.

  2. In Crea autorizzazioni:

    1. In Nome dell'autorizzatore, immetti my-new-authorizer.

    2. In Stato autorizzazione, seleziona Attiva.

    3. In Authorizer function (Funzione autorizzazione), seleziona la funzione Lambda creata in precedenza.

    4. In Token validation - optional (Convalida token - facoltativa ):

      1. Attiva Convalida token.

      2. In Nome della chiave dei token, immetti tokenKeyName.

      3. Scegliere Add key (Aggiungi chiave).

      4. In Nome chiave, immetti FirstKey.

      5. In Chiave pubblica, immetti il contenuto del file public-key.pem. Assicurati di includere le righe del file con -----BEGIN PUBLIC KEY----- e -----END PUBLIC KEY----- e non aggiungere o rimuovere alcun feed di riga, ritorni a capo o altri caratteri dal contenuto del file. La stringa inserita dovrebbe essere simile a quanto segue.

        -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvEBzOk4vhN+3LgslvEWt sLCqNmt5Damas3bmiTRvq2gjRJ6KXGTGQChqArAJwL1a9dkS9+maaXC3vc6xzx9z QPu/vQOe5tyzz1MsKdmtFGxMqQ3qjEXAMPLEOmqyUKPP5mff58k6ePSfXAnzBH0q lg2HioefrpU5OSAnpuRAjYKofKjbc2Vrn6N2G7hV+IfTBvCElf0csalS/Rk4phD5 oa4Y0GHISRnevypg5C8n9Rrz91PWGqP6M/q5DNJJXjMyleG92hQgu1N696bn5Dw8 FhedszFa6b2x6xrItZFzewNQkPMLMFhNrQIIyvshtT/F1LVCS5+v8AQ8UGGDfZmv QeqAMAF7WgagDMXcfgKSVU8yid2sIm56qsCLMvD2Sq8Lgzpey9N5ON1o1Cvldwvc KrJJtgwW6hVqRGuShnownLpgG86M6neZ5sRMbVNZO8OzcobLngJ0Ibw9KkcUdklW gvZ6HEJqBY2XE70iEXAMPLETPHzhqvK6Ei1HGxpHsXx6BNft582J1VpgYjXha8oa /NN7l7Zbj/euAb41IVtmX8JrD9z613d1iM5L8HluJlUzn62Q+VeNV2tdA7MfPfMC 8btGYladFAnitThaz6+F0VSBJPu7pZQoLnqyEp5zLMtF+kFl2yOBmGAP0RBivRd9 JWBUCG0bqcLQPeQyjbXSOfUCAwEAAQ== -----END PUBLIC KEY-----
  3. Scegli Create Authorizer (Crea autorizzazioni).

  4. Se la risorsa di autorizzazione ad hoc è stata creata, vedrai l'elenco delle autorizzazioni ad hoc e la tua nuova autorizzazione ad hoc dovrebbe apparire nell'elenco e puoi continuare alla sezione successiva per testarla.

    Se viene visualizzato un errore, rivedere l'errore e provare a creare nuovamente l'autorizzazione ad hoc e ricontrollare le voci. Attenzione: ciascuna risorsa dell'autorizzazione ad hoc deve avere un nome univoco.

Per creare un'autorizzazione ad hoc (AWS CLI)
  1. Sostituisci i tuoi valori con authorizer-function-arn e token-signing-public-keys e quindi esegui il seguente comando:

    aws iot create-authorizer \ --authorizer-name "my-new-authorizer" \ --token-key-name "tokenKeyName" \ --status ACTIVE \ --no-signing-disabled \ --authorizer-function-arn "arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function" \ --token-signing-public-keys FirstKey="-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvEBzOk4vhN+3LgslvEWt sLCqNmt5Damas3bmiTRvq2gjRJ6KXGTGQChqArAJwL1a9dkS9+maaXC3vc6xzx9z QPu/vQOe5tyzz1MsKdmtFGxMqQ3qjEXAMPLEOmqyUKPP5mff58k6ePSfXAnzBH0q lg2HioefrpU5OSAnpuRAjYKofKjbc2Vrn6N2G7hV+IfTBvCElf0csalS/Rk4phD5 oa4Y0GHISRnevypg5C8n9Rrz91PWGqP6M/q5DNJJXjMyleG92hQgu1N696bn5Dw8 FhedszFa6b2x6xrItZFzewNQkPMLMFhNrQIIyvshtT/F1LVCS5+v8AQ8UGGDfZmv QeqAMAF7WgagDMXcfgKSVU8yid2sIm56qsCLMvD2Sq8Lgzpey9N5ON1o1Cvldwvc KrJJtgwW6hVqRGuShnownLpgG86M6neZ5sRMbVNZO8OzcobLngJ0Ibw9KkcUdklW gvZ6HEJqBY2XE70iEXAMPLETPHzhqvK6Ei1HGxpHsXx6BNft582J1VpgYjXha8oa /NN7l7Zbj/euAb41IVtmX8JrD9z613d1iM5L8HluJlUzn62Q+VeNV2tdA7MfPfMC 8btGYladFAnitThaz6+F0VSBJPu7pZQoLnqyEp5zLMtF+kFl2yOBmGAP0RBivRd9 JWBUCG0bqcLQPeQyjbXSOfUCAwEAAQ== -----END PUBLIC KEY-----"
    Dove:
    • Il valore authorizer-function-arn è l'Amazon Resource Name (ARN) della funzione Lambda creata per l'autorizzazione ad hoc.

    • Il valore token-signing-public-keys include il nome della chiave, FirstKey e i contenuti del file public-key.pem. Assicurati di includere le righe del file con -----BEGIN PUBLIC KEY----- e -----END PUBLIC KEY----- e non aggiungere o rimuovere alcun feed di riga, ritorni a capo o altri caratteri dal contenuto del file.

      Nota: fai attenzione a inserire la chiave pubblica poiché qualsiasi modifica al valore della chiave pubblica la rende inutilizzabile.

  2. Creando l'autorizzazione ad hoc, il comando restituisce il nome e l'ARN della nuova risorsa, come qui di seguito.

    { "authorizerName": "my-new-authorizer", "authorizerArn": "arn:aws:iot:Region:57EXAMPLE833:authorizer/my-new-authorizer" }

    Salva il valore authorizerArn da utilizzare nella fase successiva.

    Ricorda che ciascuna risorsa dell'autorizzazione ad hoc deve avere un nome univoco.

Autorizza le risorse delle autorizzazioni ad hoc

In questa sezione, verrà descritto come concedere alla risorsa dell'autorizzazione ad hoc appena creata l'autorizzazione per eseguire la funzione Lambda. Per concedere l'autorizzazione, è possibile utilizzare il comando dell'interfaccia a riga di comando add-permission.

Concedi l'autorizzazione alla tua funzione Lambda utilizzando il AWS CLI
  1. Una volta inseriti i valori, inserisci il comando seguente. Attenzione: il valore statement-id deve essere univoco. Sostituisci Id-1234 con un altro valore se hai eseguito questo tutorial prima o in occasione di un errore ResourceConflictException.

    aws lambda add-permission \ --function-name "custom-auth-function" \ --principal "iot.amazonaws.com" \ --action "lambda:InvokeFunction" \ --statement-id "Id-1234" \ --source-arn authorizerArn
  2. Se il comando viene completato correttamente, restituisce un'istruzione di autorizzazione come questa. È possibile passare alla sezione successiva per testare l'autorizzazione ad hoc.

    { "Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\"}}}" }

    Se il comando non ha esito positivo, restituisce un errore come questo. Dovrai esaminare e correggere l'errore prima di continuare.

    An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer mission on resource: arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function

Fase 4: Verifica l'autorizzatore chiamando test-invoke-authorizer

Con tutte le risorse definite, in questa sezione, chiamerai test-invoke-authorizer dalla riga di comando per testare il passaggio di autorizzazione.

Si noti che quando si richiama l'autorizzazione dalla riga di comando, protocolData non è definito, quindi l'autore restituirà sempre un documento DENY. Tuttavia, questo test conferma che l'autorizzazione ad hoc e la funzione Lambda siano configurate correttamente, anche se non esegue il test completo della funzione Lambda.

Per testare l'autorizzatore personalizzato e la relativa funzione Lambda utilizzando il AWS CLI
  1. Nella directory che contiene il file private-key.pem creato in un passaggio precedente, eseguire il comando seguente.

    echo -n "tokenKeyValue" | openssl dgst -sha256 -sign private-key.pem | openssl base64 -A

    Questo comando crea una stringa di firma da utilizzare nel passaggio successivo. La stringa della firma ha un aspetto simile a questo:

    dBwykzlb+fo+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mn VB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeeh bQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjj szEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29V QJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuX f3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+K EWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFH xRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=

    Copia la stringa della firma da utilizzare nel passaggio successivo. Fai attenzione a non includere caratteri aggiuntivi o a non lasciarli fuori.

  2. In questo comando, sostituire il valore token-signature con la stringa di firma del passaggio precedente ed esegui questo comando per testare l'autorizzazione.

    aws iot test-invoke-authorizer \ --authorizer-name my-new-authorizer \ --token tokenKeyValue \ --token-signature dBwykzlb+fo+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mnVB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeehbQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjjszEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29VQJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuXf3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+KEWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFHxRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=

    Se il comando ha esito positivo, restituisce le informazioni generate dalla funzione di autorizzazione personalizzata, come questo esempio.

    { "isAuthenticated": true, "principalId": "principalId", "policyDocuments": [ "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"iot:*\",\"Effect\":\"Deny\",\"Resource\":\"arn:aws:iot:Region:57EXAMPLE833:*\"}]}" ], "refreshAfterInSeconds": 600, "disconnectAfterInSeconds": 3600 }

    Se il comando restituisce un errore, esamina l'errore e ricontrolla i comandi utilizzati in questa sezione.

Fase 5: Test della pubblicazione del messaggio MQTT tramite Postman

  1. Per ottenere l'endpoint dati del dispositivo dalla riga di comando, chiama describe-endpoint come mostrato qui

    aws iot describe-endpoint --output text --endpoint-type iot:Data-ATS

    Salva questo indirizzo per utilizzarlo come device_data_endpoint_address in un passaggio successivo.

  2. Apri una nuova finestra Postman e crea una nuova richiesta HTTP POST.

    1. Dal computer, apri l'app Postman.

    2. In Postman, dal menu File, seleziona New... (Nuovo...).

    3. Nella finestra di dialogo New (Nuovo) seleziona Request (Richiesta).

    4. In Salva richiesta,

      1. In Request name (Nome della richiesta) inserisci Custom authorizer test request.

      2. In Select a collection or folder to save to: (Seleziona una raccolta o una cartella in cui salvare:) scegli o crea una raccolta in cui salvare questa richiesta.

      3. Scegli Salva in collection_name.

  3. Crea la richiesta POST per testare la tua autorizzazione ad hoc.

    1. Nel selettore del metodo di richiesta accanto al campo URL, seleziona POST.

    2. Nel campo URL, crea l'URL per la tua richiesta utilizzando il seguente URL con il comando device_data_endpoint_address from the describe-endpoint del passaggio precedente.

      https://device_data_endpoint_address:443/topics/test/cust-auth/topic?qos=0&actionToken=allow

      Attenzione: questo URL include il parametro query actionToken=allow che dirà alla funzione Lambda di restituire un documento policy che consenta l'accesso a AWS IoT. Dopo aver inserito l'URL, i parametri della query vengono visualizzati anche nella scheda Params (Parametri) di Postman.

    3. Nella scheda Auth (Autenticazione), nel campo Type (Tipo), seleziona No Auth (Nessuna autenticazione).

    4. Nella scheda Intestazioni:

      1. Se c'è un tasto host selezionato, deselezionalo.

      2. Nella parte inferiore dell'elenco delle intestazioni aggiungete queste nuove intestazioni e confermate che siano state selezionate. Sostituisci il Host valore con il tuo device_data_endpoint_address e il x-amz-customauthorizer-signature valore con la stringa della firma che hai usato con il test-invoke-authorize comando nella sezione precedente.

        Chiave Valore
        x-amz-customauthorizer-name my-new-authorizer
        Host device_data_endpoint_address
        tokenKeyName tokenKeyValue
        x-amz-customauthorizer-signature dBwykzlb+fo+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mnVB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeehbQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjjszEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29VQJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuXf3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+KEWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFHxRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=
    5. Nella scheda Body (Corpo):

      1. Nella casella di opzione formato dati, scegli Raw (Non elaborati).

      2. Nell'elenco dei tipi di dati, scegli JavaScript.

      3. Nel campo di testo, inserisci questo payload del messaggio JSON per il messaggio di prova:

        { "data_mode": "test", "vibration": 200, "temperature": 40 }
  4. Scegli Send (Invia) per inviare la richiesta.

    Se la richiesta è stata completata correttamente, verrà visualizzato:

    { "message": "OK", "traceId": "ff35c33f-409a-ea90-b06f-fbEXAMPLE25c" }

    La risposta corretta indica che l'autorizzazione personalizzata ha consentito la connessione a AWS IoT e che il messaggio di prova è stato recapitato al broker in AWS IoT Core.

    Se restituisce un errore, esamina il messaggio di errore, ladevice_data_endpoint_address, la stringa della firma e gli altri valori di intestazione.

Conserva questa richiesta in Postman per utilizzarla nella sezione successiva.

Fase 6: Visualizzazione dei messaggi nel client di test MQTT

Nel passaggio precedente, hai inviato messaggi simulati al dispositivo AWS IoT utilizzando Postman. La risposta riuscita ha indicato che l'autorizzazione ad hoc ha consentito la connessione a AWS IoT e che il messaggio di prova è stato consegnato al broker AWS IoT Core. In questa sezione, utilizzerai il client di test MQTT nella AWS IoT console per visualizzare il contenuto dei messaggi di quel messaggio come potrebbero fare altri dispositivi e servizi.

Per visualizzare i messaggi di prova autorizzati dalla tua autorizzazione ad hoc
  1. Nella AWS IoT console, aprite il client di test MQTT.

  2. Nella scheda Subscribe to a topic (Sottoscrivi un argomento), in Topic filter (Filtro argomenti), inserisci test/cust-auth/topic, ovvero l'argomento del messaggio utilizzato nell'esempio Postman della sezione precedente.

  3. Scegliere Subscribe (Effettua sottoscrizione).

    Tieni questa finestra visibile per la fase successiva.

  4. In Postman, nella richiesta creata per la sezione precedente, seleziona Send (Invia).

    Controlla la risposta per assicurarti che sia stata elaborata correttamente. In caso contrario, risolvi l'errore come descritto nella sezione precedente.

  5. Nel Client MQTT di test, dovresti vedere una nuova voce che mostra l'argomento del messaggio e, se espanso, il payload del messaggio dalla richiesta inviata da Postman.

    Se non si visualizzano i messaggi nel client MQTT di test, ecco alcune cose da controllare:

    • Assicurati che la tua richiesta Postman sia stata restituita correttamente. Se AWS IoT rifiuta la connessione e restituisce un errore, il messaggio contenuto nella richiesta non viene passato al broker di messaggi.

    • Assicurati che la Account AWS e Regione AWS usata per aprire la AWS IoT console sia la stessa che usi nell'URL di Postman.

    • Assicurati di utilizzare l'endpoint appropriato per l'autorizzatore personalizzato. L'endpoint IoT predefinito potrebbe non supportare l'utilizzo di autorizzazioni personalizzate con funzioni Lambda. Puoi invece utilizzare le configurazioni di dominio per definire un nuovo endpoint e quindi specificare quell'endpoint per l'autorizzatore personalizzato.

    • Assicurati di aver inserito correttamente l'argomento nel client MQTT di test. Il filtro non fa distinzione tra maiuscole e minuscole. In caso di dubbio, puoi anche iscriverti all'#argomento, che sottoscrive tutti i messaggi MQTT che passano attraverso il broker di messaggi Account AWS e Regione AWS utilizzati per aprire la console. AWS IoT

Fase 7: Esamina i risultati e i passaggi successivi

In questo tutorial:
  • Hai creato una funzione Lambda come gestore di autorizzazioni ad hoc

  • Hai creato un'autorizzazione ad hoc con la firma dei token abilitata

  • Hai testato la tua autorizzazione ad hoc utilizzando il comando test-invoke-authorizer

  • Hai pubblicato un argomento MQTT utilizzando Postman e convalidato la richiesta con la tua autorizzazione ad hoc

  • Hai usato il client MQTT di test per visualizzare i messaggi inviati dal test Postman

Passaggi successivi

Dopo aver inviato alcuni messaggi da Postman per verificare che l'autorizzazione ad hoc funzioni, prova a sperimentare vedendo come i diversi aspetti di questo tutorial influiscono sui risultati. Ecco alcuni esempi per cominciare.

  • Modificare la stringa di firma in modo che non sia più valida, in modo tale da poter vedere come vengono gestiti i tentativi di connessione non autorizzati. Dovresti ricevere una risposta di errore, come questa, e il messaggio non dovrebbe apparire nel client MQTT di test.

    { "message": "Forbidden", "traceId": "15969756-a4a4-917c-b47a-5433e25b1356" }
  • Per ulteriori informazioni su come individuare gli errori che potrebbero verificarsi durante lo sviluppo e l'utilizzo AWS IoT delle regole, consulta. Monitoraggio AWS IoT

Fase 8: Pulizia

Se desideri ripetere questo tutorial, potresti dover rimuovere alcune delle tue autorizzazioni ad hoc. Account AWS Puoi avere solo un numero limitato di autorizzatori personalizzati configurati contemporaneamente e puoi ottenerne uno LimitExceededException quando provi ad aggiungerne uno nuovo senza rimuovere un autorizzatore personalizzato esistente.

Per rimuovere un'autorizzazione ad hoc (console)
  1. Apri la pagina Autorizzatore personalizzato della AWS IoT console e, nell'elenco degli autorizzatori personalizzati, trova l'autorizzatore personalizzato da rimuovere.

  2. Apri la pagina dei dettagli delle autorizzazioni ad hoc e, dal menu Actions (Azioni), seleziona Edit (Modifica).

  3. Deseleziona l'opzione Activate authorizer (Attiva autorizzazione) e quindi seleziona Update (Aggiorna).

    Non puoi eliminare un'autorizzazione ad hoc mentre è attiva.

  4. Apri la pagina dei dettagli delle autorizzazioni ad hoc, apri il menu Actions (Azioni), seleziona Delete (Elimina).

Per rimuovere un'autorizzazione ad hoc (AWS CLI)
  1. Elenca le autorizzazioni ad hoc installate e trova il nome dell'autorizzazione ad hoc da eliminare.

    aws iot list-authorizers
  2. Imposta l'autorizzazione ad hoc in stato inactive eseguendo questo comando dopo la sostituzione di Custom_Auth_Name con il authorizerName dell'autorizzazione ad hoc da eliminare.

    aws iot update-authorizer --status INACTIVE --authorizer-name Custom_Auth_Name
  3. Elimina l'autorizzazione ad hoc eseguendo questo comando dopo la sostituzione di Custom_Auth_Name con il authorizerName dell'autorizzazione ad hoc da eliminare.

    aws iot delete-authorizer --authorizer-name Custom_Auth_Name