Conceptos

IaC en la nube (Terraform & CloudFormation)

#cloud#cloudformation#devsecops#iac#terraform

IaC en la nube es el uso de herramientas declarativas para aprovisionar y gestionar recursos cloud (red, compute, storage, seguridad) como codigo, de forma repetible, versionable y…

Definicion

IaC en la nube es el uso de herramientas declarativas para aprovisionar y gestionar recursos cloud (red, compute, storage, seguridad) como codigo, de forma repetible, versionable y escalable. En esta nota se cubren Terraform (multi‑cloud) y AWS CloudFormation (AWS‑native).

Contexto

Desarrollo (MIT-style)

1) Panorama de IaC cloud

  • En cloud, IaC permite crear infraestructura elastica y consistente con un flujo declarativo.
  • Herramientas clave en esta nota:
    • Terraform: multi‑cloud, basado en HCL y archivo de estado.
    • CloudFormation: servicio gestionado AWS‑native con plantillas JSON/YAML.

2) Terraform — fundamentos

Arquitectura (alto nivel):

  • Terraform Core aplica el estado deseado.
  • Fuentes de verdad:
    • Archivos de configuracion (definen recursos).
    • Estado (terraform.tfstate) con el estado actual.
  • Providers ejecutan las acciones contra APIs (AWS, Azure, GCP, Kubernetes, etc.).

Configuracion (HCL):

provider "aws" {
region = "eu-west-2"
}
resource "aws_vpc" "flynet_vpc" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "flynet-vpc"
}
}

Dependencias entre recursos:

resource "aws_security_group" "example_security_group" {
name = "example-security-group"
description = "Example Security Group"
vpc_id = aws_vpc.flynet_vpc.id
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = [aws_vpc.flynet_vpc.cidr_block]
}
}

Modularizacion (estructura ejemplo):

tfconfig/
- flynet_vpc_security.tf
- other_module.tf
- variables.tf
- main.tf

Variables y modulos (resumen):

variable "vpc_cidr_block" {
description = "CIDR block for the VPC"
type = string
default = "10.0.0.0/16"
}
module "flynet_vpc_security" {
source = "./flynet_vpc_security.tf"
}

Flujo de trabajo (dia 1 / dia 2+ / dia N):

  • WriteInitPlanApply
  • Destroy cuando la infraestructura ya no se necesita.

Comandos clave:

Terminal window
terraform init
terraform plan
terraform apply
terraform destroy

3) CloudFormation — fundamentos

Modelo declarativo: plantillas JSON/YAML describen estado deseado.

Plantillas y pilas:

  • La plantilla crea una stack (pila) que agrupa recursos.

Ejemplo minimo (template):

AWSTemplateFormatVersion: '2010-09-09'
Description: 'A simple CloudFormation template'
Resources:
MyEC2Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: 'ami-12345678'
InstanceType: 't2.micro'
KeyName: 'my-key-pair'
MyS3Bucket:
Type: 'AWS::S3::Bucket'
Properties:
BucketName: 'my-s3-bucket'
Outputs:
EC2InstanceId:
Description: 'ID of the EC2 instance'
Value: !Ref MyEC2Instance

Arquitectura (master‑worker):

  • Nodo principal (servicio CloudFormation) orquesta.
  • Nodos de trabajo en regiones AWS aprovisionan recursos.

Funciones y conceptos clave:

  • Secciones: Version, Description, Parameters, Resources, Outputs.
  • Funciones intrinsecas: !Ref, !GetAtt, !Sub.
  • Change Sets: previsualizar cambios.
  • Eventos y rollback: registro de eventos y reversion automatica en errores.
  • Referencias entre pilas para dependencias multi‑stack.

4) Terraform vs CloudFormation (resumen)

Dimension Terraform CloudFormation
Alcance Multi‑cloud AWS‑native
Estado tfstate State gestionado por AWS
Lenguaje HCL JSON/YAML
Ecosistema Comunidad + modulos Integracion nativa AWS
Uso tipico Hibrido/multinube AWS puro

5) IaC seguro (cloud)

Buenas practicas comunes (Terraform + CloudFormation):

  • Control de versiones (Git) y revisiones de codigo.
  • Minimo privilegio en credenciales.
  • Parametrizar secretos (no hardcode).
  • Gestion segura de credenciales y registros de auditoria.

CloudFormation:

  • Usar roles IAM con permisos minimos.
  • Guardar templates en S3 cifrado.
  • Politicas de stack para controlar actualizaciones.

Terraform:

  • Cifrar estado y usar backends remotos.
  • Proteger variables sensibles (Vault/KMS).
  • Configurar credenciales del proveedor de forma segura.

6) Practica guiada (lab)

  • Sitio interactivo con etapas Review → Apply → Destroy.
  • Simula flujo de Terraform (init/plan/apply/destroy).
  • Rellena YAML con bloques seguros para endurecer la infraestructura.

Ejemplos

  • Terraform: VPC + Security Group con dependencia por referencia de recursos.
  • CloudFormation: plantilla con EC2 + S3 y outputs.
  • Escenario: multinube (Terraform) vs AWS‑centrico (CloudFormation).

Pitfalls / Errores comunes

  • No usar plan/change sets antes de aplicar cambios.
  • Secrets en texto plano dentro de templates/HCL.
  • Permisos excesivos en roles/credenciales IaC.
  • Estado sin cifrado o sin backend remoto.
  • Plantillas almacenadas sin control de acceso.

Diagrama

flowchart LR
subgraph Terraform
A[HCL config] --> B[terraform init]
B --> C[terraform plan]
C --> D[terraform apply]
D --> E[tfstate]
end
subgraph CloudFormation
T[Template JSON/YAML] --> V[Validate]
V --> O[Orchestrate]
O --> W[Workers AWS Regions]
W --> S[Stack Create/Update]
end

Referencias

  1. TryHackMe — Intro to IaC: https://tryhackme.com/room/introtoiac
  2. TryHackMe — Source Code Security: https://tryhackme.com/room/sourcecodesecurity
  3. CloudFormation Designer: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-overview.html
  4. AWS S3: https://aws.amazon.com/s3/
  5. AWS Auto Scaling: https://aws.amazon.com/autoscaling/
  6. AWS Rollback (Auto Scaling): https://docs.aws.amazon.com/autoscaling/ec2/userguide/instance-refresh-rollback.html
  7. AWS IAM: https://aws.amazon.com/iam/?gclid=Cj0KCQiAm4WsBhCiARIsAEJIEzXouhhd93RvbhqE9xDx8UN65Y44Gq19qsHQf_D5yk9QkScSLgQwvDgaAtOWEALw_wcB&trk=35b38fd8-ca20-4fe2-b46d-16f845a47e34&sc_channel=ps&ef_id=Cj0KCQiAm4WsBhCiARIsAEJIEzXouhhd93RvbhqE9xDx8UN65Y44Gq19qsHQf_D5yk9QkScSLgQwvDgaAtOWEALw_wcB:G:s&s_kwcid=AL!4422!3!651612449969!e!!g!!amazon%20iam!19836376240!155574317508
  8. TryHackMe image (Terraform provisioning): https://tryhackme-images.s3.amazonaws.com/user-uploads/6228f0d4ca8e57005149c3e3/room-content/7cdb769ecb4e5b5a0bb23f30d999454a.svg
  9. TryHackMe image (Terraform architecture): https://tryhackme-images.s3.amazonaws.com/user-uploads/6228f0d4ca8e57005149c3e3/room-content/b25923ed88b91dc85d24605c3b97f03d.svg
  10. TryHackMe image (Terraform Day 1): https://tryhackme-images.s3.amazonaws.com/user-uploads/6228f0d4ca8e57005149c3e3/room-content/8f2325af86bb7978f2106f733caac33b.svg
  11. TryHackMe image (Terraform Day N): https://tryhackme-images.s3.amazonaws.com/user-uploads/6228f0d4ca8e57005149c3e3/room-content/667e6e2b9cbac61df9d17ac8e0aabae9.svg
  12. TryHackMe image (CloudFormation flow): https://tryhackme-images.s3.amazonaws.com/user-uploads/61a7523c029d1c004fac97b3/room-content/10cd2efae7292cd42ba523ba3625c3c8.svg
  13. TryHackMe image (Terraform vs CloudFormation): https://tryhackme-images.s3.amazonaws.com/user-uploads/6228f0d4ca8e57005149c3e3/room-content/46b69b1f213ad744229dd1a273835633.svg