2015-05-06 24 views
8

Bir dosyayı bir Google Cloud Storage (GCS) kovanına komut satırından koymayı deniyorum. Daha sonraki bir aşamada, kullanıcı tarafından herhangi bir kullanıcı görünür kimlik doğrulaması olmaksızın dağıtılmış bir komut dosyasında kullanılır. curl dosya yükleyerek olacağınıGoogle cloud storage, genel imzalı URL ve curl kullanarak yükle

gsutil signurl -p notasecret -m PUT -d 1d myserviceaccount.p12 gs://mybucket/testfile 

https://storage.googleapis.com/mybucket/[email protected]nt.com&Expires=1430963040&Signature=gMf2h95bNmolizUGYrsQ%2F%2F%2FiHxW14I%2F0EOU3ZSFWtfCwNqSyok3iweQiuPxYXH4b26FeDSrmFOXB58%2B%2B%2BiAOJ%2B1gdLC9Y%2BkeUdbrjH0eGTW0NVsM1AWY2LsQ3dYf5Ho%2Bos1Fk26EsLJlD096Ku9aWqLW%2FpL%2FBSsUIfHijrFJPdI%3D

(kullanıcı sonunda) sonraki adım gibi bir şey üretecektir:

Şimdiye kadar böyle bir imzalı url oluşturmak bir PUT isteği ile. böylece gibi:

curl -X PUT --data-binary @testfile 'https://storage.googleapis.com/mybucket/[email protected]nt.com&Expires=1430963040&Signature=gMf2h95bNmolizUGYrsQ%2F%2F%2FiHxW14I%2F0EOU3ZSFWtfCwNqSyok3iweQiuPxYXH4b26FeDSrmFOXB58%2B%2B%2BiAOJ%2B1gdLC9Y%2BkeUdbrjH0eGTW0NVsM1AWY2LsQ3dYf5Ho%2Bos1Fk26EsLJlD096Ku9aWqLW%2FpL%2FBSsUIfHijrFJPdI%3D' 

bu kova varolan dosya ve (indirmek için) bir GET isteği ile çalışmak için, ancak yükleme için çalışmak görünmüyor. curl bana böyle hata mesajları ile sunucunun yanıtını atar:

<?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>PUT 

application/x-www-form-urlencoded 
1430963040 
/mybucket/testfile</StringToSign> 
</Error> 

Ve bu tabii ki sadece bir çıplak PUT istekte değilim olarak, bana mantıklı, ancak belirli bir boyutta belirli bir dosya için bir, “gsutil signurl” ile hesaplanan imza, hesaplandığı anda bu detaylardan haberdar olmaz.

Nedense ben izlenim oldu (örneğin son kullanım durumunda mesaja How to allow anonymous uploads to cloud storage da gsutil signurl documentation açıklanan ve dayanarak) o yüklemek çok uzun bir jenerik imzalı url oluşturmak ve daha sonra kullanmak mümkün olmalıdır. Bu nokta hakkında yanlış mıyım yoksa curl isteğini düzeltmenin bir yolu var mı?

Bu konuda herhangi bir düşünce takdir edilmektedir. Bununla birlikte, bunun "minimal araçlar" ile çalışmak, yani sadece ideal kabuk ve kıvrımla çalışmak istiyorum, fakat başka programlama dilleri yok.

EDIT: Tam problemi formüle ederek kişinin düşüncelerini düzenlemek, çözüm yolunda ilk adımdır. Ben şimdi anlı problemi çözdüğümü anlıyorum. Bununla birlikte, aynı imzalı URL'yi kullanırlarsa, birden çok kullanıcının aynı dosyaya yazacağı anlamına gelir. Belgelere, yani imzalı url'nin oluşturulmasında nesne adını ihmal

gsutil signurl -p notasecret -m PUT -d 1d myserviceaccount.p12 gs://mybucket/ 

Bu, sözde, ortaya çıkan imzalı url olan herkes benim kovaya herhangi bir türdeki herhangi bir nesne koymak için izin verecek kullanabilirsiniz önerir. Sadece bu işi alamıyorum, çünkü nasıl GCS'ye yazdığınızı gerçekten nasıl yazabileceğinizi anlayamıyorsunuz.

+0

Daha fazlası var mı? Aynı sorunu yaşıyorum, erişim engellendi. – Campbell

+0

Bu düzenlemelerden beri burada bildirilecek bir şey yok. Ne yazık ki. – bjoseru

+0

Aynı sorunu aldım – John

cevap

1

Kaynak, tek bir nesne belirtmezse, nesnenin adıyla isteğe bir URL parametresi ekleyerek bunu bireysel olarak yapabilirsiniz. Örneğin:

curl -X PUT -T - [request-url]?name=[object-name] < testfile

henüz imzalanmış URL ile kendim denemedim rağmen bu mutlaka, storage/v1 ile çalışır.

+0

Bu ilginç, teşekkürler. Ne yazık ki, işe yaramayacağım. Depolama/v1 yaklaşımı, farklı URL'ler ve nesneler eklemek için POST yöntemi kullanır. Diğer taraftan gsutil signurl, POST yöntemini desteklemez (PUT kullanır). Yukarıdaki https: //www.googleapis.com/storage/v1/b/mybucket/o adresindeki PUT isteği URL'sini değiştirmek yerine GoogleAccessId = ... as_before ...? Name = myobject' benim için çalışmıyor gibi görünüyor ya da. – bjoseru

0

Benzer sorunla karşılaştım (403 yasak).
Her bir yanıtı marş etmek için kullandığım json kitaplığımın güvenlik endişesi için &'un \u0026 ile değiştirileceği ortaya çıktı. Bu nedenle, url programda doğru olabilir, ancak istemci tarafında
geçersiz olabilir. Bu nedenle, \u0026 ile karşılaştırıldığında imzalı dize hata algılaması daha zor olduğundan, URL'nizin Signature sorgu dizesi içinde bazı dize kodlama hatası olabileceğini tahmin ediyorum.

+0

Teşekkürler. Ben bir url kodlama sorunu olduğunu sanmıyorum, komut olarak curl -X PUT -T - [istek-url] bjoseru

İlgili konular