如何在AWS SDK for PHP中使用EC2实例关联的IAM角色
解决EC2实例上AWS PHP SDK使用IAM角色的凭证问题
你代码里的问题在于指定了profile参数,还手动传入了defaultProvider,这会让SDK优先去读取本地的~/.aws/credentials文件,而不是自动调用EC2实例关联的IAM角色凭证。
直接用下面的代码即可,不需要添加profile和credentials参数:
$SnSclient = new SnsClient([ 'region' => 'eu-central-1', 'version' => '2010-03-31' ]);
AWS PHP SDK v3的凭证链默认会按优先级自动查找凭证:
- 先检查环境变量中的凭证
- 再读取本地
~/.aws/credentials文件 - 紧接着会自动访问EC2实例的元数据服务,获取关联IAM角色的临时凭证
- 若运行在ECS环境,还会检查任务角色
只要你的EC2实例已经关联了正确的IAM角色,SDK就能自动获取到凭证,完全不需要上传PEM文件或配置本地凭证,满足你在AWS环境内安全调用服务的需求。
最后确认两个关键点:
- 关联的IAM角色必须拥有SNS/SQS的相关权限,建议配置最小必要权限,比如
sns:Publish、sqs:SendMessage等,避免过度授权 - EC2实例的安全组或网络ACL没有限制访问元数据服务(默认是允许的,除非手动修改过规则)
内容的提问来源于stack exchange,提问作者Iter Ator
相关产品推荐
相关产品推荐

