Infrastructure as Code (IaC)
Hva er infrastruktur?
I IT-verdenen omfatter infrastruktur alle de fysiske og virtuelle komponentene som danner grunnlaget for systemer og tjenester. Dette inkluderer:
- Maskinvare: Servere, datamaskiner, nettverksutstyr (f.eks. switcher, rutere) og lagringsenheter.
- Nettverksinfrastruktur: Kabler, nettverkstopologier, IP-adresser, VLAN, og brannmurer.
- Programvare: Operativsystemer, virtualiseringsplattformer og systemadministrasjonsverktøy.
Sammen utgjør disse elementene den grunnleggende infrastrukturen som støtter all IT-drift – fra utvikling og testing til produksjon og drift.
Hva er Infrastructure as Code?
Infrastructure as Code (IaC) er en tilnærming der infrastruktur defineres og administreres ved hjelp av kodefiler. I stedet for å konfigurere servere og nettverk manuelt via kontrollpaneler, beskrives alt med deklarative skript og maler. Dette gjør at:
- Repeterbarhet: Det er enkelt å gjenopprette eller klone et miljø.
- Versjonskontroll: Alle endringer kan spores i et Git-repository, akkurat som med applikasjonskode.
- Automatisering: Hele deploy- og konfigurasjonsprosessen kan automatiseres, noe som minimerer menneskelige feil.
Ved å definere infrastrukturen i kode, får man full kontroll over konfigurasjonen, og man kan raskt tilpasse, oppdatere og skalere miljøet.

Hvordan henger IaC sammen med resten av DevSecOps?
IaC er en kritisk del av DevSecOps fordi den automatiserer oppsettet av infrastruktur og sikrer at alle systemer deployeres på en konsekvent og sikker måte. Ved å integrere IaC med andre DevSecOps-prinsipper:
- CI/CD-integrasjon: Infrastrukturdefinisjoner kan testes og deployeres automatisk sammen med applikasjonskode.
- Sikkerhetsskanning: Verktøy som tfsec og Checkov kan gjennomgå IaC-koden for sårbarheter før endringer rulles ut.
- Overvåkning og logging: Når infrastrukturen er definert som kode, blir det enklere å samle inn logging og monitorering, som igjen bidrar til raskere respons ved sikkerhetsavvik.
IaC fungerer som en bro mellom utvikling og drift – og ved å gjøre infrastrukturen til en del av kodebasen, blir sikkerhet en integrert del av hele leveranseprosessen.
Installer Terraform på Ubuntu
Terraform er et deklarativt verktøy som lar deg definere og provisjonere infrastruktur i skyen og lokalt. Følg denne steg-for-steg-guiden for å installere Terraform på Ubuntu:
- Kjør en oppdatering:
sudo apt-get update
- Installer nødvendige verktøy:
sudo apt-get install -y gnupg software-properties-common curl
- Importer HashiCorp sin GPG-nøkkel:
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
- Legg til HashiCorp-repositoriet:
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
- Oppdater pakkelisten og installer Terraform:
sudo apt-get update && sudo apt-get install terraform
Etter installasjonen, bekreft at Terraform er tilgjengelig ved å skrive:
terraform -v
Eksempel: Terraform-konfigurasjon
I eksempelet nedenfor defineres en AWS-infrastruktur med en Virtual Private Cloud (VPC), et subnet og en EC2-instans. Dette demonstrerer hvordan du kan beskrive miljøet ditt i kode.
# main.tf
provider "aws" {
region = "us-east-1"
}
resource "aws_vpc" "main_vpc" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "DevSecOps-VPC"
}
}
resource "aws_subnet" "subnet_devsecops" {
vpc_id = aws_vpc.main_vpc.id
cidr_block = "10.0.1.0/24"
availability_zone = "us-east-1a"
map_public_ip_on_launch = true
tags = {
Name = "DevSecOps-Subnet"
}
}
resource "aws_instance" "example_ec2" {
ami = "ami-0c02fb55956c7d316" # Erstatt med en gyldig AMI-ID for din region
instance_type = "t2.micro"
subnet_id = aws_subnet.subnet_devsecops.id
tags = {
Name = "DevSecOps-EC2"
}
}
For å provisjonere denne infrastrukturen:
- Kjør
terraform init
for å laste ned nødvendige moduler. - Kjør
terraform plan
for å se en oversikt over planlagte endringer. - Kjør
terraform apply
for å sette opp infrastrukturen i AWS.
Ansible for Konfigurasjon
Når infrastrukturen er provisjonert med Terraform, kan du bruke Ansible til å konfigurere og sette opp de nye serverne. Med Ansible kan du skrive "playbooks" – skript som beskriver nøyaktig hvilke pakker som skal installeres, hvordan tjenester skal konfigureres, og hvordan systemene skal sikres.
Her er et eksempel på en Ansible-playbook som installerer og starter Apache på en webserver:
# install_apache.yml
- hosts: webserver
become: yes
tasks:
- name: Installer Apache
apt:
name: apache2
state: present
- name: Start og aktiver Apache
service:
name: apache2
state: started
enabled: true
For å kjøre playbooken, opprett en inventarfil (f.eks. hosts
) med IP-adressen til webserveren og kjør:
ansible-playbook -i hosts install_apache.yml
Dette sikrer at webserveren konfigureres på en repeterbar og sikker måte.
Sikkerhet i Infrastructure as Code
I DevSecOps er sikkerhet en integrert del av alt. Med IaC kan du:
- Skanne koden: Bruk verktøy som tfsec og Checkov for å identifisere konfigurasjonsfeil og sårbarheter før deploy.
- Håndtere secrets: Unngå å lagre passord og API-nøkler i klartekst. Bruk Ansible Vault eller HashiCorp Vault for å beskytte sensitive data.
- Code reviews: Alle IaC-endringer bør gjennomgås av flere teammedlemmer for å sikre at sikkerhetsprinsipper følges konsekvent.