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

如何修改Python Boto代码实现DynamoDB的MFA认证?

解决Boto DynamoDB2的MFA认证问题

嘿,我来帮你搞定这个MFA认证的问题,咱们一步步来梳理:

首先,你遇到的第一个拒绝错误,是因为现在公司的IAM策略强制要求MFA认证才能访问DynamoDB,直接用永久密钥调用API会被明确拒绝。而第二个错误则是你设置的临时凭证无效——要么是生成方式不对,要么是凭证和密钥不匹配。

旧版的boto.dynamodb2.connect_to_region确实不支持直接传入session_token参数,所以得换个思路:先通过STS服务生成带MFA的临时安全凭证,再用这个凭证去连接DynamoDB。

步骤1:生成带MFA的临时凭证

首先要调用AWS STS的get_session_token接口,传入你的MFA设备信息和实时生成的验证码,获取临时密钥对和会话令牌。代码示例如下:

import boto.sts

# 替换成你的实际信息
AWS_REGION = "us-west-2"
MFA_DEVICE_ARN = "arn:aws:iam::123123123123:mfa/mike.ross"
MFA_CODE = "123456"  # 从你的MFA设备(比如谷歌身份验证器)获取实时验证码

# 连接STS服务
sts_conn = boto.sts.connect_to_region(AWS_REGION)

# 获取带MFA的临时凭证
session_credentials = sts_conn.get_session_token(
    duration_seconds=3600,  # 凭证有效期,最长可设为43200秒(12小时)
    mfa_serial_number=MFA_DEVICE_ARN,
    mfa_token=MFA_CODE
)

# 提取临时凭证信息
temp_access_key = session_credentials.access_key
temp_secret_key = session_credentials.secret_key
temp_session_token = session_credentials.session_token

步骤2:用临时凭证连接DynamoDB

因为boto.dynamodb2.connect_to_region不支持直接传会话令牌,我们有两种可靠的方式来使用临时凭证:

方式一:通过环境变量传递(简洁直观)

把刚生成的临时凭证设置到环境变量中,再调用连接方法:

import os
import boto.dynamodb2

# 设置临时凭证到环境变量
os.environ['AWS_ACCESS_KEY_ID'] = temp_access_key
os.environ['AWS_SECRET_ACCESS_KEY'] = temp_secret_key
os.environ['AWS_SESSION_TOKEN'] = temp_session_token

# 现在可以正常连接DynamoDB了
db_connection = boto.dynamodb2.connect_to_region(AWS_REGION)

方式二:通过Boto Config直接传递(更灵活,不依赖环境变量)

如果你不想修改环境变量,可以直接通过Boto的配置对象传递凭证:

from boto.dynamodb2.layer1 import DynamoDBConnection
import boto.config

# 构建配置对象,填入临时凭证
config = boto.config.Config()
config.set('Credentials', 'aws_access_key_id', temp_access_key)
config.set('Credentials', 'aws_secret_access_key', temp_secret_key)
config.set('Credentials', 'aws_session_token', temp_session_token)

# 初始化DynamoDB连接
db_connection = DynamoDBConnection(
    region=AWS_REGION,
    config=config
)

关键注意事项

  • 确保你的IAM用户拥有sts:GetSessionToken的权限,并且该权限的策略中包含MFA验证条件(否则无法生成带MFA的临时凭证)。
  • MFA验证码是实时有效的,每次运行代码都需要替换成MFA设备生成的新验证码。
  • 临时凭证有有效期,到期后需要重新生成,你可以根据业务需求调整duration_seconds参数(最大12小时)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:27:05