prowler-cloud 5.12.3__py3-none-any.whl → 5.13.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dashboard/assets/markdown-styles.css +34 -0
- dashboard/compliance/c5_aws.py +43 -0
- dashboard/compliance/ccc_aws.py +36 -0
- dashboard/compliance/ccc_azure.py +36 -0
- dashboard/compliance/ccc_gcp.py +36 -0
- dashboard/compliance/cis_3_0_oci.py +41 -0
- dashboard/pages/overview.py +66 -16
- prowler/CHANGELOG.md +60 -0
- prowler/__main__.py +128 -14
- prowler/compliance/aws/aws_account_security_onboarding_aws.json +1 -0
- prowler/compliance/aws/aws_audit_manager_control_tower_guardrails_aws.json +1 -0
- prowler/compliance/aws/aws_foundational_security_best_practices_aws.json +2 -1
- prowler/compliance/aws/aws_foundational_technical_review_aws.json +1 -0
- prowler/compliance/aws/aws_well_architected_framework_reliability_pillar_aws.json +1 -0
- prowler/compliance/aws/aws_well_architected_framework_security_pillar_aws.json +1 -0
- prowler/compliance/aws/c5_aws.json +10744 -0
- prowler/compliance/aws/ccc_aws.json +6206 -0
- prowler/compliance/aws/cis_1.4_aws.json +1 -0
- prowler/compliance/aws/cis_1.5_aws.json +1 -0
- prowler/compliance/aws/cis_2.0_aws.json +1 -0
- prowler/compliance/aws/cis_3.0_aws.json +1 -0
- prowler/compliance/aws/cis_4.0_aws.json +1 -0
- prowler/compliance/aws/cis_5.0_aws.json +1 -0
- prowler/compliance/aws/cisa_aws.json +1 -0
- prowler/compliance/aws/ens_rd2022_aws.json +1 -0
- prowler/compliance/aws/fedramp_low_revision_4_aws.json +1 -0
- prowler/compliance/aws/fedramp_moderate_revision_4_aws.json +1 -0
- prowler/compliance/aws/ffiec_aws.json +1 -0
- prowler/compliance/aws/gdpr_aws.json +1 -0
- prowler/compliance/aws/gxp_21_cfr_part_11_aws.json +1 -0
- prowler/compliance/aws/gxp_eu_annex_11_aws.json +1 -0
- prowler/compliance/aws/hipaa_aws.json +1 -0
- prowler/compliance/aws/iso27001_2013_aws.json +1 -0
- prowler/compliance/aws/iso27001_2022_aws.json +1 -0
- prowler/compliance/aws/kisa_isms_p_2023_aws.json +1 -0
- prowler/compliance/aws/kisa_isms_p_2023_korean_aws.json +1 -0
- prowler/compliance/aws/mitre_attack_aws.json +287 -11
- prowler/compliance/aws/nis2_aws.json +1 -0
- prowler/compliance/aws/nist_800_171_revision_2_aws.json +1 -0
- prowler/compliance/aws/nist_800_53_revision_4_aws.json +1 -0
- prowler/compliance/aws/nist_800_53_revision_5_aws.json +1 -0
- prowler/compliance/aws/nist_csf_1.1_aws.json +1 -0
- prowler/compliance/aws/pci_3.2.1_aws.json +2 -1
- prowler/compliance/aws/pci_4.0_aws.json +1 -0
- prowler/compliance/aws/prowler_threatscore_aws.json +1 -0
- prowler/compliance/aws/rbi_cyber_security_framework_aws.json +1 -0
- prowler/compliance/aws/soc2_aws.json +1 -0
- prowler/compliance/azure/ccc_azure.json +6147 -0
- prowler/compliance/azure/cis_2.0_azure.json +1 -0
- prowler/compliance/azure/cis_2.1_azure.json +1 -0
- prowler/compliance/azure/cis_3.0_azure.json +1 -0
- prowler/compliance/azure/cis_4.0_azure.json +1 -0
- prowler/compliance/azure/ens_rd2022_azure.json +1 -0
- prowler/compliance/azure/iso27001_2022_azure.json +1 -0
- prowler/compliance/azure/mitre_attack_azure.json +131 -5
- prowler/compliance/azure/nis2_azure.json +1 -0
- prowler/compliance/azure/pci_4.0_azure.json +1 -0
- prowler/compliance/azure/prowler_threatscore_azure.json +1 -0
- prowler/compliance/azure/soc2_azure.json +1 -0
- prowler/compliance/gcp/ccc_gcp.json +6077 -0
- prowler/compliance/gcp/cis_2.0_gcp.json +1 -0
- prowler/compliance/gcp/cis_3.0_gcp.json +1 -0
- prowler/compliance/gcp/cis_4.0_gcp.json +1 -0
- prowler/compliance/gcp/ens_rd2022_gcp.json +1 -0
- prowler/compliance/gcp/iso27001_2022_gcp.json +1 -0
- prowler/compliance/gcp/mitre_attack_gcp.json +287 -11
- prowler/compliance/gcp/nis2_gcp.json +1 -0
- prowler/compliance/gcp/pci_4.0_gcp.json +1 -0
- prowler/compliance/gcp/prowler_threatscore_gcp.json +1 -0
- prowler/compliance/gcp/soc2_gcp.json +1 -0
- prowler/compliance/github/cis_1.0_github.json +1 -0
- prowler/compliance/kubernetes/cis_1.10_kubernetes.json +1 -0
- prowler/compliance/kubernetes/cis_1.11_kubernetes.json +1 -0
- prowler/compliance/kubernetes/cis_1.8_kubernetes.json +1 -0
- prowler/compliance/kubernetes/iso27001_2022_kubernetes.json +1 -0
- prowler/compliance/kubernetes/pci_4.0_kubernetes.json +1 -0
- prowler/compliance/llm/__init__.py +0 -0
- prowler/compliance/m365/cis_4.0_m365.json +1 -0
- prowler/compliance/m365/iso27001_2022_m365.json +1 -0
- prowler/compliance/m365/prowler_threatscore_m365.json +1 -0
- prowler/compliance/nhn/iso27001_2022_nhn.json +1 -0
- prowler/compliance/oci/__init__.py +0 -0
- prowler/compliance/oci/cis_3.0_oci.json +1141 -0
- prowler/config/config.py +5 -1
- prowler/config/llm_config.yaml +175015 -0
- prowler/config/oraclecloud_mutelist_example.yaml +61 -0
- prowler/lib/check/check.py +9 -1
- prowler/lib/check/compliance.py +1 -0
- prowler/lib/check/compliance_models.py +33 -3
- prowler/lib/check/models.py +96 -8
- prowler/lib/check/utils.py +8 -2
- prowler/lib/cli/parser.py +6 -4
- prowler/lib/outputs/compliance/aws_well_architected/aws_well_architected.py +4 -0
- prowler/lib/outputs/compliance/aws_well_architected/models.py +2 -0
- prowler/lib/outputs/compliance/c5/__init__.py +0 -0
- prowler/lib/outputs/compliance/c5/c5.py +98 -0
- prowler/lib/outputs/compliance/c5/c5_aws.py +92 -0
- prowler/lib/outputs/compliance/c5/models.py +30 -0
- prowler/lib/outputs/compliance/ccc/__init__.py +0 -0
- prowler/lib/outputs/compliance/ccc/ccc_aws.py +95 -0
- prowler/lib/outputs/compliance/ccc/ccc_azure.py +95 -0
- prowler/lib/outputs/compliance/ccc/ccc_gcp.py +95 -0
- prowler/lib/outputs/compliance/ccc/models.py +90 -0
- prowler/lib/outputs/compliance/cis/cis_aws.py +4 -0
- prowler/lib/outputs/compliance/cis/cis_azure.py +4 -0
- prowler/lib/outputs/compliance/cis/cis_gcp.py +4 -0
- prowler/lib/outputs/compliance/cis/cis_github.py +4 -0
- prowler/lib/outputs/compliance/cis/cis_kubernetes.py +4 -0
- prowler/lib/outputs/compliance/cis/cis_m365.py +4 -0
- prowler/lib/outputs/compliance/cis/cis_oci.py +106 -0
- prowler/lib/outputs/compliance/cis/models.py +56 -0
- prowler/lib/outputs/compliance/compliance.py +10 -0
- prowler/lib/outputs/compliance/compliance_output.py +4 -1
- prowler/lib/outputs/compliance/ens/ens_aws.py +4 -0
- prowler/lib/outputs/compliance/ens/ens_azure.py +4 -0
- prowler/lib/outputs/compliance/ens/ens_gcp.py +4 -0
- prowler/lib/outputs/compliance/ens/models.py +6 -0
- prowler/lib/outputs/compliance/generic/generic.py +4 -0
- prowler/lib/outputs/compliance/generic/models.py +2 -0
- prowler/lib/outputs/compliance/iso27001/iso27001_aws.py +4 -0
- prowler/lib/outputs/compliance/iso27001/iso27001_azure.py +4 -0
- prowler/lib/outputs/compliance/iso27001/iso27001_gcp.py +4 -0
- prowler/lib/outputs/compliance/iso27001/iso27001_kubernetes.py +4 -0
- prowler/lib/outputs/compliance/iso27001/iso27001_m365.py +4 -0
- prowler/lib/outputs/compliance/iso27001/iso27001_nhn.py +4 -0
- prowler/lib/outputs/compliance/iso27001/models.py +12 -0
- prowler/lib/outputs/compliance/kisa_ismsp/kisa_ismsp_aws.py +4 -0
- prowler/lib/outputs/compliance/kisa_ismsp/models.py +2 -0
- prowler/lib/outputs/compliance/mitre_attack/mitre_attack_aws.py +4 -0
- prowler/lib/outputs/compliance/mitre_attack/mitre_attack_azure.py +4 -0
- prowler/lib/outputs/compliance/mitre_attack/mitre_attack_gcp.py +4 -0
- prowler/lib/outputs/compliance/mitre_attack/models.py +6 -0
- prowler/lib/outputs/compliance/prowler_threatscore/models.py +8 -0
- prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore.py +46 -4
- prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore_aws.py +4 -0
- prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore_azure.py +4 -0
- prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore_gcp.py +4 -0
- prowler/lib/outputs/compliance/prowler_threatscore/prowler_threatscore_m365.py +4 -0
- prowler/lib/outputs/csv/csv.py +3 -0
- prowler/lib/outputs/finding.py +22 -0
- prowler/lib/outputs/html/html.py +192 -7
- prowler/lib/outputs/jira/jira.py +284 -47
- prowler/lib/outputs/ocsf/ocsf.py +1 -4
- prowler/lib/outputs/outputs.py +6 -0
- prowler/lib/outputs/summary_table.py +10 -0
- prowler/providers/aws/aws_regions_by_service.json +221 -44
- prowler/providers/aws/lib/quick_inventory/quick_inventory.py +3 -0
- prowler/providers/aws/lib/security_hub/security_hub.py +12 -2
- prowler/providers/aws/services/accessanalyzer/accessanalyzer_enabled/accessanalyzer_enabled.metadata.json +27 -13
- prowler/providers/aws/services/accessanalyzer/accessanalyzer_enabled_without_findings/accessanalyzer_enabled_without_findings.metadata.json +32 -13
- prowler/providers/aws/services/account/account_maintain_current_contact_details/account_maintain_current_contact_details.metadata.json +23 -11
- prowler/providers/aws/services/account/account_maintain_different_contact_details_to_security_billing_and_operations/account_maintain_different_contact_details_to_security_billing_and_operations.metadata.json +24 -12
- prowler/providers/aws/services/account/account_security_contact_information_is_registered/account_security_contact_information_is_registered.metadata.json +19 -11
- prowler/providers/aws/services/account/account_security_questions_are_registered_in_the_aws_account/account_security_questions_are_registered_in_the_aws_account.metadata.json +14 -10
- prowler/providers/aws/services/acm/acm_certificates_expiration_check/acm_certificates_expiration_check.metadata.json +17 -9
- prowler/providers/aws/services/acm/acm_certificates_transparency_logs_enabled/acm_certificates_transparency_logs_enabled.metadata.json +16 -12
- prowler/providers/aws/services/acm/acm_certificates_with_secure_key_algorithms/acm_certificates_with_secure_key_algorithms.metadata.json +21 -12
- prowler/providers/aws/services/apigateway/apigateway_restapi_authorizers_enabled/apigateway_restapi_authorizers_enabled.metadata.json +23 -16
- prowler/providers/aws/services/apigateway/apigateway_restapi_cache_encrypted/apigateway_restapi_cache_encrypted.metadata.json +22 -12
- prowler/providers/aws/services/apigateway/apigateway_restapi_client_certificate_enabled/apigateway_restapi_client_certificate_enabled.metadata.json +26 -18
- prowler/providers/aws/services/apigateway/apigateway_restapi_logging_enabled/apigateway_restapi_logging_enabled.metadata.json +30 -19
- prowler/providers/aws/services/apigateway/apigateway_restapi_public/apigateway_restapi_public.metadata.json +24 -16
- prowler/providers/aws/services/apigateway/apigateway_restapi_public_with_authorizer/apigateway_restapi_public_with_authorizer.metadata.json +31 -18
- prowler/providers/aws/services/apigateway/apigateway_restapi_tracing_enabled/apigateway_restapi_tracing_enabled.metadata.json +20 -12
- prowler/providers/aws/services/apigateway/apigateway_restapi_waf_acl_attached/apigateway_restapi_waf_acl_attached.metadata.json +24 -18
- prowler/providers/aws/services/apigatewayv2/apigatewayv2_api_access_logging_enabled/apigatewayv2_api_access_logging_enabled.metadata.json +18 -12
- prowler/providers/aws/services/apigatewayv2/apigatewayv2_api_authorizers_enabled/apigatewayv2_api_authorizers_enabled.metadata.json +21 -12
- prowler/providers/aws/services/appstream/appstream_fleet_default_internet_access_disabled/appstream_fleet_default_internet_access_disabled.metadata.json +23 -15
- prowler/providers/aws/services/appstream/appstream_fleet_maximum_session_duration/appstream_fleet_maximum_session_duration.metadata.json +15 -12
- prowler/providers/aws/services/appstream/appstream_fleet_session_disconnect_timeout/appstream_fleet_session_disconnect_timeout.metadata.json +17 -14
- prowler/providers/aws/services/appstream/appstream_fleet_session_idle_disconnect_timeout/appstream_fleet_session_idle_disconnect_timeout.metadata.json +20 -15
- prowler/providers/aws/services/appsync/appsync_field_level_logging_enabled/appsync_field_level_logging_enabled.metadata.json +21 -12
- prowler/providers/aws/services/appsync/appsync_graphql_api_no_api_key_authentication/appsync_graphql_api_no_api_key_authentication.metadata.json +20 -13
- prowler/providers/aws/services/athena/athena_workgroup_encryption/athena_workgroup_encryption.metadata.json +24 -12
- prowler/providers/aws/services/athena/athena_workgroup_enforce_configuration/athena_workgroup_enforce_configuration.metadata.json +20 -13
- prowler/providers/aws/services/athena/athena_workgroup_logging_enabled/athena_workgroup_logging_enabled.metadata.json +21 -12
- prowler/providers/aws/services/autoscaling/autoscaling_find_secrets_ec2_launch_configuration/autoscaling_find_secrets_ec2_launch_configuration.metadata.json +15 -10
- prowler/providers/aws/services/autoscaling/autoscaling_group_capacity_rebalance_enabled/autoscaling_group_capacity_rebalance_enabled.metadata.json +20 -13
- prowler/providers/aws/services/autoscaling/autoscaling_group_elb_health_check_enabled/autoscaling_group_elb_health_check_enabled.metadata.json +20 -12
- prowler/providers/aws/services/autoscaling/autoscaling_group_launch_configuration_no_public_ip/autoscaling_group_launch_configuration_no_public_ip.metadata.json +20 -13
- prowler/providers/aws/services/autoscaling/autoscaling_group_launch_configuration_requires_imdsv2/autoscaling_group_launch_configuration_requires_imdsv2.metadata.json +26 -14
- prowler/providers/aws/services/autoscaling/autoscaling_group_multiple_az/autoscaling_group_multiple_az.metadata.json +22 -13
- prowler/providers/aws/services/autoscaling/autoscaling_group_multiple_instance_types/autoscaling_group_multiple_instance_types.metadata.json +21 -13
- prowler/providers/aws/services/autoscaling/autoscaling_group_using_ec2_launch_template/autoscaling_group_using_ec2_launch_template.metadata.json +19 -12
- prowler/providers/aws/services/autoscaling/autoscaling_service.py +1 -1
- prowler/providers/aws/services/awslambda/awslambda_function_inside_vpc/awslambda_function_inside_vpc.metadata.json +26 -13
- prowler/providers/aws/services/awslambda/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled/awslambda_function_invoke_api_operations_cloudtrail_logging_enabled.metadata.json +20 -13
- prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_code/awslambda_function_no_secrets_in_code.metadata.json +18 -9
- prowler/providers/aws/services/awslambda/awslambda_function_no_secrets_in_variables/awslambda_function_no_secrets_in_variables.metadata.json +20 -12
- prowler/providers/aws/services/awslambda/awslambda_function_not_publicly_accessible/awslambda_function_not_publicly_accessible.metadata.json +21 -12
- prowler/providers/aws/services/awslambda/awslambda_function_url_cors_policy/awslambda_function_url_cors_policy.metadata.json +24 -13
- prowler/providers/aws/services/awslambda/awslambda_function_url_public/awslambda_function_url_public.metadata.json +22 -12
- prowler/providers/aws/services/awslambda/awslambda_function_using_supported_runtimes/awslambda_function_using_supported_runtimes.metadata.json +24 -13
- prowler/providers/aws/services/awslambda/awslambda_function_vpc_multi_az/awslambda_function_vpc_multi_az.metadata.json +23 -13
- prowler/providers/aws/services/backup/backup_plans_exist/backup_plans_exist.metadata.json +22 -15
- prowler/providers/aws/services/backup/backup_recovery_point_encrypted/backup_recovery_point_encrypted.metadata.json +21 -12
- prowler/providers/aws/services/backup/backup_reportplans_exist/backup_reportplans_exist.metadata.json +19 -15
- prowler/providers/aws/services/backup/backup_vaults_encrypted/backup_vaults_encrypted.metadata.json +24 -13
- prowler/providers/aws/services/backup/backup_vaults_exist/backup_vaults_exist.metadata.json +19 -15
- prowler/providers/aws/services/cloudformation/cloudformation_stack_cdktoolkit_bootstrap_version/cloudformation_stack_cdktoolkit_bootstrap_version.metadata.json +24 -13
- prowler/providers/aws/services/cloudformation/cloudformation_stack_outputs_find_secrets/cloudformation_stack_outputs_find_secrets.metadata.json +22 -12
- prowler/providers/aws/services/cloudformation/cloudformation_stacks_termination_protection_enabled/cloudformation_stacks_termination_protection_enabled.metadata.json +21 -12
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_custom_ssl_certificate/cloudfront_distributions_custom_ssl_certificate.metadata.json +21 -12
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_default_root_object/cloudfront_distributions_default_root_object.metadata.json +19 -12
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_field_level_encryption_enabled/cloudfront_distributions_field_level_encryption_enabled.metadata.json +19 -12
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_geo_restrictions_enabled/cloudfront_distributions_geo_restrictions_enabled.metadata.json +22 -13
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_https_enabled/cloudfront_distributions_https_enabled.metadata.json +21 -12
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_https_sni_enabled/cloudfront_distributions_https_sni_enabled.metadata.json +20 -12
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_logging_enabled/cloudfront_distributions_logging_enabled.metadata.json +22 -13
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_multiple_origin_failover_configured/cloudfront_distributions_multiple_origin_failover_configured.metadata.json +21 -16
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_origin_traffic_encrypted/cloudfront_distributions_origin_traffic_encrypted.metadata.json +27 -14
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_s3_origin_access_control/cloudfront_distributions_s3_origin_access_control.metadata.json +24 -14
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_s3_origin_non_existent_bucket/cloudfront_distributions_s3_origin_non_existent_bucket.metadata.json +18 -11
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_using_deprecated_ssl_protocols/cloudfront_distributions_using_deprecated_ssl_protocols.metadata.json +20 -12
- prowler/providers/aws/services/cloudfront/cloudfront_distributions_using_waf/cloudfront_distributions_using_waf.metadata.json +21 -12
- prowler/providers/aws/services/cloudtrail/cloudtrail_bucket_requires_mfa_delete/cloudtrail_bucket_requires_mfa_delete.metadata.json +16 -11
- prowler/providers/aws/services/cloudtrail/cloudtrail_cloudwatch_logging_enabled/cloudtrail_cloudwatch_logging_enabled.metadata.json +19 -15
- prowler/providers/aws/services/cloudtrail/cloudtrail_insights_exist/cloudtrail_insights_exist.metadata.json +19 -14
- prowler/providers/aws/services/cloudtrail/cloudtrail_kms_encryption_enabled/cloudtrail_kms_encryption_enabled.metadata.json +19 -14
- prowler/providers/aws/services/cloudtrail/cloudtrail_log_file_validation_enabled/cloudtrail_log_file_validation_enabled.metadata.json +20 -13
- prowler/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_access_logging_enabled/cloudtrail_logs_s3_bucket_access_logging_enabled.metadata.json +18 -13
- prowler/providers/aws/services/cloudtrail/cloudtrail_logs_s3_bucket_is_not_publicly_accessible/cloudtrail_logs_s3_bucket_is_not_publicly_accessible.metadata.json +24 -16
- prowler/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled/cloudtrail_multi_region_enabled.metadata.json +17 -13
- prowler/providers/aws/services/cloudtrail/cloudtrail_multi_region_enabled_logging_management_events/cloudtrail_multi_region_enabled_logging_management_events.metadata.json +19 -12
- prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_read_enabled/cloudtrail_s3_dataevents_read_enabled.metadata.json +22 -12
- prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_write_enabled/cloudtrail_s3_dataevents_write_enabled.metadata.json +21 -11
- prowler/providers/aws/services/cloudtrail/cloudtrail_threat_detection_enumeration/cloudtrail_threat_detection_enumeration.metadata.json +22 -11
- prowler/providers/aws/services/cloudtrail/cloudtrail_threat_detection_llm_jacking/cloudtrail_threat_detection_llm_jacking.metadata.json +25 -12
- prowler/providers/aws/services/cloudtrail/cloudtrail_threat_detection_privilege_escalation/cloudtrail_threat_detection_privilege_escalation.metadata.json +18 -10
- prowler/providers/aws/services/config/config_recorder_all_regions_enabled/config_recorder_all_regions_enabled.metadata.json +20 -12
- prowler/providers/aws/services/config/config_recorder_using_aws_service_role/config_recorder_using_aws_service_role.metadata.json +20 -13
- prowler/providers/aws/services/directoryservice/directoryservice_directory_log_forwarding_enabled/directoryservice_directory_log_forwarding_enabled.metadata.json +20 -11
- prowler/providers/aws/services/directoryservice/directoryservice_directory_monitor_notifications/directoryservice_directory_monitor_notifications.metadata.json +19 -11
- prowler/providers/aws/services/directoryservice/directoryservice_directory_snapshots_limit/directoryservice_directory_snapshots_limit.metadata.json +19 -10
- prowler/providers/aws/services/directoryservice/directoryservice_ldap_certificate_expiration/directoryservice_ldap_certificate_expiration.metadata.json +20 -11
- prowler/providers/aws/services/directoryservice/directoryservice_radius_server_security_protocol/directoryservice_radius_server_security_protocol.metadata.json +23 -12
- prowler/providers/aws/services/directoryservice/directoryservice_supported_mfa_radius_enabled/directoryservice_supported_mfa_radius_enabled.metadata.json +23 -12
- prowler/providers/aws/services/dlm/dlm_ebs_snapshot_lifecycle_policy_exists/dlm_ebs_snapshot_lifecycle_policy_exists.metadata.json +19 -13
- prowler/providers/aws/services/dms/dms_endpoint_mongodb_authentication_enabled/dms_endpoint_mongodb_authentication_enabled.metadata.json +20 -13
- prowler/providers/aws/services/dms/dms_endpoint_neptune_iam_authorization_enabled/dms_endpoint_neptune_iam_authorization_enabled.metadata.json +19 -12
- prowler/providers/aws/services/dms/dms_endpoint_redis_in_transit_encryption_enabled/dms_endpoint_redis_in_transit_encryption_enabled.metadata.json +23 -13
- prowler/providers/aws/services/dms/dms_endpoint_ssl_enabled/dms_endpoint_ssl_enabled.metadata.json +27 -19
- prowler/providers/aws/services/dms/dms_instance_minor_version_upgrade_enabled/dms_instance_minor_version_upgrade_enabled.metadata.json +22 -12
- prowler/providers/aws/services/dms/dms_instance_multi_az_enabled/dms_instance_multi_az_enabled.metadata.json +20 -13
- prowler/providers/aws/services/dms/dms_instance_no_public_access/dms_instance_no_public_access.metadata.json +22 -11
- prowler/providers/aws/services/dms/dms_replication_task_source_logging_enabled/dms_replication_task_source_logging_enabled.metadata.json +21 -13
- prowler/providers/aws/services/dms/dms_replication_task_target_logging_enabled/dms_replication_task_target_logging_enabled.metadata.json +22 -13
- prowler/providers/aws/services/dms/dms_replication_task_target_logging_enabled/dms_replication_task_target_logging_enabled.py +39 -37
- prowler/providers/aws/services/dms/dms_service.py +0 -1
- prowler/providers/aws/services/ec2/ec2_ami_public/ec2_ami_public.py +11 -10
- prowler/providers/aws/services/ec2/ec2_instance_with_outdated_ami/__init__.py +0 -0
- prowler/providers/aws/services/ec2/ec2_instance_with_outdated_ami/ec2_instance_with_outdated_ami.metadata.json +30 -0
- prowler/providers/aws/services/ec2/ec2_instance_with_outdated_ami/ec2_instance_with_outdated_ami.py +52 -0
- prowler/providers/aws/services/ec2/ec2_service.py +26 -14
- prowler/providers/aws/services/efs/efs_access_point_enforce_root_directory/efs_access_point_enforce_root_directory.metadata.json +19 -13
- prowler/providers/aws/services/efs/efs_access_point_enforce_user_identity/efs_access_point_enforce_user_identity.metadata.json +23 -13
- prowler/providers/aws/services/efs/efs_encryption_at_rest_enabled/efs_encryption_at_rest_enabled.metadata.json +23 -13
- prowler/providers/aws/services/efs/efs_have_backup_enabled/efs_have_backup_enabled.metadata.json +20 -14
- prowler/providers/aws/services/efs/efs_mount_target_not_publicly_accessible/efs_mount_target_not_publicly_accessible.metadata.json +18 -12
- prowler/providers/aws/services/efs/efs_multi_az_enabled/efs_multi_az_enabled.metadata.json +21 -13
- prowler/providers/aws/services/efs/efs_not_publicly_accessible/efs_not_publicly_accessible.metadata.json +17 -13
- prowler/providers/aws/services/eks/eks_cluster_uses_a_supported_version/eks_cluster_uses_a_supported_version.py +4 -0
- prowler/providers/aws/services/elb/elb_ssl_listeners_use_acm_certificate/elb_ssl_listeners_use_acm_certificate.py +8 -2
- prowler/providers/aws/services/neptune/neptune_cluster_backup_enabled/neptune_cluster_backup_enabled.metadata.json +23 -13
- prowler/providers/aws/services/neptune/neptune_cluster_copy_tags_to_snapshots/neptune_cluster_copy_tags_to_snapshots.metadata.json +18 -14
- prowler/providers/aws/services/neptune/neptune_cluster_deletion_protection/neptune_cluster_deletion_protection.metadata.json +23 -14
- prowler/providers/aws/services/neptune/neptune_cluster_iam_authentication_enabled/neptune_cluster_iam_authentication_enabled.metadata.json +25 -13
- prowler/providers/aws/services/neptune/neptune_cluster_integration_cloudwatch_logs/neptune_cluster_integration_cloudwatch_logs.metadata.json +22 -14
- prowler/providers/aws/services/neptune/neptune_cluster_multi_az/neptune_cluster_multi_az.metadata.json +20 -12
- prowler/providers/aws/services/neptune/neptune_cluster_public_snapshot/neptune_cluster_public_snapshot.metadata.json +18 -10
- prowler/providers/aws/services/neptune/neptune_cluster_snapshot_encrypted/neptune_cluster_snapshot_encrypted.metadata.json +16 -10
- prowler/providers/aws/services/neptune/neptune_cluster_storage_encrypted/neptune_cluster_storage_encrypted.metadata.json +22 -13
- prowler/providers/aws/services/neptune/neptune_cluster_uses_public_subnet/neptune_cluster_uses_public_subnet.metadata.json +20 -12
- prowler/providers/aws/services/rds/rds_service.py +9 -2
- prowler/providers/aws/services/vpc/vpc_service.py +1 -1
- prowler/providers/azure/services/entra/entra_service.py +54 -25
- prowler/providers/common/arguments.py +16 -2
- prowler/providers/common/provider.py +34 -2
- prowler/providers/gcp/services/cloudsql/cloudsql_service.py +3 -3
- prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_lifecycle_management_enabled/__init__.py +0 -0
- prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_lifecycle_management_enabled/cloudstorage_bucket_lifecycle_management_enabled.metadata.json +34 -0
- prowler/providers/gcp/services/cloudstorage/cloudstorage_bucket_lifecycle_management_enabled/cloudstorage_bucket_lifecycle_management_enabled.py +48 -0
- prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py +10 -0
- prowler/providers/gcp/services/compute/compute_project_os_login_enabled/compute_project_os_login_enabled.py +5 -0
- prowler/providers/gcp/services/iam/iam_audit_logs_enabled/iam_audit_logs_enabled.py +5 -0
- prowler/providers/gcp/services/iam/iam_role_kms_enforce_separation_of_duties/iam_role_kms_enforce_separation_of_duties.py +5 -0
- prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled/logging_log_metric_filter_and_alert_for_audit_configuration_changes_enabled.py +5 -0
- prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled/logging_log_metric_filter_and_alert_for_bucket_permission_changes_enabled.py +5 -0
- prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_custom_role_changes_enabled/logging_log_metric_filter_and_alert_for_custom_role_changes_enabled.py +5 -0
- prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled/logging_log_metric_filter_and_alert_for_project_ownership_changes_enabled.py +5 -0
- prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled/logging_log_metric_filter_and_alert_for_sql_instance_configuration_changes_enabled.py +5 -0
- prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled/logging_log_metric_filter_and_alert_for_vpc_firewall_rule_changes_enabled.py +5 -0
- prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled/logging_log_metric_filter_and_alert_for_vpc_network_changes_enabled.py +5 -0
- prowler/providers/gcp/services/logging/logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled/logging_log_metric_filter_and_alert_for_vpc_network_route_changes_enabled.py +5 -0
- prowler/providers/gcp/services/logging/logging_sink_created/logging_sink_created.py +5 -0
- prowler/providers/gcp/services/monitoring/monitoring_service.py +30 -2
- prowler/providers/iac/iac_provider.py +1 -1
- prowler/providers/llm/__init__.py +0 -0
- prowler/providers/llm/lib/__init__.py +0 -0
- prowler/providers/llm/lib/arguments/__init__.py +0 -0
- prowler/providers/llm/lib/arguments/arguments.py +13 -0
- prowler/providers/llm/llm_provider.py +518 -0
- prowler/providers/llm/models.py +27 -0
- prowler/providers/m365/exceptions/exceptions.py +0 -55
- prowler/providers/m365/lib/arguments/arguments.py +8 -4
- prowler/providers/m365/lib/powershell/m365_powershell.py +14 -156
- prowler/providers/m365/m365_provider.py +19 -117
- prowler/providers/m365/models.py +0 -3
- prowler/providers/m365/services/admincenter/admincenter_service.py +52 -23
- prowler/providers/m365/services/entra/entra_admin_users_phishing_resistant_mfa_enabled/entra_admin_users_phishing_resistant_mfa_enabled.py +19 -2
- prowler/providers/m365/services/entra/entra_service.py +58 -30
- prowler/providers/m365/services/sharepoint/sharepoint_service.py +24 -3
- prowler/providers/oraclecloud/__init__.py +0 -0
- prowler/providers/oraclecloud/config.py +61 -0
- prowler/providers/oraclecloud/exceptions/__init__.py +0 -0
- prowler/providers/oraclecloud/exceptions/exceptions.py +197 -0
- prowler/providers/oraclecloud/lib/__init__.py +0 -0
- prowler/providers/oraclecloud/lib/arguments/__init__.py +0 -0
- prowler/providers/oraclecloud/lib/arguments/arguments.py +123 -0
- prowler/providers/oraclecloud/lib/mutelist/__init__.py +0 -0
- prowler/providers/oraclecloud/lib/mutelist/mutelist.py +176 -0
- prowler/providers/oraclecloud/lib/service/__init__.py +0 -0
- prowler/providers/oraclecloud/lib/service/service.py +213 -0
- prowler/providers/oraclecloud/models.py +96 -0
- prowler/providers/oraclecloud/oci_provider.py +1038 -0
- prowler/providers/oraclecloud/services/__init__.py +0 -0
- prowler/providers/oraclecloud/services/analytics/__init__.py +0 -0
- prowler/providers/oraclecloud/services/analytics/analytics_client.py +6 -0
- prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/__init__.py +0 -0
- prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.metadata.json +36 -0
- prowler/providers/oraclecloud/services/analytics/analytics_instance_access_restricted/analytics_instance_access_restricted.py +48 -0
- prowler/providers/oraclecloud/services/analytics/analytics_service.py +99 -0
- prowler/providers/oraclecloud/services/audit/__init__.py +0 -0
- prowler/providers/oraclecloud/services/audit/audit_client.py +4 -0
- prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/__init__.py +0 -0
- prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days.metadata.json +37 -0
- prowler/providers/oraclecloud/services/audit/audit_log_retention_period_365_days/audit_log_retention_period_365_days.py +46 -0
- prowler/providers/oraclecloud/services/audit/audit_service.py +57 -0
- prowler/providers/oraclecloud/services/blockstorage/__init__.py +0 -0
- prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/__init__.py +0 -0
- prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk.metadata.json +37 -0
- prowler/providers/oraclecloud/services/blockstorage/blockstorage_block_volume_encrypted_with_cmk/blockstorage_block_volume_encrypted_with_cmk.py +39 -0
- prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/__init__.py +0 -0
- prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk.metadata.json +36 -0
- prowler/providers/oraclecloud/services/blockstorage/blockstorage_boot_volume_encrypted_with_cmk/blockstorage_boot_volume_encrypted_with_cmk.py +35 -0
- prowler/providers/oraclecloud/services/blockstorage/blockstorage_client.py +6 -0
- prowler/providers/oraclecloud/services/blockstorage/blockstorage_service.py +182 -0
- prowler/providers/oraclecloud/services/cloudguard/__init__.py +0 -0
- prowler/providers/oraclecloud/services/cloudguard/cloudguard_client.py +6 -0
- prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/__init__.py +0 -0
- prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled.metadata.json +36 -0
- prowler/providers/oraclecloud/services/cloudguard/cloudguard_enabled/cloudguard_enabled.py +39 -0
- prowler/providers/oraclecloud/services/cloudguard/cloudguard_service.py +63 -0
- prowler/providers/oraclecloud/services/compute/__init__.py +0 -0
- prowler/providers/oraclecloud/services/compute/compute_client.py +4 -0
- prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/__init__.py +0 -0
- prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled.metadata.json +37 -0
- prowler/providers/oraclecloud/services/compute/compute_instance_in_transit_encryption_enabled/compute_instance_in_transit_encryption_enabled.py +38 -0
- prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/__init__.py +0 -0
- prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled.metadata.json +37 -0
- prowler/providers/oraclecloud/services/compute/compute_instance_legacy_metadata_endpoint_disabled/compute_instance_legacy_metadata_endpoint_disabled.py +37 -0
- prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/__init__.py +0 -0
- prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled.metadata.json +37 -0
- prowler/providers/oraclecloud/services/compute/compute_instance_secure_boot_enabled/compute_instance_secure_boot_enabled.py +39 -0
- prowler/providers/oraclecloud/services/compute/compute_service.py +136 -0
- prowler/providers/oraclecloud/services/database/__init__.py +0 -0
- prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/__init__.py +0 -0
- prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted.metadata.json +36 -0
- prowler/providers/oraclecloud/services/database/database_autonomous_database_access_restricted/database_autonomous_database_access_restricted.py +40 -0
- prowler/providers/oraclecloud/services/database/database_client.py +6 -0
- prowler/providers/oraclecloud/services/database/database_service.py +79 -0
- prowler/providers/oraclecloud/services/events/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_client.py +4 -0
- prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_notification_topic_and_subscription_exists/events_notification_topic_and_subscription_exists.py +53 -0
- prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems.metadata.json +36 -0
- prowler/providers/oraclecloud/services/events/events_rule_cloudguard_problems/events_rule_cloudguard_problems.py +90 -0
- prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_rule_iam_group_changes/events_rule_iam_group_changes.py +67 -0
- prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_rule_iam_policy_changes/events_rule_iam_policy_changes.py +67 -0
- prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_rule_identity_provider_changes/events_rule_identity_provider_changes.py +67 -0
- prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_rule_idp_group_mapping_changes/events_rule_idp_group_mapping_changes.py +67 -0
- prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication.metadata.json +38 -0
- prowler/providers/oraclecloud/services/events/events_rule_local_user_authentication/events_rule_local_user_authentication.py +63 -0
- prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_rule_network_gateway_changes/events_rule_network_gateway_changes.py +88 -0
- prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_rule_network_security_group_changes/events_rule_network_security_group_changes.py +68 -0
- prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_rule_route_table_changes/events_rule_route_table_changes.py +68 -0
- prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_rule_security_list_changes/events_rule_security_list_changes.py +68 -0
- prowler/providers/oraclecloud/services/events/events_rule_user_changes/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_rule_user_changes/events_rule_user_changes.py +69 -0
- prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes.metadata.json +37 -0
- prowler/providers/oraclecloud/services/events/events_rule_vcn_changes/events_rule_vcn_changes.py +65 -0
- prowler/providers/oraclecloud/services/events/events_service.py +215 -0
- prowler/providers/oraclecloud/services/events/lib/__init__.py +0 -0
- prowler/providers/oraclecloud/services/events/lib/helpers.py +116 -0
- prowler/providers/oraclecloud/services/filestorage/__init__.py +0 -0
- prowler/providers/oraclecloud/services/filestorage/filestorage_client.py +6 -0
- prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/__init__.py +0 -0
- prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk.metadata.json +36 -0
- prowler/providers/oraclecloud/services/filestorage/filestorage_file_system_encrypted_with_cmk/filestorage_file_system_encrypted_with_cmk.py +39 -0
- prowler/providers/oraclecloud/services/filestorage/filestorage_service.py +96 -0
- prowler/providers/oraclecloud/services/identity/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_client.py +4 -0
- prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_iam_admins_cannot_update_tenancy_admins/identity_iam_admins_cannot_update_tenancy_admins.py +107 -0
- prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_instance_principal_used/identity_instance_principal_used.py +70 -0
- prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment.metadata.json +32 -0
- prowler/providers/oraclecloud/services/identity/identity_no_resources_in_root_compartment/identity_no_resources_in_root_compartment.py +51 -0
- prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists.metadata.json +32 -0
- prowler/providers/oraclecloud/services/identity/identity_non_root_compartment_exists/identity_non_root_compartment_exists.py +39 -0
- prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_password_policy_expires_within_365_days/identity_password_policy_expires_within_365_days.py +67 -0
- prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_password_policy_minimum_length_14/identity_password_policy_minimum_length_14.py +97 -0
- prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_password_policy_prevents_reuse/identity_password_policy_prevents_reuse.py +77 -0
- prowler/providers/oraclecloud/services/identity/identity_service.py +828 -0
- prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist.metadata.json +32 -0
- prowler/providers/oraclecloud/services/identity/identity_service_level_admins_exist/identity_service_level_admins_exist.py +81 -0
- prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_permissions_limited/identity_tenancy_admin_permissions_limited.py +81 -0
- prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_tenancy_admin_users_no_api_keys/identity_tenancy_admin_users_no_api_keys.py +49 -0
- prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days.metadata.json +37 -0
- prowler/providers/oraclecloud/services/identity/identity_user_api_keys_rotated_90_days/identity_user_api_keys_rotated_90_days.py +73 -0
- prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_user_auth_tokens_rotated_90_days/identity_user_auth_tokens_rotated_90_days.py +52 -0
- prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_user_customer_secret_keys_rotated_90_days/identity_user_customer_secret_keys_rotated_90_days.py +49 -0
- prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_user_db_passwords_rotated_90_days/identity_user_db_passwords_rotated_90_days.py +49 -0
- prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_user_mfa_enabled_console_access/identity_user_mfa_enabled_console_access.py +43 -0
- prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/__init__.py +0 -0
- prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address.metadata.json +36 -0
- prowler/providers/oraclecloud/services/identity/identity_user_valid_email_address/identity_user_valid_email_address.py +38 -0
- prowler/providers/oraclecloud/services/integration/__init__.py +0 -0
- prowler/providers/oraclecloud/services/integration/integration_client.py +8 -0
- prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/__init__.py +0 -0
- prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted.metadata.json +36 -0
- prowler/providers/oraclecloud/services/integration/integration_instance_access_restricted/integration_instance_access_restricted.py +48 -0
- prowler/providers/oraclecloud/services/integration/integration_service.py +92 -0
- prowler/providers/oraclecloud/services/kms/__init__.py +0 -0
- prowler/providers/oraclecloud/services/kms/kms_client.py +4 -0
- prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/__init__.py +0 -0
- prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled.metadata.json +36 -0
- prowler/providers/oraclecloud/services/kms/kms_key_rotation_enabled/kms_key_rotation_enabled.py +37 -0
- prowler/providers/oraclecloud/services/kms/kms_service.py +136 -0
- prowler/providers/oraclecloud/services/logging/__init__.py +0 -0
- prowler/providers/oraclecloud/services/logging/logging_client.py +6 -0
- prowler/providers/oraclecloud/services/logging/logging_service.py +189 -0
- prowler/providers/oraclecloud/services/network/__init__.py +0 -0
- prowler/providers/oraclecloud/services/network/network_client.py +4 -0
- prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/__init__.py +0 -0
- prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic.metadata.json +36 -0
- prowler/providers/oraclecloud/services/network/network_default_security_list_restricts_traffic/network_default_security_list_restricts_traffic.py +99 -0
- prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/__init__.py +0 -0
- prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port.metadata.json +36 -0
- prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_rdp_port/network_security_group_ingress_from_internet_to_rdp_port.py +65 -0
- prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/__init__.py +0 -0
- prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port.metadata.json +37 -0
- prowler/providers/oraclecloud/services/network/network_security_group_ingress_from_internet_to_ssh_port/network_security_group_ingress_from_internet_to_ssh_port.py +70 -0
- prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/__init__.py +0 -0
- prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port.metadata.json +36 -0
- prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_rdp_port/network_security_list_ingress_from_internet_to_rdp_port.py +62 -0
- prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/__init__.py +0 -0
- prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port.metadata.json +37 -0
- prowler/providers/oraclecloud/services/network/network_security_list_ingress_from_internet_to_ssh_port/network_security_list_ingress_from_internet_to_ssh_port.py +67 -0
- prowler/providers/oraclecloud/services/network/network_service.py +321 -0
- prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/__init__.py +0 -0
- prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled.metadata.json +36 -0
- prowler/providers/oraclecloud/services/network/network_vcn_subnet_flow_logs_enabled/network_vcn_subnet_flow_logs_enabled.py +66 -0
- prowler/providers/oraclecloud/services/objectstorage/__init__.py +0 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/__init__.py +0 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk.metadata.json +37 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_encrypted_with_cmk/objectstorage_bucket_encrypted_with_cmk.py +40 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/__init__.py +0 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled.metadata.json +32 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_logging_enabled/objectstorage_bucket_logging_enabled.py +68 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/__init__.py +0 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible.metadata.json +37 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_not_publicly_accessible/objectstorage_bucket_not_publicly_accessible.py +43 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/__init__.py +0 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled.metadata.json +37 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_bucket_versioning_enabled/objectstorage_bucket_versioning_enabled.py +38 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_client.py +6 -0
- prowler/providers/oraclecloud/services/objectstorage/objectstorage_service.py +138 -0
- {prowler_cloud-5.12.3.dist-info → prowler_cloud-5.13.0.dist-info}/METADATA +9 -33
- {prowler_cloud-5.12.3.dist-info → prowler_cloud-5.13.0.dist-info}/RECORD +528 -280
- {prowler_cloud-5.12.3.dist-info → prowler_cloud-5.13.0.dist-info}/LICENSE +0 -0
- {prowler_cloud-5.12.3.dist-info → prowler_cloud-5.13.0.dist-info}/WHEEL +0 -0
- {prowler_cloud-5.12.3.dist-info → prowler_cloud-5.13.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,828 @@
|
|
|
1
|
+
"""OCI Identity Service Module."""
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing import Optional
|
|
5
|
+
|
|
6
|
+
import oci
|
|
7
|
+
from pydantic import BaseModel
|
|
8
|
+
|
|
9
|
+
from prowler.lib.logger import logger
|
|
10
|
+
from prowler.providers.oraclecloud.lib.service.service import OCIService
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Identity(OCIService):
|
|
14
|
+
"""OCI Identity Service class to retrieve users, groups, policies, and authentication settings."""
|
|
15
|
+
|
|
16
|
+
def __init__(self, provider):
|
|
17
|
+
"""
|
|
18
|
+
Initialize the Identity service.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
provider: The OCI provider instance
|
|
22
|
+
"""
|
|
23
|
+
super().__init__("identity", provider)
|
|
24
|
+
self.users = []
|
|
25
|
+
self.groups = []
|
|
26
|
+
self.policies = []
|
|
27
|
+
self.dynamic_groups = []
|
|
28
|
+
self.domains = []
|
|
29
|
+
self.password_policy = None
|
|
30
|
+
self.root_compartment_resources = []
|
|
31
|
+
self.active_non_root_compartments = []
|
|
32
|
+
self.__threading_call__(self.__list_users__)
|
|
33
|
+
self.__threading_call__(self.__list_groups__)
|
|
34
|
+
self.__threading_call__(self.__list_policies__)
|
|
35
|
+
self.__threading_call__(self.__list_dynamic_groups__)
|
|
36
|
+
self.__threading_call__(self.__list_domains__)
|
|
37
|
+
self.__threading_call__(self.__list_domain_password_policies__)
|
|
38
|
+
self.__get_password_policy__()
|
|
39
|
+
self.__threading_call__(self.__search_root_compartment_resources__)
|
|
40
|
+
self.__threading_call__(self.__search_active_non_root_compartments__)
|
|
41
|
+
|
|
42
|
+
def __get_client__(self, region):
|
|
43
|
+
"""
|
|
44
|
+
Get the Identity client for a region.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
region: Region key
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
Identity client instance
|
|
51
|
+
"""
|
|
52
|
+
client_region = self.regional_clients.get(region)
|
|
53
|
+
if client_region:
|
|
54
|
+
return self._create_oci_client(oci.identity.IdentityClient)
|
|
55
|
+
return None
|
|
56
|
+
|
|
57
|
+
def __list_users__(self, regional_client):
|
|
58
|
+
"""
|
|
59
|
+
List all IAM users in the tenancy.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
regional_client: Regional OCI client
|
|
63
|
+
"""
|
|
64
|
+
try:
|
|
65
|
+
# Identity is a global service, use home region
|
|
66
|
+
if regional_client.region not in self.provider.identity.region:
|
|
67
|
+
return
|
|
68
|
+
|
|
69
|
+
identity_client = self._create_oci_client(oci.identity.IdentityClient)
|
|
70
|
+
|
|
71
|
+
logger.info("Identity - Listing Users...")
|
|
72
|
+
|
|
73
|
+
for compartment in self.audited_compartments:
|
|
74
|
+
try:
|
|
75
|
+
users = oci.pagination.list_call_get_all_results(
|
|
76
|
+
identity_client.list_users, compartment_id=compartment.id
|
|
77
|
+
).data
|
|
78
|
+
|
|
79
|
+
for user in users:
|
|
80
|
+
if user.lifecycle_state != "DELETED":
|
|
81
|
+
# Get user API keys
|
|
82
|
+
api_keys = self.__list_user_api_keys__(
|
|
83
|
+
identity_client, user.id
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# Get user auth tokens
|
|
87
|
+
auth_tokens = self.__list_user_auth_tokens__(
|
|
88
|
+
identity_client, user.id
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Get user customer secret keys
|
|
92
|
+
customer_secret_keys = (
|
|
93
|
+
self.__list_user_customer_secret_keys__(
|
|
94
|
+
identity_client, user.id
|
|
95
|
+
)
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
# Get user database passwords
|
|
99
|
+
db_passwords = self.__list_user_db_passwords__(
|
|
100
|
+
identity_client, user.id
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
# Get user groups
|
|
104
|
+
user_groups = self.__get_user_groups__(
|
|
105
|
+
identity_client, user.id, compartment.id
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
# Check if user can use API keys
|
|
109
|
+
can_use_api_keys = (
|
|
110
|
+
user.capabilities.can_use_api_keys
|
|
111
|
+
if hasattr(user, "capabilities")
|
|
112
|
+
else True
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# Check if console password is enabled
|
|
116
|
+
can_use_console_password = (
|
|
117
|
+
user.capabilities.can_use_console_password
|
|
118
|
+
if hasattr(user, "capabilities")
|
|
119
|
+
else False
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
# Check MFA status
|
|
123
|
+
is_mfa_activated = (
|
|
124
|
+
user.is_mfa_activated
|
|
125
|
+
if hasattr(user, "is_mfa_activated")
|
|
126
|
+
else False
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
self.users.append(
|
|
130
|
+
User(
|
|
131
|
+
id=user.id,
|
|
132
|
+
name=user.name,
|
|
133
|
+
description=(
|
|
134
|
+
user.description or ""
|
|
135
|
+
if hasattr(user, "description")
|
|
136
|
+
else ""
|
|
137
|
+
),
|
|
138
|
+
email=(
|
|
139
|
+
user.email or ""
|
|
140
|
+
if hasattr(user, "email")
|
|
141
|
+
else ""
|
|
142
|
+
),
|
|
143
|
+
email_verified=(
|
|
144
|
+
user.email_verified
|
|
145
|
+
if hasattr(user, "email_verified")
|
|
146
|
+
else False
|
|
147
|
+
),
|
|
148
|
+
compartment_id=compartment.id,
|
|
149
|
+
time_created=user.time_created,
|
|
150
|
+
lifecycle_state=user.lifecycle_state,
|
|
151
|
+
can_use_api_keys=can_use_api_keys,
|
|
152
|
+
can_use_console_password=can_use_console_password,
|
|
153
|
+
is_mfa_activated=is_mfa_activated,
|
|
154
|
+
api_keys=api_keys,
|
|
155
|
+
auth_tokens=auth_tokens,
|
|
156
|
+
customer_secret_keys=customer_secret_keys,
|
|
157
|
+
db_passwords=db_passwords,
|
|
158
|
+
groups=user_groups,
|
|
159
|
+
region=regional_client.region,
|
|
160
|
+
)
|
|
161
|
+
)
|
|
162
|
+
except Exception as error:
|
|
163
|
+
logger.error(
|
|
164
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
165
|
+
)
|
|
166
|
+
continue
|
|
167
|
+
except Exception as error:
|
|
168
|
+
logger.error(
|
|
169
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
def __list_user_api_keys__(self, identity_client, user_id):
|
|
173
|
+
"""List API keys for a user."""
|
|
174
|
+
try:
|
|
175
|
+
api_keys = []
|
|
176
|
+
api_keys_data = oci.pagination.list_call_get_all_results(
|
|
177
|
+
identity_client.list_api_keys, user_id=user_id
|
|
178
|
+
).data
|
|
179
|
+
|
|
180
|
+
for key in api_keys_data:
|
|
181
|
+
api_keys.append(
|
|
182
|
+
ApiKey(
|
|
183
|
+
key_id=key.key_id,
|
|
184
|
+
fingerprint=key.fingerprint,
|
|
185
|
+
lifecycle_state=key.lifecycle_state,
|
|
186
|
+
time_created=key.time_created,
|
|
187
|
+
user_id=user_id,
|
|
188
|
+
)
|
|
189
|
+
)
|
|
190
|
+
return api_keys
|
|
191
|
+
except Exception as error:
|
|
192
|
+
logger.error(
|
|
193
|
+
f"Identity - Error listing API keys for user {user_id}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
194
|
+
)
|
|
195
|
+
return []
|
|
196
|
+
|
|
197
|
+
def __list_user_auth_tokens__(self, identity_client, user_id):
|
|
198
|
+
"""List auth tokens for a user."""
|
|
199
|
+
try:
|
|
200
|
+
auth_tokens = []
|
|
201
|
+
auth_tokens_data = oci.pagination.list_call_get_all_results(
|
|
202
|
+
identity_client.list_auth_tokens, user_id=user_id
|
|
203
|
+
).data
|
|
204
|
+
|
|
205
|
+
for token in auth_tokens_data:
|
|
206
|
+
auth_tokens.append(
|
|
207
|
+
AuthToken(
|
|
208
|
+
id=token.id,
|
|
209
|
+
description=(
|
|
210
|
+
token.description if hasattr(token, "description") else ""
|
|
211
|
+
),
|
|
212
|
+
lifecycle_state=token.lifecycle_state,
|
|
213
|
+
time_created=token.time_created,
|
|
214
|
+
time_expires=(
|
|
215
|
+
token.time_expires
|
|
216
|
+
if hasattr(token, "time_expires")
|
|
217
|
+
else None
|
|
218
|
+
),
|
|
219
|
+
user_id=user_id,
|
|
220
|
+
)
|
|
221
|
+
)
|
|
222
|
+
return auth_tokens
|
|
223
|
+
except Exception as error:
|
|
224
|
+
logger.error(
|
|
225
|
+
f"Identity - Error listing auth tokens for user {user_id}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
226
|
+
)
|
|
227
|
+
return []
|
|
228
|
+
|
|
229
|
+
def __list_user_customer_secret_keys__(self, identity_client, user_id):
|
|
230
|
+
"""List customer secret keys for a user."""
|
|
231
|
+
try:
|
|
232
|
+
customer_secret_keys = []
|
|
233
|
+
keys_data = oci.pagination.list_call_get_all_results(
|
|
234
|
+
identity_client.list_customer_secret_keys, user_id=user_id
|
|
235
|
+
).data
|
|
236
|
+
|
|
237
|
+
for key in keys_data:
|
|
238
|
+
customer_secret_keys.append(
|
|
239
|
+
CustomerSecretKey(
|
|
240
|
+
id=key.id,
|
|
241
|
+
display_name=(
|
|
242
|
+
key.display_name if hasattr(key, "display_name") else ""
|
|
243
|
+
),
|
|
244
|
+
lifecycle_state=key.lifecycle_state,
|
|
245
|
+
time_created=key.time_created,
|
|
246
|
+
time_expires=(
|
|
247
|
+
key.time_expires if hasattr(key, "time_expires") else None
|
|
248
|
+
),
|
|
249
|
+
user_id=user_id,
|
|
250
|
+
)
|
|
251
|
+
)
|
|
252
|
+
return customer_secret_keys
|
|
253
|
+
except Exception as error:
|
|
254
|
+
logger.error(
|
|
255
|
+
f"Identity - Error listing customer secret keys for user {user_id}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
256
|
+
)
|
|
257
|
+
return []
|
|
258
|
+
|
|
259
|
+
def __list_user_db_passwords__(self, identity_client, user_id):
|
|
260
|
+
"""List database passwords for a user."""
|
|
261
|
+
try:
|
|
262
|
+
db_passwords = []
|
|
263
|
+
passwords_data = oci.pagination.list_call_get_all_results(
|
|
264
|
+
identity_client.list_db_credentials, user_id=user_id
|
|
265
|
+
).data
|
|
266
|
+
|
|
267
|
+
for password in passwords_data:
|
|
268
|
+
db_passwords.append(
|
|
269
|
+
DbPassword(
|
|
270
|
+
id=password.id,
|
|
271
|
+
description=(
|
|
272
|
+
password.description
|
|
273
|
+
if hasattr(password, "description") and password.description
|
|
274
|
+
else None
|
|
275
|
+
),
|
|
276
|
+
lifecycle_state=password.lifecycle_state,
|
|
277
|
+
time_created=password.time_created,
|
|
278
|
+
time_expires=(
|
|
279
|
+
password.time_expires
|
|
280
|
+
if hasattr(password, "time_expires")
|
|
281
|
+
else None
|
|
282
|
+
),
|
|
283
|
+
user_id=user_id,
|
|
284
|
+
)
|
|
285
|
+
)
|
|
286
|
+
return db_passwords
|
|
287
|
+
except Exception as error:
|
|
288
|
+
logger.error(
|
|
289
|
+
f"Identity - Error listing database passwords for user {user_id}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
290
|
+
)
|
|
291
|
+
return []
|
|
292
|
+
|
|
293
|
+
def __get_user_groups__(self, identity_client, user_id, compartment_id):
|
|
294
|
+
"""Get groups for a user."""
|
|
295
|
+
try:
|
|
296
|
+
groups = []
|
|
297
|
+
user_group_memberships = oci.pagination.list_call_get_all_results(
|
|
298
|
+
identity_client.list_user_group_memberships,
|
|
299
|
+
compartment_id=compartment_id,
|
|
300
|
+
user_id=user_id,
|
|
301
|
+
).data
|
|
302
|
+
|
|
303
|
+
for membership in user_group_memberships:
|
|
304
|
+
if membership.lifecycle_state != "DELETED":
|
|
305
|
+
groups.append(membership.group_id)
|
|
306
|
+
return groups
|
|
307
|
+
except Exception as error:
|
|
308
|
+
logger.error(
|
|
309
|
+
f"Identity - Error getting groups for user {user_id}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
310
|
+
)
|
|
311
|
+
return []
|
|
312
|
+
|
|
313
|
+
def __list_groups__(self, regional_client):
|
|
314
|
+
"""List all IAM groups."""
|
|
315
|
+
try:
|
|
316
|
+
if regional_client.region not in self.provider.identity.region:
|
|
317
|
+
return
|
|
318
|
+
|
|
319
|
+
identity_client = self._create_oci_client(oci.identity.IdentityClient)
|
|
320
|
+
|
|
321
|
+
logger.info("Identity - Listing Groups...")
|
|
322
|
+
|
|
323
|
+
for compartment in self.audited_compartments:
|
|
324
|
+
try:
|
|
325
|
+
groups = oci.pagination.list_call_get_all_results(
|
|
326
|
+
identity_client.list_groups, compartment_id=compartment.id
|
|
327
|
+
).data
|
|
328
|
+
|
|
329
|
+
for group in groups:
|
|
330
|
+
if group.lifecycle_state != "DELETED":
|
|
331
|
+
self.groups.append(
|
|
332
|
+
Group(
|
|
333
|
+
id=group.id,
|
|
334
|
+
name=group.name,
|
|
335
|
+
description=(
|
|
336
|
+
group.description
|
|
337
|
+
if hasattr(group, "description")
|
|
338
|
+
else ""
|
|
339
|
+
),
|
|
340
|
+
compartment_id=compartment.id,
|
|
341
|
+
time_created=group.time_created,
|
|
342
|
+
lifecycle_state=group.lifecycle_state,
|
|
343
|
+
region=regional_client.region,
|
|
344
|
+
)
|
|
345
|
+
)
|
|
346
|
+
except Exception as error:
|
|
347
|
+
logger.error(
|
|
348
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
349
|
+
)
|
|
350
|
+
continue
|
|
351
|
+
except Exception as error:
|
|
352
|
+
logger.error(
|
|
353
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
def __list_policies__(self, regional_client):
|
|
357
|
+
"""List all IAM policies."""
|
|
358
|
+
try:
|
|
359
|
+
if regional_client.region not in self.provider.identity.region:
|
|
360
|
+
return
|
|
361
|
+
|
|
362
|
+
identity_client = self._create_oci_client(oci.identity.IdentityClient)
|
|
363
|
+
|
|
364
|
+
logger.info("Identity - Listing Policies...")
|
|
365
|
+
|
|
366
|
+
for compartment in self.audited_compartments:
|
|
367
|
+
try:
|
|
368
|
+
policies = oci.pagination.list_call_get_all_results(
|
|
369
|
+
identity_client.list_policies, compartment_id=compartment.id
|
|
370
|
+
).data
|
|
371
|
+
|
|
372
|
+
for policy in policies:
|
|
373
|
+
if policy.lifecycle_state != "DELETED":
|
|
374
|
+
self.policies.append(
|
|
375
|
+
Policy(
|
|
376
|
+
id=policy.id,
|
|
377
|
+
name=policy.name,
|
|
378
|
+
description=(
|
|
379
|
+
policy.description
|
|
380
|
+
if hasattr(policy, "description")
|
|
381
|
+
else ""
|
|
382
|
+
),
|
|
383
|
+
compartment_id=compartment.id,
|
|
384
|
+
statements=policy.statements,
|
|
385
|
+
time_created=policy.time_created,
|
|
386
|
+
lifecycle_state=policy.lifecycle_state,
|
|
387
|
+
region=regional_client.region,
|
|
388
|
+
)
|
|
389
|
+
)
|
|
390
|
+
except Exception as error:
|
|
391
|
+
logger.error(
|
|
392
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
393
|
+
)
|
|
394
|
+
continue
|
|
395
|
+
except Exception as error:
|
|
396
|
+
logger.error(
|
|
397
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
398
|
+
)
|
|
399
|
+
|
|
400
|
+
def __list_dynamic_groups__(self, regional_client):
|
|
401
|
+
"""List all dynamic groups in the tenancy."""
|
|
402
|
+
try:
|
|
403
|
+
# Dynamic groups are only in the home region
|
|
404
|
+
if regional_client.region not in self.provider.identity.region:
|
|
405
|
+
return
|
|
406
|
+
|
|
407
|
+
identity_client = self._create_oci_client(oci.identity.IdentityClient)
|
|
408
|
+
|
|
409
|
+
logger.info("Identity - Listing Dynamic Groups...")
|
|
410
|
+
|
|
411
|
+
try:
|
|
412
|
+
dynamic_groups = oci.pagination.list_call_get_all_results(
|
|
413
|
+
identity_client.list_dynamic_groups,
|
|
414
|
+
compartment_id=self.audited_tenancy,
|
|
415
|
+
).data
|
|
416
|
+
|
|
417
|
+
for dynamic_group in dynamic_groups:
|
|
418
|
+
if dynamic_group.lifecycle_state != "DELETED":
|
|
419
|
+
self.dynamic_groups.append(
|
|
420
|
+
DynamicGroup(
|
|
421
|
+
id=dynamic_group.id,
|
|
422
|
+
name=dynamic_group.name,
|
|
423
|
+
description=(
|
|
424
|
+
dynamic_group.description or ""
|
|
425
|
+
if hasattr(dynamic_group, "description")
|
|
426
|
+
else ""
|
|
427
|
+
),
|
|
428
|
+
compartment_id=self.audited_tenancy,
|
|
429
|
+
matching_rule=(
|
|
430
|
+
dynamic_group.matching_rule
|
|
431
|
+
if hasattr(dynamic_group, "matching_rule")
|
|
432
|
+
else ""
|
|
433
|
+
),
|
|
434
|
+
time_created=dynamic_group.time_created,
|
|
435
|
+
lifecycle_state=dynamic_group.lifecycle_state,
|
|
436
|
+
region=regional_client.region,
|
|
437
|
+
)
|
|
438
|
+
)
|
|
439
|
+
except Exception as error:
|
|
440
|
+
logger.error(
|
|
441
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
442
|
+
)
|
|
443
|
+
except Exception as error:
|
|
444
|
+
logger.error(
|
|
445
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
446
|
+
)
|
|
447
|
+
|
|
448
|
+
def __list_domains__(self, regional_client):
|
|
449
|
+
"""List all identity domains."""
|
|
450
|
+
try:
|
|
451
|
+
# Domains are only in the home region
|
|
452
|
+
if regional_client.region not in self.provider.identity.region:
|
|
453
|
+
return
|
|
454
|
+
|
|
455
|
+
identity_client = self._create_oci_client(oci.identity.IdentityClient)
|
|
456
|
+
|
|
457
|
+
logger.info("Identity - Listing Identity Domains...")
|
|
458
|
+
|
|
459
|
+
try:
|
|
460
|
+
# List all domains in the tenancy
|
|
461
|
+
for compartment in self.audited_compartments:
|
|
462
|
+
domains = oci.pagination.list_call_get_all_results(
|
|
463
|
+
identity_client.list_domains,
|
|
464
|
+
compartment_id=compartment.id,
|
|
465
|
+
lifecycle_state="ACTIVE",
|
|
466
|
+
).data
|
|
467
|
+
|
|
468
|
+
for domain in domains:
|
|
469
|
+
self.domains.append(
|
|
470
|
+
IdentityDomain(
|
|
471
|
+
id=domain.id,
|
|
472
|
+
display_name=domain.display_name,
|
|
473
|
+
description=domain.description or "",
|
|
474
|
+
url=domain.url,
|
|
475
|
+
home_region=domain.home_region,
|
|
476
|
+
compartment_id=compartment.id,
|
|
477
|
+
lifecycle_state=domain.lifecycle_state,
|
|
478
|
+
time_created=domain.time_created,
|
|
479
|
+
region=regional_client.region,
|
|
480
|
+
password_policies=[],
|
|
481
|
+
)
|
|
482
|
+
)
|
|
483
|
+
|
|
484
|
+
except Exception as error:
|
|
485
|
+
logger.error(
|
|
486
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
487
|
+
)
|
|
488
|
+
|
|
489
|
+
except Exception as error:
|
|
490
|
+
logger.error(
|
|
491
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
492
|
+
)
|
|
493
|
+
|
|
494
|
+
def __list_domain_password_policies__(self, regional_client):
|
|
495
|
+
"""List password policies for all identity domains."""
|
|
496
|
+
try:
|
|
497
|
+
# Password policies are only in the home region
|
|
498
|
+
if regional_client.region not in self.provider.identity.region:
|
|
499
|
+
return
|
|
500
|
+
|
|
501
|
+
logger.info("Identity - Listing Domain Password Policies...")
|
|
502
|
+
|
|
503
|
+
for domain in self.domains:
|
|
504
|
+
try:
|
|
505
|
+
# Create Identity Domains client for this domain
|
|
506
|
+
if self.session_signer:
|
|
507
|
+
domain_client = oci.identity_domains.IdentityDomainsClient(
|
|
508
|
+
config=self.session_config,
|
|
509
|
+
signer=self.session_signer,
|
|
510
|
+
service_endpoint=domain.url,
|
|
511
|
+
)
|
|
512
|
+
else:
|
|
513
|
+
domain_client = oci.identity_domains.IdentityDomainsClient(
|
|
514
|
+
config=self.session_config, service_endpoint=domain.url
|
|
515
|
+
)
|
|
516
|
+
|
|
517
|
+
# List password policies in the domain
|
|
518
|
+
policies_response = domain_client.list_password_policies()
|
|
519
|
+
|
|
520
|
+
for policy in policies_response.data.resources:
|
|
521
|
+
domain.password_policies.append(
|
|
522
|
+
DomainPasswordPolicy(
|
|
523
|
+
id=policy.id,
|
|
524
|
+
name=policy.name,
|
|
525
|
+
description=policy.description or "",
|
|
526
|
+
min_length=policy.min_length,
|
|
527
|
+
password_expires_after=policy.password_expires_after,
|
|
528
|
+
num_passwords_in_history=policy.num_passwords_in_history,
|
|
529
|
+
password_expire_warning=policy.password_expire_warning,
|
|
530
|
+
min_password_age=policy.min_password_age,
|
|
531
|
+
)
|
|
532
|
+
)
|
|
533
|
+
|
|
534
|
+
except Exception as error:
|
|
535
|
+
logger.error(
|
|
536
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
537
|
+
)
|
|
538
|
+
|
|
539
|
+
except Exception as error:
|
|
540
|
+
logger.error(
|
|
541
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
542
|
+
)
|
|
543
|
+
|
|
544
|
+
def __get_password_policy__(self):
|
|
545
|
+
"""Get the password policy for the tenancy."""
|
|
546
|
+
try:
|
|
547
|
+
identity_client = self._create_oci_client(oci.identity.IdentityClient)
|
|
548
|
+
|
|
549
|
+
logger.info("Identity - Getting Password Policy...")
|
|
550
|
+
|
|
551
|
+
password_policy = identity_client.get_authentication_policy(
|
|
552
|
+
compartment_id=self.audited_tenancy
|
|
553
|
+
).data.password_policy
|
|
554
|
+
|
|
555
|
+
self.password_policy = PasswordPolicy(
|
|
556
|
+
is_lowercase_characters_required=password_policy.is_lowercase_characters_required,
|
|
557
|
+
is_uppercase_characters_required=password_policy.is_uppercase_characters_required,
|
|
558
|
+
is_numeric_characters_required=password_policy.is_numeric_characters_required,
|
|
559
|
+
is_special_characters_required=password_policy.is_special_characters_required,
|
|
560
|
+
is_username_containment_allowed=password_policy.is_username_containment_allowed,
|
|
561
|
+
minimum_password_length=password_policy.minimum_password_length,
|
|
562
|
+
)
|
|
563
|
+
except Exception as error:
|
|
564
|
+
logger.error(
|
|
565
|
+
f"Identity - Error getting password policy: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
566
|
+
)
|
|
567
|
+
|
|
568
|
+
def __search_root_compartment_resources__(self, regional_client):
|
|
569
|
+
"""Search for resources in the root compartment using OCI Resource Search."""
|
|
570
|
+
try:
|
|
571
|
+
# Search is a global service, use home region
|
|
572
|
+
if regional_client.region not in self.provider.identity.region:
|
|
573
|
+
return
|
|
574
|
+
|
|
575
|
+
logger.info("Identity - Searching for resources in root compartment...")
|
|
576
|
+
|
|
577
|
+
# Create search client using the helper method for proper authentication
|
|
578
|
+
search_client = self._create_oci_client(
|
|
579
|
+
oci.resource_search.ResourceSearchClient
|
|
580
|
+
)
|
|
581
|
+
|
|
582
|
+
# Query to search for resources in root compartment
|
|
583
|
+
# This covers VCN, instances, boot volumes, volumes, file systems, buckets,
|
|
584
|
+
# autonomous databases, databases, and DB systems
|
|
585
|
+
query_text = f"query VCN, instance, bootvolume, volume, filesystem, bucket, autonomousdatabase, database, dbsystem resources where compartmentId = '{self.audited_tenancy}'"
|
|
586
|
+
|
|
587
|
+
# Execute structured search
|
|
588
|
+
search_response = search_client.search_resources(
|
|
589
|
+
search_details=oci.resource_search.models.StructuredSearchDetails(
|
|
590
|
+
type="Structured", query=query_text
|
|
591
|
+
)
|
|
592
|
+
)
|
|
593
|
+
|
|
594
|
+
if search_response.data and search_response.data.items:
|
|
595
|
+
for resource in search_response.data.items:
|
|
596
|
+
self.root_compartment_resources.append(
|
|
597
|
+
RootCompartmentResource(
|
|
598
|
+
display_name=resource.display_name or "",
|
|
599
|
+
identifier=resource.identifier,
|
|
600
|
+
resource_type=resource.resource_type,
|
|
601
|
+
compartment_id=resource.compartment_id,
|
|
602
|
+
availability_domain=getattr(
|
|
603
|
+
resource, "availability_domain", None
|
|
604
|
+
),
|
|
605
|
+
lifecycle_state=getattr(resource, "lifecycle_state", None),
|
|
606
|
+
time_created=getattr(resource, "time_created", None),
|
|
607
|
+
)
|
|
608
|
+
)
|
|
609
|
+
|
|
610
|
+
except Exception as error:
|
|
611
|
+
logger.error(
|
|
612
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
613
|
+
)
|
|
614
|
+
|
|
615
|
+
def __search_active_non_root_compartments__(self, regional_client):
|
|
616
|
+
"""Search for active non-root compartments using OCI Resource Search."""
|
|
617
|
+
try:
|
|
618
|
+
# Search is a global service, use home region
|
|
619
|
+
if regional_client.region not in self.provider.identity.region:
|
|
620
|
+
return
|
|
621
|
+
|
|
622
|
+
logger.info("Identity - Searching for active non-root compartments...")
|
|
623
|
+
|
|
624
|
+
# Create search client using the helper method for proper authentication
|
|
625
|
+
search_client = self._create_oci_client(
|
|
626
|
+
oci.resource_search.ResourceSearchClient
|
|
627
|
+
)
|
|
628
|
+
|
|
629
|
+
# Query to search for active compartments in the tenancy (excluding root)
|
|
630
|
+
query_text = f"query compartment resources where (compartmentId = '{self.audited_tenancy}' && lifecycleState = 'ACTIVE')"
|
|
631
|
+
|
|
632
|
+
# Execute structured search
|
|
633
|
+
search_response = search_client.search_resources(
|
|
634
|
+
search_details=oci.resource_search.models.StructuredSearchDetails(
|
|
635
|
+
type="Structured", query=query_text
|
|
636
|
+
)
|
|
637
|
+
)
|
|
638
|
+
|
|
639
|
+
if search_response.data and search_response.data.items:
|
|
640
|
+
for compartment in search_response.data.items:
|
|
641
|
+
self.active_non_root_compartments.append(
|
|
642
|
+
ActiveCompartment(
|
|
643
|
+
display_name=compartment.display_name or "",
|
|
644
|
+
identifier=compartment.identifier,
|
|
645
|
+
compartment_id=compartment.compartment_id,
|
|
646
|
+
lifecycle_state=getattr(
|
|
647
|
+
compartment, "lifecycle_state", None
|
|
648
|
+
),
|
|
649
|
+
time_created=getattr(compartment, "time_created", None),
|
|
650
|
+
)
|
|
651
|
+
)
|
|
652
|
+
|
|
653
|
+
except Exception as error:
|
|
654
|
+
logger.error(
|
|
655
|
+
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
|
|
656
|
+
)
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
# Service Models
|
|
660
|
+
class ApiKey(BaseModel):
|
|
661
|
+
"""OCI API Key model."""
|
|
662
|
+
|
|
663
|
+
key_id: str
|
|
664
|
+
fingerprint: str
|
|
665
|
+
lifecycle_state: str
|
|
666
|
+
time_created: datetime
|
|
667
|
+
user_id: str
|
|
668
|
+
|
|
669
|
+
|
|
670
|
+
class AuthToken(BaseModel):
|
|
671
|
+
"""OCI Auth Token model."""
|
|
672
|
+
|
|
673
|
+
id: str
|
|
674
|
+
description: str
|
|
675
|
+
lifecycle_state: str
|
|
676
|
+
time_created: datetime
|
|
677
|
+
time_expires: Optional[datetime]
|
|
678
|
+
user_id: str
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
class CustomerSecretKey(BaseModel):
|
|
682
|
+
"""OCI Customer Secret Key model."""
|
|
683
|
+
|
|
684
|
+
id: str
|
|
685
|
+
display_name: str
|
|
686
|
+
lifecycle_state: str
|
|
687
|
+
time_created: datetime
|
|
688
|
+
time_expires: Optional[datetime]
|
|
689
|
+
user_id: str
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
class DbPassword(BaseModel):
|
|
693
|
+
"""OCI Database Password model."""
|
|
694
|
+
|
|
695
|
+
id: str
|
|
696
|
+
description: Optional[str]
|
|
697
|
+
lifecycle_state: str
|
|
698
|
+
time_created: datetime
|
|
699
|
+
time_expires: Optional[datetime]
|
|
700
|
+
user_id: str
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
class User(BaseModel):
|
|
704
|
+
"""OCI IAM User model."""
|
|
705
|
+
|
|
706
|
+
id: str
|
|
707
|
+
name: str
|
|
708
|
+
description: str
|
|
709
|
+
email: str
|
|
710
|
+
email_verified: bool
|
|
711
|
+
compartment_id: str
|
|
712
|
+
time_created: datetime
|
|
713
|
+
lifecycle_state: str
|
|
714
|
+
can_use_api_keys: bool
|
|
715
|
+
can_use_console_password: bool
|
|
716
|
+
is_mfa_activated: bool
|
|
717
|
+
api_keys: list[ApiKey] = []
|
|
718
|
+
auth_tokens: list[AuthToken] = []
|
|
719
|
+
customer_secret_keys: list[CustomerSecretKey] = []
|
|
720
|
+
db_passwords: list[DbPassword] = []
|
|
721
|
+
groups: list[str] = []
|
|
722
|
+
region: str
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
class Group(BaseModel):
|
|
726
|
+
"""OCI IAM Group model."""
|
|
727
|
+
|
|
728
|
+
id: str
|
|
729
|
+
name: str
|
|
730
|
+
description: str
|
|
731
|
+
compartment_id: str
|
|
732
|
+
time_created: datetime
|
|
733
|
+
lifecycle_state: str
|
|
734
|
+
region: str
|
|
735
|
+
|
|
736
|
+
|
|
737
|
+
class Policy(BaseModel):
|
|
738
|
+
"""OCI IAM Policy model."""
|
|
739
|
+
|
|
740
|
+
id: str
|
|
741
|
+
name: str
|
|
742
|
+
description: str
|
|
743
|
+
compartment_id: str
|
|
744
|
+
statements: list[str]
|
|
745
|
+
time_created: datetime
|
|
746
|
+
lifecycle_state: str
|
|
747
|
+
region: str
|
|
748
|
+
|
|
749
|
+
|
|
750
|
+
class PasswordPolicy(BaseModel):
|
|
751
|
+
"""OCI Password Policy model."""
|
|
752
|
+
|
|
753
|
+
is_lowercase_characters_required: bool
|
|
754
|
+
is_uppercase_characters_required: bool
|
|
755
|
+
is_numeric_characters_required: bool
|
|
756
|
+
is_special_characters_required: bool
|
|
757
|
+
is_username_containment_allowed: bool
|
|
758
|
+
minimum_password_length: int
|
|
759
|
+
|
|
760
|
+
|
|
761
|
+
class AuthenticationPolicy(BaseModel):
|
|
762
|
+
"""OCI Authentication Policy model."""
|
|
763
|
+
|
|
764
|
+
compartment_id: str
|
|
765
|
+
password_policy: Optional[PasswordPolicy]
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
class DynamicGroup(BaseModel):
|
|
769
|
+
"""OCI Dynamic Group model."""
|
|
770
|
+
|
|
771
|
+
id: str
|
|
772
|
+
name: str
|
|
773
|
+
description: str
|
|
774
|
+
compartment_id: str
|
|
775
|
+
matching_rule: str
|
|
776
|
+
time_created: datetime
|
|
777
|
+
lifecycle_state: str
|
|
778
|
+
region: str
|
|
779
|
+
|
|
780
|
+
|
|
781
|
+
class DomainPasswordPolicy(BaseModel):
|
|
782
|
+
"""OCI Identity Domain Password Policy model."""
|
|
783
|
+
|
|
784
|
+
id: str
|
|
785
|
+
name: str
|
|
786
|
+
description: str
|
|
787
|
+
min_length: Optional[int]
|
|
788
|
+
password_expires_after: Optional[int]
|
|
789
|
+
num_passwords_in_history: Optional[int]
|
|
790
|
+
password_expire_warning: Optional[int]
|
|
791
|
+
min_password_age: Optional[int]
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
class IdentityDomain(BaseModel):
|
|
795
|
+
"""OCI Identity Domain model."""
|
|
796
|
+
|
|
797
|
+
id: str
|
|
798
|
+
display_name: str
|
|
799
|
+
description: str
|
|
800
|
+
url: str
|
|
801
|
+
home_region: str
|
|
802
|
+
compartment_id: str
|
|
803
|
+
lifecycle_state: str
|
|
804
|
+
time_created: datetime
|
|
805
|
+
region: str
|
|
806
|
+
password_policies: list[DomainPasswordPolicy]
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
class RootCompartmentResource(BaseModel):
|
|
810
|
+
"""OCI Resource found in root compartment via search."""
|
|
811
|
+
|
|
812
|
+
display_name: str
|
|
813
|
+
identifier: str
|
|
814
|
+
resource_type: str
|
|
815
|
+
compartment_id: str
|
|
816
|
+
availability_domain: Optional[str]
|
|
817
|
+
lifecycle_state: Optional[str]
|
|
818
|
+
time_created: Optional[datetime]
|
|
819
|
+
|
|
820
|
+
|
|
821
|
+
class ActiveCompartment(BaseModel):
|
|
822
|
+
"""OCI Active non-root compartment found via search."""
|
|
823
|
+
|
|
824
|
+
display_name: str
|
|
825
|
+
identifier: str
|
|
826
|
+
compartment_id: str
|
|
827
|
+
lifecycle_state: Optional[str]
|
|
828
|
+
time_created: Optional[datetime]
|