Docker中CentOS7环境下PHP调用AWS CLI遇SSO令牌错误
问题解决:浏览器访问PHP调用AWS CLI提示SSO令牌无效,命令行运行正常
核心原因
Apache运行PHP时使用的用户(通常是apache或www-data)与你手动在容器内运行PHP的用户(比如root)权限不一致,导致SSO令牌文件无法被读取,或者环境变量未正确传递。
解决方案
1. 修正AWS目录权限
SSO令牌默认存储在/.aws/sso/cache/目录下,该目录通常属于root用户,Apache用户无法访问。执行以下命令调整权限:
chown -R apache:apache /.aws/ chmod -R 700 /.aws/
确保Apache用户能读取AWS配置和令牌文件。
2. 修复环境变量格式
你的PHP代码中环境变量的分隔符存在问题,Linux下多个环境变量需要用;单独分隔,修改代码中的$env变量:
$env = 'AWS_DEFAULT_REGION=us-east-2; AWS_DEFAULT_OUTPUT=text; AWS_CONFIG_FILE=/.aws/config; AWS_SHARED_CREDENTIALS_FILE=/.aws/credentials';
3. 验证Apache用户权限
在PHP文件中添加一行查看当前运行用户:
echo "Current user: " . exec('whoami') . "<br>";
浏览器访问后确认用户是apache,然后切换到该用户手动运行PHP文件,复现问题:
su - apache -c "php /var/www/html/your-file.php"
如果同样报错,说明权限问题确实存在,按步骤1调整权限即可。
4. 替代方案:使用IAM凭证而非SSO令牌
SSO令牌依赖用户会话,不适合服务器端运行场景。建议直接在/.aws/credentials中配置IAM用户凭证:
[default] aws_access_key_id=你的访问密钥ID aws_secret_access_key=你的私有访问密钥
或者在AWS环境中运行容器时,为容器分配IAM角色,无需手动配置凭证,更安全可靠。
内容的提问来源于stack exchange,提问作者msrajwat298
相关产品推荐
相关产品推荐

