本地运行AWS SageMaker时触发InvalidClientTokenId错误的求助
排查AWS SageMaker本地训练
InvalidClientTokenId错误的思路 我来帮你梳理下这个问题的排查方向,你遇到的InvalidClientTokenId错误通常是凭证没正确传递给SageMaker本地客户端导致的,结合你用saml2aws的场景,按下面的步骤排查试试:
先验证本地凭证的有效性
首先排除凭证本身的问题:- 在终端运行
aws sts get-caller-identity命令,如果这个命令返回InvalidClientTokenId,说明saml2aws生成的临时凭证已经过期或者无效,重新执行saml2aws login刷新凭证即可。 - 检查
~/.aws/credentials和~/.aws/config文件,确认里面的临时密钥(aws_access_key_id、aws_secret_access_key、aws_session_token)是saml2aws刚生成的,没有被其他配置覆盖。
- 在终端运行
确保SageMaker客户端读取到正确的凭证
本地SageMaker客户端默认读取环境变量或本地配置文件的凭证,你可以从这两方面检查:- 查看终端环境变量:运行
echo $AWS_ACCESS_KEY_ID、echo $AWS_SECRET_ACCESS_KEY、echo $AWS_SESSION_TOKEN,确认这三个变量存在且对应saml2aws生成的凭证。如果Notebook是在独立的IDE(比如VS Code)中运行的,可能需要重启IDE让环境变量生效,或者在Notebook中手动导入这些变量:import os os.environ['AWS_ACCESS_KEY_ID'] = '你的临时Access Key' os.environ['AWS_SECRET_ACCESS_KEY'] = '你的临时Secret Key' os.environ['AWS_SESSION_TOKEN'] = '你的临时Session Token' - 如果你的AWS配置有多个profile,要确保SageMaker客户端使用的是saml2aws对应的profile。可以在初始化客户端时显式指定:
import boto3 session = boto3.Session(profile_name='saml') # 替换成你的saml profile名称 sagemaker_client = session.client('sagemaker')
- 查看终端环境变量:运行
检查SageMaker执行角色的信任关系
虽然错误提示是凭证无效,但角色的信任策略配置错误也可能间接导致这类问题:- 登录AWS控制台,找到你的SageMaker执行角色,查看其信任策略,确认策略中允许当前saml2aws登录的身份(比如你的SAML用户或身份提供商)扮演该角色。典型的信任策略应该包含类似以下的语句:
{ "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::你的账号ID:saml-provider/你的SAML提供商名称" }, "Action": "sts:AssumeRoleWithSAML" }
- 登录AWS控制台,找到你的SageMaker执行角色,查看其信任策略,确认策略中允许当前saml2aws登录的身份(比如你的SAML用户或身份提供商)扮演该角色。典型的信任策略应该包含类似以下的语句:
确认SageMaker Local模式的配置
确保你确实在使用本地训练模式,避免误调用云端API:- 检查Estimator初始化代码,确认设置了
instance_type='local'(CPU)或instance_type='local_gpu'(GPU),如果设置成了云端实例类型(比如ml.t2.medium),会直接调用云端SageMaker服务,此时凭证问题会触发该错误。
- 检查Estimator初始化代码,确认设置了
排查环境一致性问题
- 确认运行Notebook的环境和执行saml2aws登录的终端环境是同一个,比如你在终端A登录了saml2aws,但Notebook在终端B启动,那终端B的环境变量不会包含saml2aws的凭证,需要在终端B重新执行
saml2aws login。
- 确认运行Notebook的环境和执行saml2aws登录的终端环境是同一个,比如你在终端A登录了saml2aws,但Notebook在终端B启动,那终端B的环境变量不会包含saml2aws的凭证,需要在终端B重新执行
内容的提问来源于stack exchange,提问作者Buggorilla
相关产品推荐
相关产品推荐

