Bezpečnost7 min čtení

IaC Security

Zabezpečení Infrastructure as Code - automatické security scanning, policy as code a GitOps principy pro bezpečnou a auditovatelnou infrastrukturu.

Co je IaC Security?

Infrastructure as Code (IaC) Security zahrnuje procesy a nástroje pro zabezpečení vaší infrastruktury definované v kódu. Když píšete infrastrukturu jako kód (např. Terraform, CloudFormation), automaticky vytváříte dokumentaci vaší infrastruktury a můžete použít nástroje pro validaci bezpečnostních konfigurací ještě před jejich nasazením.

Proč je IaC důležité pro bezpečnost?

Představte si, že vaše infrastruktura byla větší - měli byste development, staging a production prostředí, více GitLab runnerů, databázové servery a další. Kdybychom všechno konfigurovali manuálně, nastaly by problémy:

  • Pomalá konfigurace: Manuální vytváření zdrojů je časově náročné a obtížně škálovatelné
  • Nekonzistence: Obtížné zajistit stejnou konfiguraci napříč prostředími
  • Chybějící dokumentace: Bez IaC nemáte přehled jak byla infrastruktura vytvořena
  • Riziko miskonfigurací: Lidé dělají chyby - zapomenou uzavřít port, smazat nepotřebného uživatele
  • Žádný audit trail: Bez verzování nevíte kdo co změnil a proč
  • Obtížná obnova: Po útoku nevíte jak obnovit původní stav

Výhody Infrastructure as Code

  • Kód je sám o sobě dokumentací vaší infrastruktury
  • Můžete použít nástroje pro validaci bezpečnostních problémů
  • Peer reviews a security audity kódu
  • Verzování a audit trail všech změn
  • Rychlá obnova po incidentu - stačí aplikovat kód

GitOps principy pro IaC

GitOps je přístup kde Git repozitář slouží jako single source of truth pro vaší infrastrukturu. Všechny změny prochází přes pull requesty, code review a automatizované testy.

GitOps Workflow pro IaC

1. Code & Version Control

Všechna infrastruktura je v Git repozitáři

  • Terraform/CloudFormation/Pulumi kód
  • Branch protection rules
  • Required reviews před merge

2. Automated Validation

CI pipeline automaticky validuje změny

  • terraform validate - syntaxe a struktura
  • Trivy/Checkov - security scanning
  • terraform plan - preview změn

3. Review & Approval

Lidská kontrola před nasazením

  • Code review od kolegů
  • Security review pro kritické změny
  • Approval gates v pipeline

4. Automated Deployment

Centralizované nasazení přes pipeline

  • terraform apply pouze z pipeline
  • Remote state management
  • Audit log všech deploymentů

IaC Security Scanning nástroje

Open Source

Trivy (dříve tfsec)

Aqua Security převedla tfsec do Trivy a vývoj dál směřuje už jen tam. Příkaz trivy config skenuje Terraform i další IaC formáty.

  • Terraform, CloudFormation, Kubernetes, Dockerfile
  • Custom checks v Rego
  • CI/CD integrace
  • JSON a SARIF výstup
Open Source

Checkov

Policy-as-code nástroj pro IaC scanning - Terraform, CloudFormation, Kubernetes a další.

  • Terraform, OpenTofu, CloudFormation, Kubernetes, Helm a další
  • 1000+ built-in policies
  • Custom policies v Pythonu a YAML
  • Graph-based analysis
Open Source

Conftest (OPA)

Testy konfigurace psané v Rego z Open Policy Agent. Terrascan, který OPA politiky také používal, Tenable v listopadu 2025 archivoval a dál ho neudržuje.

  • Rego policies
  • Terraform (HCL2), YAML, JSON, Dockerfile
  • Vlastní pravidla pro interní standardy
  • Snadné spuštění v CI
Terraform Native

terraform validate

Built-in Terraform příkaz pro validaci syntaxe a struktury.

  • Syntax validation
  • Variable references
  • Module validation
  • Provider requirements

Licence: HashiCorp v srpnu 2023 převedla nové verze Terraformu z MPL 2.0 na BSL 1.1. Komunitní fork OpenTofu pod Linux Foundation zůstává pod MPL 2.0 a první stabilní verzi vydal v lednu 2024. Uvedené skenery pracují se stejným HCL kódem; Checkov uvádí podporu OpenTofu výslovně.

Praktický příklad: CI/CD Pipeline pro Terraform

Joby používají rules místo zastaralých only/except a přepisují entrypoint oficiálních image. Image skenerů mají pevnou verzi: v březnu 2026 útočníci se zcizenými přístupy publikovali kompromitované verze Trivy a přepsali tagy trivy-action (CVE-2026-33634). Checkov ukládá výsledky do adresáře zadaného přes --output-file-path.

# .gitlab-ci.yml - DevSecOps Pipeline pro Terraform stages: - init - test - plan - deploy variables: TF_ROOT: ${CI_PROJECT_DIR}/terraform # Společný základ pro Terraform joby. Image má ENTRYPOINT terraform, # GitLab ho proto musí přepsat. .terraform: image: name: hashicorp/terraform:1.16 entrypoint: [""] # Inicializace Terraform init: extends: .terraform stage: init script: - cd $TF_ROOT - terraform init -backend-config="bucket=$TF_STATE_BUCKET" artifacts: paths: - $TF_ROOT/.terraform - $TF_ROOT/.terraform.lock.hcl # Validace syntaxe validate: extends: .terraform stage: test script: - cd $TF_ROOT - terraform validate allow_failure: false # Security scanning s Trivy (nástupce tfsec) # Verzi image vždy připněte, ideálně i na digest. trivy: stage: test image: name: aquasec/trivy:0.76.0 entrypoint: [""] script: - trivy config --format sarif --output trivy-results.sarif $TF_ROOT artifacts: paths: - trivy-results.sarif when: always allow_failure: true # Neblokuje pipeline, ale reportuje issues # Security scanning s Checkov checkov: stage: test image: name: bridgecrew/checkov:3.3.29 entrypoint: [""] script: - checkov -d $TF_ROOT --output json --output-file-path checkov-results artifacts: paths: - checkov-results/ when: always allow_failure: true # Terraform plan plan: extends: .terraform stage: plan script: - cd $TF_ROOT - terraform plan -out=tfplan artifacts: paths: - $TF_ROOT/tfplan dependencies: - init # Terraform apply - pouze na main branch s manual approval deploy: extends: .terraform stage: deploy script: - cd $TF_ROOT - terraform apply -auto-approve tfplan dependencies: - init - plan rules: - if: $CI_COMMIT_BRANCH == "main" when: manual environment: name: production

Příklad výstupu Trivy

# trivy config ./terraform (zkrácený výstup) main.tf (terraform) =================== Tests: 25 (SUCCESSES: 17, FAILURES: 8) Failures: 8 (UNKNOWN: 0, LOW: 2, MEDIUM: 3, HIGH: 3, CRITICAL: 0) AVD-AWS-0107 (HIGH): Security group rule allows ingress from public internet ---------------------------------------- Opening a security group to the public internet allows any IP address to potentially access resources behind the security group. See https://avd.aquasec.com/misconfig/aws-0107 ---------------------------------------- main.tf:173 AVD-AWS-0178 (MEDIUM): VPC Flow Logs is not enabled for VPC ---------------------------------------- VPC Flow Logs capture information about IP traffic going to and from network interfaces in a VPC. See https://avd.aquasec.com/misconfig/aws-0178 ---------------------------------------- main.tf:45

Bezpečný Terraform kód - příklady

Security Group - správně vs špatně

# ŠPATNĚ - příliš otevřená security group resource "aws_security_group" "bad_example" { name = "allow-all" ingress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] # Všechny porty otevřené světu! } } # DOBŘE - minimální potřebná oprávnění resource "aws_security_group" "good_example" { name = "app-security-group" description = "Security group for web application" vpc_id = aws_vpc.main.id # Pouze HTTPS ingress { description = "HTTPS from internet" from_port = 443 to_port = 443 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } # Pouze potřebný egress egress { description = "HTTPS outbound" from_port = 443 to_port = 443 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } tags = { Name = "app-sg" Environment = var.environment } }

S3 Bucket - encryption a access control

# Bezpečný S3 bucket resource "aws_s3_bucket" "secure_bucket" { bucket = "my-secure-bucket-${var.environment}" tags = { Name = "secure-bucket" Environment = var.environment } } # Blokovat veřejný přístup resource "aws_s3_bucket_public_access_block" "secure_bucket" { bucket = aws_s3_bucket.secure_bucket.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true } # Povolit encryption resource "aws_s3_bucket_server_side_encryption_configuration" "secure_bucket" { bucket = aws_s3_bucket.secure_bucket.id rule { apply_server_side_encryption_by_default { sse_algorithm = "aws:kms" kms_master_key_id = aws_kms_key.s3_key.arn } bucket_key_enabled = true } } # Povolit versioning resource "aws_s3_bucket_versioning" "secure_bucket" { bucket = aws_s3_bucket.secure_bucket.id versioning_configuration { status = "Enabled" } } # Access logging resource "aws_s3_bucket_logging" "secure_bucket" { bucket = aws_s3_bucket.secure_bucket.id target_bucket = aws_s3_bucket.log_bucket.id target_prefix = "s3-access-logs/" }

IaC Security Best Practices - Shrnutí

GitOps & Version Control

  • Všechna infrastruktura v Git repozitáři
  • Branch protection - žádné přímé pushe do main
  • Required code reviews před merge
  • Signed commits pro audit trail
  • Semantic versioning pro releases

Automated Security Scanning

  • Trivy nebo Checkov v každém PR
  • Image a GitHub Actions skenerů pinovat na verzi nebo commit SHA
  • Blokovat merge při kritických findings
  • Generovat reporty pro audit
  • Pravidelně aktualizovat pravidla
  • Custom policies pro vaše požadavky

Secure Terraform Practices

Co NEDĚLAT

  • Hardcoded secrets v Terraform kódu
  • terraform apply z lokálního počítače
  • Ignorovat security scan výsledky
  • Wildcard permissions (0.0.0.0/0 na všech portech)
  • Vypnuté encryption pro storage
  • Chybějící tagy pro audit a cost tracking

Zdroje

  1. Aqua Security (GitHub): tfsec, tfsec to Trivy Migration (srpen 2023)
  2. Trivy: Misconfiguration Scanning (listopad 2025)
  3. Aqua Security (GitHub Advisory): GHSA-69fq-xp46-6x23 / CVE-2026-33634 (březen 2026)
  4. Bridgecrew / Prisma Cloud (GitHub): Checkov (říjen 2025)
  5. Checkov: CLI Command Reference (říjen 2026)
  6. Tenable (GitHub): Terrascan (archived) (listopad 2025)
  7. Open Policy Agent: Conftest (září 2026)
  8. HashiCorp: Terraform Backend Type s3 (srpen 2026)
  9. HashiCorp: HashiCorp adopts Business Source License (srpen 2023)
  10. OpenTofu: OpenTofu is going GA (leden 2024)
  11. GitLab Docs: Deprecated keywords (only / except) (říjen 2026)
  12. GitLab Docs: Run your CI/CD jobs in Docker containers (říjen 2026)

Chcete to mít vyřešené bez vlastního DevOps týmu?

Náš čtyřčlenný DevOps tým se o vaši platformu stará za pevnou měsíční cenu.

Nebo napište na info@devsecops.cz. Údaje zpracujeme podle zásad ochrany soukromí.