代码之家  ›  专栏  ›  技术社区  ›  Anders Lundsgard

在某些AWS Cli操作上提示MFA代码

  •  0
  • Anders Lundsgard  · 技术社区  · 6 年前

    我们强制MFA用于AWS web控制台访问。但我也希望一些aws操作被提示输入MFA代码。

    aws iam delete-users --user-name theusername
    Enter MFA: *********
    

    这可能吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   jarmod    6 年前

    您应该能够在相关API操作上添加MFA条件。例如,这里有一个IAM策略,允许承载者自由调用EC2操作,但在调用StopInstances或TerminateInstances时需要MFA。

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Action": ["ec2:*"],
        "Resource": ["*"]
      },{
        "Effect": "Deny",
        "Action": ["ec2:StopInstances", "ec2:TerminateInstances"],
        "Resource": ["*"],
        "Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": false}}
      }]
    }
    

    有关更详细的示例,请参见 here .

        2
  •  1
  •   sudo    6 年前

    确切的用例是不可能的。但是,您可以向IAM角色授予必要的权限,例如StopInstances,并仅授予IAM用户承担该角色的权限 if and only if the user uses MFA . 该角色的信任策略如下:

    {
      "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Principal": { "AWS": "arn:aws:iam::123456789012:root" },
        "Action": "sts:AssumeRole",
        "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } }
      }
    }
    

    因此,在使用控制台时,IAM用户将使用凭据和MFA令牌登录,并能够担任停止实例的角色。

    使用CLI时,可以使用 named profiles with "mfa_serial" 变量,并且当用户尝试使用命名的概要文件参数停止实例时,CLI将请求MFA代码(请注意,返回的凭据将缓存在CLI中)。

    或者,您可以使用jarmod提供的建议并使用自定义脚本,因为您需要调用GetSessionToken并传递MFA令牌。有一个Python和C#脚本示例 here .