Herunterladen und Hochladen von Objekten mit vorsignierten URLs - Amazon Simple Storage Service

Herunterladen und Hochladen von Objekten mit vorsignierten URLs

Um zeitlich begrenzten Zugriff auf Objekte in Amazon S3 zu gewähren, ohne Ihre Bucket-Richtlinie zu aktualisieren, können Sie vorsignierte URLs verwenden. Eine vorsignierte URL kann in einem Browser eingegeben oder von einem Programm verwendet werden, um ein Objekt herunterzuladen. Die Anmeldeinformationen, die von der vordefinierten URL verwendet werden, sind die des AWS Identity and Access Management (IAM) Prinzipals, der die URL generiert hat.

Sie können auch vorsignierte URLs verwenden, um es einer Person zu ermöglichen, ein bestimmtes Objekt in Ihren Amazon-S3-Bucket hochzuladen. So kann der Upload erfolgen, ohne dass eine andere Partei über Sicherheitsanmeldeinformationen oder Berechtigungen für AWS verfügen muss. Wenn im Bucket bereits ein Objekt mit demselben Schlüssel vorhanden ist, wie in der vorsignierten URL angegeben wird, ersetzt Amazon S3 das vorhandene Objekt durch das hochgeladene Objekt.

Sie können die vorsignierte URL mehrmals verwenden, bis hin zum Ablaufdatum und -zeitpunkt.

Wenn Sie eine vorsignierte URL erstellen, müssen Sie Ihre Sicherheitsanmeldedaten eingeben und dann Folgendes angeben:

  • Ein Amazon-S3-Bucket

  • Ein Objektschlüssel (Herunterladen: dieses Objekt wird sich in Ihrem Amazon-S3-Bucket befinden; Hochladen: der Name der hochzuladenden Datei)

  • Eine HTTP-Methode (GET zum Herunterladen von Objekten, PUT zum Hochladen, HEAD zum Lesen von Objekt-Metadaten usw.)

  • Ein Ablaufzeitintervall

Wenn Sie vorzeichenbehaftete URLs zum Hochladen von Objekten verwenden, können Sie die Objektintegrität mithilfe von Prüfsummen überprüfen. Während vorzeichenbehaftete URLs, die mit AWS Signature Version 2 erstellt wurden, nur MD5-Prüfsummen unterstützen, unterstützen vorzeichenbehaftete URLs, die mit AWS Signature Version 4 erstellt wurden, zusätzliche Prüfsummenalgorithmen einschließlich CRC-64/NVME, CRC32, CRC32C, SHA-1und SHA-256. Um diese zusätzlichen Prüfsummenalgorithmen zu verwenden, stellen Sie sicher, dass Sie AWS Signature Version 4 verwenden und den entsprechenden Prüfsummen-Header in Ihre Upload-Anforderung aufnehmen. Weitere Informationen über die Objektintegrität finden Sie unter Überprüfen der Objektintegrität in Amazon S3.

Wer eine vorsignierte URL erstellen kann

Alle Benutzer mit gültigen Sicherheitsanmeldeinformationen können vorsignierte URLs erstellen. Um erfolgreich auf ein Objekt zugreifen zu können, muss die vorsignierte URL von jemandem erstellt werden, der die Berechtigung für den Vorgang besitzt, auf dem die vorsignierte URL basiert.

Die Arten von Anmeldeinformationen, die Sie zum Erstellen einer vorsignierten URL verwenden können:

  • IAM-Benutzer - Gültig bis zu 7 Tage, wenn Sie die AWS Signature Version 4 verwenden.

    Um eine vorsignierte URL zu erstellen, die bis zu 7 Tage gültig ist, delegieren Sie zunächst die IAM-Benutzer-Anmeldeinformationen (den Zugriffsschlüssel und den geheimen Schlüssel) an die Methode, die Sie verwenden, um die vorsignierte URL zu erstellen.

  • Temporäre Sicherheitsanmeldeinformationen – Sie können nicht länger gültig sein als die Anmeldeinformationen selbst. Zu diesen Anmeldeinformationen gehören:

    • IAM-Rollenanmeldeinformationen – Die vorsignierte URL läuft ab, wenn die Rollensitzung abläuft, auch wenn Sie eine längere Ablaufzeit angeben.

    • Von Amazon EC2-Instances verwendete IAM-Rollenanmeldeinformationen – Gültig für die Dauer der Rollenanmeldeinformationen (normalerweise 6 Stunden).

    • AWS Security Token ServiceAnmeldeinformationen – Gültig nur für die Dauer der temporären Anmeldeinformationen.

Anmerkung

Wenn Sie eine vorsignierte URL mit temporären Anmeldeinformationen erstellt haben, verfällt die URL mit Ablauf der Anmeldeinformationen. Im Allgemeinen läuft eine vorsignierte URL ab, wenn die Anmeldeinformationen, mit denen Sie sie erstellt haben, gesperrt, gelöscht oder deaktiviert werden. Dies gilt auch dann, wenn die URL mit einer späteren Ablaufzeit erstellt wurde. Informationen zur Gültigkeitsdauer temporärer Sicherheitsanmeldedaten finden Sie unter Vergleichen von AWS STS-API-Operationen im IAM-Benutzerhandbuch.

Ablaufzeit für vorsignierte URLs

Eine vorsignierte URL bleibt für den Zeitraum gültig, der bei der Generierung der URL angegeben wurde. Wenn Sie eine vorsignierte URL mit der Amazon-S3-Konsole erstellen, kann die Ablaufzeit auf einen Zeitraum zwischen 1 Minute und 12 Stunden festgelegt werden. Wenn Sie die AWS CLI- oder AWS-SDKs verwenden, kann die Ablaufzeit auf bis zu 7 Tage festgelegt werden.

Wenn Sie eine vorsignierte URL unter Verwendung eines temporären Tokens erstellt haben, läuft die URL ab, sobald der Token abläuft. Im Allgemeinen läuft eine vorsignierte URL ab, wenn die Anmeldeinformationen, mit denen Sie sie erstellt haben, gesperrt, gelöscht oder deaktiviert werden. Dies gilt auch dann, wenn die URL mit einer späteren Ablaufzeit erstellt wurde. Weitere Informationen darüber, wie sich die von Ihnen verwendeten Anmeldeinformationen auf die Ablaufzeit auswirken, finden Sie unter Wer eine vorsignierte URL erstellen kann.

Amazon S3 überprüft das Ablaufdatum und die Ablaufzeit in einer signierten URL zum Zeitpunkt der HTTP-Anforderung. Beginnt ein Client beispielsweise mit dem Herunterladen einer großen Datei unmittelbar vor der Ablaufzeit, wird der Download auch dann fortgesetzt, wenn die Ablaufzeit während des Downloads verstreicht. Wenn die Verbindung jedoch unterbrochen wird und der Client versucht, den Download nach Ablauf der Zeit erneut zu starten, schlägt der Download fehl.

Beschränkung der Funktionen für vorsignierte URLs

Die Funktionen einer vorsignierten URL sind durch die Berechtigungen des Benutzers eingeschränkt, der sie erstellt hat. Im Wesentlichen sind vorsignierte URLs Inhaber-Token, die denjenigen, die sie besitzen, Zugriff gewähren. Daher empfehlen wir Ihnen, sie angemessen zu schützen. Im Folgenden finden Sie einige Methoden, die Sie verwenden können, um die Verwendung Ihrer vorsignierten URLs zu beschränken.

AWS Signature Version 4 (SigV4)

Um ein bestimmtes Verhalten zu erzwingen, wenn vorsignierte URL-Anfragen mit AWS Signature Version 4 (SigV4) authentifiziert werden, können Sie Bedingungsschlüssel in Bucket-Richtlinien und Zugriffspunkt-Richtlinien verwenden. Beispielsweise verwendet die folgende Bucket-Richtlinie die s3:signatureAge-Bedingung, um jede vorsignierte URL-Anfrage von Amazon S3 für Objekte im amzn-s3-demo-bucket-Bucket zu verweigern, wenn die Signatur mehr als 10 Minuten alt ist. Wenn Sie dieses Beispiel verwenden möchten, ersetzen Sie die user input placeholders (Platzhalter für Benutzereingaben) durch Ihre Informationen.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "Deny a presigned URL request if the signature is more than 10 min old", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "s3:*", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "NumericGreaterThan": { "s3:signatureAge": "600000" } } } ] }

Weitere Informationen zu AWS-Signaturen der Version 4 im Zusammenhang mit Richtlinienschlüsseln finden Sie unter Authentifizierung von AWS-Signaturen der Version 4 in der Amazon Simple Storage Service API-Referenz.

Beschränkung der Netzwege

Wenn Sie die Verwendung vorsignierter URLs und des gesamten S3-Zugriffs auf bestimmte Netzwerkpfade einschränken möchten, können Sie AWS Identity and Access Management(IAM)-Richtlinien schreiben. Diese Richtlinien können für den IAM-Prinzipal, der den Aufruf vornimmt, den Amazon-S3-Bucket oder beide festgelegt werden.

Eine Netzwerkpfadbeschränkung für den IAM-Prinzipal erfordert, dass der Benutzer dieser Anmeldeinformationen Anfragen aus dem angegebenen Netzwerk stellt. Eine Einschränkung des Buckets oder des Zugriffspunkts erfordert, dass alle Anfragen an diese Ressource aus dem angegebenen Netz stammen. Diese Einschränkungen gelten auch außerhalb des Szenarios der vorsignierten URL.

Der globale IAM-Bedingungsschlüssel, den Sie verwenden, hängt von der Art des Endpunkts ab. Wenn Sie den öffentlichen Endpunkt für Amazon S3 verwenden, verwenden Sie aws:SourceIp. Wenn Sie einen Virtual Private Cloud (VPC)-Endpunkt für Amazon S3 nutzen, verwenden Sie aws:SourceVpc oder aws:SourceVpce.

Die folgende IAM-Richtlinienanweisung verlangt, dass der Prinzipal ausschließlich über den angegebenen Netzwerkbereich auf AWS zugreift. Mit dieser Richtlinie müssen alle Zugriffe von diesem Bereich ausgehen. Dies gilt auch für den Fall, dass jemand eine vorsignierte URL für Amazon S3 verwendet. Wenn Sie dieses Beispiel verwenden möchten, ersetzen Sie die user input placeholders (Platzhalter für Benutzereingaben) durch Ihre Informationen.

{ "Sid": "NetworkRestrictionForIAMPrincipal", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddressIfExists": {"aws:SourceIp": "IP-address-range"}, "BoolIfExists": {"aws:ViaAWSService": "false"} } }

Häufig gestellte Fragen zu vordefinierten URLs

F: Warum laufen meine vordefinierten URLs früher ab als die konfigurierte Ablaufzeit?

Vorgegebene URLs bleiben nur so lange gültig, wie die ihnen zugrunde liegenden Anmeldeinformationen gültig sind. Eine vorzeichenbehaftete URL läuft entweder zu ihrer konfigurierten Ablaufzeit ab oder wenn die zugehörigen Anmeldeinformationen ablaufen, je nachdem, was zuerst eintritt. Bei Aufgaben oder Containern von Amazon Elastic Container Service wechseln die Rollenanmeldeinformationen in der Regel alle 1–6 Stunden. Bei Verwendung von AWS Security Token Service (AWS STS) AssumeRole läuft die zugewiesene URL ab, wenn die Rollensitzung endet, was standardmäßig 1 Stunde ist. Bei Amazon EC2 Instance-Profilen rotieren die Anmeldeinformationen regelmäßig mit einer maximalen Gültigkeitsdauer von ca. 6 Stunden.

F: Warum erhalte ich einen 403 Forbidden-Fehler, wenn ich auf eine vordefinierte URL zugreife?

Vergewissern Sie sich vor der Generierung einer vordefinierten URL, dass Sie die richtigen Berechtigungen konfiguriert haben. Der IAM-Benutzer oder die IAM-Rolle, der/die die URL generiert, muss über die erforderlichen Berechtigungen, wie z. B. s3:GetObject, für den spezifischen Vorgang verfügen. Stellen Sie außerdem sicher, dass die Amazon S3-Bucket-Richtlinie den Zugriff auf das Objekt nicht ausdrücklich verweigert.

F: Ich erhalte SignatureDoesNotMatch Fehler. Wie lässt sich dieses Problem beheben?

Wenn Sie bei der Verwendung von vorsignierten Amazon S3-URLs auf SignatureDoesNotMatch Fehler stoßen, sollten Sie mehrere häufige Ursachen in Betracht ziehen. Stellen Sie zunächst sicher, dass Ihre Systemuhr mit einem NTP-Server (Network Time Protocol) synchronisiert ist, da selbst kleine Zeitabweichungen Signaturen ungültig machen können. Beachten Sie außerdem, dass einige Unternehmens-Proxys Kopfzeilen oder Abfragezeichenfolgen ändern können, was möglicherweise zu Signaturfehlern führt. Versuchen Sie zur Fehlerbehebung, ohne den Proxy zu testen. Stellen Sie abschließend sicher, dass alle Anforderungsparameter – einschließlich der HTTP-Methode, der Header und der Abfragezeichenfolge – bei der Generierung und Verwendung der URL exakt übereinstimmen. Die Behebung dieser Probleme kann häufig SignatureDoesNotMatch-Fehler beheben.

F: Ich erhalte ExpiredToken Fehler. Was soll ich tun?

Wenn Sie bei der Verwendung von vordefinierten URLs ExpiredToken Fehler erhalten, bedeutet dies, dass die AWS Anmeldeinformationen, die zur Generierung der URL verwendet wurden, nicht mehr gültig sind. Um dieses Problem zu beheben, aktualisieren Sie Ihre AWS Anmeldeinformationen, bevor Sie neue vordefinierte URLs generieren. Für Anwendungen, die lange laufen, empfehlen wir die Implementierung einer Logik zur Aktualisierung der Anmeldeinformationen, um einen kontinuierlichen Zugriff zu gewährleisten. Gegebenenfalls können Sie Anmeldeinformationen mit längerer Lebensdauer verwenden oder Mechanismen zur Aktualisierung von Token implementieren. Wenn Sie AWS Security Token Service (AWS STS) AssumeRole verwenden, überprüfen Sie, ob die konfigurierte Sitzungsdauer den Anforderungen Ihres Anwendungsfalls entspricht. Denken Sie daran, dass vorzeichenbehaftete URLs nur für die Dauer der ihnen zugrundeliegenden Anmeldeinformationen gültig sind, weshalb eine ordnungsgemäße Verwaltung der Anmeldeinformationen unerlässlich ist.