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
