【问题标题】:Boto3: AuthFailure when trying to query AWS with EC2 ClientBoto3:尝试使用 EC2 客户端查询 AWS 时出现 AuthFailure
【发布时间】:2019-12-21 14:07:44
【问题描述】:

我创建了一个小型 python 脚本,它只是查询某些实例的 AWS 现货定价,这在昨天和过去一周都在工作。然而,尽管使用不同的凭据,我正在运行它的机器收到以下错误:

aws_query = client.describe_spot_price_history(
        StartTime=today,
        EndTime=today,
        InstanceTypes=[
            'g2.2xlarge'
        ],
        ProductDescriptions=[
            'Linux/UNIX',
        ],
        MaxResults=3
    )

这将返回以下内容:

botocore.exceptions.ClientError:调用 DescribeSpotPriceHistory 操作时发生错误 (AuthFailure):AWS 无法验证提供的访问凭证

我理解这个错误,但它没有任何意义。与正在运行的实例关联的 IAM 角色绝对有权执行此操作。

我认为没有任何更改会影响这一点。

注意,这个脚本可以在我的本地机器上运行。

有没有人知道是什么原因造成的?

作为替代方案 - 有谁知道我如何要求 Boto3 确认它正在使用的凭据?

【问题讨论】:

  • 如何在策略模拟器中测试角色? policysim.aws.amazon.com
  • @mootmoot 我会添加我自己的答案。这个问题实际上最终是服务器上的时间同步问题。
  • 您可以向 AWS 论坛提出这个问题吗?虽然这种情况很少见,但我没有发现 STS 提到时区要求。因此,如果 AWS 更新他们的文档,这将很有帮助。
  • 绝对可以!抱歉耽搁了。

标签: python amazon-web-services boto3


【解决方案1】:

经过几天的头撞墙后,我发现问题实际上出在服务器上的时区上。

已进行手动更新以适应 BST,但仅限于时间,而不是时区。

这意味着服务器与 AWS 不同步,虽然该错误没有帮助,但这是完全合理的。

更新 NTP 服务器并将时区更改为 BST 解决了该问题。

【讨论】:

  • 嘿,我也遇到了类似的问题。后续版本的boto3问题解决了吗?
【解决方案2】:

首先检查实例是否有与之关联的 IAM 角色:

curl http://169.254.169.254/latest/meta-data/iam/info

如果您想获取实例的临时凭据,请尝试以下操作:

import boto3
print boto3.Session().get_credentials().access_key
print boto3.Session().get_credentials().secret_key

【讨论】:

  • 谢谢,肯定有 IAM 角色和凭证。问题仍然存在,但这实际上是非常有用的信息。
猜你喜欢
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多