Back openDesk Edu for a sovereign, open-source education — every vote counts.
Vote nowSave products you love by clicking the heart icon.
A recent study analyzes the most popular Docker Hub images, revealing alarming security risks: flaws in base images affect all downstream deployments. Learn how to secure your containers.
Die unangenehme Wahrheit: Deine KI-generierte Infrastructure-as-Code (IaC) ist wahrscheinlich unsicher. Eine aktuelle Studie von Francis Luis Santos Vargas, Rodrigo Brandão Mansilha und Diego Kreutz (2026) hat 7 führende LLMs und SLMs bei der Erzeugung von sicherheitskonformen Terraform-Code benchmarkt. Das Ergebnis: Nur 3 von 7 Modellen liefern Code, der grundlegende Security-Standards erfüllt – die anderen produzieren "Cloud Time Bombs".
💥 Fakt: Cloud Fehlkonfigurationen sind die Hauptursache für Sicherheitsvorfälle (Quelle: IBM Cost of a Data Breach Report 2025). Doch statt die Problematik zu lösen, verstärkt KI sie oft – wenn sie falsch eingesetzt wird.
Die Forscher haben 7 Modelle (LLMs & SLMs) mit 3 Sicherheitskriterien evaluiert:
| Modell | Typ | Sicherheitskonformität | Throughput | Kosten |
|---|---|---|---|---|
| GPT-4o | LLM | ⭐⭐⭐⭐ (88%) | ⚡⚡⚡ | $$$$ |
| Claude 3.5 Sonnet | LLM | ⭐⭐⭐⭐ (85%) | ⚡⚡⚡⚡ | $$$$ |
| Llama 3.1 70B | LLM | ⭐⭐⭐ (72%) | ⚡⚡ | $$$ |
| Mistral Large 2 | LLM | ⭐⭐⭐ (70%) | ⚡⚡⚡ | $$$ |
| Gemini 1.5 Pro | LLM | ⭐⭐ (65%) | ⚡⚡⚡ | $$$$ |
| Codellama 70B | SLM | ⭐⭐⭐ (75%) | ⚡ | $$ |
| DeepSeek Coder 32B | SLM | ⭐⭐ (60%) | ⚡⚡⚡⚡ | $ |
🔒 Compliance mit Security Best Practices
acl = "public-read" ohne Notwendigkeit)password = "admin123")🛡️ Resilienz gegen Angriffe
http statt https)ami-12345678 ohne Updates)ingress { from_port = 0 to_port = 65535 })📊 Korrektheit & Wartbarkeit
aws_instance.undefined)template_file, sondern templatefile)Erzeuge Terraform-Code für eine sichere AWS S3-Bucket mit:
- Keinem öffentlichen Zugriff
- Verschlüsselung (AES256)
- Versionierung
- Minimalen IAM-Berechtigungen
resource "aws_s3_bucket" "secure_bucket" {
bucket = "my-secure-bucket"
# Kein öffentlicher Zugriff
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_versioning" "secure_bucket_versioning" {
bucket = aws_s3_bucket.secure_bucket.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "secure_bucket_encryption" {
bucket = aws_s3_bucket.secure_bucket.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
# ❌ UNSICHER: Hartcodiertes Passwort
resource "aws_db_instance" "example" {
password = "admin123"
# ...
}
# ❌ UNSICHER: Öffentlicher Zugriff
resource "aws_s3_bucket" "public_bucket" {
acl = "public-read"
# ...
}
# ❌ UNSICHER: Veraltetes AMI
resource "aws_instance" "example" {
ami = "ami-12345678" # Nicht mehr gewartet
# ...
}
# ❌ UNSICHER: Alle Ports offen
resource "aws_security_group" "open_all" {
ingress {
from_port = 0
to_port = 65535
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
Problem: KI neigt dazu, Standard-Einstellungen zu verwenden – und die sind oft unsicher.\nLösung: Immer explizit block_public_acls = true setzen
# ✅ SICHER: Kein öffentlicher Zugriff
resource "aws_s3_bucket" "secure" {
bucket = "my-bucket"
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
Problem: KI hat kein Gedächtnis für Secrets – sie generiert sie einfach inline.\nLösung: Immer aws_secretsmanager_secret oder var.password nutzen
# ❌ UNSICHER: Hartcodiert
password = "my-secret-password"
# ✅ SICHER: Aus Variable oder Secrets Manager
password = var.db_password
# Oder besser:
data "aws_secretsmanager_secret_version" "db_password" {
secret_id = "prod/db/password"
}
password = data.aws_secretsmanager_secret_version.db_password.secret_string
Problem: KI generiert oft "*"-Policies, die zu viele Rechte vergeben.\nLösung: Immer spezifische Resources und Actions angeben
# ❌ UNSICHER: Zu viele Rechte
resource "aws_iam_policy" "too_permissive" {
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = "*"
Resource = "*"
}]
})
}
# ✅ SICHER: Minimale Rechte
resource "aws_iam_policy" "least_privilege" {
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = ["s3:GetObject"]
Resource = ["arn:aws:s3:::my-bucket/*"]
}]
})
}
Problem: KI vergisst oft, Verschlüsselung zu aktivieren.\nLösung: Immer server_side_encryption für S3, EBS, RDS setzen
# ✅ SICHER: Verschlüsselung für S3
resource "aws_s3_bucket_server_side_encryption_configuration" "example" {
bucket = aws_s3_bucket.example.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
# ✅ SICHER: Verschlüsselung für EBS
resource "aws_ebs_volume" "example" {
encrypted = true
# ...
}
# ✅ SICHER: Verschlüsselung für RDS
resource "aws_db_instance" "example" {
storage_encrypted = true
kms_key_id = aws_kms_key.example.arn
# ...
}
Problem: KI verwendet manchmal veraltete oder unsichere Standards.\nLösung: Immer moderne, sichere Standards erzwingen
# ❌ UNSICHER: HTTP
listener {
protocol = "HTTP"
# ...
}
# ✅ SICHER: HTTPS mit Redirect
listener {
protocol = "HTTPS"
# ...
}
# ✅ SICHER: HTTP → HTTPS Redirect
listener {
protocol = "HTTP"
redirect {
port = "443"
protocol = "HTTPS"
status_code = "HTTP_301"
}
}
Schlecht:
"Erzeuge Terraform-Code für eine AWS EC2-Instanz."
Gut:
"Erzeuge sicheren Terraform-Code für eine AWS EC2-Instanz mit:
- Minimalen IAM-Berechtigungen (nur
ec2:DescribeInstances)- Verschlüsseltem EBS-Volume (AES256)
- Keinem öffentlichen Zugriff (Security Group nur für interne IPs)
- Keinen hartcodierten Secrets (Nutze
var.password)- Kommentaren, die jede Security-Entscheidung erklären"
Nutze Tools zur Überprüfung:
| Tool | Zweck | Beispiel |
|---|---|---|
| Checkov | Security-Scanning für Terraform | checkov -d /path/to/terraform |
| Tfsec | Security-Scanning für Terraform | tfsec /path/to/terraform |
| Snyk IaC | Security-Scanning für IaC | snyk iac test |
| Terraform Validate | Syntax-Prüfung | terraform validate |
| Terraform Plan | Änderungen vor dem Apply prüfen | terraform plan |
Beispiel CI/CD-Pipeline:
# .github/workflows/terraform-security.yml
name: Terraform Security Scan
on:
push:
paths: ["terraform/**"]
pull_request:
paths: ["terraform/**"]
jobs:
checkov:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Checkov
uses: bridgecrewio/checkov-action@master
with:
directory: terraform
framework: terraform
output_file_path: console
quiet: true
tfsec:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Tfsec
uses: aquasecurity/tfsec-action@master
with:
working_directory: terraform
snyk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Snyk IaC
uses: snyk/actions/iac@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
Nutze Terraform-Module mit Security-Standards:
Beispiel:
# Nutze ein sicheres Modul statt alles manuell zu schreiben
module "secure_vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 5.0"
# Security Best Practices
enable_nat_gateway = true
single_nat_gateway = false
one_nat_gateway_per_az = true
enable_dns_hostnames = true
enable_dns_support = true
# Keine öffentlichen Subnets für Datenbanken
public_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
private_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
database_subnets = ["10.0.201.0/24", "10.0.202.0/24"]
}
**Gib der KI Beispiele für sicheren Code und lasse sie davon lernen.
Beispiel:
Hier ist ein BEISPIEL für sicheren Terraform-Code für eine AWS S3-Bucket:
```hcl
resource "aws_s3_bucket" "example" {
bucket = "my-bucket"
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_server_side_encryption_configuration" "example" {
bucket = aws_s3_bucket.example.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
Jetzt generiere einen ÄHNLICHEN Code für eine AWS RDS-Instanz mit:
- Verschlüsselung (AES256)
- Keinem öffentlichen Zugriff
- Minimalen IAM-Berechtigungen
KI ist ein Werkzeug – kein Ersatz für menschliche Expertise.
| Aufgabe | GPT-4o | Claude 3.5 Sonnet | Llama 3.1 70B | Codellama 70B |
|---|---|---|---|---|
| Einfaches EC2-Instance | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Sicheres VPC-Setup | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| IAM-Policies (Least Privilege) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| S3-Bucket mit Security | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| KMS-Verschlüsselung | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| Multi-AZ RDS-Cluster | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| Kostenoptimierung | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
💡 Empfehlung:
- Einfache Aufgaben: Codellama 70B (günstig & schnell)
- Sicherheitskritische Aufgaben: GPT-4o oder Claude 3.5 Sonnet
- Komplexe Architektur: Immer menschliche Review + Security-Tools
| Tool | Beschreibung | Link |
|---|---|---|
| Checkov | Open-Source Security-Scanner für Terraform | GitHub |
| Tfsec | Security-Scanner mit Fokus auf Best Practices | GitHub |
| Snyk IaC | Enterprise-Security für IaC | Website |
| Infracost | Kosten-Berechnung für Terraform | Website |
| TFLint | Linting für Terraform (Syntax & Best Practices) | GitHub |
| Modul | Beschreibung | Link |
|---|---|---|
| terraform-aws-secure-baseline | Security-Hardening für AWS | GitHub |
| cis-aws-terraform | CIS Benchmarks als Terraform | GitHub |
| cloudposse-terraform | Sichere Module für AWS, GCP, Azure | GitHub |
Die Studie zeigt: KI kann IaC generieren – aber nicht immer sicher. Die Verantwortung liegt bei dir als DevOps Engineer, Cloud Architect oder Security-Experte.
🎯 Sofort umsetzbar:
🚀 Langfristig:
💡 Letzter Tipp: KI ist wie ein scharfes Messer – sie kann dir helfen, große Dinge zu bauen, aber auch wehtun, wenn du sie falsch einsetzt.
🔗 Original-Studie: Security-First Evaluation of Text-to-Terraform: Benchmarking LLMs and SLMs for Secure IaC Generation (arXiv:2608.02672v1)
📌 Tags: #Terraform #Security #LLM #IaC #DevOps #Cloud #AI