1pub mod load_balancing;
14pub mod performance;
15
16pub use load_balancing::*;
23pub use performance::*;
24
25use serde::{Deserialize, Serialize};
29use std::collections::HashMap;
30use std::time::Duration;
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct CloudSecurityConfig {
35 pub authentication: AuthenticationConfig,
37 pub authorization: AuthorizationConfig,
39 pub encryption: EncryptionConfig,
41 pub network_security: NetworkSecurityConfig,
43 pub compliance: ComplianceConfig,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct AuthenticationConfig {
51 pub methods: Vec<AuthMethod>,
53 pub mfa: MFAConfig,
55 pub sso: SSOConfig,
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
61pub enum AuthMethod {
62 Password,
63 APIKey,
64 Certificate,
65 OAuth2,
66 SAML,
67 Custom(String),
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct MFAConfig {
73 pub enabled: bool,
75 pub methods: Vec<MFAMethod>,
77 pub backup_codes: bool,
79}
80
81#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
83pub enum MFAMethod {
84 TOTP,
85 SMS,
86 Email,
87 PushNotification,
88 Hardware,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct SSOConfig {
94 pub enabled: bool,
96 pub provider: SSOProvider,
98 pub saml: SAMLConfig,
100 pub oidc: OIDCConfig,
102}
103
104#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
106pub enum SSOProvider {
107 SAML,
108 OIDC,
109 LDAP,
110 ActiveDirectory,
111 Custom(String),
112}
113
114#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct SAMLConfig {
117 pub idp_url: String,
119 pub sp_id: String,
121 pub certificate: String,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize)]
127pub struct OIDCConfig {
128 pub client_id: String,
130 pub client_secret: String,
132 pub discovery_url: String,
134}
135
136#[derive(Debug, Clone, Serialize, Deserialize)]
138pub struct AuthorizationConfig {
139 pub model: AuthorizationModel,
141 pub roles: Vec<RoleDefinition>,
143 pub permissions: PermissionSystem,
145}
146
147#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
149pub enum AuthorizationModel {
150 RBAC,
151 ABAC,
152 DAC,
153 MAC,
154 Custom(String),
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize)]
159pub struct RoleDefinition {
160 pub name: String,
162 pub description: String,
164 pub permissions: Vec<String>,
166 pub parent_roles: Vec<String>,
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize)]
172pub struct PermissionSystem {
173 pub model: PermissionModel,
175 pub resources: Vec<ResourceDefinition>,
177 pub actions: Vec<ActionDefinition>,
179}
180
181#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
183pub enum PermissionModel {
184 ResourceAction,
185 CapabilityBased,
186 AttributeBased,
187 Custom(String),
188}
189
190#[derive(Debug, Clone, Serialize, Deserialize)]
192pub struct ResourceDefinition {
193 pub resource_type: String,
195 pub attributes: HashMap<String, String>,
197 pub access_patterns: Vec<AccessPattern>,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
203pub struct AccessPattern {
204 pub name: String,
206 pub actions: Vec<String>,
208 pub conditions: Vec<AccessCondition>,
210}
211
212#[derive(Debug, Clone, Serialize, Deserialize)]
214pub struct AccessCondition {
215 pub attribute: String,
217 pub operator: String,
219 pub value: String,
221}
222
223#[derive(Debug, Clone, Serialize, Deserialize)]
225pub struct ActionDefinition {
226 pub name: String,
228 pub description: String,
230 pub required_permissions: Vec<String>,
232}
233
234#[derive(Debug, Clone, Serialize, Deserialize)]
236pub struct EncryptionConfig {
237 pub at_rest: EncryptionAtRestConfig,
239 pub in_transit: EncryptionInTransitConfig,
241 pub key_management: EncryptionKeyManagementConfig,
243}
244
245#[derive(Debug, Clone, Serialize, Deserialize)]
247pub struct EncryptionAtRestConfig {
248 pub enabled: bool,
250 pub algorithm: String,
252 pub key_size: usize,
254}
255
256#[derive(Debug, Clone, Serialize, Deserialize)]
258pub struct EncryptionInTransitConfig {
259 pub enabled: bool,
261 pub tls_version: String,
263 pub cipher_suites: Vec<String>,
265}
266
267#[derive(Debug, Clone, Serialize, Deserialize)]
269pub struct EncryptionKeyManagementConfig {
270 pub service: KeyManagementService,
272 pub rotation_policy: EncryptionKeyRotationPolicy,
274 pub backup_policy: EncryptionKeyBackupPolicy,
276}
277
278#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
280pub enum KeyManagementService {
281 AwsKms,
282 AzureKeyVault,
283 GoogleKms,
284 HashiCorpVault,
285 Custom(String),
286}
287
288#[derive(Debug, Clone, Serialize, Deserialize)]
290pub struct EncryptionKeyRotationPolicy {
291 pub enabled: bool,
293 pub frequency: Duration,
295 pub automatic: bool,
297}
298
299#[derive(Debug, Clone, Serialize, Deserialize)]
301pub struct EncryptionKeyBackupPolicy {
302 pub enabled: bool,
304 pub frequency: Duration,
306 pub locations: Vec<String>,
308}
309
310#[derive(Debug, Clone, Serialize, Deserialize)]
312pub struct NetworkSecurityConfig {
313 pub firewall: FirewallConfig,
315 pub vpn: VPNConfig,
317 pub ddos_protection: DDoSProtectionConfig,
319}
320
321#[derive(Debug, Clone, Serialize, Deserialize)]
323pub struct FirewallConfig {
324 pub enabled: bool,
326 pub rules: Vec<FirewallRule>,
328 pub default_policy: FirewallPolicy,
330}
331
332#[derive(Debug, Clone, Serialize, Deserialize)]
334pub struct FirewallRule {
335 pub name: String,
337 pub source: String,
339 pub destination: String,
341 pub port: String,
343 pub protocol: String,
345 pub action: FirewallAction,
347}
348
349#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
351pub enum FirewallPolicy {
352 Allow,
353 Deny,
354 Log,
355}
356
357#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
359pub enum FirewallAction {
360 Allow,
361 Deny,
362 Log,
363}
364
365#[derive(Debug, Clone, Serialize, Deserialize)]
367pub struct VPNConfig {
368 pub enabled: bool,
370 pub vpn_type: VPNType,
372 pub connection: VPNConnectionConfig,
374}
375
376#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
378pub enum VPNType {
379 SiteToSite,
380 PointToSite,
381 PointToPoint,
382 Custom(String),
383}
384
385#[derive(Debug, Clone, Serialize, Deserialize)]
387pub struct VPNConnectionConfig {
388 pub gateway: String,
390 pub psk: String,
392 pub encryption: String,
394}
395
396#[derive(Debug, Clone, Serialize, Deserialize)]
398pub struct DDoSProtectionConfig {
399 pub enabled: bool,
401 pub level: DDoSProtectionLevel,
403 pub rate_limiting: RateLimitingConfig,
405}
406
407#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
409pub enum DDoSProtectionLevel {
410 Basic,
411 Standard,
412 Premium,
413 Custom(String),
414}
415
416#[derive(Debug, Clone, Serialize, Deserialize)]
418pub struct RateLimitingConfig {
419 pub enabled: bool,
421 pub limits: HashMap<String, usize>,
423 pub windows: HashMap<String, Duration>,
425}
426
427#[derive(Debug, Clone, Serialize, Deserialize)]
429pub struct ComplianceConfig {
430 pub frameworks: Vec<ComplianceFramework>,
432 pub audit: AuditConfig,
434 pub data_governance: DataGovernanceConfig,
436}
437
438#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
440pub enum ComplianceFramework {
441 SOC2,
442 ISO27001,
443 GDPR,
444 HIPAA,
445 PciDss,
446 Custom(String),
447}
448
449#[derive(Debug, Clone, Serialize, Deserialize)]
451pub struct AuditConfig {
452 pub enabled: bool,
454 pub events: Vec<AuditEvent>,
456 pub retention: Duration,
458}
459
460#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
462pub enum AuditEvent {
463 Authentication,
464 Authorization,
465 DataAccess,
466 ConfigChange,
467 SecurityEvent,
468 Custom(String),
469}
470
471#[derive(Debug, Clone, Serialize, Deserialize)]
473pub struct DataGovernanceConfig {
474 pub classification: DataClassificationConfig,
476 pub retention: DataRetentionConfig,
478 pub privacy: DataPrivacyConfig,
480}
481
482#[derive(Debug, Clone, Serialize, Deserialize)]
484pub struct DataClassificationConfig {
485 pub levels: Vec<ClassificationLevel>,
487 pub auto_classification: bool,
489}
490
491#[derive(Debug, Clone, Serialize, Deserialize)]
493pub struct ClassificationLevel {
494 pub name: String,
496 pub sensitivity: u8,
498 pub requirements: Vec<String>,
500}
501
502#[derive(Debug, Clone, Serialize, Deserialize)]
504pub struct DataRetentionConfig {
505 pub policies: Vec<RetentionPolicy>,
507 pub default_retention: Duration,
509}
510
511#[derive(Debug, Clone, Serialize, Deserialize)]
513pub struct RetentionPolicy {
514 pub data_type: String,
516 pub retention_period: Duration,
518 pub disposal_method: DisposalMethod,
520}
521
522#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
524pub enum DisposalMethod {
525 Delete,
526 Archive,
527 Anonymize,
528 Custom(String),
529}
530
531#[derive(Debug, Clone, Serialize, Deserialize)]
533pub struct DataPrivacyConfig {
534 pub controls: Vec<PrivacyControl>,
536 pub consent: ConsentManagementConfig,
538}
539
540#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
542pub enum PrivacyControl {
543 Anonymization,
544 Pseudonymization,
545 DataMinimization,
546 AccessControl,
547 Custom(String),
548}
549
550#[derive(Debug, Clone, Serialize, Deserialize)]
552pub struct ConsentManagementConfig {
553 pub enabled: bool,
555 pub consent_types: Vec<String>,
557 pub withdrawal_process: WithdrawalProcess,
559}
560
561#[derive(Debug, Clone, Serialize, Deserialize)]
563pub struct WithdrawalProcess {
564 pub methods: Vec<WithdrawalMethod>,
566 pub processing_time: Duration,
568 pub confirmation_required: bool,
570}
571
572#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
574pub enum WithdrawalMethod {
575 Online,
576 Email,
577 Phone,
578 Mail,
579 Custom(String),
580}
581
582#[derive(Debug, Clone, Serialize, Deserialize)]
584pub struct BudgetManagementConfig {
585 pub global_budget: GlobalBudgetConfig,
587 pub department_budgets: HashMap<String, DepartmentBudgetConfig>,
589 pub project_budgets: HashMap<String, ProjectBudgetConfig>,
591 pub monitoring: BudgetMonitoringConfig,
593}
594
595#[derive(Debug, Clone, Serialize, Deserialize)]
597pub struct GlobalBudgetConfig {
598 pub total_budget: f64,
600 pub period: BudgetPeriod,
602 pub currency: String,
604 pub rollover_policy: RolloverPolicy,
606}
607
608#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
610pub enum BudgetPeriod {
611 Monthly,
612 Quarterly,
613 Annual,
614 Custom(Duration),
615}
616
617#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
619pub enum RolloverPolicy {
620 NoRollover,
621 FullRollover,
622 PartialRollover(f64),
623 ConditionalRollover,
624}
625
626#[derive(Debug, Clone, Serialize, Deserialize)]
628pub struct DepartmentBudgetConfig {
629 pub name: String,
631 pub allocated_budget: f64,
633 pub spending_limits: SpendingLimits,
635 pub approval_workflow: BudgetApprovalWorkflow,
637}
638
639#[derive(Debug, Clone, Serialize, Deserialize)]
641pub struct SpendingLimits {
642 pub daily_limit: Option<f64>,
644 pub weekly_limit: Option<f64>,
646 pub monthly_limit: Option<f64>,
648 pub per_transaction_limit: Option<f64>,
650}
651
652#[derive(Debug, Clone, Serialize, Deserialize)]
654pub struct BudgetApprovalWorkflow {
655 pub levels: Vec<BudgetApprovalLevel>,
657 pub auto_approval_thresholds: HashMap<String, f64>,
659 pub escalation_timeouts: HashMap<String, Duration>,
661}
662
663#[derive(Debug, Clone, Serialize, Deserialize)]
665pub struct BudgetApprovalLevel {
666 pub name: String,
668 pub approvers: Vec<String>,
670 pub thresholds: HashMap<String, f64>,
672}
673
674#[derive(Debug, Clone, Serialize, Deserialize)]
676pub struct ProjectBudgetConfig {
677 pub name: String,
679 pub budget: f64,
681 pub cost_tracking: ProjectCostTracking,
683 pub alerts: ProjectBudgetAlerts,
685}
686
687#[derive(Debug, Clone, Serialize, Deserialize)]
689pub struct ProjectCostTracking {
690 pub granularity: CostTrackingGranularity,
692 pub categories: Vec<CostCategory>,
694 pub allocation_rules: Vec<CostAllocationRule>,
696}
697
698#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
700pub enum CostTrackingGranularity {
701 Hourly,
702 Daily,
703 Weekly,
704 Monthly,
705}
706
707#[derive(Debug, Clone, Serialize, Deserialize)]
709pub struct CostCategory {
710 pub name: String,
712 pub description: String,
714 pub budget_allocation: f64,
716}
717
718#[derive(Debug, Clone, Serialize, Deserialize)]
720pub struct CostAllocationRule {
721 pub name: String,
723 pub source: String,
725 pub target: String,
727 pub percentage: f64,
729}
730
731#[derive(Debug, Clone, Serialize, Deserialize)]
733pub struct ProjectBudgetAlerts {
734 pub thresholds: Vec<f64>,
736 pub recipients: Vec<String>,
738 pub frequency: AlertFrequency,
740}
741
742#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
744pub enum AlertFrequency {
745 Immediate,
746 Daily,
747 Weekly,
748 OnThreshold,
749}
750
751#[derive(Debug, Clone, Serialize, Deserialize)]
753pub struct BudgetMonitoringConfig {
754 pub real_time: bool,
756 pub reporting_frequency: ReportingFrequency,
758 pub variance_analysis: BudgetVarianceAnalysis,
760 pub forecasting: BudgetForecastingConfig,
762}
763
764#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
766pub enum ReportingFrequency {
767 RealTime,
768 Hourly,
769 Daily,
770 Weekly,
771 Monthly,
772}
773
774#[derive(Debug, Clone, Serialize, Deserialize)]
776pub struct BudgetVarianceAnalysis {
777 pub enabled: bool,
779 pub thresholds: BudgetVarianceThresholds,
781 pub methods: Vec<VarianceAnalysisMethod>,
783}
784
785#[derive(Debug, Clone, Serialize, Deserialize)]
787pub struct BudgetVarianceThresholds {
788 pub warning: f64,
790 pub critical: f64,
792 pub emergency: f64,
794}
795
796#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
798pub enum VarianceAnalysisMethod {
799 AbsoluteVariance,
800 PercentageVariance,
801 TrendAnalysis,
802 SeasonalAnalysis,
803}
804
805#[derive(Debug, Clone, Serialize, Deserialize)]
807pub struct BudgetForecastingConfig {
808 pub enabled: bool,
810 pub models: Vec<BudgetForecastingModel>,
812 pub horizon: Duration,
814 pub update_frequency: Duration,
816}
817
818#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
820pub enum BudgetForecastingModel {
821 LinearTrend,
822 ExponentialSmoothing,
823 ARIMA,
824 MachineLearning,
825 Custom(String),
826}