2017-01-13 166 views
0

我正在使用awscli(S3 Api)通過我的softlayer objectstorage來操作一些請求。我可以檢索存儲桶列表,創建或刪除存儲桶。 當我嘗試樣本文件複製到特定的桶,我得到一個錯誤: aws --endpoint-url=https://s3-api.us-geo.objectstorage.softlayer.net s3 cp test.txt s3://my_test_bucket/filesawscli,我們計算的請求籤名與您提供的簽名不匹配

我收到以下錯誤

(既SDK的API,蟒蛇boto3 API和wascli測試)

upload failed: ./test.txt to s3://my_test_bucket/test.txt An error occurred (SignatureDoesNotMatch) when calling the PutObject operation: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. For more information, see REST Authentication and SOAP Authentication for details.

回答

1

這很奇怪 - 您似乎正在使用正確的語法。你如何傳遞你的憑證?最簡單的方法是在一個~/.aws/credentials文件,其中包含:

[default] 
aws_access_key_id = {Access Key ID} 
aws_secret_access_key = {Secret Access Key} 

如果您收到同樣的錯誤在不同的工具/庫,這是有可能的問題。如果您的憑證設置正確並且仍然遇到簽名問題,那麼我們可能需要進行更深入的分析才能弄清楚發生了什麼事情,因爲看起來您沒有做任何不正確的事情。

+0

我使用'AWS configure'命令,並與EVN變量(使用'設定值= KEY'),我能列出我的桶的所有內容,但不能上傳 – HoussemFat

+0

好吧,看起來像你可能找到了缺陷!嘗試進入'〜/ .aws/config'並刪除指定區域的任何內容,然後再次嘗試運行一個命令。 –

+1

我測試了它,但沒有解決方案,,我使用的是Windows操作系統,我會看看它是否與操作系統相關,因爲它可以在Ubuntu操作系統下正常工作。不管怎樣,謝謝你。 – HoussemFat

0

你得到錯誤的原因可能是簽名版本不同。
使用簽名版本2,但默認版本的IBM雲對象存儲是4 http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html

我不知道如何通過捲曲和python設置簽名版本。
在SDK for Java中,您需要像這樣設置,否則會出錯。

AWSCredentialsProvider provider = loadCredentialProvider(); 

ClientConfiguration config = new ClientConfiguration(); 
config.withSignerOverride("S3SignerType"); 

// second arg region not needed 
EndpointConfiguration endpointConfiguration = 
     new EndpointConfiguration(us-geo.objectstorage.softlayer.net, ""); 

AmazonS3 cos = AmazonS3ClientBuilder.standard() 
     .withCredentials(provider) 
     .withClientConfiguration(config) 
     .withEndpointConfiguration(endpointConfiguration) 
     .build(); 
相關問題