View a markdown version of this page

Anfragen authentifizieren: Verwenden von Abfrageparametern (AWS Signatur (Version 4) - Amazon Simple Storage Service

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.

Anfragen authentifizieren: Verwenden von Abfrageparametern (AWS Signatur (Version 4)

Wie in der Authentifizierungsübersicht (sieheAuthentifizierungsmethoden) beschrieben, können Sie Authentifizierungsinformationen mithilfe von Abfragezeichenfolgenparametern angeben. Die Verwendung von Abfrageparametern zur Authentifizierung von Anfragen ist nützlich, wenn Sie eine Anfrage vollständig in einer URL ausdrücken möchten. Diese Methode wird auch als Vorsignierung einer URL bezeichnet.

Ein Anwendungsfall für vorsignierte URLs ist, dass Sie temporären Zugriff auf Ihre Amazon S3-Ressourcen gewähren können. Sie können beispielsweise eine vorsignierte URL in Ihre Website einbetten oder sie alternativ im Befehlszeilenclient (wie Curl) verwenden, um Objekte herunterzuladen.

Anmerkung

Sie können das auch verwenden, um AWS CLI vorsignierte URLs zu erstellen. Weitere Informationen finden Sie unter presign in der Referenz zum AWS CLI -Befehl.

Im Folgenden finden Sie ein Beispiel für eine vorsignierte URL.

https://examplebucket.s3.amazonaws.com/test.txt ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=<your-access-key-id>/20130721/us-east-1/s3/aws4_request &X-Amz-Date=20130721T201207Z &X-Amz-Expires=86400 &X-Amz-SignedHeaders=host &X-Amz-Signature=<signature-value>

Beachten Sie in der Beispiel-URL Folgendes:

  • Die Zeilenumbrüche wurden aus Gründen der Lesbarkeit hinzugefügt.

  • Der X-Amz-Credential-Wert in der URL zeigt das Zeichen „/“ nur zur besseren Lesbarkeit an. In der Praxis sollte es als codiert werden. %2F Beispiel:

    &X-Amz-Credential=<your-access-key-id>%2F20130721%2Fus-east-1%2Fs3%2Faws4_request

Die folgende Tabelle beschreibt die Abfrageparameter in der URL, die Informationen zur Authentifizierung bereitstellen.

Abfragezeichenfolgen-Parametername Beispielwert
X-Amz-Algorithm

Identifiziert die Version von AWS Signature und den Algorithmus, den Sie zur Berechnung der Signatur verwendet haben.

Für AWS Signature Version 4 setzen Sie diesen Parameterwert aufAWS4-HMAC-SHA256. Diese Zeichenfolge identifiziert AWS Signature Version 4 (AWS 4) und den HMAC-SHA256 Algorithmus (HMAC-SHA256).

X-Amz-Credential

Zusätzlich zu Ihrer Zugriffsschlüssel-ID gibt dieser Parameter auch den Bereich (AWS-Region und den Dienst) an, für den die Signatur gültig ist. Dieser Wert muss mit dem Gültigkeitsbereich übereinstimmen, den Sie für die Signaturberechnungen verwenden, die im folgenden Abschnitt beschrieben werden. Das allgemeine Format für diesen Parameterwert lautet wie folgt:

<your-access-key-id>/<date>/<AWS-Region>/<AWS-service>/aws4_request

Beispiel:

AKIAIOSFODNN7EXAMPLE/20130721/us-east-1/s3/aws4_request

Für Amazon S3 lautet die AWS-service Zeichenfolges3. Eine Liste der AWS-region S3-Zeichenfolgen finden Sie unter Regionen und Endpunkte im Allgemeine AWS-Referenz.

X-Amz-Date

Das Datums- und Uhrzeitformat muss dem ISO-8601-Standard entsprechen und mit dem Format "yyyyMMddT HHmmss Z“ formatiert sein. Lauten Datum und Uhrzeit beispielsweise "08/01/2016 15:32:41.982-700", müssen sie zuerst in UTC (Coordinated Universal Time) umgerechnet und dann als „20160801T223241Z“ übermittelt werden.

X-Amz-Expires

Gibt den Zeitraum in Sekunden an, für den die generierte vorsignierte URL gültig ist. 86400Zum Beispiel (24 Stunden). Es handelt sich um einen Ganzzahlwert. Der Mindestwert, den Sie festlegen können, ist 1, und der Höchstwert ist 604800 (sieben Tage).

Eine vorsignierte URL kann maximal sieben Tage gültig sein, da der Signaturschlüssel, den Sie für die Signaturberechnung verwenden, bis zu sieben Tage gültig ist.

X-Amz-SignedHeaders

Listet die Header auf, die Sie zur Berechnung der Signatur verwendet haben. Für die Signaturberechnungen sind folgende Header erforderlich:

  • Der host HTTP-Header.

  • Alle x-amz-* Header, die Sie der Anfrage hinzufügen möchten.

Anmerkung

Für zusätzliche Sicherheit sollten Sie alle Anforderungs-Header signieren, die Sie in Ihre Anfrage aufnehmen möchten.

X-Amz-Signature

Stellt die Signatur zur Authentifizierung Ihrer Anfrage bereit. Diese Signatur muss mit der Signatur übereinstimmen, die Amazon S3 berechnet. Andernfalls lehnt Amazon S3 die Anfrage ab. Beispiel: 733255ef022bec3f2a8701cd61d4b371f3f28c9f193a1f02279211d48d5193d7

Signaturberechnungen werden im folgenden Abschnitt beschrieben.

X-Amz-Security-Token

Optionaler Parameter für Anmeldeinformationen, wenn Sie Anmeldeinformationen verwenden, die vom STS-Service stammen.

Berechnung einer Signatur

Das folgende Diagramm veranschaulicht den Prozess der Signaturberechnung.

AWS Signaturprozess der Version 4 mit Schritten zur kanonischen Anforderung, zu signierenden Zeichenfolge und Signaturgenerierung.

In der folgenden Tabelle werden die im Diagramm dargestellten Funktionen beschrieben. Für diese Funktionen muss Code implementiert werden.

Funktion Description
Lowercase() Wandeln Sie die Zeichenfolge in Kleinbuchstaben um.
Hex() Kodierung in Kleinbuchstaben im Basis-16-Format.
SHA256Hash() Kryptografische Hash-Funktion des Secure Hash Algorithm (SHA).
HMAC-SHA256() Berechnet HMAC unter Verwendung des SHA256-Algorithmus mit dem bereitgestellten Signaturschlüssel. Dies ist die endgültige Signatur.
Trim() Entfernen Sie alle führenden oder nachgestellten Leerzeichen.
UriEncode()

URI-kodiert jedes Byte. UriEncode() muss die folgenden Regeln durchsetzen:

  • URI kodiert jedes Byte mit Ausnahme der nicht reservierten Zeichen: „A“–„Z“, „a“–„z“, „0“–„9“, „-“, „.“, „_“ und „~“.

  • Das Leerzeichen ist ein reserviertes Zeichen und muss als „%20“ (und nicht als „+“) codiert werden.

  • Jedes URI-codierte Byte besteht aus einem „%“ und dem zweistelligen Hexadezimalwert des Bytes.

  • Buchstaben im Hexadezimalwert müssen in Großbuchstaben geschrieben sein, zum Beispiel „%1A“.

  • Kodieren Sie den Schrägstrich „/“ überall außer im Objektschlüsselnamen. Wenn der Objektschlüsselname beispielsweise photos/Jan/sample.jpg lautet, wird der Schrägstrich im Schlüsselnamen nicht codiert.

Wichtig

Die von Ihrer Entwicklungsplattform bereitgestellten UriEncode Standardfunktionen funktionieren möglicherweise aufgrund von Unterschieden in der Implementierung und den damit verbundenen Mehrdeutigkeiten in den zugrunde liegenden RFCs nicht. Wir empfehlen Ihnen, Ihre eigene benutzerdefinierte UriEncode Funktion zu schreiben, um sicherzustellen, dass Ihre Codierung funktioniert.

Das Folgende ist eine Beispielfunktion UriEncode () in Java.

public static String UriEncode(CharSequence input, boolean encodeSlash) { StringBuilder result = new StringBuilder(); for (int i = 0; i < input.length(); i++) { char ch = input.charAt(i); if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' || ch == '-' || ch == '~' || ch == '.') { result.append(ch); } else if (ch == '/') { result.append(encodeSlash ? "%2F" : ch); } else { result.append(toHexUTF8(ch)); } } return result.toString(); }

Weitere Hinweise zum Signaturvorgang (Einzelheiten zur Erstellung einer kanonischen Anfrage, zur zu signierenden Zeichenfolge und zur Berechnung der Signatur) finden Sie unter. Signaturberechnungen für den Autorisierungs-Header: Übertragung der Nutzlast in einem einzigen Block (AWS Signatur (Version 4) Der Vorgang ist im Allgemeinen derselbe, mit der Ausnahme, dass sich die Erstellung einer CanonicalRequest vorsignierten URL wie folgt unterscheidet:

  • Sie fügen der Canonical Request keinen Nutzlast-Hash hinzu, da Sie beim Erstellen einer vorsignierten URL den Inhalt der Nutzlast nicht kennen, da die URL zum Hochladen einer beliebigen Nutzlast verwendet wird. Stattdessen verwenden Sie eine konstante Zeichenfolge. UNSIGNED-PAYLOAD

  • Die kanonische Abfragezeichenfolge muss alle Abfrageparameter aus der vorherigen Tabelle mit Ausnahme von enthalten. X-Amz-Signature

  • Für S3 müssen Sie den X-Amz-Security-Token Abfrageparameter in die URL aufnehmen, wenn Sie Anmeldeinformationen verwenden, die vom STS-Dienst stammen.

  • Canonical Header müssen den HTTP-Header enthalten. host Wenn Sie beabsichtigen, einen der x-amz-* Header einzubeziehen, müssen diese Header ebenfalls für die Signaturberechnung hinzugefügt werden. Sie können optional alle anderen Header hinzufügen, die Sie in Ihre Anfrage aufnehmen möchten. Für zusätzliche Sicherheit sollten Sie so viele Header wie möglich signieren. Wenn Sie einen signierten Header hinzufügen, der auch ein signierter Abfrageparameter ist, und sich deren Wert unterscheidet, erhalten Sie eine InvalidRequest Fehlermeldung, da die Eingabe widersprüchlich ist.

Ein Beispiel

Angenommen, Sie haben ein Objekt test.txt in Ihrem examplebucket Eimer. Sie möchten dieses Objekt für einen Zeitraum von 24 Stunden (86400 Sekunden) mit anderen teilen, indem Sie eine vorsignierte URL erstellen.

https://examplebucket.s3.amazonaws.com/test.txt ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request &X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host &X-Amz-Signature=<signature-value>

Die folgenden Schritte veranschaulichen zunächst die Signaturberechnungen und dann die Konstruktion der vorsignierten URL. Das Beispiel geht von den folgenden zusätzlichen Annahmen aus:

  • Der Zeitstempel der Anfrage istFri, 24 May 2013 00:00:00 GMT.

  • Der Bucket befindet sich in der Region USA Ost (Nord-Virginia), und die Anmeldeinformationen Scope und die Signing Key Berechnungen werden us-east-1 als Regionsspezifizierer verwendet. Weitere Informationen finden Sie unter Regionen und Endpunkte in der Allgemeine AWS-Referenz.

Sie können dieses Beispiel als Testfall verwenden, um die Signatur zu überprüfen, die Ihr Code berechnet. Sie müssen jedoch denselben Bucket-Namen, Objektschlüssel, Zeitstempel und die folgenden Beispiel-Anmeldeinformationen verwenden:

Parameter Wert
AWSAccessKeyId AKIAIOSFODNN7EXAMPLE
AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  1. StringToSign
    1. CanonicalRequest

      GET /test.txt X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host host:examplebucket.s3.amazonaws.com host UNSIGNED-PAYLOAD

    2. StringToSign

      AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 3bfa292879f6447bbcda7001decf97f4a54dc650c8942174ae0a9121cf58ad04

  2. SigningKey

    signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request")

  3. Signatur

    aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404

    Jetzt haben Sie alle Informationen, um eine vorsignierte URL zu erstellen. Die resultierende URL für dieses Beispiel wird wie folgt angezeigt (Sie können dies verwenden, um Ihre vorsignierte URL zu vergleichen):

    https://examplebucket.s3.amazonaws.com/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404

Beispiel 2

Im Folgenden finden Sie ein Beispiel (das nichts mit dem vorherigen Beispiel zu tun hat), das eine vorsignierte URL mit dem Parameter zeigt. X-Amz-Security-Token

https://examplebucket.s3.us-east-1.amazonaws.com/test.txt ?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request &X-Amz-Date=20200524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host &X-Amz-Security-Token=IQoJb3JpZ2luX2VjEMv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJGMEQCIBSUbVdj9YGs2g0HkHsOHFdkwOozjARSKHL987NhhOC8AiBPepRU1obMvIbGU0T%2BWphFPgK%2Fqpxaf5Snvm5M57XFkCqlAgjz%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDQ3MjM4NTU0NDY2MCIM83pULBe5%2F%2BNm1GZBKvkBVslSaJVgwSef7SsoZCJlfJ56weYl3QCwEGr2F4BmCZZyFpmWEYzWnhNK1AnHMj5nkfKlKBx30XAT5PZGVrmq4Vkn9ewlXQy1Iu3QJRi9Tdod8Ef9%2FyajTaUGh76%2BF5u5a4O115jwultOQiKomVwO318CO4l8lv%2F3HhMOkpdanMXn%2B4PY8lvM8RgnzSu90jOUpGXEOAo%2F6G8OqlMim3%2BZmaQmasn4VYRvESEd7O72QGZ3%2BvDnDVnss0lSYjlv8PP7IujnvhZRnj0WoeOyMe1lL0wTG%2Fa9usH5hE52w%2FYUJccOn0OaZuyROuVsRV4Q70sbWQhUvYUt%2B0tUMKzm8vsFOp4BaNZFqobbjtb36Y92v%2Bx5kY6i0s8QE886jJtUWMP5ldMziClGx3p0mN5dzsYlM3GyiJ%2FO1mWkPQDwg3mtSpOA9oeeuAMPTA7qMqy9RNuTKBDSx9EW27wvPzBum3SJhEfxv48euadKgrIX3Z79ruQFSQOc9LUrDjR%2B4SoWAJqK%2BGX8Q3vPSjsLxhqhEMWd6U4TXcM7ku3gxMbzqfT8NDg%3D &X-Amz-Signature=<signature-value>