【问题标题】:Unable to locate credentials aws cli无法找到凭证 aws cli
【发布时间】:2021-09-29 18:47:18
【问题描述】:

我使用的是 AWS CLI 版本 2。我使用的是 centos > Nginx > php 7.1,当我直接在命令行上运行时,以下命令可以正常工作。

aws s3 cp files/abc.pdf s3://bucketname/

但是当我使用以下代码从 index.php 文件中运行相同的命令时

echo exec("aws s3 cp files/abc.pdf s3://bucketname/ 2>&1");

然后报错

上传失败:无法找到凭据

【问题讨论】:

  • 当您从命令行执行时,它会继承您的环境,并且凭据通常来自 ~/.aws/credentials 和 ~/.aws/config 文件。当您运行exec 时,可能在该进程的主文件夹中找不到上述文件。查看此 [AWS 文档] (docs.aws.amazon.com/cli/latest/userguide/…),了解如何指定凭证。
  • @vmachan 我阅读了您提供的上述文档,似乎我需要设置 AWS_CONFIG_FILE 但在 RND 并阅读 docs.aws.amazon.com/cli/latest/userguide/… 之后,我仍然没有办法。
  • @vmachan 我用这样的方式设置 aws configure set aws_config_file ~/.aws/config 但这也没有用

标签: amazon-web-services aws-cli php-7.1


【解决方案1】:

@Jass 在“~/.aws/credentials”或“~/.aws/config”中添加您的凭据并使其成为 [default] 或者使用 profile_name 以防您有多个帐户. 还要验证,如果您通过 export 将密钥用作环境变量,那么它将仅适用于该终端。因此,请尝试从导出密钥的同一终端执行 php,或将其添加到 ~/.aws/credentials

【讨论】:

  • 我没有使用配置文件。凭证已经在 ~/.aws/credentials 和 ~/.aws/config 中,并且这些已经设置为默认值。您能否告诉我,我如何验证“如果您通过导出将密钥用作环境变量,那么它将仅适用于该终端”?
  • - 检查您是否导出了密钥 printenv | grep -i AWS - 并验证是否在 UserRoot 中添加了凭据,以及您从哪个配置文件/用户执行 PHP。 - 如您所说,您已经在 ~/.aws/credentials 中添加了它,那么请检查执行 PHP 的用户。
  • 第一:printenv | grep -i AWS 不返回任何内容。 第二:你说的是centos登录ssh用户吗?如果是,我搜索了如何在登录用户的 centos 中添加/验证 aws s3 密钥,但我没有得到任何相关答案。
  • 检查哪个用户 whoami,确认您已经能够从终端执行 aws s3 ls,然后使用 example.php 进行测试b> <?php echo exec("aws s3 ls"); ?> 执行 php 测试。在执行 PHP 之前,再次检查 whoami 以交叉检查您正在执行此操作的同一用户。
【解决方案2】:

我试过这个,它对我有用,我相信也应该对你有用。在您的 PHP 代码 (index.php) 中,尝试导出凭证文件位置,如下所示

echo exec("export AWS_SHARED_CREDENTIALS_FILE=/<path_to_aws_folder>/.credentials; aws s3 cp files/abc.pdf s3://bucketname/ 2>&1");

当您从命令行运行时,AWS CLI 会从您的主目录中获取凭证,即 ~/.aws/credentials(这是默认设置)。当index.php 正在执行时,它正在其主目录中查找上述文件,该文件与您的主目录不同,因此无法找到凭据。通过上述更改,您明确地将其指向您的 AWS 凭证。

【讨论】:

  • 它对我不起作用,仍然报同样的错误
  • 我用 ~/.aws/credentials 代替 //.credentials
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 2022-12-16
  • 1970-01-01
  • 2017-11-16
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多