簡體   English   中英

調用 AssumeRole 操作時發生錯誤 (InvalidClientTokenId):請求中包含的安全令牌無效

[英]An error occurred (InvalidClientTokenId) when calling the AssumeRole operation: The security token included in the request is invalid

我不斷收到此錯誤:

An error occurred (InvalidClientTokenId) when calling the AssumeRole operation: The security token included in the request is invalid.

當我運行這個 Assume Role 命令時:

aws sts assume-role --role-arn <arn role i want to assume> --role-session-name dev --serial-number <my arn> --token-code <keyed in token code>

這以前是有效的,所以我不確定會發生什么變化。 並且不知道如何調試它。

有什么建議么?

我有同樣的問題。 在運行 sts 命令之前,您可能需要取消設置 AWS 環境變量:

unset AWS_SECRET_ACCESS_KEY
unset AWS_SECRET_KEY
unset AWS_SESSION_TOKEN

然后你的命令:

aws sts assume-role --role-arn <arn role i want to assume> --role-session-name dev --serial-number <my arn> --token-code <keyed in token code>

在這里,您將獲得新憑據。 然后再次運行導出:

export AWS_ACCESS_KEY_ID=<access key>
export AWS_SECRET_ACCESS_KEY=<secret access key>
export AWS_SESSION_TOKEN=<session token>

我希望它有幫助!

舊帖子,但可能仍然有用。

您可以嘗試在 env 中設置以下內容並重試:

export AWS_ACCESS_KEY_ID='your access key id here';
export AWS_SECRET_KEY='your secret key here'

在這里,您需要重置您的 aws 密鑰和 ID,例如 -

export AWS_ACCESS_KEY_ID='ACCESS_KEYID';
export AWS_SECRET_KEY='SECRET_KEY'

在我的情況下,我在終端中使用命令aws configure進行cli ,它要求提供訪問密鑰 ID、密鑰、區域和輸出格式。

如果是第一次運行,則需要在運行 STS 命令的環境中執行aws configure並設置 AWS 訪問密鑰和秘密密鑰。 STS 命令使用該數據驗證身份並檢查您是否有權執行 STS 代入角色。

如果您已經配置了現有的訪問密鑰和秘密密鑰,則它們也可能已過期。 因此,您可能需要在 IAM 中為用戶生成新密鑰並在您運行的環境中配置它。

我注意到當我不得不更改我的 AWS IAM 密碼時,我的訪問密鑰也被刪除了。

我必須生成一個新的訪問密鑰並替換存儲在~/.aws/credentials (在 mac 上)文件中的aws_access_key_idaws_secret_access_key

這清除了錯誤

通過在您的用戶的 iam 用戶憑據部分重新激活我的訪問密鑰來解​​決此問題。 當我遇到這個問題時,它處於非活動狀態。

檢查~/.aws/credentials文件中的aws_access_key_idaws_secret_access_key是否正確。

如果是,則~/.aws/credentials文件包含aws_session_token僅刪除文件中的aws_session_token行,保存更改並重新運行命令。

為我工作。

TLDR; IAM 用戶的密鑰/秘密密鑰是一組憑證。 會話令牌 + 會話的密鑰/秘密密鑰是一組不同的憑證,具有不同的值。

——

我不知道aws sts命令創建了一個會話令牌,以及一個新的 AWS 密鑰/秘密密鑰。 這些鍵是一樣的IAM用戶密鑰和秘密密鑰。

我生成了一個新的密鑰、秘密密鑰和令牌。 我更新了我的憑據文件以使用新值。 當我的令牌在第二天到期時,我重新運行了aws sts命令。 但是,憑證文件中的密鑰和秘密密鑰現在是錯誤的。 我在我的憑證文件中替換了我的 IAM 用戶密鑰的密鑰和秘密密鑰值。 我還刪除了憑據文件中的會話令牌。

然后aws sts命令起作用了。

我嘗試使用多配置文件動態創建 ~/.aws/config 文件,以提供我的代碼構建多帳戶訪問權限。 當我第一次使用空的默認配置文件創建文件 ~/.aws/config 然后嘗試擔任該角色時,我犯了一個錯誤。

當您將文件 ~/.aws/config 放在具有默認配置文件的位置時,確定身份的是配置文件,而不是 CodeBuild 附帶的配置文件。

2022 年 7 月更新!

確保目標 AWS 區域已啟用 以下是啟用區域的方法。


2022 年 8 月更新!


讓我們不要忘記最簡單的事情。 當我沒有設置默認區域時,我收到了同樣的錯誤消息。 您可以通過運行 aws configure 來設置它。 或者,您可以像這樣在 sts 命令上傳遞區域。

aws sts 假設角色 --role-arn "your_role_arn" --role-session-name MySessionName --region us-gov-west-1

當我嘗試連接到我的 localstack 實例時出現此錯誤。

原因是aws cli 缺少--endpoint-url http://localhost:4566參數。

同樣的錯誤,但有一個非常具體的情況和解決方案。 在我的例子中,我有一個配置文件在我的.aws/credentials中扮演如下角色:

[name]
role_arn = arn:aws:iam::ACCOUNT:role/ROLE_NAME
source_profile = default

我正在處理這個角色,同時刪除並重新創建了它。 AWS CLI 在使用此配置文件方法時緩存令牌。 緩存的令牌用於舊角色,而不是重新創建的角色。 這可以通過將--debug添加到 CLI 命令來查看:

2023-01-27 16:22:03,055 - MainThread - botocore.credentials - DEBUG - Credentials for role retrieved from cache.
2023-01-27 16:22:03,055 - MainThread - botocore.credentials - DEBUG - Retrieved credentials will expire at: 2023-01-27 21:46:59+00:00

可以通過刪除~/.aws/cli/cache目錄或在該目錄中找到的此 session 的特定 JSON 文件來擦除緩存。

暫無
暫無

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

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