DEV Community

Cover image for Politica para forzar la configuracion de Multifactor de autenticación en usuarios IAM de AWS.
Willie
Willie

Posted on

Politica para forzar la configuracion de Multifactor de autenticación en usuarios IAM de AWS.

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

Image description

Ingresamos a IAM Identity and Access Management

Image description

Ingresamos a policies y damos click en Create Policy

Image description

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"
}
Enter fullscreen mode Exit fullscreen mode

Escogemos la opcion JSON y copiamos el codigo de la politica y damos click en Next.

Añadimos un nombre y una descripcion

Image description

Y damos click en Create Policy

Image description

Basicamente lo que hace esta politica es

  1. 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
  1. 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)
  1. Permite a los usuarios gestionar sus propios dispositivos MFA:
  • Crear y eliminar dispositivos MFA virtuales
  • Activar, desactivar, listar y resincronizar dispositivos MFA
  1. 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

Image description

Asignamos un nombre al grupo asi tambien como los usuarios a los que queremos aplicar esta politica.

Image description

asi tambien añadimos la politica a este grupo

Image description

Ahora podemos validar esta funcionalidad creando un usuario solo con acceso de lectura a Ec2

Para esto ingresamos a usuarios "create user"

Image description

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

Image description

Para utilizar este acceso es preferible utilizar una ventana de incognito de tu navegador de preferencia

Ingreamos las credenciales y cambiamos la clave

Image description

Debido a que no tenemos permisos hasta activar el MFA se nos presenta toda la consola con error

Image description

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"

Image description

Realizamos la configuracion de mfa

Image description

Cerramos sesion y volvemos a ingresar y podemos ver las instancias en la cuenta de aws

Image description

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.

Top comments (0)