use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CloudSecurityMonitoringConfig {
pub enabled: bool,
pub events: Vec<SecurityEvent>,
pub threat_detection: ThreatDetectionConfig,
pub incident_response: IncidentResponseConfig,
pub compliance: ComplianceMonitoringConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SecurityEvent {
UnauthorizedAccess,
SuspiciousActivity,
DataBreach,
MalwareDetection,
NetworkIntrusion,
PrivilegeEscalation,
QuantumCircuitTampering,
ConfigurationChanges,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThreatDetectionConfig {
pub enabled: bool,
pub methods: Vec<ThreatDetectionMethod>,
pub response_policies: Vec<ThreatResponsePolicy>,
pub intelligence: ThreatIntelligenceConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ThreatDetectionMethod {
SignatureBased,
BehaviorBased,
MachineLearning,
AnomalyDetection,
HybridApproach,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThreatResponsePolicy {
pub name: String,
pub threat_types: Vec<ThreatType>,
pub actions: Vec<ThreatResponseAction>,
pub escalation: ThreatEscalationRules,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ThreatType {
Malware,
Phishing,
DDoS,
DataExfiltration,
InsiderThreat,
QuantumThreat,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ThreatResponseAction {
Alert,
Block,
Quarantine,
Isolate,
Investigate,
Escalate,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThreatEscalationRules {
pub triggers: Vec<EscalationTrigger>,
pub levels: Vec<ThreatEscalationLevel>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum EscalationTrigger {
ThreatSeverity,
ResponseTimeout,
FailedMitigation,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThreatEscalationLevel {
pub name: String,
pub severity_threshold: f64,
pub response_time: Duration,
pub contacts: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThreatIntelligenceConfig {
pub enabled: bool,
pub sources: Vec<IntelligenceSource>,
pub feeds: Vec<FeedIntegrationConfig>,
pub update_frequency: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum IntelligenceSource {
Commercial,
OpenSource,
Government,
Community,
Internal,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FeedIntegrationConfig {
pub name: String,
pub feed_type: String,
pub endpoint: String,
pub auth: FeedAuthConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FeedAuthConfig {
pub auth_type: AuthType,
pub credentials: std::collections::HashMap<String, String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AuthType {
ApiKey,
OAuth,
Basic,
Certificate,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct IncidentResponseConfig {
pub automated: bool,
pub playbooks: Vec<ResponsePlaybook>,
pub communication: CommunicationPlan,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResponsePlaybook {
pub name: String,
pub triggers: Vec<String>,
pub steps: Vec<ResponseStep>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResponseStep {
pub name: String,
pub action_type: ResponseActionType,
pub parameters: std::collections::HashMap<String, String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ResponseActionType {
Notify,
Execute,
Isolate,
Investigate,
Document,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CommunicationPlan {
pub channels: Vec<String>,
pub stakeholders: Vec<StakeholderGroup>,
pub escalation_matrix: Vec<EscalationContact>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StakeholderGroup {
pub name: String,
pub contacts: Vec<String>,
pub conditions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EscalationContact {
pub name: String,
pub method: String,
pub level: i32,
pub response_time: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ComplianceMonitoringConfig {
pub enabled: bool,
pub frameworks: Vec<ComplianceFramework>,
pub audit: AuditConfig,
pub reporting: ComplianceReportingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ComplianceFramework {
SOC2,
ISO27001,
GDPR,
HIPAA,
PciDss,
FedRAMP,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditConfig {
pub enabled: bool,
pub retention: Duration,
pub events: Vec<AuditEvent>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AuditEvent {
UserLogin,
UserLogout,
DataAccess,
ConfigChange,
PermissionChange,
SystemAccess,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComplianceReportingConfig {
pub automated: bool,
pub frequency: Duration,
pub types: Vec<ReportType>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReportType {
ComplianceStatus,
VulnerabilityAssessment,
SecurityPosture,
IncidentSummary,
Custom(String),
}
impl Default for CloudSecurityMonitoringConfig {
fn default() -> Self {
Self {
enabled: true,
events: vec![
SecurityEvent::UnauthorizedAccess,
SecurityEvent::SuspiciousActivity,
SecurityEvent::ConfigurationChanges,
],
threat_detection: ThreatDetectionConfig::default(),
incident_response: IncidentResponseConfig::default(),
compliance: ComplianceMonitoringConfig::default(),
}
}
}
impl Default for ThreatDetectionConfig {
fn default() -> Self {
Self {
enabled: true,
methods: vec![ThreatDetectionMethod::SignatureBased],
response_policies: vec![],
intelligence: ThreatIntelligenceConfig::default(),
}
}
}
impl Default for ThreatIntelligenceConfig {
fn default() -> Self {
Self {
enabled: false,
sources: vec![IntelligenceSource::OpenSource],
feeds: vec![],
update_frequency: Duration::from_secs(3600), }
}
}
impl Default for CommunicationPlan {
fn default() -> Self {
Self {
channels: vec!["email".to_string()],
stakeholders: vec![],
escalation_matrix: vec![],
}
}
}
impl Default for AuditConfig {
fn default() -> Self {
Self {
enabled: true,
retention: Duration::from_secs(86400 * 365), events: vec![
AuditEvent::UserLogin,
AuditEvent::DataAccess,
AuditEvent::ConfigChange,
],
}
}
}
impl Default for ComplianceReportingConfig {
fn default() -> Self {
Self {
automated: false,
frequency: Duration::from_secs(86400 * 30), types: vec![ReportType::ComplianceStatus],
}
}
}