amazon-web-services - 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 的凭据,但不知道该怎么做。
解决方案
根据评论,该解决方案将使用environment variables
,以便 Apache 可以访问凭据。
但是,应该注意的是,在实例上硬编码凭据并不是一个好的做法。推荐的方法是将 IAM 角色附加到您现有的 Amazon EC2 实例:
IAM 角色使您在 EC2 上运行的应用程序能够使用 AWS 自动创建、分发和轮换的临时安全凭证。使用临时凭证可降低长期密钥泄露的风险。
推荐阅读
- continuous-integration - 赛普拉斯无法从 GitHub 机密中读取密码,但能够获取记录密钥
- android - 无法覆盖 androidx.fragment.app.Dialog 的 onCreateDialog 方法
- security - 防火墙日志查询
- pyspark - 在读取数据框时使用“\”
- firebase - 如何解决此问题 [错误:flutter/lib/ui/ui_dart_state.cc(199)] 未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'instance'。错误?
- python - 在 NumPy 中使用 column_stack() 方法连接多维数组
- swift - mac上的SwiftUI滞后和泄漏内存
- reactjs - 来自反应的 422(不可处理实体)的 axios 发布请求错误
- kubernetes - 如何从 configmap 设置 Pod 属性的值
- c# - Azure Personalizers 不更新模型