调用GetSecretValue操作时发生错误UnrecognizedClientException:请求中包含的安全令牌无效

问题描述

请检查下面的截图是否有问题。 AWS凭证配置正确,当我们在boto3中单独使用但在SAM lambda函数中触发时,它可以正常工作,触发此错误enter image description here

尝试了所有解决方案,例如检查“ aws configure”和未设置AWS_Security_TOKEN,其他来源中提到的其他解决方案也尝试过,但没有用。

并且在代码中尝试做

session = boto3.session.Session()
secretsmanager = session.client('secretsmanager')

try:
        get_secret_value_response = secretsmanager.get_secret_value(
            SecretId=secret_name
        )
        secret = json.loads(get_secret_value_response['SecretString'])
    except ClientError as e:
        print(e)
        # print(sys.exc_info(),traceback.print_exc(file=sys.stdout))
    except Exception as e:
        print(sys.exc_info(),traceback.print_exc(file=sys.stdout))
        print(e)

解决方法

通过删除此文件~/.aws/credentials来删除AWS凭证。然后重新运行aws configure并传递有效的安全证书。这应该可以解决您遇到的问题。

如果您配置了多个配置文件,则编辑~/.aws/credentials并删除此代码使用的配置文件。例如,如果您在配置凭据时使用过user1,则文件将具有类似于以下内容:>

[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

要解决此问题,只需从~/.aws/credentials删除[user1]部分,然后重新运行aws configure

,

也许是一个有点不同的问题,但我在本地遇到了完全相同的错误,因为我在获取会话之前设置了默认配置文件。

所以,如果我运行脚本:

boto3.setup_default_session(profile_name='myprofile')
session = boto3.session.Session()
secretsmanager = session.client('secretsmanager')

我遇到了与问题相同的错误,可能是因为它们一起使用时效果不佳。

要解决,您可以删除会话部分:

boto3.setup_default_session(profile_name='myprofile')
secretsmanager = boto3.client('secretsmanager')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...