跳至内容

如何解决 IAM 凭证错误“The security token included in the request isn’t valid”?

3 分钟阅读
0

当我使用 AWS Identity and Access Management (IAM) 凭证进行身份验证时,我收到了与以下内容类似的错误: “An error occurred (InvalidClientTokenId) when calling the ### operation: The security token included in the request is invalid”。

简短描述

发生此身份验证错误的原因是您的 IAM 凭证配置不正确、已过期/删除、位于意外位置或使用了错误的密钥对。使用的凭证取决于凭证提供者的顺序和优先级。有关详细信息,请参阅 Configuration and credentials precedence(配置和凭证优先级)。

解决方法

要解决此错误,请找到用户凭证位置,验证凭证是否有效,然后更新或替换凭证。

在以下使用案例示例中,错误发生在 Amazon Elastic Compute Cloud (Amazon EC2) 实例中,原因是凭证无效。

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 Troubleshoot AWS CLI errors(AWS CLI 错误故障排除)。此外,请确保您使用的是最新版本的 AWS CLI

查找用户凭证位置

要获取 EC2 实例使用的 IAM 凭证,请运行 AWS CLI 命令 get-caller-identity

aws sts get-caller-identity --debug

输出示例:

2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: env
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role-with-web-identity
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: sso
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: shared-credentials-file
2024-06-04 11:28:22,588 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials

在之前的输出示例中,EC2 实例使用的凭证位于 ~/.aws/credentials 文件中。

注意:****.aws/credentials 文件包含您的 IAM 实体的凭证详细信息。管理您的凭证时,请确保遵循 security best practices in IAM(IAM 中的安全最佳实践)。

验证凭证是否有效

要验证凭证对位置和 API 调用操作是否有效,请按照以下步骤操作。

  1. 要验证 EC2 实例使用了哪些凭证,请运行以下命令:

    cd ~/.aws
    cat credentials

    输出示例:

    [default]
    aws_access_key_id=AKIAIOSFODNN7EXAMPLE
    aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  2. 要验证访问密钥权限是否有效,请使用 AWS 管理控制台AWS CLI
    **注意:**如果您使用临时安全凭证,则访问密钥可能会过期。过期的临时密钥不允许任何类型的访问请求,包括 API 调用。

更新或替换凭证

如果凭证已过期或删除,请更新凭证。如果凭证无效,请按照以下步骤使用 AWS CLI 验证和更新凭证。

**注意:**如果您使用长期凭证,请确保访问密钥 ID 有效。最佳实践是使用临时安全凭证,而不是访问密钥等长期凭证。有关详细信息,请参阅 Alternatives to long-term access keys(长期访问密钥的替代方案)。

如果您在 AWS CLI 中使用命名配置文件,请确保 aws_access_key_idaws_session_token 设置的值正确。配置文件设置存储在**./aws/credentials** 或 ./aws/config 文件中。

如果您在环境变量中存储了无效的凭证,请运行以下命令将其移除:

unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN

如果您更新了配置文件设置,请确保重置环境变量

更新或替换凭证后,运行 AWS CLI 命令 get-caller-identity 以验证凭证是否有效:

aws sts get-caller-identity --debug

输出示例:

2024-06-04 12:46:07,167 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: env
2024-06-04 12:46:07,167 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role
2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role-with-web-identity
2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: sso
2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: shared-credentials-file
2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: custom-process
2024-06-04 12:46:07,168 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: config-file
2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: ec2-credentials-file
2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: boto-config
2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: container-role
2024-06-04 12:46:07,169 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: iam-role
2024-06-04 12:46:07,177 - MainThread - botocore.credentials - DEBUG - Found credentials from IAM Role: ec2_Role

在之前的输出中,该实例使用 Amazon EC2 实例配置文件凭证,因为没有其他以更高优先级存储的凭证。

相关信息

为什么我的 Amazon EC2 实例使用 IAM 用户凭证而不是角色凭证?

为什么我在某些 AWS 区域收到 IAM 错误“AWS was not able to validate the provided access credentials”?

Managing AWS STS in an AWS Region(管理 AWS 区域中的 AWS STS)

AWS 官方已更新 2 年前