2012-04-23 32 views
7

Sto utilizzando una classe PHP per Amazon S3 e CloudFront - Link. Ma quando provo a caricare un file in un bucket, ottengo questo errore:SignatureDoesNotMatch - Amazon S3 API

[SignatureDoesNotMatch] The request signature we calculated does not match the signature you provided. Check your key and signing method.

Come risolvere il problema?

Grazie.

risposta

8

Quando ti iscrivi ad Amazon, puoi crearti una coppia di chiavi (Amazon chiama l'ID della chiave di accesso e la chiave di accesso segreta).

Questi due sono utilizzati per firmare le richieste ai servizi web di Amazon. Amazon ricalcola la firma e la confronta se corrisponde a quella contenuta nella richiesta. In questo modo la chiave di accesso segreto non deve mai essere trasmessa sulla rete.

Se si ottiene "Firma non corrisponde", è molto probabile che sia stata utilizzata una chiave di accesso segreta errata. Puoi ricontrollare la chiave di accesso e la chiave di accesso segreto per assicurarti che siano corretti?

+0

Grazie! Come risolvere questo problema - http://goo.gl/QTdm4 –

+0

@ roman-nazarkin Quindi il problema era la posizione del secchio? – awendt

+1

nel mio caso c'erano degli spazi bianchi extra nel file config/setting che aveva la chiave segreta, quindi stava trasmettendo un carattere 'tab' in più nella" password ", invalidando così la firma. – drzaus

4

Personalmente ho ricevuto questo errore a causa dei caratteri che erano nei miei meta dati.

Il carattere problematico era il carattere "-" che è "\ u2013" in unicode e diverso da "-".

$result = $s3->putObject(array(
    'Bucket'  => $bucket, 
    'Key'   => $keyname, 
    'Metadata' => [ 
     'name' => 'Terminology – Blah' 
    ] 
)); 

Una nota dalla documentazione http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#UserMetadata ...

Amazon S3 stores user-defined metadata in lowercase. Each name, value pair must conform to US-ASCII when using REST and UTF-8 when using SOAP or browser-based uploads via POST.

+1

idem - quando si aggiungono i metadati con una chiave "Cache-Control" su un oggetto che ha già una chiave di metadati "cache-control", ho ricevuto questo errore. – Joscha

0

ho avuto questo errore con putObject() quando si specifica un Key inizia con carattere barra (/) - dopo aver rimosso la barra ha funzionato bene.