Serverless Security
Serverless-Architekturen beseitigen die Serververwaltung, bringen aber neue Herausforderungen mit sich: Function-Level Permissions, Event Injection, Schwachstellen in Abhängigkeiten und eine erweiterte Angriffsfläche.
Modell der geteilten Verantwortung
Anbieter (AWS/Azure/GCP)
- Physische Sicherheit und Infrastruktur
- Runtime Environment
- Isolation zwischen Functions
- Patching des Betriebssystems
Kunde (Sie)
- Code der Function
- Abhängigkeiten und Libraries
- IAM Permissions
- Data Encryption
- API-Gateway-Konfiguration
- Logging und Monitoring
OWASP Serverless Top 10
- Injection Flaws: SQLi, Command Injection in Event-Daten
- Broken Authentication: Fehlerhafte Token-Verwaltung, schwache Authn
- Sensitive Data Exposure: Hartkodierte Secrets, ausführliche Logs
- XML External Entities (XXE): Unsicheres XML-Parsing
- Broken Access Control: Zu freizügiges IAM
- Security Misconfiguration: Standardkonfigurationen, offene Ports
- Cross-Site Scripting (XSS): Unzureichendes Output Encoding
- Insecure Deserialization: Deserialisierung nicht vertrauenswürdiger Events
- Using Components with Known Vulnerabilities: Veraltete Abhängigkeiten
- Insufficient Logging: Fehlender Audit Trail
IAM und Least Privilege
Jede Function sollte über eine dedizierte IAM-Role mit den minimal erforderlichen Berechtigungen verfügen.
AWS Lambda - IAM Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem"
],
"Resource": "arn:aws:dynamodb:us-east-1:123456789:table/MyTable"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}
IAM-Prinzipien
- Function-specific roles: Roles niemals zwischen Functions teilen
- Resource-level permissions: Exakte ARNs angeben, keine Wildcards
- Time-based access: AWS STS für temporäre Credentials verwenden
- Deny by default: Nur das Notwendige explizit erlauben
Secrets Management
- AWS Secrets Manager: Automatische Rotation, Encryption at Rest
- Azure Key Vault: Managed HSM, Access Policies
- Environment Variables Encryption: KMS zum Verschlüsseln von Env Vars
- Parameter Store: AWS SSM Parameter Store für Konfigurationen
- Niemals hartkodieren: Secrets im Code oder in Repositories
Beispiel AWS Lambda + Secrets Manager
import boto3
import json
def lambda_handler(event, context):
# Secret aus dem Secrets Manager abrufen
session = boto3.session.Session()
client = session.client(service_name='secretsmanager')
get_secret_value_response = client.get_secret_value(
SecretId='prod/db/password'
)
secret = json.loads(get_secret_value_response['SecretString'])
db_password = secret['password']
# Das Passwort zur Verbindung mit der DB verwenden
# ...
Input Validation und Sanitization
Events von API Gateway, S3, DynamoDB Streams usw. müssen rigoros validiert werden:
// Node.js Lambda example
import Joi from 'joi';
const schema = Joi.object({
userId: Joi.string().uuid().required(),
action: Joi.string().valid('create', 'update', 'delete').required(),
data: Joi.object().required()
});
export const handler = async (event) => {
try {
const body = JSON.parse(event.body);
const { error, value } = schema.validate(body);
if (error) {
return {
statusCode: 400,
body: JSON.stringify({ error: error.details })
};
}
// Process validated input
// ...
} catch (e) {
console.error('Validation error:', e);
return { statusCode: 400, body: 'Invalid input' };
}
};
Dependency Management
- SCA-Tools: Snyk, npm audit, Dependabot
- Minimal dependencies: Angriffsfläche reduzieren
- Lock Files: package-lock.json, yarn.lock für Reproduzierbarkeit
- Private Registries: Intern freigegebene Abhängigkeiten hosten
- SBOM: Software Bill of Materials für Auditierbarkeit
Timeout und Resource Limits
# AWS Lambda configuration
Function:
Type: AWS::Serverless::Function
Properties:
Timeout: 30 # Sekunden (default 3s, max 900s)
MemorySize: 512 # MB
ReservedConcurrentExecutions: 100 # limit concurrency
Environment:
Variables:
MAX_RETRY_ATTEMPTS: 3
CONNECTION_TIMEOUT: 5000
VPC-Konfiguration
Functions, die auf private Ressourcen zugreifen, sollten in einer VPC mit geeigneten Security Groups laufen:
- Private Subnets: Functions ohne direkten Internetzugang
- NAT Gateway: Für Outbound Internet Access, falls erforderlich
- Security Groups: Whitelisting von Ports und IPs
- VPC Endpoints: Privater Zugriff auf AWS-Dienste (S3, DynamoDB)
Logging und Monitoring
- CloudWatch Logs: Logs aller Functions zentralisieren
- CloudTrail: Audit Trail von Aufrufen und Änderungen
- X-Ray: Distributed Tracing für Troubleshooting
- Custom Metrics: Metriken der Geschäftslogik über CloudWatch
- Alerting: Alarme bei Errors, Timeouts, Throttles
Structured Logging
import { Logger } from '@aws-lambda-powertools/logger';
const logger = new Logger({ serviceName: 'userService' });
export const handler = async (event, context) => {
logger.addContext(context);
logger.info('Processing request', {
userId: event.userId,
requestId: context.requestId
});
try {
// Business logic
} catch (error) {
logger.error('Processing failed', { error });
throw error;
}
};
API-Gateway-Sicherheit
- Authentication: Cognito, API Keys, Lambda Authorizers
- Rate Limiting: Usage Plans und Throttling
- WAF Integration: AWS WAF zum Schutz vor den OWASP Top 10
- Request Validation: Models und Validators im API Gateway
- CORS: Erlaubte Origins konfigurieren
Cold-Start-Sicherheit
Cold Starts können für Timing-Angriffe ausgenutzt werden. Gegenmaßnahmen:
- Provisioned Concurrency für kritische Functions
- Package-Größe für schnellen Startup minimieren
- Lazy Loading schwerer Abhängigkeiten
- Warm-up-Schedules über CloudWatch Events
Runtime Security
- PureSec: Runtime Protection für Serverless
- Protego: Serverless Security Platform
- Twistlock: Prisma Cloud für Serverless
- Snyk: In CI/CD integriertes Vulnerability Scanning
Abschließende Empfehlungen
Serverless bedeutet nicht "keine Sicherheit". Implementieren Sie Least-Privilege-IAM, validieren Sie alle Inputs, verwalten Sie Secrets angemessen und überwachen Sie umfassend. Nutzen Sie IaC (Serverless Framework, SAM) für Konsistenz und Review. Integrieren Sie Security Scanning in die CI/CD. Serverless erweitert die Angriffsfläche - jede Event Source und jeder Integrationspunkt ist ein potenzieller Vektor.
