top of page

Cómo desplegar políticas IAM condicionales con Terraform

  • Foto del escritor: Rodrigo González Falero
    Rodrigo González Falero
  • 24 jun
  • 1 Min. de lectura

Hoy en día, AWS es el proveedor líder de servicios en la nube, con una gran variedad de soluciones disponibles. Uno de los servicios más importantes es IAM (Identity and Access Management), que nos permite gestionar el acceso a los recursos de AWS de forma segura. Lo mejor: es completamente gratuito.


" "

IAM nos permite controlar los permisos mediante la creación de políticas. Una vez definidas, la mejor práctica es asignarlas a grupos y luego incluir a los usuarios dentro de esos grupos. De esta manera, mantenemos una estructura organizada y coherente en cuanto a permisos.


Además, siempre debemos aplicar el principio de menor privilegio: dar solo los permisos mínimos necesarios para que un usuario realice sus tareas, ni más ni menos.


Ahora bien, ¿qué pasa cuando necesitamos políticas IAM más complejas con múltiples condicionales? Ahí es donde Terraform, nuestra herramienta de Infraestructura como Código, entra en juego.

Veamos un ejemplo en JSON de una política con dos condicionales:


{
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:*:*:security-group/*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "CreateSecurityGroup"
                },
                "Null": {
                    "aws:RequestTag/elbv2.k8s.aws/cluster": "false"
                }
            }
        }
 
 

Para llevar esto a Terraform, simplemente separamos cada condicional dentro del bloque statement:

statement {
    actions   = ["ec2:CreateTags"]
    resources = ["arn:aws:ec2:*:*:security-group/*"]
 
    condition {
 test     = "StringEquals"
 variable = "ec2:CreateAction"
 values   = ["CreateSecurityGroup"]
    }
 
    condition {
 test     = "Null"
 variable = "aws:RequestTag/elbv2.k8s.aws/cluster"
 values   = ["false"]
    }

Lo que hacemos es descomponer cada condición en su propio bloque condition, especificando el tipo de prueba (test), la variable y su valor. Así, convertimos políticas JSON con múltiples condicionales en configuraciones Terraform limpias y mantenibles.



 
 
bottom of page