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.%2FBeispiel:&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 auf |
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:
Beispiel:
Für Amazon S3 lautet die |
X-Amz-Date |
Das Datums- und Uhrzeitformat muss dem ISO-8601-Standard entsprechen und mit dem Format " |
X-Amz-Expires |
Gibt den Zeitraum in Sekunden an, für den die generierte vorsignierte URL gültig ist. 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:
AnmerkungFü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: 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.
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:
WichtigDie 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.
|
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-TokenAbfrageparameter in die URL aufnehmen, wenn Sie Anmeldeinformationen verwenden, die vom STS-Dienst stammen. -
Canonical Header müssen den HTTP-Header enthalten.
hostWenn Sie beabsichtigen, einen derx-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 eineInvalidRequestFehlermeldung, 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 ist
Fri, 24 May 2013 00:00:00 GMT. -
Der Bucket befindet sich in der Region USA Ost (Nord-Virginia), und die Anmeldeinformationen
Scopeund dieSigning KeyBerechnungen werdenus-east-1als 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 |
-
StringToSign
-
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 -
StringToSign
AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 3bfa292879f6447bbcda7001decf97f4a54dc650c8942174ae0a9121cf58ad04
-
-
SigningKey
signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request") -
Signatur
aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404Jetzt 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>