无法从 /.aws/credentials - apache vs OSX 本地环境中的命令行读取凭证



我在尝试创建 S3 客户端时遇到了适用于 PHP 的 AWS SKD 问题。

我的 PHP 脚本尝试创建 S3 客户端,如下所示:

$client = new AwsS3S3Client([
'profile' => 'default'
'region'  => 'eu-west-1',
'version' => '2006-03-01',
]);

这应该从/Users/username/.aws/credentials读取我的凭据文件。

当我从命令行运行我的 PHP 脚本时它可以工作

当我通过本地 apache 网络服务器和浏览器从 PHP 应用程序中运行我的 PHP 脚本时,它会失败

我收到的错误是

Cannot read credentials from /.aws/credentials

请注意,它正在尝试从我的根目录读取,而不是从我的用户目录读取。

在谷歌上搜索了这个问题后,一些帖子(如这篇)表明 AWS 开发工具包使用了$HOME变量。为了测试这一点,我:

  • 在我的终端中运行printenv,返回HOME=/Users/username
  • 从返回HOME=/Users/username的命令行在 PHP 脚本中运行getenv('HOME')
  • 通过 Apache 和浏览器在 PHP 脚本中运行getenv('HOME')print $_SERVER['HOME']-没有输出

我认为解决方案必须是将$HOME传递到我的 apache 设置中 - 我将如何实现这一目标?

我遇到了同样的问题,但在Linux - Ubuntu上。我希望这些步骤可以在OSX上复制。

我在 Apache vhost 的 SetEnv 指令中添加了 $HOME 变量的值,如下所示:

SetEnv HOME "/home/ubuntu"

在您的情况下,它应该是:

SetEnv HOME "/Users/username"

然后重新加载 apache:

sudo service apache2 reload

在此更改之后,SDK 在正确的文件中查找凭据,但 Apache 无权访问它。我收到错误"无法从/home/ubuntu/.aws/credentials读取凭据"。 因此,我更改了~/.aws文件夹的所有权和权限,如下所示:

sudo chown -R ubuntu:www-data ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials

其中 www-data 是我的 Apache 进程的用户。

在OSX上,Apache的用户将是"_www",因此如果您尚未为Apache设置权限,请执行以下操作:

sudo chown -R username:_www ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials

最新更新