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

时间:2018-01-29 12:00:35

标签: php macos apache aws-sdk

尝试创建S3客户端时,我遇到了AWS SKD for PHP的问题。

我的PHP脚本尝试按如下方式创建S3客户端:

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

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

从命令行运行我的PHP脚本工作

当我通过本地apache webserver和浏览器从PHP应用程序中运行PHP脚本时, 失败

我收到的错误是

Cannot read credentials from /.aws/credentials

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

通过Google搜索此问题,多个帖子(如this one)表明AWS SDK使用$HOME变量。为了测试这个我:

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

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

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,但在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 ubuntu:www-data -R ~/.aws
sudo chmod 640 ~/.aws/config
sudo chmod 640 ~/.aws/credentials

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

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

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