首页 > 解决方案 > 使用 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 添加额外的一行,但这也没有奏效。

标签: boto3multi-factor-authenticationaws-sts

解决方案


改变最终变得非常简单。这是发生变化的地方:

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 让我担任该角色。


推荐阅读