Generieren Sie eine vorsignierte Anfrage mit der WebSocket-Bibliothek - AWS IoT Wireless

Generieren Sie eine vorsignierte Anfrage mit der WebSocket-Bibliothek

Im Folgenden wird gezeigt, wie Sie eine vorsignierte Anfrage generieren, sodass Sie die WebSocket-Bibliothek verwenden können, um Anfragen an den Dienst zu senden.

Hinzufügen einer Richtlinie für WebSocket-Anforderungen zu Ihrer IAM-Rolle

Um das WebSocket-Protokoll zum Aufrufen des Netzwerkanalysators zu verwenden, müssen Sie die folgende Richtlinie an die AWS Identity and Access Management (IAM)-Rolle anhängen, die die Anforderung ausstellt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotwireless:StartNetworkAnalyzerStream", "Resource": "*" } ] }

Eine vorsignierte URL erstellen

Erstellen Sie für Ihre WebSocket-Anforderung eine URL, die die Informationen enthält, die zur Einrichtung der Kommunikation zwischen Ihrer Anwendung und dem Netzwerkanalysator erforderlich sind. Um die Identität der Abfrage zu verifizieren, verwendet WebSocket-Streaming den Vorgang Amazon Signature Version 4 zum Signieren von Anforderungen. Weitere Informationen zu Signature Version 4 finden Sie unter SignierenAWS von API-Anforderungen in der Allgemeinen Referenz zu Amazon Web Services.

Verwenden Sie die StartNetworkAnalyzerStream Anforderungs-URL, um den Netzwerkanalysator aufzurufen. Die Anfrage wird mit den Anmeldeinformationen für die zuvor erwähnte IAM-Rolle signiert. Die URL hat das folgende Format, wobei zur besseren Lesbarkeit Zeilenumbrüche hinzugefügt wurden.

GET wss://api.iotwireless.<region>.amazonaws.com/start-network-analyzer-stream?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=Signature Version 4 credential scope &X-Amz-Date=date &X-Amz-Expires=time in seconds until expiration &X-Amz-Security-Token=security-token &X-Amz-Signature=Signature Version 4 signature &X-Amz-SignedHeaders=host

Verwenden Sie die folgenden Werte für die Parameter von Signature Version 4:

  • X-Amz-Algorithmus – Der Algorithmus, den Sie im Signaturprozess verwenden. Der einzige gültige Wert ist AWS4-HMAC-SHA256.

  • X-Amz-Anmeldeinformationen – Eine durch Schrägstriche (/) getrennte Zeichenfolge, die durch die Verkettung der Zugriffsschlüssel-ID und Ihre Anmeldeinformationen gebildet wird. Der Anmeldeinformationsumfang enthält das Datum im Format JJJJMMTT, die AWS-Region, den Service-Namen und eine Zeichenfolge zur Beendigung (aws4_request).

  • X-Amz-Datum – Das Datum und die Uhrzeit, zu der die Signatur erstellt wurde. Generieren Sie das Datum und die Uhrzeit, indem Sie den Anweisungen unter Umgang mit Datumswerten in Signature Version 4 in der Allgemeinen Referenz zu Amazon Web Services folgen.

  • X-Amz-Expires – Die Zeitdauer in Sekunden, bis die Anmeldeinformationen ablaufen. Die Höchstwert beträgt 300 Sekunden (5 Minuten).

  • X-Amz-Security-Token – (optional) Ein Signature Version 4-Token für temporäre Anmeldeinformationen. Wenn Sie diesen Parameter angeben, schließen Sie ihn in die kanonische Anforderung ein. Weitere Informationen finden Sie unter Anfordern temporärer Sicherheitsanmeldeinformationen im AWSIdentity and Access Management Benutzerhandbuch.

  • X-Amz-Signature – Die Signaturversion 4-Signatur, die Sie für die Anforderung erstellt haben.

  • X-Amz-SignedHeaders – Die Header, die beim Erstellen der Signatur für die Anforderung signiert wurden. Der einzige gültige Wert ist host.

Konstruieren Sie die Anforderungs-URL und erstellen Sie die Signatur von Signature Version 4

Führen Sie die folgenden Schritte durch, um die URL für die Anforderung und die Signaturversion 4-Signatur zu erstellen. Die Beispiele sind in Pseudocode.

Erstellen Sie eine Zeichenfolge, die Informationen aus Ihrer Anforderung in einem standardisierten Format enthält. Auf diese Weise wird sichergestellt, dass AWS bei Erhalt der Anforderung die gleiche Signatur berechnen kann, die Sie in Aufgabe 3: Berechnen der Signatur berechnet haben. Weitere Informationen finden Sie unter Erstellen einer kanonischen Anforderung für Signature Version 4 in der Allgemeinen Referenz zu Amazon Web Services.

  1. Definieren Sie Variablen für die Anforderung in Ihrer Anwendung.

    # HTTP verb method = "GET" # Service name service = "iotwireless" # AWS-Region region = "AWS-Region" # Service streaming endpoint endpoint = "wss://api.iotwireless.region.amazonaws.com" # Host host = "api.iotwireless.<region>.amazonaws.com" # Date and time of request amz-date = YYYYMMDD'T'HHMMSS'Z' # Date without time for credential scope datestamp = YYYYMMDD
  2. Erstellen Sie einen kanonischen URI (Uniform Resource Identifier). Der kanonische URI ist der Teil des URI zwischen der Domain und der Abfragezeichenfolge.

    canonical_uri = "/start-network-analyzer-stream"
  3. Erstellen Sie die kanonischen Header und signierten Header. Beachten Sie das abschließende \n in den kanonischen Headern.

    • Fügen Sie den Headernamen in Kleinbuchstaben an, gefolgt von einem Doppelpunkt.

    • Fügen Sie eine durch Komma getrennte Liste der Werte für diesen Header an. Sortieren Sie nicht die Werte in Headern mit mehreren Werten.

    • Fügen Sie eine neue Zeile an (\n).

    canonical_headers = "host:" + host + "\n" signed_headers = "host"
  4. Gleichen Sie den Algorithmus mit dem Hash-Algorithmus ab. Sie müssen SHA-256 verwenden.

    algorithm = "AWS4-HMAC-SHA256"
  5. Erstellen Sie den Anmeldeinformationsumfang, der den abgeleiteten Schlüssel auf das Datum, die Region und den Service, an den die Anforderung erfolgt, bezieht.

    credential_scope = datestamp + "/" + region + "/" + service + "/" + "aws4_request"
  6. Erstellen Sie die kanonische Abfragezeichenfolge. Die Werte für die Abfragezeichenfolgen müssen URL-kodiert und nach Namen sortiert sein.

    • Sortieren Sie die Parameternamen nach Zeichencodepunkt in aufsteigender Reihenfolge. Parameter mit doppelten Namen sollten nach Wert sortiert werden. Beispiel: Ein Parametername, der mit dem Großbuchstaben "F" beginnt, steht vor einem Parameternamen, der mit einem kleinen Buchstaben "b" beginnt.

    • Fügen Sie keine URI-Kodierung für die nicht reservierten Zeichen durch, die von RFC 3986 definiert sind: A–Z, a–, 0–9, Bindestrich (-), Unterstrich (_), Punkt (.) und Tilde (~).

    • Versehen Sie alle anderen Zeichen mit Prozentcode (%XY), wobei X und Y für Hexadezimalzeichen, d. h. 0-9 und die Großbuchstaben A-F, stehen. Beispielsweise müssen Leerzeichen mit %20 kodiert werden (nicht mit „+“ wie bei einigen Kodierungssystemen) und erweiterte UTF-8-Zeichen müssen im Format %XY%ZA%BC vorliegen.

    • Doppelcodieren Sie alle gleich (=)-Zeichen in Parameterwerten.

    canonical_querystring = "X-Amz-Algorithm=" + algorithm canonical_querystring += "&X-Amz-Credential="+ URI-encode(access key + "/" + credential_scope) canonical_querystring += "&X-Amz-Date=" + amz_date canonical_querystring += "&X-Amz-Expires=300" canonical_querystring += "&X-Amz-Security-Token=" + token canonical_querystring += "&X-Amz-SignedHeaders=" + signed_headers canonical_querystring += "&language-code=en-US&media-encoding=pcm&sample-rate=16000"
  7. Erstellen Sie ein Hash der Nutzlast. Für eine GET-Anforderung, ist die Nutzlast eine leere Zeichenfolge.

    payload_hash = HashSHA256(("").Encode("utf-8")).HexDigest()
  8. Kombinieren Sie anschließend alle Elemente, um die kanonische Anforderung zu erstellen.

    canonical_request = method + '\n' + canonical_uri + '\n' + canonical_querystring + '\n' + canonical_headers + '\n' + signed_headers + '\n' + payload_hash

Die zu signierende Zeichenfolge enthält die Metadaten über Ihre Anforderung. Sie verwenden die zu signierende Zeichenfolge im nächsten Schritt, wenn Sie die Anforderungssignatur berechnen. Weitere Informationen finden Sie unter Erstellen einer zu signierenden Zeichenfolge für Signaturversion 4 in der Allgemeinen Amazon-Web-Services-Referenz.

string_to_sign=algorithm + "\n" + amz_date + "\n" + credential_scope + "\n" + HashSHA256(canonical_request.Encode("utf-8")).HexDigest()

Leiten Sie einen Signaturschlüssel von Ihrem geheimen AWS-Zugriffsschlüssel ab. Für ein höheres Maß an Schutz gilt der abgeleitete Schlüssel speziell für das Datum, den Service und die AWS-Region. Verwenden Sie den abgeleiteten Schlüssel zum Signieren der Anforderung. Weitere Informationen finden Sie unter Berechnen der Signatur für AWS-Signaturversion 4 in der Allgemeinen Referenz zu Amazon Web Services.

Der Code geht davon aus, dass Sie die Funktion GetSignatureKey zur Ableitung eines Signaturschlüssels implementiert haben. Weitere Informationen und Funktionsbeispiele finden Sie unter Beispiele für das Ableiten eines Signaturschlüssels für Signaturversion 4 in der Allgemeinen Referenz zu Amazon Web Services.

Die Funktion HMAC(key, data) stellt eine HMAC-SHA256-Funktion dar, die das Ergebnis im Binärformat zurückgibt.

#Create the signing key signing_key = GetSignatureKey(secret_key, datestamp, region, service) # Sign the string_to_sign using the signing key signature = HMAC.new(signing_key, (string_to_sign).Encode("utf-8"), Sha256()).HexDigest

Nachdem Sie die Signatur berechnet haben, fügen Sie sie zur Abfragezeichenfolge hinzu. Weitere Informationen finden Sie unter Hinzufügen der Signatur der Anforderung in der Allgemeinen Referenz zu Amazon Web Services.

#Add the authentication information to the query string canonical_querystring += "&X-Amz-Signature=" + signature # Sign the string_to_sign using the signing key request_url = endpoint + canonical_uri + "?" + canonical_querystring

Nächste Schritte

Sie können nun die Anforderungs-URL mit Ihrer WebSocket-Bibliothek verwenden, um die Anforderung an den Service zu stellen und die Nachrichten zu beobachten. Weitere Informationen finden Sie unter WebSocket-Nachrichten und Statuscodes.