Estou começando com o eucalipto, com alguns antecedentes S3 e EC2. Eu tenho um aplicativo para o qual eu uso uma biblioteca pessoal para interface com o S3 e armazenar / recuperar arquivos de lá. Agora eu quero tornar meu aplicativo compatível com o Walrus também.
Esta é minha configuração:
UEC do servidor Ubuntu 10.04:
- Acabei de instalá-lo em uma VM nova, selecionando todos os componentes, mas o NC, já que só preciso do Walrus
- Após a inicialização, verifiquei que a morsa estava em execução em
10.211.55.18:8773/services/Walrus
- Vá para o portal da Web
10.211.55.18:8443
e altere a senha do administrador
- No mesmo local, recuperei as credenciais da interface de consulta (id + secret)
Eu consegui interagir com o Walrus através do Cyberduck e do Cloudberry sem problemas, eu criei um bucket 'mybucket' e um objeto 'myobject', mas não posso fazer um pedido simples com uma biblioteca HTTP de programação, nem usando curl com autorização gerada.
Se eu for ao navegador e inserir: http://10.211.55.18:8773/services/Walrus/mybucket/myfile
recebo uma mensagem XML bonita com um erro de autorização (como esperado).
Mas ao tentar obter esse objeto, fiz o seguinte processo de assinatura (pseudo código):
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>"
}
Então, acabo com esses URLs e cabeçalhos de solicitação:
Caminho: http://10.211.55.18:8773/services/Walrus/mybucket/myfile
Cabeçalhos: {"date"=>"Sat, 03 Mar 2012 18:13:54 GMT", "Authorization"=>"AWS WKy3rMzOWPouVOxK1p3Ar1C2uRBwa2XXXXXX:U/fpoVUCbN64h8iRICp9JZzKWgE="}
Mas quando eu emito uma solicitação GET como acima, recebo apenas uma pequena resposta:
<headers>
Status: 400 Unauthorized
Content-Type: text/plain; charset=UTF-8
<body>
Failure: 400 Bad Request
Não consigo encontrar o que estou fazendo de errado, estou seguindo o processo de assinatura do S3. Eu preciso entender isso, pois eu preciso implementar um plugin para o Walrus para o meu aplicativo, por isso não posso usar ferramentas de terceiros.
Espero que alguém possa ajudar, obrigado.