簡體   English   中英

帶有 Amazon S3 PHP SDK v3 的 Google 存儲不正確的授權標頭

[英]Google Storage Incorrect Authorization Header with Amazon S3 PHP SDK v3

我正在從 Amazon S3 遷移到 Google Storage,但似乎無法使用我的憑據。 下面是一些示例代碼,我將它們放在一起以測試我的憑據:

$client = new S3Client([
    'credentials' => [
        'key' => 'GOOGxxxxxxxxxxxxxxx',
        'secret' => 'ZfcOTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    ],
    'region' => 'US',
    'version' => 'latest',
    'endpoint' => 'https://storage.googleapis.com',
]);

try {
    $result = $client->putObject(array(
        'Bucket' => 'devtest',
        'Key' => 'test',
        'Body' => 'Hello world'
    ));

    echo $result['ObjectURL'];
} catch (\Aws\S3\Exception\S3Exception $e) {
    // The AWS error code (e.g., )
    echo $e->getAwsErrorCode() . "\n";
    // The bucket couldn't be created
    echo $e->getMessage() . "\n";
}

這是我的回復:

InvalidSecurity 在“ https://storage.googleapis.com/devtest/test ”上執行“PutObject”時出錯; AWS HTTP 錯誤:客戶端錯誤響應 [url] https://storage.googleapis.com/devtest/test [狀態代碼] 403 [原因短語] Forbidden InvalidSecurity(客戶端):提供的安全憑證無效。 - InvalidSecurity 提供的安全憑證無效。 不正確的授權標頭

我試過用谷歌搜索這個問題的 100 種不同的組合,但找不到任何東西。 我啟用了互操作性,至少我認為我這樣做了,因為我認為如果不先啟用它,我就無法獲得密鑰/秘密。 我啟用了 Google Storage API。

任何幫助將不勝感激。

編輯:這是身份驗證標頭,以防萬一:

AWS4-HMAC-SHA256 Credential=GOOGGUxxxxxxxxxxx/20150611/US/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=9c7de4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

我注意到即使我指定了“簽名”=>“v2”,它仍然是“aws4_request”。 不確定這是否重要。

我查看了 S3Client 代碼,據我所知,它沒有使用“簽名”配置密鑰。 我發現的唯一一件事是“signature_version”,當設置為 v2 時,我收到此錯誤:

無法解析 v2/s3/US 的簽名。 有效的簽名版本包括 v4 和匿名。

我正在使用 Laravel 5.1 和 Composer 包 aws/aws-sdk-php 版本 3.0.3

有任何想法嗎?

S3 僅支持 v4 簽名,此要求由 PHP SDK 強制執行。 似乎 Google Cloud Storage 僅支持 v2 簽名,因此您無法使用相同的庫與兩者進行對話。 Google 確實提供了他們自己的PHP SDK ,這可能會使與 Cloud Storage 的對話更容易一些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM