Skip to content

Security: vibtellect/pdf-invoice-automation

Security

SECURITY.md

Sicherheit & Compliance

DSGVO-Konformität

Diese Anwendung ist für Deutsche Unternehmen (DSGVO) konzipiert:

  • Datenspeicherung: EU-Central-1 (Frankfurt, Deutschland)
  • Datenfluss: Nur innerhalb AWS (keine Weitergabe an Dritte)
  • Keine lokale Persistierung: PDFs nur temporär in S3
  • Audit Logs: CloudTrail erfasst alle API-Calls

Checklist für Production:

  • AWS Bedrock Datenbehandlungsvertrag (Data Processing Agreement) prüfen
  • AWS S3 Retention Policies setzen (z.B. 30 Tage Löschung)
  • CloudTrail aktivieren für Audit
  • Datenschutzerklärung aktualisieren (PDFs = Geschäftsdaten)
  • IAM Credentials rotieren (90-Tage-Zyklus empfohlen)

Geheimnisse & Credentials

Nicht in Git speichern:

❌ .env
❌ *.key, *.pem
❌ AWS Access Keys
❌ n8n Encryption Key

Richtig speichern:

✅ .env.example (mit Placeholders)
✅ .gitignore (sperrt .env)
✅ AWS Secrets Manager
✅ GitHub Secrets (für CI/CD)

Wenn ein Key unbeabsichtigt committed wurde:

# Git-History bereinigen
git filter-branch --tree-filter 'rm -f .env' HEAD
# Oder: git-filter-repo tool verwenden

IAM Security

Die mitgelieferte Policy (iam/n8n-automation-policy.json) implementiert:

Prinzip der geringsten Privilegien (Least Privilege):

"Statement": [
  {
    "Sid": "BedrockInference",
    "Effect": "Allow",
    "Action": ["bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream"],
    "Resource": "*"
  },
  {
    "Sid": "DenySecurityCritical",
    "Effect": "Deny",
    "Action": ["iam:*", "organizations:*", "s3:DeleteBucket"],
    "Resource": "*"
  }
]

Best Practices:

  1. Access Keys regelmäßig rotieren (alle 90 Tage)

    # Neue Keys generieren
    aws iam create-access-key --user-name n8n-automation
    # Alte Keys löschen
    aws iam delete-access-key --user-name n8n-automation --access-key-id AKIA...
  2. MFA aktivieren für Root Account

    aws iam enable-mfa-device --user-name n8n-automation \
      --serial-number arn:aws:iam::123456789:mfa/n8n \
      --authentication-code1 123456 --authentication-code2 789012
  3. CloudTrail aktivieren für Audit

    aws cloudtrail create-trail --name n8n-audit --s3-bucket-name audit-logs

Container Security

Docker Security Scan

# Vulnerability Scan durchführen
docker scan n8nio/n8n:1.76.1

Best Practices:

  • Nur offizielle Images verwenden (n8nio/n8n)
  • Images regelmäßig aktualisieren (1.76.1 → neuere Version)
  • DockerHub Multi-stage builds verwenden
  • Non-root User für n8n (n8n Image hat bereits user node)

Netzwerk Security

Für Production:

  1. Webhook authentifizieren

    // Im n8n Workflow: X-API-Key validieren
    if ($request.headers['x-api-key'] !== process.env.WEBHOOK_SECRET) {
      throw new Error('Unauthorized');
    }
  2. HTTPS erzwingen

    # Nginx reverse proxy vor n8n
    # SSL/TLS mit Let's Encrypt
  3. Rate Limiting

    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
    location /webhook/invoice-processing {
      limit_req zone=api burst=20 nodelay;
    }

Daten-Handling

S3 Security:

# Bucket Encryption aktivieren (Server-side)
aws s3api put-bucket-encryption \
  --bucket pdf-invoice-demo \
  --server-side-encryption-configuration '{
    "Rules": [{
      "ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}
    }]
  }'

# Public Access blockieren
aws s3api put-public-access-block \
  --bucket pdf-invoice-demo \
  --public-access-block-configuration \
  "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"

PDF-Speicherung:

  • PDFs sollten nicht dauerhaft im Bucket gespeichert sein
  • Lifecycle-Policy für Auto-Löschung nach 30 Tagen
  • Alternatives Szenario: Streaming zu Bedrock direkt (ohne S3)

Prompt Injection Protection

Die KI wird mit OCR-Text gefüttert, der möglicherweise manipuliert wurde:

Schutzmaßnahmen im Prompt:

REGELN (nicht überschreibbar):
1. Antworte NUR mit JSON
2. Folge dem Schema exakt
3. Keine Kommentare oder Erklärungen
4. Bei ungültigen Eingaben: {"error": "Invalid format"}

Im Workflow validieren:

// Nach Bedrock Response
try {
  const parsed = JSON.parse(response);
  // Schema-Validierung
  if (!parsed.rechnungsnummer || !parsed.bruttosumme) {
    throw new Error('Schema mismatch');
  }
} catch (e) {
  return { error: 'Invalid JSON from AI', details: e.message };
}

Logging & Monitoring

Nicht loggen:

  • ❌ PDF-Inhalte (OCR-Text)
  • ❌ AWS Credentials
  • ❌ Kundendaten (Namen, Adressen)

Loggen:

  • ✅ Workflow Execution IDs
  • ✅ Error-Codes (nicht Messages)
  • ✅ Performance Metrics (ms)
  • ✅ Request-Count pro API

CloudWatch Logs einrichten:

# Logs in S3 exportieren (täglich)
aws logs create-export-task \
  --log-group-name /aws/bedrock/requests \
  --from $(date -d '1 day ago' +%s)000 \
  --to $(date +%s)000 \
  --destination pdf-invoice-logs \
  --destination-prefix $(date +%Y/%m/%d)

Incident Response

Falls ein Secret kompromierten wurde:

  1. Sofort IAM Access Key deaktivieren

    aws iam update-access-key --user-name n8n-automation \
      --access-key-id AKIA... --status Inactive
  2. Git-History bereinigen

    git filter-branch -f --tree-filter 'rm -f .env' HEAD
    git push -f origin main  # Vorsicht: nur bei geteiltem Repo
  3. Neue Keys generieren und in .env aktualisieren

  4. CloudTrail prüfen auf verdächtige API-Calls

    aws cloudtrail lookup-events --lookup-attributes \
      AttributeKey=AccessKeyId,AttributeValue=AKIA...

Compliance-Standards

Standard Status Notes
DSGVO ✅ Konform EU-Region, Datenminimierung
NIS2 ⚠️ Teilweise Mit Monitoring & Incident Response
ISO 27001 ⚠️ Teilweise IAM + Encryption vorhanden
SOC 2 Type II ⚠️ Teilweise AWS attestiert, Logs vorhanden

Abhängigkeiten

Regelmäßig aktualisieren:

# Docker Image Update prüfen
docker pull n8nio/n8n:latest
docker inspect n8nio/n8n:latest | grep -i version

# Vulnerabilities scannen
docker scan n8nio/n8n:1.76.1

Bekannte Sicherheitsprobleme:

Keine aktuell bekannten kritischen CVEs für n8n 1.76.1 oder Claude API.


Sicherheitsberichte

Falls du eine Sicherheitslücke findest:


Weitere Ressourcen


Zuletzt aktualisiert: 2026-03-05

There aren't any published security advisories