我们强制MFA用于AWS Web控制台访问。但是我也想要一些aws动作提示输入MFA代码。
aws iam delete-users --user-name theusername
Enter MFA: *********
这可能吗?
您应该能够在相关API操作上添加MFA条件。例如,这是一个允许承载者自由调用EC2操作的IAM策略,但在调用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。
确切的用例是不可能的。但是,您可以提供必要的许可,例如StopInstances到IAM角色并仅授予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"变量,当用户尝试使用命名的profile参数停止实例时,CLI将询问MFA代码(请注意,返回的凭据将在CLI中缓存)。
或者,您可以使用jarmod提供的建议并使用自定义脚本,因为您需要调用GetSessionToken并传递MFA令牌。有一个示例Python和C#脚本here。