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.
Fehlerbehebung für Ihre Genehmiger
In diesem Thema werden häufig auftretende Probleme, die zu Konflikten bei benutzerdefinierten Authentifizierungsworkflows führen können, sowie Schritte zu deren Behebung beschrieben. Um Probleme am effektivsten zu beheben, aktivieren Sie CloudWatch Protokolle für AWS IoT Core und setzen Sie die Protokollebene auf DEBUG. Sie können CloudWatch Protokolle in der AWS IoT Core Konsole aktivieren (https://console.aws.amazon.com/iot/
Anmerkung
Wenn Sie die Protokollebene für längere Zeit auf DEBUG belassen, CloudWatch können große Mengen an Protokolldaten gespeichert werden. Dies kann Ihre CloudWatch Gebühren erhöhen. Erwägen Sie, die ressourcenbasierte Protokollierung zu verwenden, um die Ausführlichkeit nur für Geräte in einer bestimmten Objektgruppe zu erhöhen. Weitere Informationen zur ressourcenbasierten Protokollierung finden Sie unter Konfigurieren Sie die AWS IoT Protokollierung. Wenn Sie mit der Fehlerbehebung fertig sind, reduzieren Sie außerdem die Protokollebene auf eine weniger ausführliche Ebene.
Bevor Sie mit der Problembehandlung beginnen, überprüfen Sie Grundlegendes zum Workflow für die benutzerdefinierte Authentifizierung für eine allgemeine Übersicht über den benutzerdefinierten Authentifizierungsprozess. Dadurch können Sie leichter die mögliche Ursache eines Problems nachvollziehen und danach suchen.
In diesem Thema werden zwei Bereiche behandelt, die Sie untersuchen sollten.
-
Probleme im Zusammenhang mit der Lambda-Funktion Ihres Genehmigers.
-
Probleme im Zusammenhang mit Ihrem Gerät.
Nach Problemen mit der Lambda-Funktion Ihres Genehmigers suchen
Gehen Sie wie folgt vor, um sicherzustellen, dass die Verbindungsversuche Ihrer Geräte Ihre Lambda-Funktion aufrufen.
-
Überprüfen Sie, welche Lambda-Funktion Ihrem Genehmiger zugeordnet ist.
Sie können dies tun, indem Sie die DescribeAuthorizerAPI aufrufen oder im Bereich Secure der AWS IoT Core Konsole auf den gewünschten Autorisierer klicken.
-
Überprüfen Sie die Aufrufmetriken der Lambda-Funktion. Führen Sie dazu die folgenden Schritte aus.
-
Öffnen Sie die AWS Lambda Konsole (https://console.aws.amazon.com/lambda/
) und wählen Sie die Funktion aus, die Ihrem Autorisierer zugeordnet ist. -
Wählen Sie die Registerkarte Überwachen und überprüfen Sie die Metriken des für Ihr Problem relevanten Zeitraums.
-
-
Wenn Sie keine Aufrufe sehen, überprüfen Sie, ob der Benutzer berechtigt AWS IoT Core ist, Ihre Lambda-Funktion aufzurufen. Wenn Sie Aufrufe sehen, fahren Sie mit dem nächsten Schritt fort. Führen Sie die folgenden Schritte aus, um sicherzustellen, dass Ihre Lambda-Funktion über die erforderlichen Berechtigungen verfügt.
-
Wählen Sie in der Konsole den Tab „Berechtigungen“ für Ihre Funktion aus. AWS Lambda
-
Suchen Sie den Abschnitt Ressourcenbasierte Richtlinie am Seitenende. Wenn Ihre Lambda-Funktion über die erforderlichen Berechtigungen verfügt, sieht die Richtlinie wie im folgenden Beispiel aus.
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "Id123", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:111111111111:function:FunctionName", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:iot:us-east-1:111111111111:authorizer/AuthorizerName" }, "StringEquals": { "AWS:SourceAccount": "111111111111" } } } ] }
-
Diese Richtlinie erteilt dem AWS IoT Core Principal die
InvokeFunction
Genehmigung für Ihre Funktion. Wenn Sie sie nicht sehen, müssen Sie sie mithilfe der AddPermissionAPI hinzufügen. Im folgenden Beispiel wird gezeigt, wie Sie sie über AWS CLI hinzufügen können.aws lambda add-permission --function-name
FunctionName
--principal iot.amazonaws.com --source-arnAuthorizerARn
--statement-id Id-123 --action "lambda:InvokeFunction"
-
-
Wenn Sie Aufrufe sehen, stellen Sie sicher, dass keine Fehler vorliegen. Ein Fehler könnte darauf hinweisen, dass die Lambda-Funktion das Verbindungsereignis, das an sie AWS IoT Core gesendet wird, nicht richtig verarbeitet.
Hinweise zur Behandlung des Ereignisses in Ihrer Lambda-Funktion finden Sie unter Definieren Ihrer Lambda-Funktion. Sie können die Testfunktion in der AWS Lambda Konsole (https://console.aws.amazon.com/lambda/
) verwenden, um Testwerte in der Funktion fest zu codieren, um sicherzustellen, dass die Funktion Ereignisse korrekt verarbeitet. -
Wenn Sie Aufrufe ohne Fehler sehen, Ihre Geräte jedoch keine Verbindung herstellen (oder Nachrichten veröffentlichen, abonnieren und empfangen) können, liegt das Problem möglicherweise daran, dass die Richtlinie, die Ihre Lambda-Funktion zurückgibt, keine Berechtigungen für die Aktionen gewährt, die Ihre Geräte ausführen möchten. Führen Sie die folgenden Schritte aus, um festzustellen, ob ein Fehler bei der Richtlinie vorliegt, die die Funktion zurückgibt.
-
Verwenden Sie eine Amazon CloudWatch Logs Insights-Abfrage, um Protokolle über einen kurzen Zeitraum auf Fehler zu überprüfen. Die folgende Beispielabfrage sortiert Ereignisse nach Zeitstempel und sucht nach Fehlern.
display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"
-
Aktualisieren Sie Ihre Lambda-Funktion, um die Daten zu protokollieren, zu denen sie zurückkehrt, AWS IoT Core und das Ereignis, das die Funktion auslöst. Sie können diese Protokolle verwenden, um die Richtlinie zu überprüfen, die die Funktion erstellt.
-
-
Wenn Sie Aufrufe ohne Fehler sehen, Ihre Geräte jedoch keine Verbindung herstellen (oder Nachrichten veröffentlichen, abonnieren und empfangen) können, könnte eine weitere Ursache sein, dass Ihre Lambda-Funktion das Timeout-Limit überschritten hat. Das Timeout-Limit der Lambda-Funktion für den benutzerdefinierten Genehmiger beträgt 5 Sekunden. Sie können die Funktionsdauer in CloudWatch Protokollen oder Metriken überprüfen.
Untersuchen von Geräteproblemen
Wenn Sie keine Probleme mit dem Aufrufen Ihrer Lambda-Funktion oder mit der Richtlinie, die die Funktion zurückgibt, feststellen, suchen Sie nach Problemen bei den Verbindungsversuchen Ihrer Geräte. Fehlerhaft formatierte Verbindungsanfragen können dazu führen, dass Ihr Autorisierer AWS IoT Core nicht ausgelöst wird. Verbindungsprobleme können sowohl auf TLS- als auch auf Anwendungsebene auftreten.
Mögliche Probleme mit der TLS-Ebene:
-
Kunden müssen bei allen benutzerdefinierten Authentifizierungsanfragen entweder einen Hostnamen-Header (HTTP, MQTT over WebSockets) oder die Server Name Indication TLS-Erweiterung (HTTP, MQTT over WebSockets, MQTT) übergeben. In beiden Fällen muss der übergebene Wert mit einem der Datenendpunkte Ihres Kontos übereinstimmen. AWS IoT Core Dies sind die Endpunkte, die zurückgegeben werden, wenn Sie die folgenden CLI-Befehle ausführen.
-
aws iot describe-endpoint --endpoint-type iot:Data-ATS
-
aws iot describe-endpoint --endpoint-type iot:Data
(für ältere VeriSign Endpunkte)
-
-
Geräte, die eine benutzerdefinierte Authentifizierung in MQTT-Verbindungen verwenden, müssen auch die TLS-Erweiterung „Application Layer Protocol Negotiation“ (ALPN) mit dem Wert
mqtt
übergeben. -
Die benutzerdefinierte Authentifizierung ist derzeit nur auf Port 443 verfügbar.
Mögliche Probleme auf Anwendungsebene:
-
Wenn das Signieren aktiviert ist (das Feld
signingDisabled
in Ihrem Genehmiger lautet „false“), suchen Sie nach den folgenden Signaturproblemen.-
Stellen Sie sicher, dass Sie die Tokensignatur entweder im
x-amz-customauthorizer-signature
-Header oder in einem Abfragezeichenfolgenparameter übergeben. -
Stellen Sie sicher, dass der Service keinen anderen Wert als das Token signiert.
-
Stellen Sie sicher, dass Sie das Token im Header- oder Abfrageparameter übergeben, den Sie im Feld
token-key-name
in Ihrem Genehmiger angegeben haben.
-
-
Stellen Sie sicher, dass der Genehmigername, den Sie im
x-amz-customauthorizer-name
-Header- oder Abfragezeichenfolgenparameter übergeben, gültig ist oder dass Sie einen Standardgenehmiger für Ihr Konto angegeben haben.