当前位置: 首页 > 知识库问答 >
问题:

在PHP SDK中使用IAM角色的问题

勾炜
2023-03-14

我使用这个脚本来填充dynamo db:https://docs . AWS . Amazon . com/Amazon DynamoDB/latest/developer guide/loaddataphp . html

我在使用AWS SDK时遇到了这个错误:

PHP致命错误:未捕获的异常“Aws\exception\CredentialsException”,消息为“无法从/root/读取凭据”。aws/credentials'位于/var/www/vendor/aws/aws sdk php/src/CredentialProvider.php中:263

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

如果您没有显式地向客户机对象提供凭证,并且没有可用的环境变量凭证,SDK将尝试从Amazon EC2实例元数据服务器中检索实例配置文件凭证。这些凭证只有在已经配置了IAM角色的Amazon EC2实例上运行时才可用。

我已将IAM角色附加到具有完全超级用户访问权限的实例。我已经通过AWS CLI确认该角色工作正常,它可以访问DynamoDB而无需任何凭证配置。

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

共有2个答案

班昱
2023-03-14

代码中的这一行:

 'profile' => 'default',

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

虞承泽
2023-03-14

我只是想对其他可能会陷入这种情况的人做一点扩展。

然后,在创建客户端时不要使用配置文件行。如果您确实在客户端中指定了配置文件,它会告诉 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 开发工具包文档建议将 IAM 角色优先于 EC2 实例的所有其他凭证使用。这很好,完全有道理。例如,对新来者的误导部分是这种情况;

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

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

代码示例至少应该引用配置文件的功能

 类似资料:
  • 我想知道PySpark是否支持使用IAM角色进行S3访问。具体来说,我有一个业务限制,我必须承担AWS角色才能访问给定的存储桶。使用boto时可以这样做(因为它是API的一部分),但我无法找到关于PySpark是否支持开箱即用的明确答案。 理想情况下,我希望能够在本地以独立模式运行时扮演一个角色,并将我的SparkContext指向该s3路径。我发现非IAM呼叫通常会随之而来: 是否存在提供IAM

  • 问题内容: 我正在尝试使用AWS最近宣布的“ EC2的IAM角色”功能,该功能可让安全凭证自动传递到EC2实例。(请参阅http://aws.amazon.com/about-aws/whats- new/2012/06/11/Announcing-IAM-Roles-for- EC2-instances/ )。 如上所述,我已经设置了一个具有IAM角色的实例。我还可以通过curl获得(貌似)正确

  • 场景:我在同一个帐户下有一个EC2实例和一个S3 bucket,我在该EC2上的web应用程序希望访问该bucket中的资源。 在官方文档之后,我使用创建了一个IAM角色,并将其分配给EC2实例。根据我的理解,现在我的web应用程序应该可以访问桶。但是,经过试验,我似乎必须添加桶策略,如下所示: 否则我就被禁止进入。 但是,既然我已经向EC2实例授予了IAM角色,为什么还要使用这个桶策略呢?

  • 我正尝试使用IAM角色从spark读取s3桶中的csv文件,但在上获得 我安装了没有hadoop的Spark 2.4.4,安装了hadoop 3.2.1以及hadoop-aws-3.2.1.jar和aws-java-sdk-1.11.655.jar。我必须安装一个没有hadoop的spark版本,因为作为spark构建一部分的hadoop jars是来自2016年的2.7.3版本。 附加到角色的“

  • 我试图根据在OAuth2凭证中设置的角色来限制Spring boot服务上的特定endpoint。 这是endpoint 然后使用SecurityConfiguration bean对其进行保护 我调试了委托人,可以在属性列表中看到正确的 IAM 列表 然而,当我点击endpoint时,我得到一个HTTP 403未授权。这意味着用户已经成功地通过了身份验证,但是Spring不能识别或理解属性或者如

  • null 根据AWS文档,您应该始终为EC2创建角色,并根据您的需求为角色分配策略。 向一个角色授予多个服务访问权限是否存在安全问题?我问这个问题的原因是,使用EC2元数据,您可以在此时使用该角色获得分配给EC2实例的accesskey信息。EC2经常刷新密钥。 任何反馈或输入。