Terraform IAM: roles y policies automáticos
Clase 13 de 30 • Curso de Ciberseguridad para Desarrollo Web
Contenido del curso
Funciona en mi local
Introducción a DevSecOps
Seguridad en la arquitectura
- 11

Arquitectura AWS para métricas de Git
02:24 min - 12

Configuración de AWS CLI para Terraform
09:34 min - 13

Terraform IAM: roles y policies automáticos
Viendo ahora - 14

Modificando main.tf para enlazar módulos IAM en Terraform
06:02 min - 15

Bucket S3 para Lambdas con Terraform
16:44 min - 16

Configuración de Postgres RDS con VPC y seguridad
14:10 min - 17

Configurando VPC para AWS Lambda con Terraform
12:29 min - 18

Cómo configurar API Gateway para Lambdas
05:42 min
Evitando vulnerabilidades en el código
- 19

Configuración completa de Auth0 para tokens
07:14 min - 20

Authorizer Lambda con Auth0 y JWT
16:56 min - 21

Conecta Go a Postgres usando AWS Secrets
13:35 min - 22

Conexión segura de Lambdas a Secrets con VPC
11:27 min - 23

Validación de webhooks desde GitHub con user-agent
12:08 min - 24

Cómo validar integridad de webhooks con HMAC
14:32 min
Controles de seguridad sobre datos
Monitoring y alertas
CORS y cierre
Configura en minutos una base sólida de infraestructura como código en AWS con Terraform, módulos IAM, policies, roles y estado remoto en S3. Aprenderás a estructurar carpetas, crear policies en json, conectar módulos con outputs y ejecutar los comandos clave: init, fmt, plan y apply. Resultado: un rol con permisos para RDS y logs en CloudWatch listo para tus funciones Lambda.
¿Cómo preparar el entorno con Make y Terraform?
Para automatizar y versionar la infraestructura se usan infraestructura como código, Make y Terraform. La verificación y la instalación correcta evitan fallos al ejecutar los planes.
¿Qué herramientas instalar y cómo verificar la instalación?
- Instala Make en Mac o Linux por defecto. En Windows: instalar manualmente.
- Verifica que quedó instalado:
make --version. - Descarga Terraform desde su landing para Mac, Windows o Linux.
¿Cómo organizar la carpeta infra y el backend en S3?
- En la raíz del proyecto crea una carpeta:
infraoterraform. - Dentro vivirá todo: módulos, policies, roles y archivos
.tf. - Configura el backend en S3 para guardar el estado remoto: bucket
platzi-tf-security, key predeterminadaterraform.tfstate, regiónus-east-2(Ohio).
terraform {
backend "s3" {
bucket = "platzi-tf-security"
key = "terraform.tfstate"
region = "us-east-2"
}
}
- Define que trabajarás con AWS y usa la región más cercana a ti.
¿Cómo modelar IAM con módulos, policies y roles en Terraform?
La sintaxis de Terraform “trae” valores de afuera hacia adentro y los referencia por nombre. Usa módulos para separar responsabilidades: iam/policies y iam/roles.
¿Cómo definir policies en json para RDS y logs?
- Crea dos policies: una para acceso a RDS y otra para logs en CloudWatch.
- Usa un recurso
aws_iam_policyconjsonencodey genera el json con el AWS Policy Generator.
# policies/can_access_rds.tf
resource "aws_iam_policy" "can_access_RDS" {
name = "can_access_RDS"
path = "/"
description = "Databases for queries."
policy = jsonencode({
Version = "2012-10-17",
Statement = [{
Effect = "Allow",
Action = [/* acciones de RDS */],
Resource = "*"
}]
})
}
output "can_access_RDS_arn" {
value = aws_iam_policy.can_access_RDS.arn
}
# policies/can_log.tf
resource "aws_iam_policy" "can_log" {
name = "can_log"
path = "/"
description = "Allow logs to CloudWatch."
policy = jsonencode({
Version = "2012-10-17",
Statement = [{
Effect = "Allow",
Action = [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
Resource = "*"
}]
})
}
output "can_log_arn" {
value = aws_iam_policy.can_log.arn
}
- Habilidades y conceptos aplicados: definición de recursos
aws_iam_policy, uso dejsonencode, diseño de permisos con efecto Allow, acciones y resource, y exposición de ARNs con outputs.
¿Cómo crear el rol RepoCollectorPlatzi y pasar ARNs entre módulos?
- En
iam/roles, define variables para recibir los ARNs:RDSpolicy_arnylogPolicy_arn. - Crea el rol
RepoCollectorPlatzicon su documento de asunción.
# roles/vars.tf
variable "RDSpolicy_arn" { type = string }
variable "logPolicy_arn" { type = string }
# roles/role.tf
data "aws_iam_policy_document" "assume_role" {
# documento para asumir el rol (Lambda u otro servicio)
}
resource "aws_iam_role" "RepoCollectorPlatzi" {
name = "RepoCollectorPlatzi"
assume_role_policy = data.aws_iam_policy_document.assume_role.json
}
# adjunta las policies usando los ARNs recibidos por variables
# (recurso de attachment según corresponda)
output "repo_collector_role_arn" {
value = aws_iam_role.RepoCollectorPlatzi.arn
}
- Conecta los módulos en
main.tfpara pasar ARNs de policies al módulo de roles y exponer el output del rol:
module "policies" {
source = "./iam/policies"
}
module "roles" {
source = "./iam/roles"
RDSpolicy_arn = module.policies.can_access_RDS_arn
logPolicy_arn = module.policies.can_log_arn
}
output "repo_collector_role_arn" {
value = module.roles.repo_collector_role_arn
}
¿Cómo ejecutar terraform init, plan y apply para desplegar en AWS?
Una vez creados los archivos, inicializa, formatea, valida el plan y aplica los cambios. Si el plan no muestra cambios, revisa que el main.tf importe los módulos.
¿Qué hace cada comando y cómo interpretar el plan?
terraform init: inicializa módulos y estado en S3.terraform fmt -recursive: formatea archivos.tf.terraform plan: muestra qué creará, cambiará o borrará, sin ejecutar.terraform apply: aplica el plan y solicita confirmación con yes.
terraform init
terraform fmt -recursive
terraform plan
terraform apply
- Expectativa del plan: crear 2 policies (RDS y logs) y 1 rol
RepoCollectorPlatzicon las policies adjuntas.
¿Cómo validar en IAM que se creó todo?
- En la consola de AWS IAM: verifica el rol
RepoCollectorPlatzi. - Revisa que tenga adjuntas las policies
can_access_RDSycan_log. - Abre cada policy para confirmar el json de permisos.
¿Tienes dudas sobre la estructura de módulos, el backend en S3 o las policies en json? Cuéntame en los comentarios qué parte te gustaría profundizar.