【问题标题】:Issue connecting to AWS SQS using IAM Role with Boto 2.38使用带有 Boto 2.38 的 IAM 角色连接到 AWS SQS 的问题
【发布时间】:2016-04-06 14:48:39
【问题描述】:

我无法通过 EC2 实例使用其关联的 IAM 角色AWS 简单队列服务 (SQS) 进行身份验证>Boto 2.38 库(和 Python 3)。

我找不到关于它的文档的任何具体内容,但据我从示例和其他问题中了解到的,它应该可以像这样打开一个连接。

conn = boto.sqs.connect_to_region('us-east-1')
queue = conn.get_queue('my_queue')

相反,我从 connect 方法中获得一个 null 对象,除非我在我的环境中提供凭据,或者明确地提供给该方法。

我很确定我的角色没问题,因为它适用于其他服务,如 S3,描述 EC2 标签,将指标发送到 CloudWatch等,都是透明的。我的 SQS 政策是这样的:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SQSFullAccess",
      "Effect": "Allow",
      "Action": [
        "sqs:*"
      ],
      "Resource": [
        "arn:aws:sqs:us-east-1:<account_id>:<queue_name1>",
        "arn:aws:sqs:us-east-1:<account_id>:<queue_name2>"
      ]
    }
  ]
}

为了消除对我政策的怀疑,我什至暂时将 FullAdmin 政策与我的角色相关联,但没有成功。

我还验证了它也不能与 AWS CLI 一起使用(据我所知,它也使用 Boto)。所以,我能得出的唯一结论是,这是 SQS 客户端的 Boto 问题。

会有人对此有不同的体验吗?我知道切换到 Boto 3 可能会解决它,但我现在不考虑这样做,如果它真的是一个错误,我认为它应该在 git 上报告,无论如何。

谢谢。

【问题讨论】:

  • 尝试使用 --debug 标志运行 AWSCLI 并在此处发布输出。根据您的描述,听起来 boto 和 AWSCLI(它不是基于 boto 而是基于 botocore)只是没有在您的实例上找到 IAM 角色。
  • 解决了!我不会在这里粘贴完整的输出,因为它太长了。但是有两个问题。 1) 在我用来向 CLI 发送消息的 root 用户中,有一个凭证文件覆盖了 iam-role,这似乎是 Boto 寻找身份验证的最后一个文件。删除后我可以清楚地看到调试模式的差异。 2)关于我的应用程序,在验证来自环境的凭据时存在错误,如果它不存在,它永远不会进入下一个块,我不会将任何凭据传递给客户端。谢谢你的提示,这对我来说很清楚。

标签: python-3.x amazon-web-services boto amazon-sqs


【解决方案1】:

回答我自己。

Boto 的 2.38 SQS 客户端确实使用 IAM 角色。我的应用程序有错误。

对于 AWS CLI,我的本地账户中存在一个凭证文件 (~/.aws/credentials),它被用来代替实例的角色,因为该角色是最后一个由 CLI 查找。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 2016-04-26
    • 2018-01-22
    • 1970-01-01
    • 2020-07-01
    • 2021-01-03
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多