簡體   English   中英

Terraform:導入 aws 資源時出現憑據錯誤 - 調用 sts:GetCallerIdentity: ExpiredToken 時出錯

[英]Terraform: Credential error when importing aws resources - error calling sts:GetCallerIdentity: ExpiredToken

我有一些 aws 資源要導入到我的 terraform 狀態中。

我已經在~/.aws/credentials文件中設置了 aws 憑據:

[my-profile]
aws_access_key_id=<ACCESS_KEY_ID>
aws_secret_access_key=<SECRET_ACCESS_KEY>
aws_session_token=<SESSION_TOKEN>

terraform init成功運行,但是當我嘗試使用以下命令導入資源時:

terraform import -var-file=config/us-west-2/default.tfvars -var-file=variables.tfvars -var-file=../globals.tfvars -var profile=my-profile -var region=us-west-2 -var tfstate_bucket=<MY_TF_BUCKET> -no-color <RESOURCE_NAME> <RESOURCE_ID>

即使我的憑據沒有過期,我也會收到以下錯誤:

Error: error using credentials to get account ID: error calling sts:GetCallerIdentity: ExpiredToken: The security token included in the request is expired
    status code: 403, request id: 1684ef71-ecea-4fed-bcf5-a32eca688ab4

請注意,我在另一個非生產 aws 帳戶中運行了類似的導入,但是當我嘗試針對生產帳戶運行它時出現此錯誤。 不過,我確實擁有對 Production 帳戶的高級用戶訪問權限。

地形版本:

Terraform v0.12.29
+ provider.aws v3.14.1
+ provider.null v2.1.2
+ provider.random v2.3.1
+ provider.template v2.1.2

編輯:在我的 mac 上打印環境變量

$ env
TERM_PROGRAM=Apple_Terminal
TERM=xterm-256color
SHELL=/bin/bash
TMPDIR=/var/folders/jz/w997kd9x4sb983kdyj8wjlkc0000gp/T/
GRADLE_HOME=/Users/john/.sdkman/candidates/gradle/current
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.k5lBL3QJ9R/Render
TERM_PROGRAM_VERSION=421.2
TERM_SESSION_ID=D2EB66E5-2DD7-456A-8E16-A0E00CE15112
SDKMAN_PLATFORM=Darwin
USER=john
SDKMAN_CANDIDATES_API=https://api.sdkman.io/2
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.GG8D8SvuqA/Listeners
PATH=/Users/john/.sdkman/candidates/gradle/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
PWD=/Users/john/MyProjects/tf/foobar
LANG=en_US.UTF-8
SDKMAN_VERSION=5.7.4+362
XPC_FLAGS=0x0
XPC_SERVICE_NAME=0
HOME=/Users/john
SHLVL=1
LOGNAME=john
SDKMAN_DIR=/Users/john/.sdkman
SDKMAN_CANDIDATES_DIR=/Users/john/.sdkman/candidates
_=/usr/bin/env

編輯 2:當我清理所有舊的配置文件和憑據時, ~/.aws/credentials~/.aws/config只有my-profile條目,沒有其他內容。

還有所有相關的環境變量:

for var in AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_SECURITY_TOKEN ; do eval unset $var ; done

所以現在我得到:

Error: No valid credential sources found for AWS Provider.
    Please see https://terraform.io/docs/providers/aws/index.html for more information on
    providing credentials for the AWS Provider

正如評論中所討論的,最可能的答案是您在某處“存儲”了一些舊憑據:

  • 仍然在當前終端會話的環境變量中
  • 或在您的命令提到的.tfvars文件之一中

我建議把它們清理干凈。 獲取新憑據。 然后再試一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM