繁体   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