This document provides comprehensive guidelines for creating, managing, and securing policies within the DevSecOps Policy Scanner (DSP Scanner) framework.
- Overview
- Policy Development Security
- Policy Validation
- Policy Deployment
- Policy Monitoring
- Policy Maintenance
- Security Best Practices
- Compliance Considerations
Policies are the core security controls in the DSP Scanner. This guide ensures that policies are developed, deployed, and maintained securely to protect your infrastructure and applications.
- Secure by Design: Policies should be secure from the ground up
- Least Privilege: Policies should enforce minimal necessary permissions
- Defense in Depth: Multiple layers of policy controls
- Continuous Validation: Regular policy security assessments
- Audit Trail: Complete policy change tracking
# Example secure policy structure
package dsp_scanner.kubernetes.security
# Import security utilities
import data.dsp_scanner.security.utils
# Define secure policy metadata
__rego_metadata__ := {
"title": "Kubernetes Security Policy",
"description": "Enforces security best practices for Kubernetes resources",
"version": "1.0.0",
"author": "Security Team",
"contact": "security@company.com",
"severity": "high",
"tags": ["security", "kubernetes", "compliance"],
"references": [
"https://kubernetes.io/docs/concepts/security/pod-security-standards/",
"https://www.cisecurity.org/benchmark/kubernetes/"
]
}
# Main policy rules
deny[msg] {
# Check for privileged containers
input.spec.containers[_].securityContext.privileged == true
msg := {
"title": "Privileged Container Detected",
"description": "Containers should not run with privileged access",
"severity": "HIGH",
"platform": "kubernetes",
"resource": input.metadata.name,
"namespace": input.metadata.namespace,
"recommendation": "Remove privileged flag or use security contexts",
"compliance": {
"cis": ["5.2.1"],
"nist": ["AC-6"],
"pci": ["7.1"]
}
}
}
# Additional security checks
deny[msg] {
# Check for host network access
input.spec.hostNetwork == true
msg := {
"title": "Host Network Access Detected",
"description": "Pods should not use host network",
"severity": "MEDIUM",
"platform": "kubernetes",
"resource": input.metadata.name,
"namespace": input.metadata.namespace,
"recommendation": "Remove hostNetwork or use network policies",
"compliance": {
"cis": ["5.2.4"],
"nist": ["SC-7"]
}
}
}# Input validation policy
package dsp_scanner.validation
# Validate policy inputs
validate_input[msg] {
# Check for required fields
not input.metadata
msg := "Missing metadata section"
}
validate_input[msg] {
# Check for required metadata fields
not input.metadata.name
msg := "Missing resource name"
}
validate_input[msg] {
# Check for valid namespace
input.metadata.namespace == "default"
msg := "Resources should not be in default namespace"
}
validate_input[msg] {
# Check for valid labels
not input.metadata.labels.app
msg := "Missing app label"
}# Output sanitization
package dsp_scanner.sanitization
# Sanitize sensitive data
sanitize_output[output] {
# Remove sensitive fields
output := {
"metadata": {
"name": input.metadata.name,
"namespace": input.metadata.namespace,
"labels": input.metadata.labels
},
"spec": {
"containers": [container | container := input.spec.containers[_]; not contains(container, "secret")]
}
}
}
# Check for sensitive data
contains_sensitive_data[field] {
sensitive_fields := ["password", "secret", "token", "key", "credential"]
field := sensitive_fields[_]
contains(input, field)
}# Validate policy syntax
dsp-scanner validate policies/security.yaml
# Check policy structure
dsp-scanner lint policies/
# Validate against schema
dsp-scanner validate --schema policies/schema.json policies/
# Test policy logic
dsp-scanner test policies/ --test-data test-data/# Security validation
dsp-scanner validate --security policies/
# Check for common vulnerabilities
dsp-scanner validate --vulnerabilities policies/
# Validate policy permissions
dsp-scanner validate --permissions policies/
# Check policy complexity
dsp-scanner validate --complexity policies/# Test configuration
tests:
# Unit tests
unit:
- name: "test-privileged-containers"
input: "test-data/privileged-pod.yaml"
expected: "DENY"
description: "Should deny privileged containers"
- name: "test-host-network"
input: "test-data/host-network-pod.yaml"
expected: "DENY"
description: "Should deny host network access"
# Integration tests
integration:
- name: "test-complete-workload"
input: "test-data/complete-workload.yaml"
expected: "ALLOW"
description: "Should allow secure workload"
# Security tests
security:
- name: "test-policy-injection"
input: "test-data/malicious-policy.yaml"
expected: "DENY"
description: "Should deny malicious policy"# Deployment configuration
deployment:
# Staging environment
staging:
enabled: true
policies: "policies/staging/"
validation: "strict"
monitoring: "enabled"
# Production environment
production:
enabled: true
policies: "policies/production/"
validation: "strict"
monitoring: "enabled"
approval: "required"# Sign policies with GPG
gpg --sign policies/security.yaml
# Verify policy signatures
gpg --verify policies/security.yaml.gpg
# Use signed policies only
dsp-scanner deploy --require-signatures policies/
# Verify policy integrity
dsp-scanner verify --checksum policies/# Create policy backup
dsp-scanner backup --policies policies/ --output backup/
# Deploy with rollback capability
dsp-scanner deploy --rollback-enabled policies/
# Rollback to previous version
dsp-scanner rollback --version 1.0.0
# Verify rollback
dsp-scanner verify --policies policies/# Performance monitoring
monitoring:
# Policy execution metrics
metrics:
- "policy_execution_time"
- "policy_memory_usage"
- "policy_cpu_usage"
- "policy_throughput"
# Alert thresholds
alerts:
execution_time: "5s"
memory_usage: "512Mi"
cpu_usage: "80%"
error_rate: "5%"
# Monitoring dashboard
dashboard:
url: "https://monitoring.company.com/dsp-scanner"
refresh: "30s"# Security monitoring
security_monitoring:
# Monitor for policy violations
violations:
enabled: true
alert: true
log: true
# Monitor for policy bypass attempts
bypass_attempts:
enabled: true
alert: true
block: true
# Monitor for policy tampering
tampering:
enabled: true
checksum_verification: true
signature_verification: true# Audit logging
audit:
# Policy execution logs
execution:
enabled: true
level: "INFO"
retention: "90d"
# Policy change logs
changes:
enabled: true
level: "INFO"
retention: "1y"
# Policy access logs
access:
enabled: true
level: "INFO"
retention: "90d"
# Log format
format: "json"
encryption: true# Version control
versioning:
# Semantic versioning
format: "semver"
major: "breaking changes"
minor: "new features"
patch: "bug fixes"
# Version metadata
metadata:
author: "Security Team"
date: "2024-01-15"
description: "Security policy updates"
changelog: "CHANGELOG.md"
# Version compatibility
compatibility:
min_version: "1.0.0"
max_version: "2.0.0"
deprecated: []# Update policy safely
dsp-scanner update --policy security.yaml --dry-run
# Apply policy updates
dsp-scanner update --policy security.yaml --backup
# Verify policy updates
dsp-scanner verify --policy security.yaml
# Rollback if needed
dsp-scanner rollback --policy security.yaml# Deprecation process
deprecation:
# Deprecation timeline
timeline:
announcement: "2024-01-01"
deprecation: "2024-04-01"
removal: "2024-07-01"
# Migration path
migration:
old_policy: "security-v1.yaml"
new_policy: "security-v2.yaml"
migration_guide: "MIGRATION.md"
# Notifications
notifications:
- "security@company.com"
- "devops@company.com"- ✅ Use secure coding practices
- ✅ Validate all inputs
- ✅ Sanitize all outputs
- ✅ Use least privilege principle
- ✅ Implement defense in depth
- ✅ Follow security standards
- ✅ Document security decisions
- ✅ Test thoroughly
- ✅ Review regularly
- ✅ Update dependencies
- ❌ Use hardcoded secrets
- ❌ Skip input validation
- ❌ Ignore security warnings
- ❌ Use deprecated features
- ❌ Skip testing
- ❌ Ignore compliance
- ❌ Use weak authentication
- ❌ Share sensitive data
- ❌ Skip documentation
- ❌ Ignore updates
- Validate policy syntax
- Test policy logic
- Check for vulnerabilities
- Verify signatures
- Backup existing policies
- Deploy to staging first
- Monitor deployment
- Verify functionality
- Update documentation
- Notify stakeholders
- Enable performance monitoring
- Set up security alerts
- Configure audit logging
- Monitor policy violations
- Track policy changes
- Monitor resource usage
- Set up dashboards
- Configure notifications
- Regular health checks
- Incident response plan
# Compliance frameworks
compliance:
# SOC 2 Type II
soc2:
controls:
- "CC6.1": "Logical and physical access controls"
- "CC6.2": "System operations monitoring"
- "CC6.3": "Change management process"
# ISO 27001
iso27001:
controls:
- "A.12.2.1": "Protection from malware"
- "A.12.6.1": "Technical vulnerability management"
- "A.13.2.1": "Agreements on network services"
# NIST Cybersecurity Framework
nist:
functions:
- "Identify": "Asset management"
- "Protect": "Access control"
- "Detect": "Anomaly detection"
- "Respond": "Incident response"
- "Recover": "Recovery planning"
# PCI DSS
pci:
requirements:
- "7.1": "Access control"
- "7.2": "Privileged access"
- "10.1": "Audit logging"# Compliance mapping
package dsp_scanner.compliance
# Map policy to compliance controls
compliance_mapping[control] {
# CIS Kubernetes Benchmark
control := {
"framework": "cis",
"control": "5.2.1",
"description": "Minimize the admission of privileged containers",
"policy": "privileged-containers",
"severity": "high"
}
}
# Compliance reporting
compliance_report[report] {
report := {
"framework": "cis",
"version": "1.8",
"controls": [
{
"id": "5.2.1",
"status": "compliant",
"policy": "privileged-containers",
"last_check": "2024-01-15"
}
]
}
}# Audit configuration
audit:
# Compliance reporting
reporting:
frequency: "monthly"
format: ["pdf", "json"]
recipients: ["compliance@company.com"]
# Evidence collection
evidence:
enabled: true
retention: "7y"
encryption: true
# Compliance dashboard
dashboard:
url: "https://compliance.company.com/dsp-scanner"
refresh: "daily"