我从 Eucalyptus 开始,有一些 S3 和 EC2 背景。我有一个应用程序,我使用个人库与 S3 交互并从那里存储/检索文件。现在我想让我的应用程序也与 Walrus 兼容。
这是我的设置:
Ubuntu 10.04 服务器 UEC:
- 刚刚在新的虚拟机上安装了它,选择了除 NC 之外的所有组件,因为我只需要 Walrus
- 启动后,我确认海象正在运行
10.211.55.18:8773/services/Walrus
- 进入
10.211.55.18:8443
网站门户并更改管理员密码 - 我从同一个地方检索了查询接口凭证(id+secret)
我能够通过 Cyberduck 和 Cloudberry 与 Walrus 进行交互,没有任何问题,然后我创建了一个存储桶“mybucket”和一个对象“myobject”,但无法使用编程 HTTP 库发出普通请求,也无法使用生成授权的 curl。
如果我进入浏览器并插入:http://10.211.55.18:8773/services/Walrus/mybucket/myfile
我会收到一条带有授权错误的漂亮 XML 消息(正如预期的那样)。
但是当尝试获取该对象时,我完成了以下签名过程(伪代码):
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>"
}
因此我最终得到了这些请求 URL 和标头:
小路:http://10.211.55.18:8773/services/Walrus/mybucket/myfile
标头:{"date"=>"Sat, 03 Mar 2012 18:13:54 GMT", "Authorization"=>"AWS WKy3rMzOWPouVOxK1p3Ar1C2uRBwa2XXXXXX:U/fpoVUCbN64h8iRICp9JZzKWgE="}
但是当我发出如上所述的 GET 请求时,我只收到一个微小的响应:
<headers>
Status: 400 Unauthorized
Content-Type: text/plain; charset=UTF-8
<body>
Failure: 400 Bad Request
我找不到我做错的地方,我正在遵循 S3 签名流程。我需要理解这一点,因为我需要为我的应用程序实现 Walrus 插件,所以我不能使用第三方工具。
希望有人可以帮忙,谢谢。
答案1
好吧,我发现发生了什么……实际上,walrus 也在签名中包含了 /services/Walrus 路径,而我只签署了 /mybucket/myfile。因此,可以通过签署字符串“/services/Walrus/bucket/file”来解决这个问题,就是这样!