Files
charybdis/config.toml.example
2026-05-12 17:06:43 +02:00

268 lines
6.2 KiB
TOML

# Charybdis Configuration File
# =============================
# This file uses TOML format and supports environment variable substitution
# using ${VAR_NAME} syntax to avoid storing secrets in the config file.
#
# Copy this file to 'config.toml' and customize for your environment.
# Server Configuration
# ====================
[server]
# gRPC server bind address
# Default: "[::1]" (IPv6 localhost)
# Use "0.0.0.0" to listen on all interfaces
grpc_host = "[::1]"
# gRPC server port
# Default: 50051
grpc_port = 50051
# YAML Adapter for Backstage Integration
[server.yaml_adapter]
# Enable YAML adapter (for Backstage catalog integration)
enabled = true
# YAML adapter bind address
host = "0.0.0.0"
# YAML adapter port
port = 8080
# Database Configuration
# ======================
[database]
# PostgreSQL connection URL
# Use environment variable substitution to avoid storing credentials
# Example: postgresql://user:password@localhost:5432/dbname
url = "${DATABASE_URL}"
# Maximum number of connections in the pool
# Default: 10
max_connections = 10
# Connection timeout in seconds
# Default: 30
connection_timeout_secs = 30
# Security Configuration
# ======================
[security.mtls]
# Enable mutual TLS authentication
# When enabled, all clients must present valid certificates
# Default: false
enabled = false
# Server certificate (PEM format)
# Example: "./certs/server-cert.pem"
server_cert = "./certs/server-cert.pem"
# Server private key (PEM format)
# Example: "./certs/server-key.pem"
server_key = "./certs/server-key.pem"
# Client CA certificate for verification (PEM format)
# Example: "./certs/ca.pem"
client_ca_cert = "./certs/ca.pem"
# Require client certificate (recommended: true)
# Default: true
require_client_cert = true
# Optional: Certificate Revocation List (CRL) file
# crl_file = "./certs/crl.pem"
[security.rbac]
# Enable role-based access control
# Default: false
enabled = false
# Audit logging configuration
[security.rbac.audit]
# Enable audit logging for security events
# Default: true
enabled = true
# Log all requests (including successful ones)
# Default: true
log_all_requests = true
# Log denied requests
# Default: true
log_denied_requests = true
# Role mappings: Certificate attributes -> RBAC roles
# Note: Default roles are configured in code if this section is empty
# Uncomment to customize role mappings
#
# [[security.rbac.role_mappings]]
# role = "admin"
# [[security.rbac.role_mappings.rules]]
# [security.rbac.role_mappings.rules.subject]
# ou = "administrators"
#
# [[security.rbac.role_mappings]]
# role = "developer"
# [[security.rbac.role_mappings.rules]]
# [security.rbac.role_mappings.rules.subject]
# ou = "engineering"
# Role permissions: role -> list of permissions
# Uncomment to customize permissions
#
# [security.rbac.permissions]
# admin = ["entity:create", "entity:read", "entity:update", "entity:delete", "entity:list"]
# developer = ["entity:create", "entity:read", "entity:update", "entity:list"]
# viewer = ["entity:read", "entity:list"]
# OpenTelemetry Configuration
# ============================
[telemetry]
# Service name for telemetry
# Default: "charybdis"
service_name = "charybdis"
# Service version
# Default: "0.1.0"
service_version = "0.1.0"
# Environment name (development, staging, production)
# Default: "development"
environment = "development"
# Console output for traces/metrics (useful for development)
# Default: true
# Set to false in production
enable_console = true
# OTLP exporter configuration (for production)
[telemetry.otlp]
# Enable OTLP exporter (sends telemetry to collector)
# Default: false
enabled = false
# OTLP endpoint (without protocol prefix)
# Example: "localhost:4317"
# endpoint = "localhost:4317"
# Traces configuration
[telemetry.traces]
# Sampling ratio (0.0 to 1.0)
# 1.0 = sample all traces (development)
# 0.1 = sample 10% of traces (production)
# Default: 1.0
sampler_ratio = 1.0
# Metrics configuration
[telemetry.metrics]
# Export interval in seconds
# Default: 60
export_interval_secs = 60
# Logs configuration
[telemetry.logs]
# Log level filter
# Options: trace, debug, info, warn, error
# Default: "info"
level = "info"
# Enable JSON formatting
# Default: false
json_format = false
# Plugin Configuration
# ====================
# Plugins extend Charybdis functionality by reacting to entity lifecycle events
# DefectDojo Integration Plugin
[plugins.defectdojo]
# Enable DefectDojo plugin
enabled = false
# DefectDojo API URL
# api_url = "https://defectdojo.company.com"
# DefectDojo API key (use environment variable)
# api_key = "${DEFECTDOJO_API_KEY}"
# Request timeout in seconds
# timeout_secs = 30
# Event handlers
# [[plugins.defectdojo.on_entity_created]]
# kind = "Service"
# action = "create_product"
# auto_create_engagement = true
#
# [[plugins.defectdojo.on_entity_updated]]
# kind = "Service"
# action = "update_product"
# sync_metadata = true
# Dependency-Track Integration Plugin
[plugins.dependencytrack]
# Enable Dependency-Track plugin
enabled = false
# Dependency-Track API URL
# base_url = "https://dependencytrack.company.com"
# Dependency-Track API key (use environment variable)
# api_key = "${DEPENDENCYTRACK_API_KEY}"
# Request timeout in seconds
# timeout_secs = 30
# Auto-create projects for new Component entities
# auto_create_project = true
# Default team UUID to assign to new projects (optional)
# default_team_uuid = ""
# Keycloak Identity Provider Sync Plugin
[plugins.keycloak]
# Enable Keycloak plugin
enabled = false
# Keycloak server URL
# base_url = "https://keycloak.company.com"
# Keycloak realm to sync users and groups from
# realm = "master"
# Service account client credentials (use environment variables)
# client_id = "charybdis-sync"
# client_secret = "${KEYCLOAK_CLIENT_SECRET}"
# Sync options
# [plugins.keycloak.sync]
# Cron schedule (e.g., every 5 minutes)
# schedule = "0 */5 * * * *"
# Run sync on Charybdis startup
# on_startup = true
# Allow manual trigger via API
# manual_trigger = true
# Sync users from Keycloak
# sync_users = true
# Sync groups from Keycloak
# sync_groups = true
# Namespace to assign to synced entities
# namespace = "keycloak"
# Max results per API page
# page_size = 100
# Custom Plugin Example
# [plugins.custom_plugin]
# enabled = false
# setting1 = "value1"
# setting2 = "${CUSTOM_PLUGIN_API_KEY}"