En aquest tema, explorarem les millors pràctiques de seguretat per a l'ús de Terraform. La seguretat és un aspecte crític en la gestió de la infraestructura com a codi (IaC), ja que qualsevol vulnerabilitat pot comprometre la integritat i la confidencialitat dels recursos desplegats. A continuació, desglossarem les pràctiques recomanades per assegurar les configuracions de Terraform.
- Emmagatzematge segur de secrets
Conceptes clau:
- Secrets: Informació sensible com claus d'API, contrasenyes, certificats, etc.
- Emmagatzematge segur: Utilitzar eines i serveis dissenyats per protegir secrets.
Pràctiques recomanades:
- No emmagatzemar secrets en el codi: Evita incloure secrets directament en els fitxers de configuració de Terraform.
- Utilitzar serveis de gestió de secrets: Utilitza serveis com AWS Secrets Manager, Azure Key Vault o HashiCorp Vault per emmagatzemar i gestionar secrets de manera segura.
- Variables d'entorn: Utilitza variables d'entorn per passar secrets a Terraform en lloc d'incloure'ls en els fitxers de configuració.
Exemple:
provider "aws" { region = "us-west-2" access_key = var.aws_access_key secret_key = var.aws_secret_key } variable "aws_access_key" { description = "AWS Access Key" type = string } variable "aws_secret_key" { description = "AWS Secret Key" type = string sensitive = true }
- Control d'accés
Conceptes clau:
- Principi de menor privilegi: Concedir només els permisos necessaris per a una tasca específica.
- Control d'accés basat en rols (RBAC): Assignar permisos a rols en lloc d'usuaris individuals.
Pràctiques recomanades:
- Utilitzar IAM roles: Assigna rols IAM amb permisos mínims necessaris per a les operacions de Terraform.
- Revisar i actualitzar permisos regularment: Assegura't que els permisos assignats són adequats i actualitzats segons les necessitats.
Exemple:
resource "aws_iam_role" "terraform" { name = "terraform-role" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Effect = "Allow" Principal = { Service = "ec2.amazonaws.com" } }, ] }) } resource "aws_iam_role_policy" "terraform_policy" { name = "terraform-policy" role = aws_iam_role.terraform.id policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = [ "ec2:Describe*", "ec2:Create*", "ec2:Delete*" ] Effect = "Allow" Resource = "*" }, ] }) }
- Xifratge
Conceptes clau:
- Xifratge en repòs: Protegir les dades emmagatzemades.
- Xifratge en trànsit: Protegir les dades mentre es transmeten.
Pràctiques recomanades:
- Xifrar fitxers d'estat: Utilitza xifratge per protegir els fitxers d'estat de Terraform.
- Utilitzar HTTPS: Assegura't que totes les comunicacions amb serveis externs es realitzen a través de HTTPS.
Exemple:
resource "aws_s3_bucket" "terraform_state" { bucket = "my-terraform-state-bucket" server_side_encryption_configuration { rule { apply_server_side_encryption_by_default { sse_algorithm = "AES256" } } } }
- Auditories i registres
Conceptes clau:
- Auditoria: Revisió sistemàtica de les activitats per assegurar el compliment de les polítiques de seguretat.
- Registres: Registre de les activitats per a la seva revisió posterior.
Pràctiques recomanades:
- Habilitar registres d'auditoria: Utilitza serveis com AWS CloudTrail, Azure Monitor o Google Cloud Audit Logs per registrar les activitats de Terraform.
- Revisar registres regularment: Analitza els registres per detectar activitats sospitoses o no autoritzades.
Exemple:
resource "aws_cloudtrail" "terraform_trail" { name = "terraform-trail" s3_bucket_name = aws_s3_bucket.terraform_state.bucket include_global_service_events = true is_multi_region_trail = true enable_logging = true }
- Gestió de l'estat
Conceptes clau:
- Fitxers d'estat: Contenen informació sobre la infraestructura gestionada per Terraform.
- Estat remot: Emmagatzemar els fitxers d'estat en un lloc centralitzat i segur.
Pràctiques recomanades:
- Utilitzar estat remot: Emmagatzema els fitxers d'estat en un servei remot segur com AWS S3, Azure Blob Storage o Google Cloud Storage.
- Habilitar bloqueig d'estat: Utilitza mecanismes de bloqueig per evitar conflictes en les actualitzacions de l'estat.
Exemple:
terraform { backend "s3" { bucket = "my-terraform-state-bucket" key = "path/to/my/key" region = "us-west-2" dynamodb_table = "terraform-lock" encrypt = true } }
Resum
En aquesta secció, hem explorat les millors pràctiques de seguretat per a l'ús de Terraform, incloent l'emmagatzematge segur de secrets, el control d'accés, el xifratge, les auditories i registres, i la gestió de l'estat. Implementar aquestes pràctiques ajudarà a protegir la teva infraestructura i assegurar que les teves operacions amb Terraform siguin segures i eficients.
Curs de Terraform
Mòdul 1: Introducció a Terraform
- Què és Terraform?
- Instal·lant Terraform
- Conceptes bàsics de Terraform
- Primera configuració de Terraform
Mòdul 2: Llenguatge de configuració de Terraform
Mòdul 3: Gestió de l'estat
Mòdul 4: Mòduls de Terraform
Mòdul 5: Proveïment de recursos
- Conceptes bàsics de proveïment
- Proveïment de recursos AWS
- Proveïment de recursos Azure
- Proveïment de recursos GCP
Mòdul 6: Funcionalitats avançades de Terraform
Mòdul 7: Millors pràctiques de Terraform
- Organització del codi
- Control de versions
- Proves del codi de Terraform
- Millors pràctiques de seguretat
Mòdul 8: Terraform en CI/CD
- Integració de Terraform amb CI/CD
- Automatització de Terraform amb Jenkins
- Ús de Terraform amb GitHub Actions
- Terraform Cloud i Enterprise