Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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 10.211.55.18:8773/services/Walrus
  • Go to 10.211.55.18:8443 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: http://10.211.55.18:8773/services/Walrus/mybucket/myfile 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:

Path: http://10.211.55.18:8773/services/Walrus/mybucket/myfile

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:

<headers>
Status: 400 Unauthorized
Content-Type: text/plain; charset=UTF-8
<body>
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.

share|improve this question
add comment

1 Answer

up vote 0 down vote accepted

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!

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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