2016-11-04 4 views
0

Ich bin mit dem folgenden Code ein signiertes URL zu generieren:boto3: generate_presigned_url vorzeitig auslaufenden

client.generate_presigned_url('get_object', 
    {'Bucket': client.bucket, 'Key': s3_filename}, ExpiresIn=expiry_seconds, HttpMethod='GET') 

Dieses eine URL generiert, die etwa wie folgt aussieht:

https://[bucket_name].s3.amazonaws.com/[path]?AWSAccessKeyId=[access-key-id]&Signature=[signature]&Expires=1478646479&x-amz-security-token=[long_token_string] 

Die 'Gültig bis' Zeitstempel ist 4 Tage in der Zukunft (zum Zeitpunkt des Schreibens) und noch, wenn ich auf den Link klicke, bekomme ich die XML-Antwort "Token ist abgelaufen". Der Link funktioniert einige Stunden nach der Generierung.

Gibt es noch etwas, das ich betrachten sollte?

Danke.

Antwort

1

Die Ablaufzeit von 1478646479 entspricht 2016-11-08T23:07:59+00:00, was in der Zukunft liegt, daher scheint die Ablaufzeit, die generiert wird, korrekt zu sein. (Wenn die Uhr auf dem Computer falsch war die Verbindung zu erzeugen, könnte dies falsch gewesen.)

Das nächste, was zu prüfen sind die Berechtigungen mit dem Unternehmen assoziiert (identifiziert durch die AWSAccessKeyId), die die vorge unterzeichnet erstellt URL Tatsächlich verwendet die URL die Berechtigungen dieser Entität (z. B. IAM-Benutzer, IAM-Rolle, STS-Anmeldeinformationen), um einen zeitlich begrenzten Zugriff auf ein Objekt zu gewähren. Wenn diese Entität nicht mehr berechtigt ist, auf das Objekt zuzugreifen, funktioniert die vorzeichenbehaftete URL nicht mehr.

Sie können Tests mit vorzeichenbehafteten URLs mithilfe des Befehls in AWS Command-Line Interface (CLI) durchführen.

+0

Ich denke, das ist wahrscheinlich die richtige Antwort - Ich benutze derzeit die IAM-Rolle, werde aber in Kürze einfach einen Standard-Zugriffsschlüssel ausprobieren (was aus Sicherheitsgründen eine Schande ist, aber wirklich keine Wahl) . Wird es als richtig markieren, wenn ich Zeit hatte, es zu testen. Vielen Dank! – Ian