Cómo limité el acceso SSH a una sola IP en AWS — mi primera implementación de Least Privilege
Source: Dev.to
El problema que nadie menciona en los tutoriales
La mayoría de guías de AWS indican: “abre el puerto 22 para conectarte por SSH” y configuran el acceso desde 0.0.0.0/0.
Eso permite que cualquier persona en Internet intente conectarse a tu servidor, lo que constituye un grave riesgo de seguridad.
Este laboratorio muestra cómo crear un Security Group bajo el principio de Least Privilege, limitando el acceso SSH exclusivamente a tu IP pública.
Servicios utilizados
- VPC por defecto de AWS
- EC2 Security Groups
- AWS CLI
Conceptos clave
- Security Group: firewall virtual que controla el tráfico entrante y saliente de los recursos de AWS.
- CIDR /32: notación que representa una única dirección IP. Por ejemplo,
203.0.113.10/32permite el acceso solo a esa IP. - Least Privilege: conceder únicamente los permisos mínimos necesarios.
Paso 1 – Obtener tu IP pública
curl https://checkip.amazonaws.com
Guarda el número que devuelve; lo usarás en el paso 4.
Paso 2 – Identificar la VPC por defecto
aws ec2 describe-vpcs \
--filters "Name=isDefault,Values=true" \
--query 'Vpcs[0].VpcId' \
--output text
Resultado esperado (ejemplo):
vpc-0a1b2c3d4e5f6g7h8
Paso 3 – Crear el Security Group
SECURITY_GROUP_ID=$(aws ec2 create-security-group \
--group-name "proyecto-seguridad" \
--description "Security group - acceso restringido a IP específica" \
--vpc-id $(aws ec2 describe-vpcs \
--filters "Name=isDefault,Values=true" \
--query 'Vpcs[0].VpcId' \
--output text) \
--query 'GroupId' \
--output text)
echo $SECURITY_GROUP_ID
Resultado esperado (ejemplo):
sg-0123456789abcdef0
Paso 4 – Autorizar ingreso SSH solo desde tu IP
⚠️ Reemplaza
203.0.113.10con la IP obtenida en el Paso 1.
aws ec2 authorize-security-group-ingress \
--group-id $SECURITY_GROUP_ID \
--protocol tcp \
--port 22 \
--cidr 203.0.113.10/32
El /32 asegura que solo esa dirección IP tenga acceso; sin él se abriría un rango completo.
Paso 5 – Verificar la regla
aws ec2 describe-security-groups \
--group-ids $SECURITY_GROUP_ID \
--query 'SecurityGroups[0].IpPermissions' \
--output table
Deberías ver una tabla que muestra el puerto 22, protocolo TCP y tu IP con /32.
Paso 6 – Eliminar el Security Group (cuando ya no lo necesites)
aws ec2 delete-security-group --group-id $SECURITY_GROUP_ID
Eliminar recursos evita cargos inesperados.
Conclusión
El aprendizaje principal no fue el comando en sí, sino comprender por qué el /32 es crucial.
La diferencia entre 0.0.0.0/0 y tu-ip/32 es la diferencia entre dejar la puerta abierta a Internet y entregarle una llave solo a quien la necesita.
Esto es Least Privilege en la práctica: una decisión concreta que mejora significativamente la seguridad.
Este es el primer laboratorio de mi “Road to DevOps”. Cada semana documentaré lo que aprendo, sin filtros y con los errores incluidos.