use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CloudSecurityConfig {
pub authentication: AuthenticationConfig,
pub authorization: AuthorizationConfig,
pub encryption: EncryptionConfig,
pub network_security: NetworkSecurityConfig,
pub compliance: ComplianceConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthenticationConfig {
pub methods: Vec<AuthMethod>,
pub mfa: MFAConfig,
pub sso: SSOConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AuthMethod {
Password,
APIKey,
Certificate,
OAuth2,
SAML,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MFAConfig {
pub enabled: bool,
pub methods: Vec<MFAMethod>,
pub backup_codes: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MFAMethod {
TOTP,
SMS,
Email,
PushNotification,
Hardware,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SSOConfig {
pub enabled: bool,
pub provider: SSOProvider,
pub saml: SAMLConfig,
pub oidc: OIDCConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SSOProvider {
SAML,
OIDC,
LDAP,
ActiveDirectory,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SAMLConfig {
pub idp_url: String,
pub sp_id: String,
pub certificate: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OIDCConfig {
pub client_id: String,
pub client_secret: String,
pub discovery_url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthorizationConfig {
pub model: AuthorizationModel,
pub roles: Vec<RoleDefinition>,
pub permissions: PermissionSystem,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AuthorizationModel {
RBAC,
ABAC,
DAC,
MAC,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RoleDefinition {
pub name: String,
pub description: String,
pub permissions: Vec<String>,
pub parent_roles: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PermissionSystem {
pub model: PermissionModel,
pub resources: Vec<ResourceDefinition>,
pub actions: Vec<ActionDefinition>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionModel {
ResourceAction,
CapabilityBased,
AttributeBased,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceDefinition {
pub resource_type: String,
pub attributes: HashMap<String, String>,
pub access_patterns: Vec<AccessPattern>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccessPattern {
pub name: String,
pub actions: Vec<String>,
pub conditions: Vec<AccessCondition>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccessCondition {
pub attribute: String,
pub operator: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ActionDefinition {
pub name: String,
pub description: String,
pub required_permissions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EncryptionConfig {
pub at_rest: EncryptionAtRestConfig,
pub in_transit: EncryptionInTransitConfig,
pub key_management: EncryptionKeyManagementConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EncryptionAtRestConfig {
pub enabled: bool,
pub algorithm: String,
pub key_size: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EncryptionInTransitConfig {
pub enabled: bool,
pub tls_version: String,
pub cipher_suites: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EncryptionKeyManagementConfig {
pub service: KeyManagementService,
pub rotation_policy: EncryptionKeyRotationPolicy,
pub backup_policy: EncryptionKeyBackupPolicy,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum KeyManagementService {
AwsKms,
AzureKeyVault,
GoogleKms,
HashiCorpVault,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EncryptionKeyRotationPolicy {
pub enabled: bool,
pub frequency: Duration,
pub automatic: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EncryptionKeyBackupPolicy {
pub enabled: bool,
pub frequency: Duration,
pub locations: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkSecurityConfig {
pub firewall: FirewallConfig,
pub vpn: VPNConfig,
pub ddos_protection: DDoSProtectionConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FirewallConfig {
pub enabled: bool,
pub rules: Vec<FirewallRule>,
pub default_policy: FirewallPolicy,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FirewallRule {
pub name: String,
pub source: String,
pub destination: String,
pub port: String,
pub protocol: String,
pub action: FirewallAction,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FirewallPolicy {
Allow,
Deny,
Log,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FirewallAction {
Allow,
Deny,
Log,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VPNConfig {
pub enabled: bool,
pub vpn_type: VPNType,
pub connection: VPNConnectionConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum VPNType {
SiteToSite,
PointToSite,
PointToPoint,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VPNConnectionConfig {
pub gateway: String,
pub psk: String,
pub encryption: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DDoSProtectionConfig {
pub enabled: bool,
pub level: DDoSProtectionLevel,
pub rate_limiting: RateLimitingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DDoSProtectionLevel {
Basic,
Standard,
Premium,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RateLimitingConfig {
pub enabled: bool,
pub limits: HashMap<String, usize>,
pub windows: HashMap<String, Duration>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComplianceConfig {
pub frameworks: Vec<ComplianceFramework>,
pub audit: AuditConfig,
pub data_governance: DataGovernanceConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ComplianceFramework {
SOC2,
ISO27001,
GDPR,
HIPAA,
PciDss,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditConfig {
pub enabled: bool,
pub events: Vec<AuditEvent>,
pub retention: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AuditEvent {
Authentication,
Authorization,
DataAccess,
ConfigChange,
SecurityEvent,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataGovernanceConfig {
pub classification: DataClassificationConfig,
pub retention: DataRetentionConfig,
pub privacy: DataPrivacyConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataClassificationConfig {
pub levels: Vec<ClassificationLevel>,
pub auto_classification: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ClassificationLevel {
pub name: String,
pub sensitivity: u8,
pub requirements: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataRetentionConfig {
pub policies: Vec<RetentionPolicy>,
pub default_retention: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RetentionPolicy {
pub data_type: String,
pub retention_period: Duration,
pub disposal_method: DisposalMethod,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DisposalMethod {
Delete,
Archive,
Anonymize,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataPrivacyConfig {
pub controls: Vec<PrivacyControl>,
pub consent: ConsentManagementConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PrivacyControl {
Anonymization,
Pseudonymization,
DataMinimization,
AccessControl,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConsentManagementConfig {
pub enabled: bool,
pub consent_types: Vec<String>,
pub withdrawal_process: WithdrawalProcess,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WithdrawalProcess {
pub methods: Vec<WithdrawalMethod>,
pub processing_time: Duration,
pub confirmation_required: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum WithdrawalMethod {
Online,
Email,
Phone,
Mail,
Custom(String),
}