Tutorial: Erstellen eines benutzerdefinierten Autorisierers für AWS IoT Core - AWS IoT Core

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Erstellen eines benutzerdefinierten Autorisierers für AWS IoT Core

Dieses Tutorial zeigt die Schritte zum Erstellen, Validieren und Verwenden einer benutzerdefinierten Authentifizierung mithilfe von AWS CLI. Optional können Sie mithilfe dieses Tutorials Postman verwenden, um mithilfe der HTTP Publish API Daten an AWS IoT Core zu senden.

In diesem Tutorial erfahren Sie, wie Sie eine exemplarische Lambda-Funktion erstellen, die die Autorisierungs- und Authentifizierungslogik implementiert, und einen benutzerdefinierten Autorisierer mithilfe des create-authorizer-Aufrufs mit aktivierter Tokensignatur. Der Autorisierer wird dann mit dem validierttest-invoke-authorizer, und schließlich können Sie Daten an ein MQTT-Testthema senden, AWS IoT Core indem Sie die HTTP Publish API verwenden. Die Beispielanforderung spezifiziert den Authorizer, der aufgerufen werden soll, mithilfe des x-amz-customauthorizer-name Headers und übergibt die Anforderungsheader. token-key-name x-amz-customauthorizer-signature

Was Sie in diesem Tutorial lernen werden:
  • So erstellen Sie eine Lambda-Funktion als benutzerdefinierten Autorisierer-Handler

  • Wie erstelle ich einen benutzerdefinierten Autorisierer mit aktivierter Tokensignatur AWS CLI

  • So testen Sie Ihren benutzerdefinierten Autorisierer mit dem Befehl test-invoke-authorizer

  • So veröffentlichen Sie ein MQTT-Thema mit Postman und validieren die Anfrage mit Ihrem benutzerdefinierten Autorisierer

Für dieses Tutorial brauchen Sie ungefähr 60 Minuten.

Stellen Sie vor Beginn dieses Tutorials sicher, dass Sie über Folgendes verfügen:
  • Einrichten AWS-Konto

    Sie benötigen Ihre AWS-Konto AWS IoT AND-Konsole, um dieses Tutorial abzuschließen.

    Das Konto, das Sie für dieses Tutorial verwenden, funktioniert am besten, wenn es mindestens die folgenden AWS -verwalteten Richtlinien umfasst:

    Wichtig

    Die in diesem Tutorial verwendeten IAM-Richtlinien sind permissiver, als Sie sie bei einer Produktionsimplementierung befolgen sollten. Stellen Sie in einer Produktionsumgebung sicher, dass Ihre Konto- und Ressourcenrichtlinien nur die erforderlichen Berechtigungen gewähren.

    Wenn Sie IAM-Richtlinien für die Produktion erstellen, bestimmen Sie, welchen Zugriff Benutzer und Rollen benötigen. Generieren Sie dann die Richtlinien, die es ihnen ermöglichen, nur diese Aufgaben auszuführen.

    Weitere Informationen finden Sie unter Bewährte IAM-Methoden.

  • Installierte das AWS CLI

    Informationen zur Installation von finden Sie AWS CLI unter AWS CLI installieren. Für dieses Tutorial ist AWS CLI Version aws-cli/2.1.3 Python/3.7.4 Darwin/18.7.0 exe/x86_64 oder höher erforderlich.

  • OpenSSL-Tools

    Die Beispiele in diesem Tutorial verwenden LibreSSL 2.6.5. Sie können für dieses Tutorial auch die OpenSSL v1.1.1i-Tools verwenden.

  • Die AWS Lambda-Übersicht wurde überprüft.

    Wenn Sie Lambda noch nicht verwendet AWS Lambda haben, lesen Sie AWS Lambdaund Erste Schritte mit Lambda, um sich mit den Begriffen und Konzepten vertraut zu machen.

  • Es wurde überprüft, wie Anfragen in Postman erstellt werden.

    Weitere Informationen finden Sie unter Erstellen von Anfragen.

  • Benutzerdefinierte Autorisierer wurden aus dem vorherigen Tutorial entfernt.

    Sie AWS-Konto können nur eine begrenzte Anzahl von benutzerdefinierten Autorisierern gleichzeitig konfigurieren. Weitere Informationen zum Erstellen eines benutzerdefinierten Autorisierers finden Sie unter Schritt 8: Bereinigen.

Schritt 1: Erstellen einer Lambda-Funktion für Ihren benutzerdefinierten Autorisierer

Die benutzerdefinierte Authentifizierung in AWS IoT Core verwendet Autorisierungsressourcen, die Sie zur Authentifizierung und Autorisierung von Clients erstellen. Die Funktion, die Sie in diesem Abschnitt erstellen, authentifiziert und autorisiert Clients, wenn sie sich mit Ressourcen verbinden und auf sie zugreifen. AWS IoT Core AWS IoT

Die Lambda-Funktion bewirkt Folgendes:

  • Wenn eine Anfrage von test-invoke-authorizer kommt, gibt sie eine IAM-Richtlinie mit einer Deny-Aktion zurück.

  • Wenn eine Anfrage von Postman über HTTP kommt und der actionToken Parameter den Wert von hatallow, wird eine IAM-Richtlinie mit einer Aktion zurückgegeben. Allow Andernfalls wird eine IAM-Richtlinie mit einer Aktion Deny zurückgegeben.

So erstellen Sie die Lambda-Funktion für Ihren benutzerdefinierten Autorisierer
  1. Öffnen Sie auf der Lambda-Konsole die Option Funktionen.

  2. Wählen Sie Funktion erstellen.

  3. Bestätigen Sie, dass Ohne Vorgabe erstellen ausgewählt ist.

  4. Unter Grundlegende Informationen:

    1. Geben Sie unter Funktionsname custom-auth-function ein.

    2. Bestätigen Sie unter Laufzeit Node.js 18.x

  5. Wählen Sie Funktion erstellen.

    Lambda erstellt eine Node.js-Funktion und eine Ausführungsrolle, die der Funktion die Berechtigung zum Hochladen von Protokollen gewährt. Die Lambda-Funktion übernimmt die Ausführungsrolle, wenn Sie Ihre Funktion aufrufen, und verwendet die Ausführungsrolle, um Anmeldeinformationen für das AWS SDK zu erstellen und Daten aus Ereignisquellen zu lesen.

  6. Um den Code und die Konfiguration der Funktion im AWS Cloud9Editor zu sehen, wählen Sie custom-auth-functionim Designerfenster und dann im Navigationsbereich des Editors index.js aus.

    Für Skriptsprachen wie Node.js enthält Lambda eine grundlegende Funktion, die eine Erfolgsantwort zurückgibt. Sie können den AWS Cloud9-Editor verwenden, um Ihre Funktion zu bearbeiten, solange Ihr Quellcode nicht größer als 3 MB ist.

  7. Ersetzen Sie den Code index.js im Editor durch den folgenden Code:

    // 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. Wählen Sie Bereitstellen.

  9. Nachdem Änderungen bereitgestellt über dem Editor angezeigt wird:

    1. Scrollen Sie zum Abschnitt Funktionsübersicht über dem Editor.

    2. Kopieren Sie die Funktion ARN und speichern Sie sie, um sie später in diesem Tutorial zu verwenden.

  10. Testen Sie Ihre Funktion.

    1. Wählen Sie die Registerkarte Test.

    2. Wählen Sie unter Verwendung der Standard-Testeinstellungen Aufrufen.

    3. Wenn der Test erfolgreich war, öffnen Sie in den Ausführungsergebnissen die Ansicht Details. Sie sollten das Richtliniendokument sehen, das die Funktion zurückgegeben hat.

      Wenn der Test fehlgeschlagen ist oder Sie kein Richtliniendokument finden, überprüfen Sie den Code, um die Fehler zu finden und zu korrigieren.

Schritt 2: Erstellen eines öffentlichen und eines privaten Schlüsselpaars für Ihren benutzerdefinierten Autorisierer

Ihr benutzerdefinierter Autorisierer benötigt für seine Authentifizierung einen öffentlichen und einen privaten Schlüssel. Die Befehle in diesem Abschnitt verwenden OpenSSL-Tools zum Erstellen dieses Schlüsselpaars.

So erstellen Sie das Paar aus öffentlichem und privatem Schlüssel für Ihren benutzerdefinierten Autorisierer
  1. Erstellen Sie die Datei mit dem privaten Schlüssel.

    openssl genrsa -out private-key.pem 4096
  2. Überprüfen Sie den Speicherort der Datei mit dem privaten Schlüssel, die Sie gerade erstellt haben.

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

    Wenn der Befehl keine Fehler anzeigt, ist die Datei mit dem privaten Schlüssel gültig.

  3. Erstellen Sie die Datei mit dem öffentlichen Schlüssel.

    openssl rsa -in private-key.pem -pubout -out public-key.pem
  4. Überprüfen Sie die Datei mit dem öffentlichen Schlüssel.

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

    Wenn der Befehl keine Fehler anzeigt, ist die Datei mit dem öffentlichen Schlüssel gültig.

Schritt 3: Erstellen Sie eine benutzerdefinierte Autorisierungsressource und deren Autorisierung

Der AWS IoT benutzerdefinierte Autorisierer ist die Ressource, die alle in den vorherigen Schritten erstellten Elemente zusammenfasst. In diesem Abschnitt erstellen Sie eine benutzerdefinierte Autorisierer-Ressource und erteilen ihr die Erlaubnis, die zuvor erstellte Lambda-Funktion auszuführen. Sie können eine benutzerdefinierte Autorisierungsressource mithilfe der AWS IoT Konsole, der oder der AWS CLI AWS API erstellen.

Für dieses Tutorial müssen Sie nur einen benutzerdefinierten Autorisierer erstellen. In diesem Abschnitt wird beschrieben, wie Sie mithilfe der AWS IoT Konsole und der erstellen AWS CLI, sodass Sie die Methode verwenden können, die für Sie am bequemsten ist. Es gibt keinen Unterschied zwischen den mithilfe dieser beiden Methoden erstellen benutzerdefinierten Autorisierer-Ressourcen.

Erstellen Sie eine benutzerdefinierte Authorizer-Ressource

So erstellen Sie einen benutzerdefinierten Autorisierer (Konsole)
  1. Öffnen Sie die Seite Benutzerdefinierter Autorisierer der AWS IoT Konsole und wählen Sie Create Authorizer aus.

  2. In Autorisierer erstellen:

    1. Geben Sie in das Feld Autorisierer-Name my-new-authorizer ein.

    2. Markieren Sie unter Autorisierer-Status die Option Aktiv.

    3. Wählen Sie in der Autorisierer-Funktion die Lambda-Funktion aus, die Sie zuvor erstellt haben.

    4. Unter Token-Validierung – optional:

      1. Aktivieren Sie die Token-Validierung.

      2. Geben Sie tokenKeyName in das Feld Token-Schlüsselname ein.

      3. Wählen Sie Schlüssel hinzufügen.

      4. Geben Sie unter Schlüsselname FirstKey ein.

      5. Geben Sie in das Feld Öffentlicher Schlüssel den Inhalt der Datei public-key.pem ein. Achten Sie darauf, die Zeilen aus der Datei mit -----BEGIN PUBLIC KEY----- und -----END PUBLIC KEY----- einzuschließen und dem Inhalt der Datei keine Zeilenvorschübe, Zeilenumbrüche oder andere Zeichen hinzuzufügen oder aus ihm zu entfernen. Die Zeichenfolge, die Sie eingeben, sollte in etwa wie im folgenden Beispiel aussehen.

        -----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. Wählen Sie Autorisierer erstellen.

  4. Wenn die benutzerdefinierte Autorisierer-Ressource erstellt wurde, wird die Liste der benutzerdefinierten Autorisierer angezeigt und Ihr neuer benutzerdefinierter Autorisierer sollte in der Liste angezeigt werden. Sie können dann mit dem nächsten Abschnitt fortfahren, um ihn zu testen.

    Wenn Sie einen Fehler sehen, überprüfen Sie den Fehler und versuchen Sie erneut, Ihren benutzerdefinierten Autorisierer zu erstellen, und überprüfen Sie die Einträge erneut. Beachten Sie, dass jeder Benutzer einen eindeutigen Namen haben muss.

So erstellen Sie einen benutzerdefinierten Autorisierer (AWS CLI)
  1. Ersetzen Sie Ihre Werte durch authorizer-function-arn und token-signing-public-keys, und führen Sie dann den folgenden Befehl aus:

    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-----"
    Wobei gilt:
    • Der Wert authorizer-function-arn ist der Amazon-Ressourcenname (ARN) der Lambda-Funktion, die Sie für Ihren benutzerdefinierten Autorisierer erstellt haben.

    • Der Wert token-signing-public-keys umfasst den Namen des Schlüssels, FirstKey, und den Inhalt der Datei public-key.pem. Achten Sie darauf, die Zeilen aus der Datei mit -----BEGIN PUBLIC KEY----- und -----END PUBLIC KEY----- einzuschließen und dem Inhalt der Datei keine Zeilenvorschübe, Zeilenumbrüche oder andere Zeichen hinzuzufügen oder aus ihm zu entfernen.

      Hinweis: Seien Sie vorsichtig bei der Eingabe des öffentlichen Schlüssels, da jede Wertänderung des öffentlichen Schlüssels diesen unbrauchbar macht.

  2. Wenn der benutzerdefinierte Autorisierer erstellt wird, gibt der Befehl den Namen und den ARN der neuen Ressource zurück, z. B. folgendermaßen:

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

    Speichern Sie den Wert authorizerArn zur Verwendung im nächsten Schritt.

    Denken Sie daran, dass jeder Benutzer einen eindeutigen Namen haben muss.

Autorisieren der benutzerdefinierten Autorisierer-Ressource

In diesem Abschnitt erteilen Sie der benutzerdefinierten Autorisierer-Ressource, die Sie gerade erstellt haben, die Berechtigung zum Ausführen der Lambda-Funktion. Um die Berechtigung zu erteilen, können Sie den CLI-Befehl add-permission verwenden.

Erteilen Sie Ihrer Lambda-Funktion die Erlaubnis mit dem AWS CLI
  1. Geben Sie nach der Eingabe Ihrer Werte den folgenden Befehl ein. Beachten Sie, dass der Wert statement-id eindeutig sein muss. Ersetzen Sie Id-1234 durch einen anderen Wert, wenn Sie dieses Tutorial schon einmal ausgeführt haben oder wenn Sie einen Fehler ResourceConflictException angezeigt bekommen.

    aws lambda add-permission \ --function-name "custom-auth-function" \ --principal "iot.amazonaws.com" \ --action "lambda:InvokeFunction" \ --statement-id "Id-1234" \ --source-arn authorizerArn
  2. Wenn der Befehl erfolgreich ist, gibt er eine Berechtigungsanweisung zurück, wie in diesem Beispiel. Sie können mit dem nächsten Abschnitt fortfahren, um den benutzerdefinierten Autorisierer zu testen.

    { "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\"}}}" }

    Wenn der Befehl nicht erfolgreich ist, wird ein Fehler zurückgegeben, wie in diesem Beispiel. Sie müssen den Fehler überprüfen und korrigieren, bevor Sie fortfahren können.

    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

Schritt 4: Testen Sie den Authorizer, indem Sie ihn anrufen test-invoke-authorizer

Wenn alle Ressourcen definiert sind, rufen Sie in diesem Abschnitt test-invoke-authorizer von der Befehlszeile aus auf, um den Autorisierungsdurchgang zu testen.

Beachten Sie, dass protocolData nicht definiert ist, wenn der Autorisierer aus der Befehlszeile aufgerufen wird, sodass der Autorisierer immer ein DENY-Dokument zurückgibt. Dieser Test bestätigt jedoch, dass Ihr benutzerdefinierter Autorisierer und Ihre Lambda-Funktion korrekt konfiguriert sind – auch wenn die Lambda-Funktion nicht vollständig getestet wird.

Um Ihren benutzerdefinierten Authorizer und seine Lambda-Funktion zu testen, verwenden Sie den AWS CLI
  1. Führen Sie in dem Verzeichnis, welches die private-key.pem-Datei, die Sie in einem vorherigen Schritt erstellt haben, enthält, den folgenden Befehl aus.

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

    Mit diesem Befehl wird eine Signaturzeichenfolge zur Verwendung im nächsten Schritt generiert. Die Signaturzeichenfolge sollte wie folgt aussehen:

    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=

    Kopieren Sie diese Signaturzeichenfolge zur Verwendung im nächsten Schritt. Achten Sie darauf, keine zusätzlichen Zeichen einzufügen oder Zeichen wegzulassen.

  2. Ersetzen Sie in diesem Befehl den Wert token-signature durch die Signaturzeichenfolge aus dem vorherigen Schritt und führen Sie diesen Befehl aus, um Ihren Autorisierer zu testen.

    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=

    Wenn der Befehl erfolgreich ist, gibt er die Informationen zurück, die von Ihrer benutzerdefinierten Autorisierungsfunktion generiert wurden, wie in diesem Beispiel.

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

    Wenn bei diesem Befehl ein Fehler zurückgegeben wird, überprüfen Sie den Fehler und überprüfen Sie erneut die Befehle, die Sie in diesem Abschnitt verwendet haben.

Schritt 5: Testen der Veröffentlichung der MQTT-Nachricht mithilfe von Postman

  1. Um Ihren Gerätedaten-Endpunkt über die Befehlszeile abzurufen, rufen Sie describe-endpoint auf, wie hier dargestellt

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

    Speichern Sie diese Adresse, um sie in einem späteren Schritt als device_data_endpoint_address zu verwenden.

  2. Öffnen Sie ein neues Postman-Fenster, und erstellen Sie eine neue HTTP-POST-Anfrage.

    1. Öffnen Sie auf Ihrem Computer die Postman-App.

    2. Wählen Sie in Postman im Menü Datei die Option Neu….

    3. Wählen Sie im Dialogfeld Neu die Option Anfrage.

    4. Unter Anfrage speichern:

      1. Geben Sie unter Name der Anfrage Custom authorizer test request ein.

      2. Wählen Sie unter Sammlung oder Ordner zum Speichern auswählen: eine Sammlung aus bzw. erstellen Sie eine, in der diese Anfrage gespeichert werden soll.

      3. Wählen Sie Speichern unter collection_name.

  3. Erstellen Sie die POST-Anfrage, um Ihren benutzerdefinierten Autorisierer zu testen.

    1. Wählen Sie in der Auswahl der Anfragemethode neben dem URL-Feld die Option POST.

    2. Erstellen Sie im URL-Feld die URL für Ihre Anfrage, indem Sie die folgende URL mit der device_data_endpoint_address aus dem Befehl describe-endpoint in einem vorherigen Schritt verwenden.

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

      Beachten Sie, dass diese URL den Abfrageparameter actionToken=allow enthält, der Ihre Lambda-Funktion anweist, ein Richtliniendokument zurückzugeben, das den Zugriff auf das AWS IoT ermöglicht. Nachdem Sie die URL eingegeben haben, werden die Abfrageparameter auch auf der Registerkarte Params von Postman angezeigt.

    3. Wählen Sie auf der Registerkarte Auth im Feld Typ die Option Keine Auth.

    4. Auf der Registerkarte Header:

      1. Wenn ein Host-Schlüssel aktiviert ist, deaktivieren Sie diesen.

      2. Fügen Sie diese neuen Header am Ende der Header-Liste hinzu, und bestätigen Sie, dass sie aktiviert sind. Ersetzen Sie den Wert Host durch Ihre device_data_endpoint_address und den Wert x-amz-customauthorizer-signature durch die Signaturzeichenfolge, die Sie mit dem Befehl test-invoke-authorize im vorherigen Abschnitt verwendet haben.

        Schlüssel Wert
        x-amz-customauthorizer-name my-new-authorizer
        Host device_data_endpoint_address
        tokenKeyName tokenKeyValue
        x-amz-customauthorizer-signature DBWYKZLB+FO+JMS GdwoGr 8DYC2QB/ IyLef JJR+RBCVMU9JL4KHAA9DG+V+MMWU09YSA86+64Y3GT4 9MnvB1WYXP+0BDZH8HMQUAUH3FWI3 CA4CWNULQNQB 7i2I +CPY0ZRWT1JR9BIKGGP QHQH HTO357 9PP30UF4 A5K7QIC01N4BIYRTM90OYZ94R4BDJSHNIG1 OBVMGCEFE09JGJJSZEHFGAUAQIWXIVGQJ16BU1XKPTGSITAWHELKUJI zum Beispiel CK3AHKYKY+D1 YHBQ8MJHZJ0KGGBT29VQJCB8RILN/P5+VCVNIS xWPPLYB5JKYS9UVG08REOY64 /r/F3VV8I 3 ACi6CA+ 3 QQF/YSUY02U5 +Sto6K tOykpZqn fPjBv ZzbCvsluv MjEg DxWkjaeehb TegKs TrxypNmFsw JePgnu vTvdthKt AtizfUhvSul TtQp aXiUtcsp tsDuXf LzCw XkWn CkpNlkD0WU8GL3+KOZXRTHNQ8GEAJD5IYLX230IQCXO3OSJPHA7JDYWM5O+KE 91I1MOKDR5SJ4JXIXVNJTVSX1LI49IALW4EN1DAKC1A0S2U2UNM236ExampleLOTYH7H+ AWQF VKS1ZIUCLAZWPRH/ORD BIOGO KJIDGP9GWHXIIK7 WPMK9O= WckTe flFeloZl HxRlXsPqi JplpiWfBg zWrGm
    5. Auf der Registerkarte „Text“:

      1. Wählen Sie im Optionsfeld für das Datenformat die Option Raw.

      2. Wählen Sie in der Datentypliste JavaScript.

      3. Geben Sie in das Textfeld diese JSON-Nachrichtennutzlast für Ihre Testnachricht ein:

        { "data_mode": "test", "vibration": 200, "temperature": 40 }
  4. Wählen Sie Senden aus, um die Anfrage zu senden.

    Wenn die Anfrage erfolgreich war, wird Folgendes zurückgegeben:

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

    Die erfolgreiche Antwort weist darauf hin, dass Ihr benutzerdefinierter Autorisierer die Verbindung zugelassen hat AWS IoT und dass die Testnachricht an den Broker in AWS IoT Core zugestellt wurde.

    Wenn ein Fehler zurückgegeben wird, überprüfen Sie die Fehlermeldung, die device_data_endpoint_address, die Signaturzeichenfolge und die anderen Header-Werte.

Bewahren Sie diese Anfrage in Postman auf, um Sie im nächsten Abschnitt zu verwenden.

Schritt 6: Anzeigen von Nachrichten im MQTT-Testclient

Im vorherigen Schritt haben Sie mithilfe AWS IoT von Postman simulierte Gerätenachrichten an gesendet. Die erfolgreiche Antwort wies darauf hin, dass Ihr benutzerdefinierter Autorisierer die Verbindung zum AWS IoT gestattet hat und dass die Testnachricht an den Broker in AWS IoT Core zugestellt wurde. In diesem Abschnitt verwenden Sie den MQTT-Testclient in der AWS IoT Konsole, um den Nachrichteninhalt dieser Nachricht so zu sehen, wie es bei anderen Geräten und Diensten der Fall ist.

So zeigen Sie die von Ihrem benutzerdefinierten Autorisierer autorisierten Testnachrichten an
  1. Öffnen Sie in der AWS IoT Konsole den MQTT-Testclient.

  2. Geben Sie auf der Registerkarte Thema abonnieren im Themenfilter test/cust-auth/topic ein – das Nachrichtenthema aus dem vorherigen Abschnitt, das im Postman-Beispiel verwendet wurde.

  3. Wählen Sie Abonnieren.

    Lassen Sie dieses Fenster für den nächsten Schritt geöffnet.

  4. Wählen Sie in Postman in der Anfrage, die Sie für den vorherigen Abschnitt erstellt haben, die Option Senden.

    Überprüfen Sie die Antwort, um sicherzustellen, dass sie erfolgreich war. Falls nicht, beheben Sie den Fehler, wie im vorherigen Abschnitt beschrieben.

  5. Im MQTT-Testclient sollten Sie einen neuen Eintrag sehen, der das Nachrichtenthema und, falls erweitert, die Nachrichten-Nutzlast aus der Anfrage anzeigt, die Sie von Postman gesendet haben.

    Wenn Sie Ihre Nachrichten nicht im MQTT-Testclient sehen, sollten Sie Folgendes überprüfen:

    • Stellen Sie sicher, dass Ihre Postman-Anfrage erfolgreich zurückgegeben wurde. Wenn die Verbindung AWS IoT zurückgewiesen wird und ein Fehler zurückgegeben wird, wird die Nachricht in der Anfrage nicht an den Message Broker weitergeleitet.

    • Stellen Sie sicher, dass die zum Öffnen der AWS IoT Konsole AWS-Region verwendeten AWS-Konto und dieselben sind, die Sie in der Postman-URL verwenden.

    • Stellen Sie sicher, dass Sie das Thema korrekt in den MQTT-Testclient eingegeben haben. Beim Themenfilter wird die Groß-/Kleinschreibung berücksichtigt. Im Zweifelsfall können Sie auch das # Thema abonnieren, das alle MQTT-Nachrichten abonniert, die den Message Broker passieren AWS-Konto und zum Öffnen der Konsole AWS-Region verwendet werden. AWS IoT

Schritt 7: Überprüfen der Ergebnisse und die nächsten Schritte

In diesem Tutorial:
  • Haben Sie eine Lambda-Funktion als benutzerdefinierten Autorisierer-Handler erstellt.

  • Haben Sie einen benutzerdefinierten Autorisierer mit aktivierter Token-Signatur erstellt.

  • Haben Sie Ihren benutzerdefinierten Autorisierer mit dem Befehl test-invoke-authorizer getestet.

  • Haben Sie ein MQTT-Thema mit Postman veröffentlicht und die Anfrage mit Ihrem benutzerdefinierten Autorisierer validiert.

  • Haben Sie den MQTT-Testclient verwendet, um die von Ihrem Postman-Test gesendeten Nachrichten anzusehen.

Nächste Schritte

Nachdem Sie einige Nachrichten von Postman gesendet haben, um zu überprüfen, ob der benutzerdefinierte Autorisierer funktioniert, versuchen Sie zu experimentieren, um festzustellen, wie sich Änderungen an verschiedenen Aspekten dieses Tutorials auf die Ergebnisse auswirken. Hier sind einige Beispiele, die Ihnen den Einstieg erleichtern sollen.

  • Ändern Sie die Signaturzeichenfolge so, dass sie nicht mehr gültig ist, um zu sehen, wie unbefugte Verbindungsversuche behandelt werden. Sie sollten eine Fehlerantwort wie diese erhalten und die Meldung sollte nicht auf dem MQTT-Testclient erscheinen.

    { "message": "Forbidden", "traceId": "15969756-a4a4-917c-b47a-5433e25b1356" }
  • Weitere Informationen zum Auffinden von Fehlern, die bei der Entwicklung und Verwendung von AWS IoT Regeln auftreten können, finden Sie unter. Überwachung AWS IoT

Schritt 8: Bereinigen

Wenn Sie dieses Tutorial wiederholen möchten, müssen Sie möglicherweise einige Ihrer benutzerdefinierten Autorisierer entfernen. Sie AWS-Konto können nur eine begrenzte Anzahl von benutzerdefinierten Autorisierern gleichzeitig konfigurieren. Sie erhalten einen, LimitExceededException wenn Sie versuchen, einen neuen hinzuzufügen, ohne einen vorhandenen benutzerdefinierten Autorisierer zu entfernen.

So entfernen Sie einen benutzerdefinierten Autorisierer (Konsole)
  1. Öffnen Sie die Seite Benutzerdefinierter Autorisierer der AWS IoT Konsole und suchen Sie in der Liste der benutzerdefinierten Autorisierer nach dem benutzerdefinierten Autorisierer, den Sie entfernen möchten.

  2. Öffnen Sie die Seite mit den Details des benutzerdefinierten Autorisierers, und wählen Sie aus dem Menü Aktionen die Option Bearbeiten.

  3. Heben Sie die Auswahl von Autorisierer aktivieren auf, und wählen Sie dann Aktualisieren.

    Während ein benutzerdefinierter Autorisierer aktiv ist, können Sie ihn nicht löschen.

  4. Öffnen Sie auf der Seite mit den Details des benutzerdefinierten Autorisierers das Menü Aktionen, und wählen Sie Löschen.

So entfernen Sie einen benutzerdefinierten Autorisierer (AWS CLI)
  1. Listen Sie die benutzerdefinierten Autorisierer auf, die Sie installiert haben, und suchen Sie nach dem Namen des benutzerdefinierten Autorisierers, den Sie löschen möchten.

    aws iot list-authorizers
  2. Legen Sie den benutzerdefinierten Autorisierer auf inactive fest, indem Sie diesen Befehl ausführen, nachdem Sie Custom_Auth_Name durch authorizerName des benutzerdefinierten Autorisierers, der gelöscht werden soll, ersetzt haben.

    aws iot update-authorizer --status INACTIVE --authorizer-name Custom_Auth_Name
  3. Löschen Sie den benutzerdefinierten Autorisierer, indem Sie diesen Befehl ausführen, nachdem Sie Custom_Auth_Name durch authorizerName des benutzerdefinierten Autorisierers, der gelöscht werden soll, ersetzt haben.

    aws iot delete-authorizer --authorizer-name Custom_Auth_Name