Signieren von HTTP-Anforderungen - Amazon Redshift

Signieren von HTTP-Anforderungen

In Amazon Redshift müssen alle Anforderungen, die Sie an die Verwaltungs-API senden, durch eine Signatur authentifiziert werden. In diesem Thema wird beschrieben, wie Sie Ihre HTTP-Anforderungen signieren.

Wenn Sie eines der AWS Software Development Kits (SDKs) oder die AWS Command Line Interface verwenden, erfolgt das Signieren der Anforderungen automatisch und Sie können diesen Abschnitt überspringen. Weitere Informationen zur Verwendung der AWS SDKs finden Sie unter Verwenden der Amazon-Redshift-Verwaltungsschnittstellen. Weitere Informationen zur Verwendung der Amazon-Redshift-Befehlszeilenschnittstelle finden Sie in der Amazon-Redshift-Befehlszeilenreferenz.

Zum Signieren einer Anforderung berechnen Sie mit einer kryptografischen Hash-Funktion eine digitale Signatur. Ein kryptografischer Hash ist eine Funktion, die einen einzigartigen, auf Grundlage der Eingabe berechneten Hash-Wert zurückgibt. Die Eingabe in die Hash-Funktion besteht aus dem Text Ihrer Anforderung und Ihrem geheimen Zugriffsschlüssel. Die Hash-Funktion gibt einen Hash-Wert zurück, den Sie in die Anforderung als Ihre Signatur einfügen. Die Signatur ist Teil des Headers Authorization in der Anforderung.

Anmerkung

Für den API-Zugriff benötigen Sie eine Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel. Verwenden Sie IAM-Benutzer-Zugriffsschlüssel anstelle von AWS-Konto-Stammbenutzer-Zugriffsschlüsseln. Weitere Information über IAM-Zugriffsschlüssel finden Sie unter Verwalten von Zugriffsschlüsseln für IAM-Benutzer im IAM-Benutzerhandbuch.

Nachdem Amazon Redshift Ihre Anforderung erhalten hat, berechnet der Service die Signatur erneut unter Verwendung derselben Hash-Funktion und Eingaben, die Sie zum Signieren der Anforderung verwendet haben. Wenn die resultierende Signatur mit der Signatur in der Anforderung übereinstimmt, verarbeitet Amazon Redshift die Anforderung; ansonsten wird die Anforderung zurückgewiesen.

Amazon Redshift unterstützt die Authentifizierung mit AWS Signature Version 4. Der Prozess zum Berechnen einer Signatur lässt sich in drei Aufgaben untergliedern: Diese Aufgaben werden in dem folgenden Beispiel illustriert.

  • Aufgabe 1: Erstellen einer kanonischen Anforderung

    Ordnen Sie Ihre HTTP-Anforderung in einer kanonischen Form an. Die Verwendung einer kanonischen Form ist erforderlich, weil Amazon Redshift bei der Berechnung der Signatur zum Vergleich mit der von Ihnen gesendeten Signatur dieselbe kanonische Form verwendet.

  • Aufgabe 2: Erstellen einer zu signierenden Zeichenfolge

    Erstellen Sie eine Zeichenfolge, die Sie als einen der Eingabewerte für die kryptografische Hash-Funktion nutzen. Die als zu signierende Zeichenfolge bezeichnete Zeichenfolge ist eine Kombination aus dem Namen des Hash-Algorithmus, dem Anforderungsdatum, einer Zeichenfolge mit dem Umfang der Anmeldeinformationen und der kanonischen Anforderung aus der vorherigen Aufgabe. Die Zeichenfolge mit dem Umfang der Anmeldeinformationen selbst ist eine Kombination aus Datum, Region und Serviceinformationen.

  • Aufgabe 3: Erstellen einer Signatur

    Erstellen Sie eine Signatur für Ihre Anforderung. Verwenden Sie dazu eine kryptografische Hash-Funktion, die zwei Eingabezeichenfolgen akzeptiert: die zu signierende Zeichenfolge und einen abgeleiteten Schlüssel. Der abgeleitete Schlüssel wird unter Nutzung des geheimen Zugriffsschlüssels und der Zeichenfolge mit dem Umfang der Anmeldeinformationen berechnet, um eine Reihe von Hash-Nachrichtenauthentifizierungscodes (HMAC-SHA256) zu erstellen.

Beispiel für eine Signatur-Berechnung

Das folgende Beispiel führt Sie durch die Details der Erstellung einer Signatur für die CreateCluster-Anforderung. Sie können dieses Beispiel als Referenz verwendet, um Ihre eigene Signaturberechnungsmethode zu überprüfen. Andere Referenzberechnungen finden Sie in der Signature Version 4 Test Suite des Glossars zu Amazon Web Services.

Sie können zum Senden von Anforderungen an Amazon Redshift wahlweise GET- oder POST-Anforderungen verwenden. Der Unterschied zwischen den beiden Anforderungen ist, dass bei GET die Abfrageparameter als Parameter in der Abfragezeichenfolge übermittelt werden. Bei POST werden die Abfrageparameter im Text der Anforderung übermittelt. In dem folgenden Beispiel ist eine POST-Anforderung dargestellt.

In diesem Beispiel wird Folgendes angenommen:

  • Der Zeitstempel der Anforderung ist Fri, 07 Dec 2012 00:00:00 GMT.

  • Der Endpunkt ist die Region USA Ost (Nord-Virginia), us-east-1.

Das allgemeine Format für Anforderungen lautet wie folgt:

https://redshift.us-east-1.amazonaws.com/ ?Action=CreateCluster &ClusterIdentifier=examplecluster &MasterUsername=masteruser &MasterUserPassword=12345678Aa &NumberOfNode=2 &NodeType=ds2.xlarge &Version=2012-12-01 &x-amz-algorithm=AWS4-HMAC-SHA256 &x-amz-credential=AKIAIOSFODNN7EXAMPLE/20121207/us-east-1/redshift/aws4_request &x-amz-date=20121207T000000Z &x-amz-signedheaders=content-type;host;x-amz-date

Die kanonische Form der für Aufgabe 1: Erstellen einer kanonischen Anforderung berechneten Anforderung ist:

POST / content-type:application/x-www-form-urlencoded; charset=utf-8 host:redshift.us-east-1.amazonaws.com x-amz-date:20121207T000000Z content-type;host;x-amz-date 55141b5d2aff6042ccd9d2af808fdf95ac78255e25b823d2dbd720226de1625d

Die letzte Zeile der kanonischen Anforderungen ist der Hash des Anforderungstextes. Die dritte Zeile in der kanonischen Anforderung ist leer, weil dieser API-Aufruf keine Abfrageparameter hat.

Die zu signierende Zeichenfolge für Aufgabe 2: Erstellen einer zu signierenden Zeichenfolge ist:

AWS4-HMAC-SHA256 20121207T000000Z 20121207/us-east-1/redshift/aws4_request 06b6bef4f4f060a5558b60c627cc6c5b5b5a959b9902b5ac2187be80cbac0714

Die erste Zeile der zu signierenden Zeichenfolge ist der Name des Algorithmus, die zweite Zeile der Zeitstempel, die dritte Zeile der Geltungsbereich der Anmeldeinformationen und die letzte Zeile ein Hash der kanonischen Anforderung aus Aufgabe 1: Erstellen einer kanonischen Anforderung. In dem Geltungsbereich für die Anmeldeinformationen ist auch u.a. der Name des zu verwenden Service angegeben, redshift.

Für Aufgabe 3: Erstellen einer Signatur kann der abgeleitete Schlüssel wie folgt dargestellt werden:

derived key = HMAC(HMAC(HMAC(HMAC("AWS4" + YourSecretAccessKey,"20121207"),"us-east-1"),"redshift"),"aws4_request")

Der abgeleitete Schlüssel wird durch eine Abfolge von Hash-Funktionen berechnet. In der am tiefsten verschachtelten HMAC-Anweisung in der Formel oben wird an die Zeichenfolge AWS4 Ihr geheimer Zugriffsschlüssel angehängt und die so verkettete Zeichenfolge wird als Schlüssel zur Berechnung der Hashes für die Daten „us-east-1“ verwendet. Das Ergebnis dieses Hashes wird als Schlüssel für die nächste Hash-Funktion verwendet.

Sie verwenden diesen abgeleiteten Schlüssel in einer Hash-Funktion, die zwei Zeichenfolgen als Eingabeparameter entgegennimmt, nämlich die zu signierende Zeichenfolge und den abgeleiteten Schlüssel. Beispiel: Wenn Sie den geheimen Zugriffsschlüssel wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY und die zu signierende Zeichenfolge oben verwenden, sieht die berechnete Signatur wie folgt aus:

9a6b557aa9f38dea83d9215d8f0eae54100877f3e0735d38498d7ae489117920

Der letzte Schritt besteht im Erstellen des Authorization-Headers. Für den Demo-Zugriffsschlüssel AKIAIOSFODNN7EXAMPLE (mit hinzugefügten Zeilenumbrüchen zur besseren Lesbarkeit) lautet der Header:

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20121207/us-east-1/redshift/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=9a6b557aa9f38dea83d9215d8f0eae54100877f3e0735d38498d7ae489117920