不同于使用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