I'm beginning with Eucalyptus, with some S3 and EC2 background. I have an app for which I use a personal library to interface with S3 and store/retrieve files from there. Now I want to make my app compatible with Walrus too.

This is my setup:

Ubuntu 10.04 server UEC:

  • Just installed it on a fresh VM, selecting all components but the NC, as I only need Walrus
  • After boot I verified that walrus was running at
  • Go to web portal and changed the admin password
  • From the same place I retrieved the query interface credentials (id+secret)

I was able to interact with Walrus through Cyberduck and Cloudberry without problems, I've created then a bucket 'mybucket' and an object 'myobject', but cant make a plain request with a programming HTTP library, neither using curl with generated authorization.

If I go to the browser and insert: I get a pretty XML message with an authorization error (as expected).

But when trying to get that object, I've done the following signing process (pseudo code):

digest = new_openssl_sha1_digest

date = "Sat, 03 Mar 2012 18:13:54 GMT" (now UTC datetime)

description = "GET\n\n\nSat, 03 Mar 2012 18:13:54 GMT\n/mybucket/myfile"

signature = new_base_64_HMAC(digest, secret_key, description)

headers = { 
            Date: date,  
            Authorization: "AWS <access_key_id>:<signature>"

So then I end up with these request URL and headers:


Headers: {"date"=>"Sat, 03 Mar 2012 18:13:54 GMT", "Authorization"=>"AWS WKy3rMzOWPouVOxK1p3Ar1C2uRBwa2XXXXXX:U/fpoVUCbN64h8iRICp9JZzKWgE="}

But when I issue a GET request as above I only get a tiny response saying:

Status: 400 Unauthorized
Content-Type: text/plain; charset=UTF-8
Failure: 400 Bad Request

I cannot find what I'm I doing wrong, I'm following the S3 signing process. I need to understand this as I need to implement a plugin to Walrus for my app, so I cannot use third party tools.

Hope that someone can help, thanks.


Well I found what was happening... Actually, walrus includes the /services/Walrus path on the signature too, I was only signing the /mybucket/myfile. So one can solve this by signing the string '/services/Walrus/bucket/file', thats it!

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.