httpd/apache 的 AWS 凭据不同于为 ec2-user 设置的凭据

AWS credentials for httpd / apache different from those set for ec2-user

如何让 httpd / apache 使用特定的 access_key、secret_key 和区域?

我已经使用 aws configure 为 EC2 实例设置默认凭据,使用默认的 ec2-user。我可以使用 aws configure list 成功检索这些,并且当通过 ssh 以 ec2-user.

登录时,我可以成功调用 aws s3api 之类的东西

我运行在相关实例上将 apache 作为 httpd。当我尝试从 Web 应用程序进行调用时,例如使用 php $output = shell_exec('aws s3api Example-Commands --output text 2>&1'); 我收到错误消息 403 Forbidden。如果我 运行 $output = shell_exec('aws configure list --output text 2>&1'); 然后我看到 access_key 和 secret_key 不是我使用 aws configure 提供的那些。如果我改为 运行 这些来自 SSH 的命令,当以 ec2-user 身份登录时,它们会起作用。

httpd 在使用

时似乎是 运行ning 用户 "apache"
[ec2-user@ip-172-26-0-172 ~]$ ps aux | egrep '(apache|httpd)'
root      7425  0.0  0.3 4***76 2***6 ?        Ss   Apr15   1:39 /usr/sbin/httpd
apache    9074  0.3  1.0 5***16 8***8 ?        Sl   22:45   0:01 /usr/sbin/httpd
apache    9075  0.0  0.2 4***20 1***0 ?        Sl   22:45   0:00 /usr/sbin/httpd
apache    9081  0.2  0.8 5***04 6***6 ?        Sl   22:45   0:00 /usr/sbin/httpd

nano ~/.aws/credentials 显示我之前输入的凭据。

我希望让 httpd 使用我之前提供给 aws configure 的凭据,但我不确定如何操作。

根据评论,解决方案是使用 environment variables 以便 Apache 可以访问凭据。

但是,应该注意的是,在实例上硬编码凭据不是一个好的做法。推荐的方式是 Attach an IAM role to your existing Amazon EC2 instance:

IAM roles enable your applications running on EC2 to use temporary security credentials that AWS creates, distributes, and rotates automatically. Using temporary credentials reduces the risk of long-term key compromise..