我看过这里的每一个答案,似乎我的问题有点不同或者没有一个合适的解决方案。我在我的PHP文件中执行以下操作:
use Aws\Route53\Route53Client;
$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01'
));
出现此错误:
Fatal error: Uncaught Aws\Exception\CredentialsException: Cannot read credentials from /.aws/credentials
似乎简单的解决方法是确保HOME目录是正确的。确实已经是。文件是可读的,我的ec2用户已经是所有者。密钥和密钥已安装在“凭据”文件中。配置文件名称已设置为“默认”。试图将/.aws复制到其他目录,如root,/ home等,并更改权限,chmod,以上所有。仍然没有。
然后我试着硬编码凭证(我知道 - 不推荐)只是为了给它一点点,它完全忽略了我这样做了:
$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
作为最后的手段,我甚至尝试包含CredentialProvider类,并将其传递到我的数组中 - 仍然没有:
'credentials' => CredentialProvider::ini('default', '/home/ec2-user/.aws/credentials'),
我到底在做什么?
答案 0 :(得分:23)
只需删除'profile' => 'default'
,就可以正常使用
$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
答案 1 :(得分:3)
面对这个问题,这是我的确切方法:
<块引用>PHP 版本:7.2.24 AWS PHP SDK 版本:3.180.4
首先将您现有的 aws 文件夹复制到您的根主目录
sudo cp -r ~/.aws /
那么你的代码应该是这样的:
$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01'
));
就我而言,有趣的是,PHP SDK 在根文件夹中而不是在当前用户的主目录中查找凭据文件。这是我的方法奏效的最可行的原因。
但是,您想为本地配置找到一个更通用的位置,并使用以下方法加载它。
$path = '/my/config/folder/.aws/credentials';
$provider = CredentialProvider::ini('default', $path);
$provider = CredentialProvider::memoize($provider);
$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => $provider
));
希望这能给 AWS PHP 社区带来更多光明。正确配置此配置以构建安全的 PHP 应用程序非常重要
答案 2 :(得分:1)
不确定你做错了什么,但我建议完全绕过这个问题并为相关的vm分配一个EC2实例角色,然后你不必担心它;这是一个更好/更安全的解决方案。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html
答案 3 :(得分:1)
以下是我最终为此问题所做的事情,尽管上面EJ的答案实际上是正确的答案。希望这有助于某人获取他们的凭证文件:
use Aws\Credentials\CredentialProvider;
use Aws\Route53\Route53Client;
$profile = 'default';
$path = '/var/www/html/.aws/credentials';
$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);
$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => $provider
));
答案 4 :(得分:1)
在AWS Centos 7上运行,我尝试了所有方法(chmod / chown / root / home / user,env,bashrc等),以使/.aws/credentials在apache / var / www目录之外工作。 SDK报告无法读取凭据文件。
我查看了PHP以查看是否可以设置/覆盖HOME变量,直到将.aws文件夹放置在'/ var / www'文件夹并将HOME变量设置在我的文件夹中之后,它仍然没有读取凭据文件。像这样的php文件:
<%php
putenv('HOME=/var/www');
//ZIP File SDK Install requires aws-autoloader
require 'aws-autoloader.php'; //Your php code below
答案 5 :(得分:1)