如何强制IAM用户使用MFA

不同于使用IAM Identity Center,可以在配置中要求新用户登录时必须注册MFA。IAM用户需要通过增加一个额外的身份权限策略来规定:所有操作都必须使用了MFA才能做,除了到IAM绑定MFA不需要。

因此,加了这个策略以后需要通知所有使用IAM用户的人如果看到权限报错提醒,需要先到IAM中自行绑定一个MFA,重新登录后才能恢复。

配置方法如下:

创建自定义权限策略

创建一个策略,要求所有操作都必须使用了MFA才能做,除了到IAM绑定MFA不需要。

策略内容:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowManageOwnVirtualMFADevice",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": "arn:aws:iam::*:mfa/*"
        },
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:GetMFADevice",
                "iam:ListMFADevices",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice",
                "sts:GetSessionToken"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

策略名称:DenyAllExceptListedIfNoMFA

给IAM用户增加权限策略

负责管理权限的安全或者运维人员,登录AWS Console,进入IAM,选择要强制使用MFA的IAM 用户。选择“添加权限”,“直接附加策略”,选中刚才创建好的策略:“DenyAllExceptListedIfNoMFA”

添加完成后该用户无法进行任何操作,只能在IAM界面中绑定一个MFA,绑定后重新登录才能恢复之前的访问权限。

启用MFA可以选择硬件MFA(需要购买FIDO2安全密钥),passkey MFA(需要使用苹果电脑,苹果手机等支持指纹识别的设备)或者虚拟MFA(需要在手机上安装MFA软件,并扫描二维码)。

参考资料:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html

CLI使用时

先登录控制台右上角找到自己的“安全凭证”入口,打开可以看到MFA的ARN。复制留着要用。

替换 arn:aws:iam::123456789012:mfa/your-iam-user为你自己的MFA ARN。并且替换123456为你自己从MFA软件上看到的6位数字:

aws sts get-session-token --serial-number arn:aws:iam::123456789012:mfa/your-iam-user --token-code 123456

你会获得一套临时凭证,你将这套临时凭证写到AWS 凭证文件 (~/.aws/credentials)中:

[temp]
aws_access_key_id=ASIAY625JPUYWTZWBYJT
aws_secret_access_key=KKzyL6BGapGDYy1rAcxV3zzYIRZWhQZp9KRDiBpc
aws_session_token=IQoJb3JpZ2luX2VjENj//////////wEaCXVzLWVhc3QtMSJIMEYCIQC/KoqDpLi92kOJC1ZVERhRm08DnWYJ675QbQUA+TzHUQIhANT1XQwZYyTdnG2TSVyKgb18ns7YPuYu4kA5bID2fyskKvECCND//////////wEQABoMNjE1OTg2NTkzMDczIgyAXsA+Ghw2+bH8O/AqxQJYlfGejE910F+l5owG2dGuA/5QcbA/mxz3uylY+/aY2csluqxFuYkf9zT/to/chw72x+iMgm3CK5RLIDXlboNiGmqDCYKx5l+3ehkuLjN3p/GIW5FKlxby94NSv+9rORoCn7ermz5R3EZ+zKRedPXhHvo37qwgDo9ZWJSI7eOgKt8biSWaLqDngUgc/nesMuLH8mXUmSLRyZov2jc7fLDChyC4xFIZ9t1CTbt6fnMustAljRa/nCVX4oxZ+we3ADTCU9m+3xNJrcbX6XrQ/c4RjBVnICYezxBPUGKiPuDMCngYP97g7RyWhTFTz/cNeicyiiNon9ACKY8hH6GHl+3VYM1xmW4ZO5ptmbcIoWwIQBEIANpZKO/4xQ9GNjwGGXs9jHAdl6nPWqHrUfCsEa/6ak9tAM+h+wiVpFGfhQKCEBWFCbZaMKrY9rUGOqYBSqm2z/6Kz9tcPuMTiysObz4x+5PFXybm1ZKM5uCZ1wMGRAin1Lt+fUNLhtC/fSXMus7bLMlX9TFVJAqmdTiRgInK7pMDQkcam89su7jkg+r9jp3RLi6qI2pCVbvK73UGvKmuKizTvnl0+/NTrV9EV20Y6y2TNoU43WkuT/SvajE+41hye0LmbOwaLCnYJsrVTmxIkujczGr/TkqHJrM5SJE3ipSJ8A==

之后调用CLI的时候声明使用这个临时凭证则获取了授权,例如:

aws s3 ls --profile temp

这种使用方式,绑定的MFA必须是虚拟MFA,也就是通过软件生成6位数的MFA,硬件MFA或者passkey的不支持。

这么更安全但是不够方便,最好是真人调试代码使用IAM Identity Center,登录IAM Identity Center后可以直接复制出临时安全凭据使用。

参考资料

文档:https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_my-sec-creds-self-manage.html

视频:

https://www.youtube.com/watch?v=BNpbGHhk5Tc

最后更新于