Import audit rules from scaffold project covering: - Access control validation - Audit trail requirements - Change management policies - Compliance checks - Data governance rules - Documentation requirements - Third-party dependency checks 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
172 lines
5.0 KiB
YAML
172 lines
5.0 KiB
YAML
# Access Control Rules
|
|
# ====================
|
|
# Ensures proper authentication, authorization, and least privilege.
|
|
# Critical for preventing unauthorized access.
|
|
|
|
rules:
|
|
# ===================
|
|
# AUTHENTICATION
|
|
# ===================
|
|
|
|
- id: ACCESS-AUTH-001
|
|
name: "Protected endpoints must require authentication"
|
|
description: "API endpoints handling sensitive data must enforce authentication"
|
|
severity: critical
|
|
check:
|
|
type: pattern_required
|
|
paths:
|
|
- "app/api/v1/*.py"
|
|
patterns:
|
|
- "CurrentUser|Depends.*get_current_user|AdminUser"
|
|
exclude_patterns:
|
|
- "health.py"
|
|
- "auth.py" # Auth endpoints handle their own logic
|
|
message: "API endpoints must require authentication"
|
|
|
|
- id: ACCESS-AUTH-002
|
|
name: "Admin endpoints must verify admin role"
|
|
description: "Administrative functions must check for admin privileges"
|
|
severity: critical
|
|
check:
|
|
type: pattern_required
|
|
paths:
|
|
- "app/routes/admin.py"
|
|
patterns:
|
|
- "is_admin|AdminUser|require_admin|admin_required"
|
|
message: "Admin routes must verify admin privileges"
|
|
|
|
- id: ACCESS-AUTH-003
|
|
name: "Session management must be secure"
|
|
description: "Sessions must have proper timeout and security settings"
|
|
severity: high
|
|
check:
|
|
type: pattern_required
|
|
paths:
|
|
- "app/core/config.py"
|
|
- "app/core/security.py"
|
|
patterns:
|
|
- "ACCESS_TOKEN_EXPIRE|SESSION_TIMEOUT|token.*expire"
|
|
message: "Session/token expiration must be configured"
|
|
|
|
# ===================
|
|
# AUTHORIZATION (RBAC)
|
|
# ===================
|
|
|
|
- id: ACCESS-RBAC-001
|
|
name: "Role-based access control implementation"
|
|
description: "System must implement role-based access control"
|
|
severity: high
|
|
check:
|
|
type: pattern_required
|
|
paths:
|
|
- "models/database/user.py"
|
|
patterns:
|
|
- "is_admin|role|permission"
|
|
message: "User model must support role-based access"
|
|
|
|
- id: ACCESS-RBAC-002
|
|
name: "Authorization checks before data access"
|
|
description: "Data access must verify user permissions"
|
|
severity: high
|
|
check:
|
|
type: pattern_recommended
|
|
paths:
|
|
- "app/api/v1/*.py"
|
|
patterns:
|
|
- "user\\.id|current_user|owner|created_by"
|
|
message: "Consider ownership checks for data access"
|
|
|
|
- id: ACCESS-RBAC-003
|
|
name: "Separation of duties"
|
|
description: "Critical operations should require different roles"
|
|
severity: medium
|
|
check:
|
|
type: documentation
|
|
message: "Document separation of duties in critical workflows"
|
|
|
|
# ===================
|
|
# LEAST PRIVILEGE
|
|
# ===================
|
|
|
|
- id: ACCESS-PRIV-001
|
|
name: "Database connections use least privilege"
|
|
description: "Database user should have minimal required permissions"
|
|
severity: high
|
|
check:
|
|
type: documentation
|
|
paths:
|
|
- "docs/**/*.md"
|
|
- "README.md"
|
|
patterns:
|
|
- "database.*permission|db.*role|least.*privilege"
|
|
message: "Document database user permissions"
|
|
|
|
- id: ACCESS-PRIV-002
|
|
name: "API endpoints return minimal data"
|
|
description: "Responses should not include unnecessary sensitive fields"
|
|
severity: medium
|
|
check:
|
|
type: pattern_forbidden
|
|
paths:
|
|
- "models/schema/*.py"
|
|
patterns:
|
|
- "password_hash|password.*Field"
|
|
exclude_patterns:
|
|
- "password.*exclude.*True"
|
|
message: "Password hashes must not be included in API responses"
|
|
|
|
- id: ACCESS-PRIV-003
|
|
name: "Environment-specific access"
|
|
description: "Debug/admin features disabled in production"
|
|
severity: high
|
|
check:
|
|
type: pattern_required
|
|
paths:
|
|
- "main.py"
|
|
- "app/core/environment.py"
|
|
patterns:
|
|
- "is_production|ENVIRONMENT|DEBUG"
|
|
message: "Environment-based feature flags required"
|
|
|
|
# ===================
|
|
# ACCOUNT SECURITY
|
|
# ===================
|
|
|
|
- id: ACCESS-ACCT-001
|
|
name: "Account lockout mechanism"
|
|
description: "Failed login attempts should trigger account lockout"
|
|
severity: high
|
|
check:
|
|
type: pattern_recommended
|
|
paths:
|
|
- "app/api/v1/auth.py"
|
|
- "app/services/user_service.py"
|
|
patterns:
|
|
- "failed.*attempt|lockout|rate.*limit|throttle"
|
|
message: "Consider implementing account lockout after failed attempts"
|
|
|
|
- id: ACCESS-ACCT-002
|
|
name: "Password complexity requirements"
|
|
description: "Passwords must meet minimum complexity requirements"
|
|
severity: high
|
|
check:
|
|
type: pattern_required
|
|
paths:
|
|
- "models/schema/auth.py"
|
|
- "models/schema/user.py"
|
|
patterns:
|
|
- "min_length|MinLen|Field.*ge.*8"
|
|
message: "Password minimum length must be enforced"
|
|
|
|
- id: ACCESS-ACCT-003
|
|
name: "Secure password storage"
|
|
description: "Passwords must be hashed with strong algorithm"
|
|
severity: critical
|
|
check:
|
|
type: pattern_required
|
|
paths:
|
|
- "app/core/security.py"
|
|
patterns:
|
|
- "bcrypt|argon2|scrypt|pbkdf2"
|
|
message: "Passwords must use approved hashing algorithms"
|