2017-07-06 15 views
0

現在、相互運用モードでクラウドストレージを使用してcassandra_snapshotterを使用しようとしています。ただし、ファイルをアップロードする最初のリクエストが失敗し、シグネチャの不一致が発生します。署名の不一致でboto initiate_multipart_uploadが失敗する

import boto 
from boto.s3.connection import S3Connection 

connection = S3Connection(
    aws_access_key_id='GOOGY', 
    aws_secret_access_key='SECRET', 
    host='storage.googleapis.com' 
) 
bucket = connection.get_bucket('foo-cassandra-backups', validate=False) 

mp = bucket.initiate_multipart_upload('/g/mnt/cassandra-data2/data/bar/baz-63b205e0618711e7a41cf5e393c7464c/snapshots/20170705150900/manifest.json.lzo') 

をこれがで失敗します:

send: 'POST /g/mnt/cassandra-data2/data/foo/threshold-63b205e0618711e7a41cf5e393c7464c/snapshots/20170705150900/manifest.json.lzo?uploads HTTP/1.1\r\nHost: blubb-cassandra-backups.storage.googleapis.com\r\nAccept-Encoding: identity\r\nDate: Thu, 06 Jul 2017 11:18:46 GMT\r\nContent-Length: 0\r\nAuthorization: AWS BLUBB:F6Ml3vSzDphY7UTGNuf3m+fe19I=\r\nUser-Agent: Boto/2.47.0 Python/2.7.12 Linux/4.4.0-83-generic\r\n\r\n' 
reply: 'HTTP/1.1 403 Forbidden\r\n' 
header: X-GUploader-UploadID: BLUBB 
header: Content-Type: application/xml; charset=UTF-8 
header: Content-Length: 447 
header: Vary: Origin 
header: Date: Thu, 06 Jul 2017 11:18:46 GMT 
header: Server: UploadServer 
Traceback (most recent call last): 
    File "foo.py", line 11, in <module> 
    mp = bucket.initiate_multipart_upload('/g/mnt/cassandra-data2/data/foo/threshold-63b205e0618711e7a41cf5e393c7464c/snapshots/20170705150900/manifest.json.lzo') 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/bucket.py", line 1767, in initiate_multipart_upload 
    response.status, response.reason, body) 
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden 
<?xml version='1.0' encoding='UTF-8'?><Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.</Message><StringToSign>POST 


Thu, 06 Jul 2017 11:18:46 GMT 
/blubb-cassandra-backups/g/mnt/cassandra-data2/data/foo/threshold-63b205e0618711e7a41cf5e393c7464c/snapshots/20170705150900/manifest.json.lzo</StringToSign></Error> 

だから私は、APIはこのケースでは互換性がありません推測し、私は

も、最初の要求が失敗しているように、小さなテストケースをしましたそれを適切に修正する方法についてはここで比較的失われています。さらに私は、アップローダの大きな変更を避けたいと思います。パッチを展開する必要があるためです。

EDIT:これはのboto 2.47であり、iは、AWSが?uploadsのparamが必要ですが、APIが異なるグーグル、したがって、それは署名ではないと予想されますので、それはだと思います。

答えて

0

Google Cloud StorageはS3 APIのマルチパートアップロード機能をサポートしていないため、通常のアップロード方法(例:set_contents_from_file())を使用することをおすすめします。

関連する問題