首页 > 解决方案 > httpd / apache 的 AWS 凭证不同于为 ec2-user 设置的凭证

问题描述

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

我曾经使用aws configure默认的 ec2-user 为 EC2 实例设置默认凭证。我可以使用 成功检索这些aws configure list内容,并且可以成功调用诸如aws s3api通过 ssh 以 ec2-user 身份登录时的内容。

我在有问题的实例上将 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. 如果我在以 ec2-user 身份登录时从 SSH 运行这些命令,它们就可以工作。

使用时,httpd 似乎以用户“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 的凭据,但不知道该怎么做。

标签: amazon-web-servicesamazon-s3amazon-ec2amazon-iamamazon-ami

解决方案


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

但是,应该注意的是,在实例上硬编码凭据并不是一个好的做法。推荐的方法是将 IAM 角色附加到您现有的 Amazon EC2 实例

IAM 角色使您在 EC2 上运行的应用程序能够使用 AWS 自动创建、分发和轮换的临时安全凭证。使用临时凭证可降低长期密钥泄露的风险。


推荐阅读