You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SageMaker会话缓存跨账号角色的MFA令牌避免重复输入?

解决SageMaker跨账号角色MFA重复输入及凭证缓存问题

核心问题分析

你当前的问题根源有两点:

  • 手动调用sts.assume_role获取的临时凭证未被AWS SDK自动缓存,每次重建会话都得重新走一遍验证流程
  • 调用feature_group.ingest时指定profile_name='sandbox',相当于让SDK重新加载该配置,再次触发MFA验证

实际上AWS SDK(包括boto3和SageMaker SDK)本身支持自动处理带MFA的角色假设,还会自动缓存临时凭证,完全不需要手动写assume_role的逻辑。

解决方案步骤

1. 利用SDK自动处理角色假设与凭证缓存

直接使用你已经配置好的sandbox profile创建会话,SDK会自动完成以下操作:

  • 读取~/.aws/config里的角色ARN、MFA序列号等配置
  • 首次运行时提示输入MFA令牌
  • 将临时凭证缓存到~/.aws/cli/cache目录,有效期遵循你配置的duration_seconds(3600秒),有效期内无需重复输入MFA

2. 修改代码(移除手动assume_role逻辑)

替换你原来的会话创建代码,改成如下简洁版本:

# 直接用sandbox profile创建boto会话
boto_session = boto3.session.Session(profile_name='sandbox')

# 基于该会话创建SageMaker客户端和会话,无需重复指定凭证
sagemaker_client = boto_session.client('sagemaker')
sagemaker_session = Session(sagemaker_client=sagemaker_client, boto_session=boto_session)

# 创建FeatureGroup并执行数据导入,无需额外指定profile_name
feature_group = FeatureGroup(name=feature_group_name, sagemaker_session=sagemaker_session)
feature_group.ingest(df)

3. 验证缓存效果

第一次运行时会弹出MFA令牌输入提示,输入后SDK自动缓存凭证。后续在有效期内运行代码,不会再要求输入令牌,直接调用缓存的临时凭证。

额外注意事项

  • 确认~/.aws/config里的mfa_serial格式正确(应为arn:aws:iam::<你的账号ID>:mfa/<你的用户名>)
  • 确保default用户(source_profile)拥有sts:AssumeRole权限,能够调用目标sandbox角色
  • 若需要强制刷新缓存,可删除~/.aws/cli/cache目录下对应profile的缓存文件

内容的提问来源于stack exchange,提问作者Antimony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:27:35