La autenticación multifactor (MFA) es una capa adicional de seguridad para tus cuentas de AWS. Implementar MFA ayuda a proteger tus recursos al requerir no solo una contraseña, sino también un segundo factor de autenticación, como un código de una aplicación de autenticación. En este post, mostraremos cómo forzar el uso de MFA en los usuarios de IAM de AWS mediante una política de IAM asi garantizar que todos los usuarios activen esta funcionalidad.
Esta politica funciona independientemente de los permisos que tengan los usuarios, por ejemplo si un usuario solamente tiene un permiso de lectura en EC2 podra ingresar a IAM e ir a la opcion de “Añadir Multifactor de autenticación”
Requisitos:
Para los usuarios el unico requisito es contar con una aplicacion de Multifactor sea virtual o fisica.
Lo primero que realizaremos es crear la politica, para esta accion si se necesita que un usuario con permisos de administrador o permisos especificos en IAM para crear politicas.
A continuacion los pasos:
Ingresamos a la consola de aws
Ingresamos a IAM Identity and Access Management
Ingresamos a policies y damos click en Create Policy
El codigo de la politica es el siguiente
{
"Statement": [
{
"Action": [
"iam:GetAccountPasswordPolicy",
"iam:GetAccountSummary",
"iam:ListVirtualMFADevices"
],
"Effect": "Allow",
"Resource": "*",
"Sid": "AllowViewAccountInfo"
},
{
"Action": [
"iam:ChangePassword",
"iam:GetUser"
],
"Effect": "Allow",
"Resource": "arn:aws:iam::*:user/${aws:username}",
"Sid": "AllowManageOwnPasswords"
},
{
"Action": [
"iam:CreateAccessKey",
"iam:DeleteAccessKey",
"iam:ListAccessKeys",
"iam:UpdateAccessKey"
],
"Effect": "Allow",
"Resource": "arn:aws:iam::*:user/${aws:username}",
"Sid": "AllowManageOwnAccessKeys"
},
{
"Action": [
"iam:DeleteSigningCertificate",
"iam:ListSigningCertificates",
"iam:UpdateSigningCertificate",
"iam:UploadSigningCertificate"
],
"Effect": "Allow",
"Resource": "arn:aws:iam::*:user/${aws:username}",
"Sid": "AllowManageOwnSigningCertificates"
},
{
"Action": [
"iam:DeleteSSHPublicKey",
"iam:GetSSHPublicKey",
"iam:ListSSHPublicKeys",
"iam:UpdateSSHPublicKey",
"iam:UploadSSHPublicKey"
],
"Effect": "Allow",
"Resource": "arn:aws:iam::*:user/${aws:username}",
"Sid": "AllowManageOwnSSHPublicKeys"
},
{
"Action": [
"iam:CreateServiceSpecificCredential",
"iam:DeleteServiceSpecificCredential",
"iam:ListServiceSpecificCredentials",
"iam:ResetServiceSpecificCredential",
"iam:UpdateServiceSpecificCredential"
],
"Effect": "Allow",
"Resource": "arn:aws:iam::*:user/${aws:username}",
"Sid": "AllowManageOwnGitCredentials"
},
{
"Action": [
"iam:CreateVirtualMFADevice",
"iam:DeleteVirtualMFADevice"
],
"Effect": "Allow",
"Resource": "arn:aws:iam::*:mfa/*",
"Sid": "AllowManageOwnVirtualMFADevice"
},
{
"Action": [
"iam:DeactivateMFADevice",
"iam:EnableMFADevice",
"iam:ListMFADevices",
"iam:ResyncMFADevice"
],
"Effect": "Allow",
"Resource": "arn:aws:iam::*:user/${aws:username}",
"Sid": "AllowManageOwnUserMFA"
},
{
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
},
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:EnableMFADevice",
"iam:GetUser",
"iam:ListMFADevices",
"iam:ListVirtualMFADevices",
"iam:ResyncMFADevice",
"sts:GetSessionToken",
"iam:ChangePassword",
"iam:GetUser"
],
"Resource": "*",
"Sid": "DenyAllExceptListedIfNoMFA"
}
],
"Version": "2012-10-17"
}
Escogemos la opcion JSON y copiamos el codigo de la politica y damos click en Next.
Añadimos un nombre y una descripcion
Y damos click en Create Policy
Basicamente lo que hace esta politica es
- Permite ver información general de la cuenta:
- Ver la política de contraseñas de la cuenta
- Ver el resumen de la cuenta
- Listar dispositivos MFA virtuales
- Permite a los usuarios gestionar sus propias credenciales:
- Cambiar su propia contraseña
- Gestionar sus propias claves de acceso (crear, eliminar, listar, actualizar)
- Gestionar sus propios certificados de firma
- Gestionar sus propias claves públicas SSH
- Gestionar sus propias credenciales específicas de servicio (como para Git)
- Permite a los usuarios gestionar sus propios dispositivos MFA:
- Crear y eliminar dispositivos MFA virtuales
- Activar, desactivar, listar y resincronizar dispositivos MFA
- Implementa una política de seguridad estricta:
- Deniega todas las acciones excepto las específicamente listadas si el MFA no está presente
- Las únicas acciones permitidas sin MFA son las relacionadas con la configuración del MFA y el cambio de contraseña
Posterior lo que realizamos es la creación de un grupo y añadimos esta politica al grupo
Para esto ingresamos a IAM y escogemos la opcion de “user groups” y damos click en Create Group
Asignamos un nombre al grupo asi tambien como los usuarios a los que queremos aplicar esta politica.
asi tambien añadimos la politica a este grupo
Ahora podemos validar esta funcionalidad creando un usuario solo con acceso de lectura a Ec2
Para esto ingresamos a usuarios “create user”
Añadimos dos grupos al usuario uno en donde tiene el permiso de Ec2 y otro donde esta la politica que forza el uso de MFA
Para utilizar este acceso es preferible utilizar una ventana de incognito de tu navegador de preferencia
Ingreamos las credenciales y cambiamos la clave
Debido a que no tenemos permisos hasta activar el MFA se nos presenta toda la consola con error
El siguiente error explitico nos muestra en todos los recursos
You are not authorized to perform this operation. User: arn:aws:iam::XXXXXXX:user/pruebamfa is not authorized to perform: ec2:DescribeInstances with an explicit deny in an identity-based policy
Luego ingresamos a IAM y damos click en la opcion “Agregar MFA”
Realizamos la configuracion de mfa
Cerramos sesion y volvemos a ingresar y podemos ver las instancias en la cuenta de aws
De esta manera podemos garantizar que los usuarios activen el MFA y esta politica aplica tanto en el acceso de consola o via AWS CLI, en una proxima entrega veremos como usar el MFA usando AWS CLI.
Source link
lol