2017-04-26 77 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可解決問題。

相關問題