boto3 - 使用 MFA 启用自定义身份代理访问 AWS 控制台
问题描述
我想在本文档之后将 MFA 合并到 Python 代码中:https ://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html
我有一个 IAM 用户,当我担任通过 CLI 所需的 MFA 角色时,它的工作效果很好。这是我的配置。
.aws/配置
source_profile = developer_v2
role_arn = arn:aws:iam::123456789:role/developer-role-v2
mfa_serial = arn:aws:iam::123456789:mfa/developer
.aws/配置
aws_access_key_id = XXX
aws_secret_access_key = XXX
最后是我对 IAM 角色的信任策略
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:PrincipalType": "User"
},
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
]
}
当我删除 MFA 时,我收到一个 URL,但是当我包含 MFA 时,它会引发异常 json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我试图为 url_credentials 添加额外的一行,但这也没有奏效。
解决方案
改变最终变得非常简单。这是发生变化的地方:
mfa_TOTP = input("Enter the MFA code: ")
assumed_role_object = sts_connection.assume_role(
RoleArn="arn:aws:iam::123456789:role/developer-role-v2",
RoleSessionName="Developer",
DurationSeconds=3600,
SerialNumber="arn:aws:iam::123456789:mfa/developer",
TokenCode=mfa_TOTP
)
它会要求我输入我的 MFA 代码,并会创建一个 URL 让我担任该角色。
推荐阅读
- java - GWT ui.xml 转换
- python-3.x - 使用一系列指标构建 Astropy 表
- node.js - 在 Node.js(快速框架)中处理文本的有效方法是什么?
- python - 'MediaDefiningClass' 对象不可迭代 - django-import-export
- r - 获取目录中的文件名列表
- mongoose - 带有猫鼬模式数据的嵌入或引用文档?
- selenium - 启动范围报告挂钩管理器以使用 Specflow
- python - 在python中将数组列表和列表导出到csv文件
- r - 向量化矩阵中的加权算术
- python - 如何使用 Python 3.7 中的 'urllib.request' 从 Web 正确下载图像?