Nic*_*lou 5 php amazon-ec2 amazon-web-services
我正在使用此脚本填充DynamoDB:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LoadDataPHP.html
我使用AWS SDK收到此错误:
PHP致命错误:未捕获异常'Aws\Exception\CredentialsException',并在/ var/www/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider中显示消息'无法从/root/.aws/credentials读取凭据'. PHP:263
根据https://docs.aws.amazon.com/aws-sdk-php/v2/guide/credentials.html
如果您未明确向客户端对象提供凭据且没有可用的环境变量凭据,则SDK会尝试从Amazon EC2实例元数据服务器检索实例配置文件凭据.只有在已配置了IAM角色的Amazon EC2实例上运行时,这些凭据才可用.
我有一个IAM角色附加到我的实例,具有全功率用户访问权限.我已经确认该角色通过AWS CLI正常工作,该CLI可以在没有任何凭据配置的情况下访问DynamoDB.
关于我可能做错什么的任何建议?我的印象(并解释说明凭证文件)我不需要配置任何凭据,因此使用IAM角色.
代码中的这一行:
'profile' => 'default',
Run Code Online (Sandbox Code Playgroud)
是什么导致了我的问题。如果您使用的是 IAM 角色,则不需要配置文件行,将其删除将修复“无法读取凭据”错误。
小智 7
我只是想为其他任何可能在这种情况下结束的人扩展一点.
然后在创建客户端时不要使用配置文件行.如果您在客户端中指定了配置文件,它会告诉SDK使用凭据ini文件中的配置文件覆盖您在客户端中设置的任何形式的凭据.
在PHP SDK V3文档中提到(但埋没了一点):https: //docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html#profile
$client = new SqsClient([
'profile' => 'default', // <--- Don't use this line if you're using IAM Roles for credentials
'region' => 'us-west-2',
'version' => '2012-11-05'
]);
Run Code Online (Sandbox Code Playgroud)
PHP SDK文档建议在EC2实例的所有其他凭据之上使用IAM角色.这很好,完全有道理.对新来者的误导性部分就是这种情况;
这里的问题是所有代码示例(S3示例除外)都包含破坏IAM角色凭证方法的配置文件设置.
代码示例至少应该引用配置文件的功能.
归档时间: |
|
查看次数: |
1730 次 |
最近记录: |