如何让httpd/apache使用特定的access_key、secret_key和region
我已经使用aws configure
为EC2实例设置了默认凭据,其中包含默认的EC2用户。我可以使用aws configure list
成功地检索这些内容,并且当作为ec2用户通过ssh登录时,我可以成功地调用aws s3api
之类的内容。
我在有问题的实例上以httpd的身份运行apache。当我尝试从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用户身份登录时从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的凭据进行配置,但不确定如何做到这一点
根据注释,解决方案是使用environment variables
,以便Apache可以访问凭据。
但是,需要注意的是,对实例的凭据进行硬编码不是一个好的做法。建议的方法是将IAM角色附加到您现有的Amazon EC2实例:
IAM角色使您在EC2上运行的应用程序能够使用AWS自动创建、分发和轮换的临时安全凭据。使用临时凭据可以降低长期密钥泄露的风险。。