繁体   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