簡體   English   中英

使用AWS PHP SDK上載到AWS S3會導致身份驗證失敗

[英]Upload to AWS S3 with AWS PHP SDK fails authentication

我正在使用3.67.5版的AWS開發工具包PHP將文件上傳到S3。 該代碼在Heroku測功機中。

我創建了訪問密鑰AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,並將其設置為Heroku實例中的配置變量。 我知道它們在那里,因為使用getenv()我已經輸出了它們。

我正在使用以下代碼:

try {
   //Create a S3Client
   $s3Client = new S3Client([
        'profile' => 'default',
        'region' => 'some-region',
        'version' => 'latest'
    ]);
    $result = $s3Client->putObject([
        'Bucket'     => 'some-bucket',
        'Key'        => $fileName,
        'SourceFile' => $this->getParameter('photos_directory') . $fileName,
    ]);
} catch (AwsException $e) {
    echo $e->getMessage() . "\n";
}

盡管如此,上傳文件仍然顯示以下錯誤:

request.CRITICAL: Uncaught PHP Exception Aws\Exception\CredentialsException: "Cannot read credentials from /app/.aws/credentials"

我已經測試過在構造函數中傳遞新元素'credentials',就像它們在單元測試中一樣 ,並且錯誤是相同的。

步驟1:確保文件/app/.aws/credentials不存在。 如果確實存在並且為空,則您將出現一個憑證錯誤。

步驟2:將客戶代碼更改為以下內容:

use Aws\Credentials\CredentialProvider;

$s3Client = new S3Client([
     'profile' => 'default',
     'region' => 'some-region',
     'version' => 'latest',
     credentials' => CredentialProvider::env()
]);

如果這不能解決您的問題,則說明您拼寫了環境變量,或者沒有將其導出,以便您的程序可以看到它們。

如果這樣做確實有效,則其他地方存在無效的憑據。

問題在於將配置文件定義為“默認”。 當我刪除配置文件參數時,錯誤消失了。

使用最新版本3.67.8時,發生以下錯誤:

AWS HTTP error: Client error: `PUT https: // some-url` resulted in a` 403 Forbidden`

無論如何,就我而言,在兩個版本中,都忽略profile參數是解決方案。

暫無
暫無

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

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