Mit boto für AWS S3-Buckets für die Signatur-V4

Ich habe ein problem mit der Python-Boto SDK für S3-Buckets für die region Frankfurt. Nach Amazon link dieser region wird nur support V4.
Diese Dokument erläutert, wie V4-Unterstützung für Boto SDK.
Ich habe eine neue Sektion Hinzugefügt:

if not boto.config.get('s3', 'use-sigv4'):
    boto.config.add_section('s3')
    boto.config.set('s3', 'use-sigv4', 'True')

und dann habe ich eine neue Verbindung erstellt und habe alle Eimer:

connection = S3Connection(accesskey, secretkey, host=S3Connection.DefaultHost)
buckets = connection.get_all_buckets()

funktioniert es einwandfrei, aber dann habe ich versucht, alle Schlüssel in meinem Eimer:

for bucket in buckets:
    bucket.get_all_keys()

und ich bekam die folgende:

S3ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'eu-central-1'</Message><Region>eu-central-1</Region>

Warum geschah es?
Danach habe ich mich der region verbunden und haben alle benötigten Daten:

region_con = boto.s3.connect_to_region('eu-central-1', aws_access_key_id=accesskey, aws_secret_access_key=secretkey)
bucket = region_con.get_bucket(bucket.name)
bucket.get_all_keys()

Wie kann ich es beheben richtig?

  • Was passiert, wenn Sie tatsächlich Veränderungen in Ihrem boto config-Datei, anstatt zu versuchen, es zu tun programmgesteuert?
  • Ja, ich habe versucht es vor, bekam aber das gleiche Ergebnis. Welchen Unterschied sollte Ihr Konzept haben?
  • Wohl keiner, aber Sie ändern nur den Wert der in-memory-Konfiguration in Ihrer Umgebung. Wenn ein anderes config wurde erstellt irgendwo sonst wäre es nicht die updates, denn es würde das Lesen der config direkt aus der config-Datei. Ich fragte mich nur, ob das irgendeinen Unterschied machen würde.
InformationsquelleAutor Oleg | 2014-12-10
Schreibe einen Kommentar