无法从 /.aws/credentials 读取凭据 - PHP 脚本调用 AWS-SDK
Cannot read credentials from /.aws/credentials - PHP script call AWS-SDK
我查看了这里的每个答案,我的问题似乎有点不同,或者没有合适的解决方案。我在 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-user 已经是所有者。 Key 和 Secret 已经安装在 'credentials' 文件中。配置文件名称已设置为 'default.' 尝试将 /.aws 复制到其他目录,例如根目录、/home 等,并更改了权限、chmod,以上所有内容。仍然没有。
然后我尝试硬编码凭据(我知道——不推荐)只是为了给它一点刺激,它完全忽略了我这样做:
$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
作为最后的手段,我什至尝试包括 CredentialProvider class,并将其传递到我的数组中——仍然没有:
'credentials' => CredentialProvider::ini('default', '/home/ec2-user/.aws/credentials'),
我到底做错了什么?
不确定你做错了什么,但我建议完全绕过这个问题并将 EC2 实例角色分配给有问题的虚拟机,这样你就不必担心了;这是一个 better/more 安全的解决方案。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html
尽管 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
));
只需删除 'profile' => 'default'
,你应该可以正常工作
$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
运行 在 AWS Centos 7 上,我尝试了一切(chmod/chown /root /home/user、env、bashrc 等)来让 /.aws/credentials 工作在 apache /var/www 目录之外。 SDK 报告无法读取凭据文件。
我查看了 PHP 以查看是否可以 set/override HOME 变量,但在我将 .aws 文件夹放入 '/var/www 之前它仍然没有读取凭据文件' 文件夹并在我的 php 文件中设置 HOME 变量,如下所示:
<%php
putenv('HOME=/var/www');
//ZIP File SDK Install requires aws-autoloader
require 'aws-autoloader.php'; //Your php code below
- 使用 "ls -l"
检查 .aws/* 文件的权限
- 更改大读权限或授予所有权限"sudo chmod 777 .aws/*"
- 重新运行代码
面对这个问题,我的具体做法是:
PHP version : 7.2.24 AWS PHP SDK version: 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 应用程序
非常重要
我认为 AWS 手册有点混乱。
我在文件系统根目录 (/) 中创建了 .aws
目录,而不是在 /root
或 /home
目录中,一切正常。
/.aws/credentials
我从 PHP 8.0 升级到 PHP 8.1,PHP 突然抱怨找不到凭证文件。 xdebug
错误跟踪向我显示了预期位置,它比我的 public html
目录低一级。我不知道它为什么改变,但我只是 运行 在该目录中执行此命令:
ln -s /.aws/ .aws
我创建的符号链接可以很好地提供凭据。我回来了 运行.
我查看了这里的每个答案,我的问题似乎有点不同,或者没有合适的解决方案。我在 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-user 已经是所有者。 Key 和 Secret 已经安装在 'credentials' 文件中。配置文件名称已设置为 'default.' 尝试将 /.aws 复制到其他目录,例如根目录、/home 等,并更改了权限、chmod,以上所有内容。仍然没有。
然后我尝试硬编码凭据(我知道——不推荐)只是为了给它一点刺激,它完全忽略了我这样做:
$client = Route53Client::factory(array(
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2013-04-01',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
作为最后的手段,我什至尝试包括 CredentialProvider class,并将其传递到我的数组中——仍然没有:
'credentials' => CredentialProvider::ini('default', '/home/ec2-user/.aws/credentials'),
我到底做错了什么?
不确定你做错了什么,但我建议完全绕过这个问题并将 EC2 实例角色分配给有问题的虚拟机,这样你就不必担心了;这是一个 better/more 安全的解决方案。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html
尽管 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
));
只需删除 'profile' => 'default'
,你应该可以正常工作
$client = Route53Client::factory(array(
'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => $key,
'secret' => $secret,
]
));
运行 在 AWS Centos 7 上,我尝试了一切(chmod/chown /root /home/user、env、bashrc 等)来让 /.aws/credentials 工作在 apache /var/www 目录之外。 SDK 报告无法读取凭据文件。
我查看了 PHP 以查看是否可以 set/override HOME 变量,但在我将 .aws 文件夹放入 '/var/www 之前它仍然没有读取凭据文件' 文件夹并在我的 php 文件中设置 HOME 变量,如下所示:
<%php
putenv('HOME=/var/www');
//ZIP File SDK Install requires aws-autoloader
require 'aws-autoloader.php'; //Your php code below
- 使用 "ls -l" 检查 .aws/* 文件的权限
- 更改大读权限或授予所有权限"sudo chmod 777 .aws/*"
- 重新运行代码
面对这个问题,我的具体做法是:
PHP version : 7.2.24 AWS PHP SDK version: 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 应用程序
非常重要我认为 AWS 手册有点混乱。
我在文件系统根目录 (/) 中创建了 .aws
目录,而不是在 /root
或 /home
目录中,一切正常。
/.aws/credentials
我从 PHP 8.0 升级到 PHP 8.1,PHP 突然抱怨找不到凭证文件。 xdebug
错误跟踪向我显示了预期位置,它比我的 public html
目录低一级。我不知道它为什么改变,但我只是 运行 在该目录中执行此命令:
ln -s /.aws/ .aws
我创建的符号链接可以很好地提供凭据。我回来了 运行.