亚马逊云科技 - AWS IAM 策略:要求用户自行预置 MFA



我想向我们的新用户发送他们的 IAM 用户名和临时凭证,然后要求他们更改密码并要求他们配置自己的虚拟 MFA,然后才能访问控制台中的其他任何内容。

1)创建用户时,我显然可以生成一个临时密码,并要求他们在首次登录时更改它。 Security Credentials-->Manage Password-->'Require user to create a new password at next sign-in'.

2) 以下策略将允许 IAM 用户更改自己的密码:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "iam:ChangePassword",
      "iam:GetAccountPasswordPolicy"
    ],
    "Resource": "*"
  }
}

3) 以下策略允许用户仅管理自己的虚拟 MFA 设备:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowUsersToCreateEnableResyncDeleteTheirOwnVirtualMFADevice",
      "Effect": "Allow",
      "Action": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:ResyncMFADevice",
        "iam:DeleteVirtualMFADevice"
      ],
      "Resource": [
        "arn:aws:iam::account-id-without-hyphens:mfa/${aws:username}",
        "arn:aws:iam::account-id-without-hyphens:user/${aws:username}"
      ]
    },
    {
      "Sid": "AllowUsersToDeactivateTheirOwnVirtualMFADevice",
      "Effect": "Allow",
      "Action": [
        "iam:DeactivateMFADevice"
      ],
      "Resource": [
        "arn:aws:iam::account-id-without-hyphens:mfa/${aws:username}",
        "arn:aws:iam::account-id-without-hyphens:user/${aws:username}"
      ],
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": true
        }
      }
    },
    {
      "Sid": "AllowUsersToListMFADevicesandUsersForConsole",
      "Effect": "Allow",
      "Action": [
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices",
        "iam:ListUsers"
      ],
      "Resource": "*"
    }
  ]
}

使用上述三种方法,我可以要求他们更改密码并允许他们配置自己的虚拟 MFA 设备,我只是不知道是否有办法要求他们配置 MFA

AWS对此有一个记录在案的答案:https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html

这是一个包含多个语句的单个策略:

  1. 允许列出所有用户和所有 MFA 设备。
  2. 仅允许列出您自己的用户及其自己的 MFA 设备。
  3. 允许管理您自己的 MFA 设备。
  4. 如果您已使用 MFA 登录,则允许停用 MFA。
  5. 阻止对其他所有内容的访问,除非使用 MFA 进行登录。

我发布完整的解决方案,因为它不是 AWS IAM 账户是否需要 MFA 的副本?,这非常有用,但不是允许新 IAM 用户登录控制台、更改密码并自行添加自己的虚拟 MFA 的完整解决方案。

1) 创建托管策略以允许用户更改自己的密码:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "iam:ChangePassword",
      "iam:GetAccountPasswordPolicy"
    ],
    "Resource": "*"
  }
}

2) 创建托管策略以允许用户管理自己的虚拟 MFA 设备:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowUsersToCreateEnableResyncDeleteTheirOwnVirtualMFADevice",
      "Effect": "Allow",
      "Action": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:ResyncMFADevice",
        "iam:DeleteVirtualMFADevice"
      ],
      "Resource": [
        "arn:aws:iam::account-id-without-hyphens:mfa/${aws:username}",
        "arn:aws:iam::account-id-without-hyphens:user/${aws:username}"
      ]
    },
    {
      "Sid": "AllowUsersToDeactivateTheirOwnVirtualMFADevice",
      "Effect": "Allow",
      "Action": [
        "iam:DeactivateMFADevice"
      ],
      "Resource": [
        "arn:aws:iam::account-id-without-hyphens:mfa/${aws:username}",
        "arn:aws:iam::account-id-without-hyphens:user/${aws:username}"
      ],
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": true
        }
      }
    },
    {
      "Sid": "AllowUsersToListMFADevicesandUsersForConsole",
      "Effect": "Allow",
      "Action": [
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices",
        "iam:ListUsers"
      ],
      "Resource": "*"
    }
  ]
}

3) 将以下条件添加到需要 MFA 的所有策略:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Sid": "ReadOnlyEC2RequireMFA",
        "Action": [
            "ec2:Describe*"
        ],
        "Effect": "Allow",
        "Resource": "*",
        "Condition": {
            "Null": {
                "aws:MultiFactorAuthAge": "false"
            }
        }
    }]
}

4) 创建新的 IAM 用户并为其分配密码时,请选中"要求用户在下次登录时创建新密码"框并应用上述三个托管策略(或将托管策略分配给组并将用户添加到组)。

现在,将用户名和临时密码分发给新的 IAM 用户。 当他们登录时,它会提示他们更改密码,然后他们只能进入IAM,选择自己的用户帐户并添加自己的MFA设备。 他们需要注销并使用 MFA 重新登录才能获取ec2:Describe*权限。

相关内容

  • 没有找到相关文章