2017-04-26 80 views
0

我已经创建了一个小型python脚本,它只是查询某些实例的AWS现货定价,这是昨天的工作,并且已经过去了一周。然而,尽管使用不同的凭据机器我跑这对正在接受以下错误:Boto3:尝试使用EC2查询AWS时出现AuthFailure

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

这将返回以下:

botocore.exceptions.ClientError: An error occurred (AuthFailure) when calling the DescribeSpotPriceHistory operation: AWS was not able to validate the provided access credentials

我理解错误,但它是没有意义的。与正在运行的实例关联的IAM角色明确具有执行此操作的权限。

我想不出有什么变化会影响到这一点。

注意,这个脚本从我的本地机器运行良好。

有没有人有任何想法可能造成这种情况?

作为一种替代方案 - 有谁知道我可以如何让Boto3确认它使用的凭证?

+0

如何测试策略模拟器中的角色? https://policysim.aws.amazon.com/ – mootmoot

+0

@mootmoot我会添加我自己的答案。问题实际上最终成为服务器上的时间同步问题。 – Dandy

+0

您能否将问题提交给AWS论坛?虽然这很少见,但我没有发现STS提到的时区要求。所以如果AWS更新他们的文档,这会很有帮助。 – mootmoot

回答

1

首先检查实例有一个相关的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 
+0

谢谢,绝对有一个IAM角色和凭据。问题依然存在,但这实际上是非常有用的信息。 – Dandy

1

几天后把我的头撞在墙上,我发现问题实际上与服务器上的时区有关。

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

这意味着服务器与AWS不同步,虽然错误非常无益,但它是完全合理的。

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

相关问题