私はEucalyptusから始めており、S3とEC2のバックグラウンドがあります。パーソナルライブラリを使用してS3とインターフェイスし、そこからファイルを保存/取得するアプリがあります。今度は、アプリをWalrusとも互換性を持たせたいと思います。
これは私の設定です:
Ubuntu 10.04サーバーUEC:
10.211.55.18:8773/services/Walrus
で実行されていることを確認しました10.211.55.18:8443
Webポータルに移動し、管理者パスワードを変更しました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へのプラグインを実装する必要があるため、これを理解する必要があります。そのため、サードパーティのツールを使用できません。
誰かが助けてくれることを願っています、ありがとう。
何が起こっているのかわかりました...実際、walrusは署名に/ services/Walrusパスも含めており、私は/ mybucket/myfileにのみ署名していました。したがって、文字列 '/ services/Walrus /バケット/ファイル'に署名することでこれを解決できます、それだけです!