@syntropysoft/praetorian
Version:
Praetorian CLI – A universal multi-environment configuration validator for DevSecOps teams. Validate, compare, and secure YAML/ENV files with ease.
331 lines (263 loc) • 8.94 kB
Markdown
# Praetorian Rules Examples
This directory contains comprehensive examples demonstrating how to use Praetorian's validation rules system. Each example focuses on different aspects of configuration validation.
## 📁 Available Examples:
### 🛡️ [Security Rules](./security/)
**Purpose**: Demonstrate security validation rules
**Files**:
- `praetorian.yaml` - Security rules configuration
- `config-dev.yaml` - Secure development config ✅
- `config-prod.yaml` - Secure production config ✅
- `config-insecure.yaml` - Insecure config ❌ (shows violations)
**Rules Demonstrated**:
- Secret detection (API keys, passwords, tokens)
- Permission validation (file permissions)
- Encryption requirements
- SSL/TLS configuration
- Authentication methods
### 🔒 [Compliance Rules](./compliance/)
**Purpose**: Demonstrate regulatory compliance validation
**Files**:
- `praetorian.yaml` - Compliance rules configuration
- `config-prod.yaml` - Fully compliant configuration ✅
**Standards Covered**:
- **GDPR** - General Data Protection Regulation
- **PCI DSS** - Payment Card Industry Data Security Standard
- **HIPAA** - Health Insurance Portability and Accountability Act
- **SOX** - Sarbanes-Oxley Act
### ⚡ [Performance Rules](./performance/)
**Purpose**: Demonstrate performance optimization validation
**Files**:
- `praetorian.yaml` - Performance rules configuration
**Optimizations Covered**:
- Database performance (connection pooling, query optimization)
- Cache performance (TTL, memory usage, eviction policies)
- API performance (timeouts, rate limiting, compression)
- Resource optimization (memory, CPU, disk I/O)
### 🎯 [Custom Rules](./custom/)
**Purpose**: Demonstrate custom business-specific validation rules
**Files**:
- `praetorian.yaml` - Custom rules configuration
**Custom Rules Demonstrated**:
- Business hours validation
- Environment-specific configurations
- API versioning requirements
- Feature flag management
- Cost optimization
## 🚀 Quick Start:
### 1. Choose an Example
```bash
cd examples/rules/security # or compliance, performance, custom
```
### 2. Run Validation
#### User Mode (Detailed Output)
```bash
# Validate with detailed explanations and tips
praetorian validate --config praetorian.yaml
```
#### Pipeline Mode (CI/CD Friendly)
```bash
# Validate with concise output for pipelines
praetorian validate --config praetorian.yaml --pipeline
```
#### Direct File Validation
```bash
# Validate specific files (single file - informational only)
praetorian validate config-dev.yaml
praetorian validate config-prod.yaml
praetorian validate config-insecure.yaml
```
### 3. Understand the Results
#### User Mode Output:
- ✅ **PASS**: Configuration follows all rules
- ❌ **FAIL**: Configuration violates one or more rules
- ⚠️ **WARNINGS**: Configuration has non-critical issues
- 💡 **TIPS**: Helpful suggestions for improvement
#### Pipeline Mode Output:
- `PRAETORIAN_VALIDATION: PASSED` - All validations successful
- `PRAETORIAN_VALIDATION: FAILED` - Validation failures detected
- `PRAETORIAN_SUMMARY: files=X, errors=Y, warnings=Z` - Essential metrics
## 🔧 Pipeline Integration
### CI/CD Pipeline Usage
The `--pipeline` flag is designed specifically for CI/CD environments where concise output is essential:
```yaml
# Example GitHub Actions workflow
- name: Validate Configuration
run: |
cd examples/rules/security
praetorian validate --config praetorian.yaml --pipeline
```
### Pipeline Output Format
Pipeline mode provides machine-readable output perfect for:
- **Exit codes**: `0` for success, `1` for failure
- **Log parsing**: Standardized `PRAETORIAN_VALIDATION:` and `PRAETORIAN_SUMMARY:` prefixes
- **Error limits**: Shows only first 5 errors to prevent log spam
- **Essential metrics**: Files, errors, warnings, duration in one line
### Integration Examples
```bash
# Jenkins Pipeline
pipeline {
stages {
stage('Validate Config') {
steps {
sh 'praetorian validate --config praetorian.yaml --pipeline'
}
}
}
}
# Dockerfile
RUN praetorian validate --config praetorian.yaml --pipeline
# Makefile
validate:
praetorian validate --config praetorian.yaml --pipeline
```
## 📖 Understanding Rule Categories:
### Security Rules
- **Purpose**: Protect against security vulnerabilities
- **Severity**: Usually `error` (critical) or `warning`
- **Examples**: Secret detection, permission validation, encryption
### Compliance Rules
- **Purpose**: Ensure regulatory compliance
- **Severity**: Usually `error` (legal requirement)
- **Examples**: GDPR, PCI DSS, HIPAA, SOX compliance
### Performance Rules
- **Purpose**: Optimize system performance
- **Severity**: Usually `warning` or `info`
- **Examples**: Database optimization, cache tuning, resource limits
### Best Practice Rules
- **Purpose**: Follow industry best practices
- **Severity**: Usually `warning` or `info`
- **Examples**: Configuration standards, naming conventions
### Custom Rules
- **Purpose**: Business-specific requirements
- **Severity**: Varies based on business impact
- **Examples**: Environment-specific rules, feature flags
## 🔧 Creating Your Own Rules:
### 1. Define Rule Structure
```yaml
rules:
- id: "my-custom-rule"
name: "My Custom Rule"
description: "Description of what this rule validates"
category: "custom" # security, compliance, performance, best-practice, custom
severity: "warning" # error, warning, info
enabled: true
config:
# Rule-specific configuration
mySetting: "value"
```
### 2. Configure Rule Behavior
```yaml
config:
# Pattern matching
patterns:
- "pattern1"
- "pattern2"
# Exclusion patterns
excludePatterns:
- "exclude1"
# Required features
requiredFeatures:
- "feature1"
- "feature2"
# Custom validation logic
customLogic:
enabled: true
rules:
- condition: "value > 100"
message: "Value must be greater than 100"
```
### 3. Test Your Rules
```bash
# Test with valid configuration
praetorian validate config-valid.yaml
# Test with invalid configuration
praetorian validate config-invalid.yaml
```
## 🎯 Rule Configuration Options:
### Basic Rule Properties:
- `id`: Unique identifier for the rule
- `name`: Human-readable name
- `description`: Detailed description
- `category`: Rule category (security, compliance, etc.)
- `severity`: Rule severity (error, warning, info)
- `enabled`: Whether the rule is active
### Rule Configuration:
- `patterns`: Regex patterns to match
- `excludePatterns`: Patterns to exclude
- `requiredFeatures`: Features that must be present
- `requiredKeys`: Keys that must exist
- `forbiddenKeys`: Keys that must not exist
- `customLogic`: Custom validation logic
### Validation Options:
- `strict`: Fail on warnings (true/false)
- `ignore_keys`: Keys to ignore during validation
- `required_keys`: Keys that must be present
- `forbidden_keys`: Keys that must not be present
## 🔄 Integration Examples:
### CI/CD Pipeline:
```yaml
- name: Validate Configuration
run: |
praetorian validate config-prod.yaml
if [ $? -ne 0 ]; then
echo "Configuration validation failed!"
exit 1
fi
```
### Pre-commit Hook:
```bash
#!/bin/bash
praetorian validate $(git diff --name-only --cached | grep '\.yaml$')
```
### Monitoring Integration:
```yaml
monitoring:
validation:
enabled: true
schedule: "0 */6 * * *" # Every 6 hours
alertOnFailure: true
```
## 📊 Rule Performance:
### Rule Execution Order:
1. **Security rules** (highest priority)
2. **Compliance rules**
3. **Performance rules**
4. **Best practice rules**
5. **Custom rules** (lowest priority)
### Performance Tips:
- Use specific patterns instead of broad ones
- Exclude common false positives
- Group related validations
- Use appropriate severity levels
## 🆘 Troubleshooting:
### Common Issues:
1. **Rule not triggering**:
- Check if rule is `enabled: true`
- Verify pattern matches your content
- Check rule configuration syntax
2. **Too many false positives**:
- Add exclusion patterns
- Refine pattern specificity
- Adjust severity level
3. **Rule too slow**:
- Optimize regex patterns
- Reduce pattern complexity
- Use more specific patterns
### Debug Mode:
```bash
praetorian validate --debug config.yaml
```
This will show detailed information about rule execution and matching.
## 📚 Further Reading:
- [Praetorian Documentation](../../README.md)
- [Rule Development Guide](../../docs/rule-development.md)
- [Configuration Reference](../../docs/configuration.md)
- [API Documentation](../../docs/api.md)
## 🤝 Contributing:
Want to add more examples? Great! Please:
1. Create a new directory under `rules/`
2. Include `praetorian.yaml` with rule definitions
3. Add example configuration files
4. Write a comprehensive `README.md`
5. Test your examples thoroughly
Happy validating! 🎉