aws cli 在运行 shell_exect 时拒绝访问

Posted

技术标签:

【中文标题】aws cli 在运行 shell_exect 时拒绝访问【英文标题】:aws cli gives access denied when running shell_exect 【发布时间】:2021-07-23 05:57:02 【问题描述】:

在命令行我可以运行:

aws s3 同步 s3://my_bucket 。 --dryrun

很好。

但是,我正在尝试在 Laravel 中将其作为命令运行:

public function handle()
    
        $command = 'aws s3 sync s3://my_bucket . --dryrun';
        shell_exec($command);
    

我得到了:

致命错误:调用 ListObjectsV2 操作:拒绝访问

为什么相同的命令可以在命令行上运行,但不能在我的 php 应用程序中运行?

【问题讨论】:

通过 PHP 运行时,可能没有设置环境变量,因此 AWS CLI 不知道从哪里自动加载您的凭证。明确指定凭证文件,并查看 CLI 文档/帮助/手册页以了解如何执行此操作。或者,您可以使用一些库直接与 AWS API 交互,而不是来回访问 CLI。 您介意将其发布为回复吗?或者我可以用我实际使用的命令来回答我自己的问题。 【参考方案1】:

我听从了@Sammitch 的建议,并使用了

--profile my_config

其中 my_config 是一组命名的配置参数,使用以下命令创建:

aws configure --profile my_config

来源:AWS creating a named profile

【讨论】:

以上是关于aws cli 在运行 shell_exect 时拒绝访问的主要内容,如果未能解决你的问题,请参考以下文章

运行任何 aws CLI 命令时出现错误“您必须指定一个区域”

在传递 CommaDelimitedList 类型的参数值时看到 Aws cli cloudformation 错误

AWS Lambda NodeJS 运行时是不是安装了 python?

AWS CLI 与控制台和 CloudFormation 堆栈

使用AWS CLI将现有资源导入CloudFormation

AWS CLI docker:参数格式不正确