无法从/.aws/credentials中读取凭据

时间:2018-09-19 09:49:21

标签: amazon-web-services amazon-s3 aws-sdk aws-php-sdk

我正在尝试将AWS PHP SDK集成到codeigniter

但其显示错误如下

An uncaught Exception was encountered
Type: Aws\Exception\CredentialsException

Message: Cannot read credentials from /.aws/credentials

Filename: /var/www/html/aws/Aws/Credentials/CredentialProvider.php

并且在cli上出现错误 -bash:/root/.aws/credentials:权限被拒绝

所以在此之后,我允许了权限... cli错误消失了,但是php错误无法从/.aws/credentials读取凭据。

请帮助解决此问题。

谢谢!

3 个答案:

答案 0 :(得分:2)

在另一个AWS服务上运行代码时,您不会像在本地计算机上那样使用密钥和机密。看看我在另一个问题上提出的answer

基本上,您的EC2实例被分配了一个服务角色。然后,您将一个或多个IAM策略附加到该角色。 IAM策略将确定您的EC2实例可以访问哪些AWS资源和操作。

在您的PHP代码中,您将使用CredentialProvider::defaultProvider()实例化客户端。例如,如果您正在使用S3,它将看起来像这样。

$s3 = new S3Client([
    'region' =>'us-east-1',
    'credentials' => CredentialProvider::defaultProvider()
]);

答案 1 :(得分:1)

如果您将IAM角色用于EC2实例,则无需使用以下内容

'profile'=>'default',

我只是删除解决错误“无法从/.aws/credentials读取凭据”的行以上

Issue using an IAM role with PHP SDK

答案 2 :(得分:0)

当PHP在服务下运行时,没有“用户”。因此,PHP将不会尝试访问/root/.aws/credentials。如果您查看错误,则路径为/.aws/credentails。

要解决此问题,请创建一个新目录/.aws并将目录/root/.aws复制到/.aws

改进:

您已将PHP SDK安装在网站根文件夹中,该文件可从外部访问。 SDK应该安装在网站文件夹之外。