Skip to content

Add GDPR compliance framework for Azure #11589

@m-khan-97

Description

@m-khan-97

New feature motivation

#7384 requests GDPR compliance mappings for Azure (and GCP). Prowler currently ships a GDPR framework only for AWS (prowler/compliance/aws/gdpr_aws.json), covering three articles: Article 25 (data protection by design and by default), Article 30 (records of processing activities), and Article 32 (security of processing).

Solution Proposed

Add prowler/compliance/azure/gdpr_azure.json, following the same legacy schema/structure as the existing AWS file (same Framework: "GDPR", same three requirements: article_25, article_30, article_32, Generic_Compliance_Requirement_Attribute), mapped to existing Azure checks. This follows the documented convention for extending a legacy framework to a new provider ("ship one JSON file per provider").

Scoping this to Azure only (GCP would be a separate follow-up, per the existing "one file per provider" convention).

Draft mapping (all checks verified to exist under prowler/providers/azure/services/):

Article 25 — Data protection by design and by default (identity/access controls, change-monitoring, key hygiene)

  • entra_privileged_user_has_mfa, entra_non_privileged_user_has_mfa, entra_user_with_vm_access_has_mfa
  • entra_conditional_access_policy_require_mfa_for_admin_portals, entra_conditional_access_policy_require_mfa_for_management_api
  • entra_global_admin_in_less_than_five_users, entra_policy_guest_invite_only_for_admin_roles
  • iam_role_user_access_admin_restricted, iam_custom_role_has_permissions_to_administer_resource_locks
  • monitor_diagnostic_settings_exists, monitor_diagnostic_setting_with_appropriate_categories
  • network_watcher_enabled, network_flow_log_captured_sent, network_flow_log_more_than_90_days
  • monitor_alert_create_policy_assignment, monitor_alert_delete_policy_assignment, monitor_alert_create_update_nsg, monitor_alert_delete_nsg
  • storage_key_rotation_90_days, keyvault_key_rotation_enabled

Article 30 — Records of processing activities (audit/diagnostic logging)

  • monitor_diagnostic_settings_exists, monitor_diagnostic_setting_with_appropriate_categories, monitor_storage_account_with_activity_logs_is_private
  • network_flow_log_captured_sent, network_flow_log_more_than_90_days
  • keyvault_logging_enabled, app_http_logs_enabled
  • mysql_flexible_server_audit_log_enabled, mysql_flexible_server_audit_log_connection_activated
  • postgresql_flexible_server_log_connections_on, postgresql_flexible_server_log_disconnections_on, postgresql_flexible_server_log_checkpoints_on, postgresql_flexible_server_log_retention_days_greater_3

Article 32 — Security of processing (encryption at rest/in transit, TLS, backups)

  • storage_ensure_encryption_with_customer_managed_keys, storage_infrastructure_encryption_is_enabled, storage_ensure_minimum_tls_version_12, storage_secure_transfer_required_is_enabled, storage_blob_public_access_level_is_disabled, storage_default_network_access_rule_is_denied
  • sqlserver_tde_encryption_enabled, sqlserver_tde_encrypted_with_cmk, sqlserver_recommended_minimal_tls_version
  • mysql_flexible_server_ssl_connection_enabled, mysql_flexible_server_minimum_tls_version_12, postgresql_flexible_server_enforce_ssl_enabled
  • vm_ensure_attached_disks_encrypted_with_cmk, vm_ensure_unattached_disks_encrypted_with_cmk, vm_backup_enabled, vm_sufficient_daily_backup_retention_period
  • keyvault_recoverable, keyvault_non_rbac_secret_expiration_set, keyvault_rbac_secret_expiration_set
  • app_ensure_http_is_redirected_to_https, app_minimum_tls_version_12
  • databricks_workspace_cmk_encryption_enabled

Would also add the schema/content tests under tests/lib/check/universal_compliance_models_test.py (loading the legacy JSON via adapt_legacy_to_universal), following the same pattern used for #11579.

Describe alternatives you've considered

Could instead write this as a universal-schema framework with a different name (e.g. gdpr.json covering both AWS and Azure), but that would require migrating the existing AWS gdpr_aws.json, which is a larger and more disruptive change than additive per-provider extension.

Additional context

Opening this before coding to confirm the mapping/scope is acceptable. Happy to adjust the check list based on feedback.

Metadata

Metadata

Assignees

Labels

feature-requestNew feature request for Prowler.not-plannedIssues that are not in the Prowler roadmap.

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions