【问题标题】:Issue using an IAM role with PHP SDK将 IAM 角色与 PHP SDK 一起使用时出现问题
【发布时间】:2017-12-14 11:23:22
【问题描述】:

我正在使用此脚本来填充 DynamoDB:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LoadDataPHP.html

我在使用 AWS 开发工具包时遇到此错误:

PHP 致命错误:未捕获的异常 带有消息“无法读取”的“Aws\Exception\CredentialsException” 来自 /root/.aws/credentials' 的凭据 /var/www/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php:263

根据https://docs.aws.amazon.com/aws-sdk-php/v2/guide/credentials.html

如果您没有明确向客户端对象提供凭证并且没有可用的环境变量凭证,则开发工具包会尝试从 Amazon EC2 实例元数据服务器检索实例配置文件凭证。这些凭证仅在已配置 IAM 角色的 Amazon EC2 实例上运行时可用。

我有一个附加到我的实例的 IAM 角色,具有完全的高级用户访问权限。我已通过 AWS CLI 确认该角色工作正常,无需任何凭据配置即可访问 DynamoDB。

关于我可能做错的任何建议?我的印象(并解释该凭证文件说)我不需要配置任何凭证,因此使用 IAM 角色。

【问题讨论】:

    标签: php amazon-web-services amazon-ec2


    【解决方案1】:

    我只是想为可能最终陷入这种情况的其他人稍微扩展一下。

    如果您在 EC2 实例上使用 IAM 角色作为您的凭证方法


    然后在创建客户端时不要使用配置文件行。如果您确实在客户端中指定了配置文件,它会告诉 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'
    ]);
    

    误导性文档


    PHP SDK 文档建议在 EC2 实例的所有其他凭证之上使用 IAM 角色。这很好,完全有道理。例如,这种情况会误导新手;

    1. 假设刚接触 SDK 的人阅读了入门部分中的基本 SDK 用法。
    2. 根据文档设置 S3 客户端进行测试。
    3. 一旦他们有工作的 S3 代码,开发人员决定跳到代码示例部分,为不同的 AWS 服务设置客户端。

    这里的问题是所有代码示例(S3 示例除外)都包含破坏 IAM 角色凭据方法的配置文件设置。

    代码示例至少应该参考配置文件的作用。

    【讨论】:

      【解决方案2】:

      代码中的这一行:

       'profile' => 'default',
      

      是导致我的问题的原因。如果您使用的是 IAM 角色,则不需要配置文件行,将其删除将修复“无法读取凭据”错误。

      【讨论】:

      • 感谢您的回答!从 SDK 的 v2 升级到 v3 时,我在 S3 客户端上也遇到了这个问题。这拯救了我的理智!
      猜你喜欢
      • 1970-01-01
      • 2019-08-06
      • 2022-01-01
      • 2011-03-15
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多