J'ai un compartiment appartenant à un autre compte. En utilisant l'AWS CLI, je peux accéder à (liste et lire des objets) ce seau. Par exemple:SignatureDoesNotMatch dans AWS Java SDK pour S3
Répertorie les objets.
En essayant de recréer le même en utilisant le SDK Java (en Scala) j'obtiens l'exception ci-dessus (SignatureDoesNotMatch).
Voici le code:
package com.myco.sample
class TestCase() {
val credentials = new com.amazonaws.auth.BasicAWSCredentials(
"ACCESS_KEY_ID",
"SECRET_ACCESS_KEY"
)
val s3 = new com.amazonaws.services.s3.AmazonS3Client(credentials)
val endpoint = "somebucket.s3-us-west-2.amazonaws.com"
s3.setEndpoint(endpoint)
try {
val objs = s3.listObjects("foo/bar")
} catch {
case ace: com.amazonaws.services.s3.model.AmazonS3Exception => {
println(ace.getAdditionalDetails)
}
}
}
L'appel à listObjects déclenche une exception. La sortie est:
com.amazonaws.services.s3.model.AmazonS3Exception: The request signature we calculated does not match the signature you provided. Check your key and signing method. (Service: Amazon S3; Status Code: 403; Error Code: SignatureDoesNotMatch; Request ID: XXXXXXXXX), S3 Extended Request ID: XXXXXXXXXXXXXXXXXXX=
{SignatureProvided=XXXXXXXXXXXXX=, StringToSign=Wed, 06 Jan 2016 04:32:38 GMT
/somebucket/foo/bar/, AWSAccessKeyId=XXXXXX, Error=XXXXXXXXXXXX=, StringToSignBytes=XXXXXXXXX}
Quand ne fournissant pas le point final comme ci-dessus, je reçois une autre erreur: The bucket you are attempting to access must be addressed using the specified endpoint
Après avoir défini le point final, j'ai essayé plusieurs façons de passer le « seau » paramètre à listObjects, qui n'a pas fonctionné.
Vous ne savez pas pourquoi la signature générée en arrière-plan est incorrecte. Des idées?
Vérifiez l'heure sur votre système (utilisé pour générer la demande) et vérifiez vos informations d'identification. – cchantep
Un bon point de départ pour déboguer le problème est http://docs.aws.amazon.com/general/latest/gr/signature -v4-troubleshooting.html – FtoTheZ
@cchantep Comment déterminez-vous le "bon" moment? Généralement, la même chose fonctionne en utilisant l'AWS CLI * sur la même machine * où le processus de création de signature utilise le même temps. –