首页 > 解决方案 > AWS IAM 强制 MFA,但允许第一次更改密码

问题描述

您如何强制 AWS IAM 用户使用 MFA,但允许他们在首次登录时更改密码?

如果您遵循AWS Docs并强制执行 MFA,则新用户在首次获得账户时无法更改密码。

我知道您可以强制或强制 MFA ,并允许用户管理自己的密码和凭据。此外,AWS 有办法解决此问题,但不建议这样做:

此示例策略不允许用户在登录时重置密码。新用户和密码过期的用户可能会尝试这样做。您可以通过将 iam:ChangePassword 添加到语句 DenyAllExceptListedIfNoMFA 来允许这样做。但是,IAM 不建议这样做。允许用户在没有 MFA 的情况下更改密码可能存在安全风险。

那么“推荐”的方式是什么?

AWS 论坛上也有人问过这个问题,但没有真正的答案。

标签: amazon-web-servicesamazon-iammulti-factor-authentication

解决方案


此处推荐的路径是使用SSO / identity federation,但我提出了一种手动的单一策略解决方案,如果您还没有 SSO,则可以更轻松地进行管理。我的解决方案仍然存在风险,但仅限于初始帐户设置过程。它涉及使用标签手动标记新的 IAM 用户NewUser,然后在他们重置密码并配置 MFA 后手动取消标记。

以下指南假定您使用AWS 推荐的策略来允许经过 MFA 身份验证的 IAM 用户在我的安全凭证页面上管理他们自己的凭证

在您的块所在的位置编辑您的 MFA 策略"Sid": "DenyAllExceptListedIfNoMFA",并将其替换为以下内容:

{
    "Sid": "DenyAllExceptListedIfNoMFAAndNewUser",
    "Effect": "Deny",
    "NotAction": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:GetUser",
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices",
        "iam:ResyncMFADevice",
        "sts:GetSessionToken",
        "iam:ChangePassword"
    ],
    "Resource": "*",
    "Condition": {
        "BoolIfExists": {
            "aws:MultiFactorAuthPresent": "false"
        }
    }
},
{
    "Sid": "DenyAllExceptListedIfNoMFA",
    "Effect": "Deny",
    "NotAction": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:GetUser",
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices",
        "iam:ResyncMFADevice",
        "sts:GetSessionToken"
    ],
    "Resource": "*",
    "Condition": {
        "BoolIfExists": {
            "aws:MultiFactorAuthPresent": "false"
        },
        "StringNotEqualsIfExists": {
            "iam:ResourceTag/NewUser": "true"
        }
    }
}

创建一个新用户并添加一个NewUser标签,其值设置为true描述先前语句的 AWS IAM 控制台屏幕截图

将凭据发送给新用户。在他们首次登录后,NewUser从他们的 IAM 用户资源中删除标签。

您可以在此处查看我的完整政策示例


推荐阅读