From 36fc575e40a8d9c48eb659532e3001a83b707614 Mon Sep 17 00:00:00 2001 From: Nacho Rivera Date: Mon, 15 Jan 2024 16:55:53 +0100 Subject: [PATCH] feat(AwsProvider): include new structure for AWS provider (#3252) Co-authored-by: Sergio Garcia <38561120+sergargar@users.noreply.github.com> Co-authored-by: Sergio Garcia --- prowler/__main__.py | 9 +- prowler/lib/check/check.py | 12 +- prowler/lib/outputs/compliance/compliance.py | 40 +- prowler/lib/outputs/models.py | 4 +- prowler/providers/aws/aws_provider.py | 4 +- prowler/providers/aws/aws_provider_new.py | 621 ++++++++++++++++++ .../aws/lib/audit_info/audit_info.py | 4 +- .../providers/aws/lib/audit_info/models.py | 14 +- .../aws/lib/credentials/credentials.py | 4 +- .../aws/lib/organizations/organizations.py | 6 +- prowler/providers/aws/lib/service/service.py | 30 +- .../accessanalyzer/accessanalyzer_client.py | 4 +- .../accessanalyzer/accessanalyzer_service.py | 4 +- .../aws/services/account/account_client.py | 4 +- .../aws/services/account/account_service.py | 4 +- .../providers/aws/services/acm/acm_client.py | 4 +- .../providers/aws/services/acm/acm_service.py | 4 +- .../services/apigateway/apigateway_client.py | 4 +- .../services/apigateway/apigateway_service.py | 4 +- .../apigatewayv2/apigatewayv2_client.py | 4 +- .../apigatewayv2/apigatewayv2_service.py | 4 +- .../services/appstream/appstream_client.py | 4 +- .../services/appstream/appstream_service.py | 4 +- .../aws/services/athena/athena_client.py | 4 +- .../aws/services/athena/athena_service.py | 4 +- .../athena_workgroup_encryption.py | 2 +- .../athena_workgroup_enforce_configuration.py | 2 +- .../autoscaling/autoscaling_client.py | 4 +- .../autoscaling/autoscaling_service.py | 4 +- .../services/awslambda/awslambda_client.py | 4 +- .../services/awslambda/awslambda_service.py | 6 +- .../aws/services/backup/backup_client.py | 4 +- .../aws/services/backup/backup_service.py | 4 +- .../cloudformation/cloudformation_client.py | 4 +- .../cloudformation/cloudformation_service.py | 4 +- .../services/cloudfront/cloudfront_client.py | 4 +- .../services/cloudfront/cloudfront_service.py | 4 +- .../services/cloudtrail/cloudtrail_client.py | 4 +- .../cloudtrail_s3_dataevents_read_enabled.py | 2 +- .../cloudtrail_s3_dataevents_write_enabled.py | 2 +- .../services/cloudtrail/cloudtrail_service.py | 4 +- .../services/cloudwatch/cloudwatch_client.py | 4 +- .../services/cloudwatch/cloudwatch_service.py | 10 +- .../aws/services/cloudwatch/logs_client.py | 4 +- .../codeartifact/codeartifact_client.py | 4 +- .../codeartifact/codeartifact_service.py | 4 +- .../services/codebuild/codebuild_client.py | 4 +- .../services/codebuild/codebuild_service.py | 4 +- .../aws/services/config/config_client.py | 4 +- .../aws/services/config/config_service.py | 4 +- .../directoryservice_client.py | 4 +- .../directoryservice_service.py | 4 +- .../providers/aws/services/dlm/dlm_client.py | 4 +- .../providers/aws/services/dlm/dlm_service.py | 4 +- .../services/documentdb/documentdb_client.py | 4 +- .../services/documentdb/documentdb_service.py | 4 +- .../providers/aws/services/drs/drs_client.py | 4 +- .../providers/aws/services/drs/drs_service.py | 4 +- .../aws/services/dynamodb/dax_client.py | 4 +- .../aws/services/dynamodb/dynamodb_client.py | 4 +- .../aws/services/dynamodb/dynamodb_service.py | 8 +- .../providers/aws/services/ec2/ec2_client.py | 4 +- .../ec2_ebs_default_encryption.py | 3 +- .../ec2_networkacl_allow_ingress_any_port.py | 2 +- ...c2_networkacl_allow_ingress_tcp_port_22.py | 2 +- ..._networkacl_allow_ingress_tcp_port_3389.py | 2 +- ...allow_ingress_from_internet_to_any_port.py | 2 +- ...om_internet_to_port_mongodb_27017_27018.py | 2 +- ...ess_from_internet_to_tcp_ftp_port_20_21.py | 2 +- ...ow_ingress_from_internet_to_tcp_port_22.py | 2 +- ..._ingress_from_internet_to_tcp_port_3389.py | 2 +- ...et_to_tcp_port_cassandra_7199_9160_8888.py | 2 +- ...ort_elasticsearch_kibana_9200_9300_5601.py | 2 +- ...ss_from_internet_to_tcp_port_kafka_9092.py | 2 +- ...om_internet_to_tcp_port_memcached_11211.py | 2 +- ...ss_from_internet_to_tcp_port_mysql_3306.py | 2 +- ...m_internet_to_tcp_port_oracle_1521_2483.py | 2 +- ...from_internet_to_tcp_port_postgres_5432.py | 2 +- ...ss_from_internet_to_tcp_port_redis_6379.py | 2 +- ...ternet_to_tcp_port_sql_server_1433_1434.py | 2 +- ...ess_from_internet_to_tcp_port_telnet_23.py | 2 +- ...curitygroup_allow_wide_open_public_ipv4.py | 2 +- .../providers/aws/services/ec2/ec2_service.py | 4 +- .../providers/aws/services/ecr/ecr_client.py | 4 +- .../providers/aws/services/ecr/ecr_service.py | 6 +- .../providers/aws/services/ecs/ecs_client.py | 4 +- .../providers/aws/services/ecs/ecs_service.py | 4 +- .../providers/aws/services/efs/efs_client.py | 4 +- .../providers/aws/services/efs/efs_service.py | 4 +- .../providers/aws/services/eks/eks_client.py | 4 +- .../providers/aws/services/eks/eks_service.py | 6 +- .../elasticache/elasticache_client.py | 4 +- .../elasticache/elasticache_service.py | 4 +- .../providers/aws/services/elb/elb_client.py | 4 +- .../providers/aws/services/elb/elb_service.py | 4 +- .../aws/services/elbv2/elbv2_client.py | 4 +- .../aws/services/elbv2/elbv2_service.py | 4 +- .../providers/aws/services/emr/emr_client.py | 4 +- .../providers/aws/services/emr/emr_service.py | 4 +- .../providers/aws/services/fms/fms_client.py | 4 +- .../providers/aws/services/fms/fms_service.py | 4 +- .../aws/services/glacier/glacier_client.py | 4 +- .../aws/services/glacier/glacier_service.py | 4 +- .../globalaccelerator_client.py | 4 +- .../globalaccelerator_service.py | 6 +- .../aws/services/glue/glue_client.py | 4 +- ...connection_passwords_encryption_enabled.py | 2 +- ...ta_catalogs_metadata_encryption_enabled.py | 2 +- .../aws/services/glue/glue_service.py | 4 +- .../services/guardduty/guardduty_client.py | 4 +- .../services/guardduty/guardduty_service.py | 4 +- .../providers/aws/services/iam/iam_client.py | 4 +- .../providers/aws/services/iam/iam_service.py | 4 +- .../services/inspector2/inspector2_client.py | 4 +- .../inspector2_findings_exist.py | 4 +- .../services/inspector2/inspector2_service.py | 4 +- .../providers/aws/services/kms/kms_client.py | 4 +- .../providers/aws/services/kms/kms_service.py | 4 +- .../aws/services/macie/macie_client.py | 4 +- .../macie_is_enabled/macie_is_enabled.py | 2 +- .../aws/services/macie/macie_service.py | 4 +- .../aws/services/neptune/neptune_client.py | 8 +- .../aws/services/neptune/neptune_service.py | 4 +- .../networkfirewall/networkfirewall_client.py | 4 +- .../networkfirewall_in_all_vpc.py | 2 +- .../networkfirewall_service.py | 4 +- .../services/opensearch/opensearch_client.py | 4 +- .../services/opensearch/opensearch_service.py | 4 +- .../organizations/organizations_client.py | 4 +- .../organizations/organizations_service.py | 4 +- .../providers/aws/services/rds/rds_client.py | 4 +- .../providers/aws/services/rds/rds_service.py | 4 +- .../aws/services/redshift/redshift_client.py | 4 +- .../aws/services/redshift/redshift_service.py | 4 +- .../resourceexplorer2_client.py | 4 +- .../resourceexplorer2_service.py | 4 +- .../aws/services/route53/route53_client.py | 4 +- .../aws/services/route53/route53_service.py | 10 +- .../services/route53/route53domains_client.py | 4 +- .../s3_account_level_public_access_blocks.py | 2 +- .../providers/aws/services/s3/s3_client.py | 4 +- .../providers/aws/services/s3/s3_service.py | 16 +- .../aws/services/s3/s3control_client.py | 4 +- .../services/sagemaker/sagemaker_client.py | 4 +- .../services/sagemaker/sagemaker_service.py | 4 +- .../secretsmanager/secretsmanager_client.py | 4 +- .../secretsmanager/secretsmanager_service.py | 4 +- .../securityhub/securityhub_client.py | 4 +- .../securityhub/securityhub_service.py | 4 +- .../aws/services/shield/shield_client.py | 4 +- .../aws/services/shield/shield_service.py | 4 +- .../providers/aws/services/sns/sns_client.py | 4 +- .../providers/aws/services/sns/sns_service.py | 4 +- .../providers/aws/services/sqs/sqs_client.py | 4 +- .../providers/aws/services/sqs/sqs_service.py | 4 +- .../providers/aws/services/ssm/ssm_client.py | 4 +- .../providers/aws/services/ssm/ssm_service.py | 4 +- .../ssmincidents/ssmincidents_client.py | 4 +- .../ssmincidents/ssmincidents_service.py | 4 +- .../trustedadvisor/trustedadvisor_client.py | 4 +- .../trustedadvisor/trustedadvisor_service.py | 10 +- .../providers/aws/services/vpc/vpc_client.py | 4 +- .../vpc_flow_logs_enabled.py | 2 +- .../providers/aws/services/vpc/vpc_service.py | 4 +- .../providers/aws/services/waf/waf_client.py | 4 +- .../providers/aws/services/waf/waf_service.py | 4 +- .../aws/services/wafv2/wafv2_client.py | 4 +- .../aws/services/wafv2/wafv2_service.py | 4 +- .../wellarchitected/wellarchitected_client.py | 4 +- .../wellarchitected_service.py | 4 +- .../services/workspaces/workspaces_client.py | 4 +- .../services/workspaces/workspaces_service.py | 4 +- prowler/providers/azure/azure_provider_new.py | 6 +- .../services/defender/defender_client.py | 4 +- .../services/defender/defender_service.py | 4 +- .../azure/services/iam/iam_client.py | 4 +- .../azure/services/iam/iam_service.py | 4 +- .../services/sqlserver/sqlserver_client.py | 4 +- .../services/sqlserver/sqlserver_service.py | 4 +- .../azure/services/storage/storage_client.py | 4 +- .../azure/services/storage/storage_service.py | 4 +- prowler/providers/common/audit_info.py | 24 +- prowler/providers/common/common.py | 5 +- prowler/providers/common/provider.py | 2 +- prowler/providers/gcp/gcp_provider_new.py | 4 +- .../gcp/services/apikeys/apikeys_client.py | 4 +- .../gcp/services/apikeys/apikeys_service.py | 4 +- .../gcp/services/bigquery/bigquery_client.py | 4 +- .../gcp/services/bigquery/bigquery_service.py | 4 +- .../cloudresourcemanager_client.py | 4 +- .../cloudresourcemanager_service.py | 4 +- .../gcp/services/cloudsql/cloudsql_client.py | 4 +- .../gcp/services/cloudsql/cloudsql_service.py | 4 +- .../cloudstorage/cloudstorage_client.py | 4 +- .../cloudstorage/cloudstorage_service.py | 4 +- .../gcp/services/compute/compute_client.py | 4 +- .../gcp/services/compute/compute_service.py | 4 +- .../gcp/services/dataproc/dataproc_client.py | 4 +- .../gcp/services/dataproc/dataproc_service.py | 4 +- .../providers/gcp/services/dns/dns_client.py | 4 +- .../providers/gcp/services/dns/dns_service.py | 4 +- .../gcp/services/iam/accessapproval_client.py | 4 +- .../services/iam/essentialcontacts_client.py | 4 +- .../providers/gcp/services/iam/iam_client.py | 4 +- .../providers/gcp/services/iam/iam_service.py | 12 +- .../providers/gcp/services/kms/kms_client.py | 4 +- .../providers/gcp/services/kms/kms_service.py | 4 +- .../gcp/services/logging/logging_client.py | 4 +- .../gcp/services/logging/logging_service.py | 4 +- .../services/monitoring/monitoring_client.py | 4 +- .../services/monitoring/monitoring_service.py | 4 +- .../serviceusage/serviceusage_client.py | 4 +- .../serviceusage/serviceusage_service.py | 4 +- .../kubernetes/kubernetes_provider_new.py | 6 +- 214 files changed, 1092 insertions(+), 486 deletions(-) create mode 100644 prowler/providers/aws/aws_provider_new.py diff --git a/prowler/__main__.py b/prowler/__main__.py index 7e03541ec2..53c9c7a07d 100644 --- a/prowler/__main__.py +++ b/prowler/__main__.py @@ -39,7 +39,6 @@ from prowler.lib.outputs.json import close_json from prowler.lib.outputs.outputs import extract_findings_statistics from prowler.lib.outputs.slack import send_slack_message from prowler.lib.outputs.summary_table import display_summary_table -from prowler.providers.aws.aws_provider import get_available_aws_service_regions from prowler.providers.aws.lib.s3.s3 import send_to_s3_bucket from prowler.providers.aws.lib.security_hub.security_hub import ( batch_send_to_security_hub, @@ -52,7 +51,10 @@ from prowler.providers.common.audit_info import ( set_provider_execution_parameters, ) from prowler.providers.common.clean import clean_provider_local_output_directories -from prowler.providers.common.common import set_global_provider_object +from prowler.providers.common.common import ( + get_global_provider, + set_global_provider_object, +) from prowler.providers.common.mutelist import set_provider_mutelist from prowler.providers.common.outputs import set_provider_output_options from prowler.providers.common.quick_inventory import run_provider_quick_inventory @@ -263,9 +265,10 @@ def prowler(): f"{Style.BRIGHT}\nSending findings to AWS Security Hub, please wait...{Style.RESET_ALL}" ) # Verify where AWS Security Hub is enabled + global_provider = get_global_provider() aws_security_enabled_regions = [] security_hub_regions = ( - get_available_aws_service_regions("securityhub", audit_info) + global_provider.get_available_aws_service_regions("securityhub") if not audit_info.audited_regions else audit_info.audited_regions ) diff --git a/prowler/lib/check/check.py b/prowler/lib/check/check.py index d8e91f18c1..58911ba620 100644 --- a/prowler/lib/check/check.py +++ b/prowler/lib/check/check.py @@ -22,6 +22,7 @@ from prowler.lib.logger import logger from prowler.lib.outputs.outputs import report from prowler.lib.utils.utils import open_file, parse_json_file from prowler.providers.aws.lib.mutelist.mutelist import mutelist_findings +from prowler.providers.common.common import get_global_provider from prowler.providers.common.models import Audit_Metadata from prowler.providers.common.outputs import Provider_Output_Options @@ -425,8 +426,10 @@ def execute_checks( services_executed = set() checks_executed = set() + global_provider = get_global_provider() + # Initialize the Audit Metadata - audit_info.audit_metadata = Audit_Metadata( + global_provider.audit_metadata = Audit_Metadata( services_scanned=0, expected_checks=checks_to_execute, completed_checks=0, @@ -537,6 +540,7 @@ def execute( checks_executed: set, custom_checks_metadata: Any, ): + global_provider = get_global_provider() # Import check module check_module_path = ( f"prowler.providers.{provider}.services.{service}.{check_name}.{check_name}" @@ -556,15 +560,15 @@ def execute( # Update Audit Status services_executed.add(service) checks_executed.add(check_name) - audit_info.audit_metadata = update_audit_metadata( - audit_info.audit_metadata, services_executed, checks_executed + global_provider.audit_metadata = update_audit_metadata( + global_provider.audit_metadata, services_executed, checks_executed ) # Mute List findings if audit_output_options.mutelist_file: check_findings = mutelist_findings( audit_output_options.mutelist_file, - audit_info.audited_account, + global_provider.audited_account, check_findings, ) diff --git a/prowler/lib/outputs/compliance/compliance.py b/prowler/lib/outputs/compliance/compliance.py index b019d8f7e3..5c53eb2b28 100644 --- a/prowler/lib/outputs/compliance/compliance.py +++ b/prowler/lib/outputs/compliance/compliance.py @@ -172,9 +172,6 @@ def display_compliance_table( and compliance.Provider == "AWS" and compliance.Version == "RD2022" ): - compliance_version = compliance.Version - compliance_fm = compliance.Framework - compliance_provider = compliance.Provider for requirement in compliance.Requirements: for attribute in requirement.Attributes: marco_categoria = ( @@ -222,13 +219,13 @@ def display_compliance_table( ens_compliance_table["Bajo"].append( f"{Fore.YELLOW}{marcos[marco]['Bajo']}{Style.RESET_ALL}" ) - if fail_count + pass_count < 0: + if fail_count + pass_count < 1: print( - f"\n {Style.BRIGHT}There are no resources for {Fore.YELLOW}{compliance_fm}_{compliance_version}_{compliance_provider}{Style.RESET_ALL}.\n" + f"\nThere are no resources for {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL}.\n" ) else: print( - f"\nEstado de Cumplimiento de {Fore.YELLOW}{compliance_fm}_{compliance_version}_{compliance_provider}{Style.RESET_ALL}:" + f"\nEstado de Cumplimiento de {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL}:" ) overview_table = [ [ @@ -239,7 +236,7 @@ def display_compliance_table( print(tabulate(overview_table, tablefmt="rounded_grid")) if not compliance_overview: print( - f"\nResultados de {Fore.YELLOW}{compliance_fm}_{compliance_version}_{compliance_provider}{Style.RESET_ALL}:" + f"\nResultados de {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL}:" ) print( tabulate( @@ -251,7 +248,9 @@ def display_compliance_table( print( f"{Style.BRIGHT}* Solo aparece el Marco/Categoria que contiene resultados.{Style.RESET_ALL}" ) - print(f"\nResultados detallados de {compliance_fm} en:") + print( + f"\nResultados detallados de {compliance_framework.upper()} en:" + ) print( f" - CSV: {output_directory}/compliance/{output_filename}_{compliance_framework}.csv\n" ) @@ -272,8 +271,6 @@ def display_compliance_table( compliance.Framework == "CIS" and compliance.Version in compliance_framework ): - compliance_version = compliance.Version - compliance_fm = compliance.Framework for requirement in compliance.Requirements: for attribute in requirement.Attributes: section = attribute.Section @@ -322,11 +319,11 @@ def display_compliance_table( ) if fail_count + pass_count < 1: print( - f"\n {Style.BRIGHT}There are no resources for {Fore.YELLOW}{compliance_fm}_{compliance_version}{Style.RESET_ALL}.\n" + f"\nThere are no resources for {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL}.\n" ) else: print( - f"\nCompliance Status of {Fore.YELLOW}{compliance_fm}_{compliance_version}{Style.RESET_ALL} Framework:" + f"\nCompliance Status of {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL} Framework:" ) overview_table = [ [ @@ -337,7 +334,7 @@ def display_compliance_table( print(tabulate(overview_table, tablefmt="rounded_grid")) if not compliance_overview: print( - f"\nFramework {Fore.YELLOW}{compliance_fm}_{compliance_version}{Style.RESET_ALL} Results:" + f"\nFramework {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL} Results:" ) print( tabulate( @@ -349,7 +346,9 @@ def display_compliance_table( print( f"{Style.BRIGHT}* Only sections containing results appear.{Style.RESET_ALL}" ) - print(f"\nDetailed results of {compliance_fm} are in:") + print( + f"\nDetailed results of {compliance_framework.upper()} are in:" + ) print( f" - CSV: {output_directory}/compliance/{output_filename}_{compliance_framework}.csv\n" ) @@ -369,7 +368,6 @@ def display_compliance_table( "MITRE-ATTACK" in compliance.Framework and compliance.Version in compliance_framework ): - compliance_fm = compliance.Framework for requirement in compliance.Requirements: for tactic in requirement.Tactics: if tactic not in tactics: @@ -396,11 +394,11 @@ def display_compliance_table( ) if fail_count + pass_count < 1: print( - f"\n {Style.BRIGHT}There are no resources for {Fore.YELLOW}{compliance_fm}{Style.RESET_ALL}.\n" + f"\nThere are no resources for {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL}.\n" ) else: print( - f"\nCompliance Status of {Fore.YELLOW}{compliance_fm}{Style.RESET_ALL} Framework:" + f"\nCompliance Status of {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL} Framework:" ) overview_table = [ [ @@ -411,7 +409,7 @@ def display_compliance_table( print(tabulate(overview_table, tablefmt="rounded_grid")) if not compliance_overview: print( - f"\nFramework {Fore.YELLOW}{compliance_fm}{Style.RESET_ALL} Results:" + f"\nFramework {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL} Results:" ) print( tabulate( @@ -423,7 +421,9 @@ def display_compliance_table( print( f"{Style.BRIGHT}* Only sections containing results appear.{Style.RESET_ALL}" ) - print(f"\nDetailed results of {compliance_fm} are in:") + print( + f"\nDetailed results of {compliance_framework.upper()} are in:" + ) print( f" - CSV: {output_directory}/compliance/{output_filename}_{compliance_framework}.csv\n" ) @@ -447,7 +447,7 @@ def display_compliance_table( pass_count += 1 if fail_count + pass_count < 1: print( - f"\n {Style.BRIGHT}There are no resources for {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL}.\n" + f"\nThere are no resources for {Fore.YELLOW}{compliance_framework.upper()}{Style.RESET_ALL}.\n" ) else: print( diff --git a/prowler/lib/outputs/models.py b/prowler/lib/outputs/models.py index db3b8db8b2..94561830b0 100644 --- a/prowler/lib/outputs/models.py +++ b/prowler/lib/outputs/models.py @@ -10,7 +10,7 @@ from prowler.config.config import prowler_version, timestamp from prowler.lib.check.models import Remediation from prowler.lib.logger import logger from prowler.lib.utils.utils import outputs_unix_timestamp -from prowler.providers.aws.lib.audit_info.models import AWS_Organizations_Info +from prowler.providers.aws.lib.audit_info.models import AWSOrganizationsInfo def get_check_compliance(finding, provider, output_options) -> dict: @@ -483,7 +483,7 @@ class Aws_Check_Output_JSON(Check_Output_JSON): Profile: str = "" AccountId: str = "" - OrganizationsInfo: Optional[AWS_Organizations_Info] + OrganizationsInfo: Optional[AWSOrganizationsInfo] Region: str = "" ResourceId: str = "" ResourceArn: str = "" diff --git a/prowler/providers/aws/aws_provider.py b/prowler/providers/aws/aws_provider.py index 0a1b5833dd..85d21d1bfa 100644 --- a/prowler/providers/aws/aws_provider.py +++ b/prowler/providers/aws/aws_provider.py @@ -11,7 +11,7 @@ from prowler.lib.check.check import list_modules, recover_checks_from_service from prowler.lib.logger import logger from prowler.lib.utils.utils import open_file, parse_json_file from prowler.providers.aws.config import AWS_STS_GLOBAL_ENDPOINT_REGION -from prowler.providers.aws.lib.audit_info.models import AWS_Assume_Role, AWS_Audit_Info +from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info, AWSAssumeRole from prowler.providers.aws.lib.credentials.credentials import create_sts_session @@ -109,7 +109,7 @@ class AWS_Provider: def assume_role( session: session.Session, - assumed_role_info: AWS_Assume_Role, + assumed_role_info: AWSAssumeRole, sts_endpoint_region: str = None, ) -> dict: try: diff --git a/prowler/providers/aws/aws_provider_new.py b/prowler/providers/aws/aws_provider_new.py new file mode 100644 index 0000000000..cbd4afb635 --- /dev/null +++ b/prowler/providers/aws/aws_provider_new.py @@ -0,0 +1,621 @@ +import os +import pathlib +import sys +from argparse import Namespace +from dataclasses import dataclass +from datetime import datetime +from typing import Any, Optional + +from boto3 import client, session +from botocore.config import Config +from botocore.credentials import RefreshableCredentials +from botocore.session import get_session +from colorama import Fore, Style + +from prowler.config.config import aws_services_json_file +from prowler.lib.check.check import list_modules, recover_checks_from_service +from prowler.lib.logger import logger +from prowler.lib.utils.utils import open_file, parse_json_file +from prowler.providers.aws.config import ( + AWS_STS_GLOBAL_ENDPOINT_REGION, + BOTO3_USER_AGENT_EXTRA, +) +from prowler.providers.aws.lib.arn.arn import parse_iam_credentials_arn +from prowler.providers.aws.lib.credentials.credentials import ( + create_sts_session, + validate_AWSCredentials, +) +from prowler.providers.aws.lib.organizations.organizations import ( + get_organizations_metadata, +) +from prowler.providers.common.provider import Provider + + +@dataclass +class AWSOrganizationsInfo: + account_details_email: str + account_details_name: str + account_details_arn: str + account_details_org: str + account_details_tags: str + + +@dataclass +class AWSCredentials: + aws_access_key_id: str + aws_session_token: str + aws_secret_access_key: str + expiration: datetime + + +@dataclass +class AWSAssumeRole: + role_arn: str + session_duration: int + external_id: str + mfa_enabled: bool + + +@dataclass +class AWSAssumeRoleConfiguration: + assumed_role_info: AWSAssumeRole + assumed_role_credentials: AWSCredentials + + +@dataclass +class AWSIdentityInfo: + account: str + account_arn: str + user_id: str + partition: str + identity_arn: str + profile: str + profile_region: str + audited_regions: list + + +@dataclass +class AWSSession: + session: session.Session + session_config: Config + original_session: None + + +class AwsProvider(Provider): + session: AWSSession = AWSSession( + session=None, session_config=None, original_session=None + ) + identity: AWSIdentityInfo = AWSIdentityInfo( + account=None, + account_arn=None, + user_id=None, + partition=None, + identity_arn=None, + profile=None, + profile_region=None, + audited_regions=[], + ) + assumed_role: AWSAssumeRoleConfiguration = AWSAssumeRoleConfiguration( + assumed_role_info=AWSAssumeRole( + role_arn=None, + session_duration=None, + external_id=None, + mfa_enabled=False, + ), + assumed_role_credentials=AWSCredentials( + aws_access_key_id=None, + aws_session_token=None, + aws_secret_access_key=None, + expiration=None, + ), + ) + organizations_metadata: AWSOrganizationsInfo = AWSOrganizationsInfo( + account_details_email=None, + account_details_name=None, + account_details_arn=None, + account_details_org=None, + account_details_tags=None, + ) + audit_resources: Optional[Any] + audit_metadata: Optional[Any] + audit_config: dict = {} + mfa_enabled: bool = False + ignore_unused_services: bool = False + + def __init__(self, arguments: Namespace): + logger.info("Setting AWS provider ...") + # Parse input arguments + # Assume Role Options + input_role = getattr(arguments, "role", None) + input_session_duration = getattr(arguments, "session_duration", None) + input_external_id = getattr(arguments, "external_id", None) + + # STS Endpoint Region + sts_endpoint_region = getattr(arguments, "sts_endpoint_region", None) + + # MFA Configuration (false by default) + input_mfa = getattr(arguments, "mfa", None) + + input_profile = getattr(arguments, "profile", None) + input_regions = getattr(arguments, "region", None) + organizations_role_arn = getattr(arguments, "organizations_role", None) + + # Set the maximum retries for the standard retrier config + aws_retries_max_attempts = getattr(arguments, "aws_retries_max_attempts", None) + + # Set if unused services must be ignored + ignore_unused_services = getattr(arguments, "ignore_unused_services", None) + + # Set the maximum retries for the standard retrier config + self.session.session_config = self.__set_session_config__( + aws_retries_max_attempts + ) + + # Set ignore unused services + self.ignore_unused_services = ignore_unused_services + + # Start populating AWS identity object + self.identity.profile = input_profile + self.identity.audited_regions = input_regions + + # We need to create an original sessions using regular auth path (creds, profile, etc) + logger.info("Generating original session ...") + self.session.session = self.setup_session(input_mfa) + + # After the session is created, validate it + logger.info("Validating credentials ...") + caller_identity = validate_AWSCredentials( + self.session.session, input_regions, sts_endpoint_region + ) + + logger.info("Credentials validated") + logger.info(f"Original caller identity UserId: {caller_identity['UserId']}") + logger.info(f"Original caller identity ARN: {caller_identity['Arn']}") + # Set values of AWS identity object + self.identity.account = caller_identity["Account"] + self.identity.identity_arn = caller_identity["Arn"] + self.identity.user_id = caller_identity["UserId"] + self.identity.partition = parse_iam_credentials_arn( + caller_identity["Arn"] + ).partition + self.identity.account_arn = ( + f"arn:{self.identity.partition}:iam::{self.identity.account}:root" + ) + + # save original session + self.session.original_session = self.session.session + # time for checking role assumption + if input_role: + # session will be the assumed one + self.session.session = self.setup_assumed_session( + input_role, + input_external_id, + input_mfa, + input_session_duration, + sts_endpoint_region, + ) + logger.info("Audit session is the new session created assuming role") + # check if organizations info is gonna be retrieved + if organizations_role_arn: + logger.info( + f"Getting organizations metadata for account {organizations_role_arn}" + ) + # session will be the assumed one with organizations permissions + self.session.session = self.setup_assumed_session( + organizations_role_arn, + input_external_id, + input_mfa, + input_session_duration, + sts_endpoint_region, + ) + self.organizations_metadata = get_organizations_metadata( + self.identity.account, self.assumed_role.assumed_role_credentials + ) + logger.info("Organizations metadata retrieved") + if self.session.session.region_name: + self.identity.profile_region = self.session.session.region_name + else: + self.identity.profile_region = "us-east-1" + + if not getattr(arguments, "only_logs", None): + self.print_credentials() + + # Parse Scan Tags + if getattr(arguments, "resource_tags", None): + input_resource_tags = arguments.resource_tags + self.audit_resources = self.get_tagged_resources(input_resource_tags) + + # Parse Input Resource ARNs + self.audit_resources = getattr(arguments, "resource_arn", None) + + def setup_session(self, input_mfa: bool): + logger.info("Creating regular session ...") + # Input MFA only if a role is not going to be assumed + if input_mfa and not self.assumed_role.assumed_role_info.role_arn: + mfa_ARN, mfa_TOTP = self.__input_role_mfa_token_and_code__() + get_session_token_arguments = { + "SerialNumber": mfa_ARN, + "TokenCode": mfa_TOTP, + } + sts_client = client("sts") + session_credentials = sts_client.get_session_token( + **get_session_token_arguments + ) + return session.Session( + aws_access_key_id=session_credentials["Credentials"]["AccessKeyId"], + aws_secret_access_key=session_credentials["Credentials"][ + "SecretAccessKey" + ], + aws_session_token=session_credentials["Credentials"]["SessionToken"], + profile_name=self.identity.profile, + ) + else: + return session.Session( + profile_name=self.identity.profile, + ) + + def setup_assumed_session( + self, + input_role: str, + input_external_id: str, + input_mfa: str, + session_duration: int, + sts_endpoint_region: str, + ): + logger.info("Creating assumed session ...") + # store information about the role is gonna be assumed + self.assumed_role.assumed_role_info.role_arn = input_role + self.assumed_role.assumed_role_info.session_duration = session_duration + self.assumed_role.assumed_role_info.external_id = input_external_id + self.assumed_role.assumed_role_info.mfa_enabled = input_mfa + # Check if role arn is valid + try: + # this returns the arn already parsed into a dict to be used when it is needed to access its fields + role_arn_parsed = parse_iam_credentials_arn( + self.assumed_role.assumed_role_info.role_arn + ) + + except Exception as error: + logger.critical(f"{error.__class__.__name__} -- {error}") + sys.exit(1) + + else: + logger.info(f"Assuming role {self.assumed_role.assumed_role_info.role_arn}") + # Assume the role + assumed_role_response = self.__assume_role__( + self.session.session, + sts_endpoint_region, + ) + logger.info("Role assumed") + # Set the info needed to create a session with an assumed role + self.assumed_role.assumed_role_credentials = AWSCredentials( + aws_access_key_id=assumed_role_response["Credentials"]["AccessKeyId"], + aws_session_token=assumed_role_response["Credentials"]["SessionToken"], + aws_secret_access_key=assumed_role_response["Credentials"][ + "SecretAccessKey" + ], + expiration=assumed_role_response["Credentials"]["Expiration"], + ) + # Set identity parameters + self.identity.account = role_arn_parsed.account_id + self.identity.partition = role_arn_parsed.partition + self.identity.account_arn = ( + f"arn:{self.identity.partition}:iam::{self.identity.account}:root" + ) + # From botocore we can use RefreshableCredentials class, which has an attribute (refresh_using) + # that needs to be a method without arguments that retrieves a new set of fresh credentials + # asuming the role again. -> https://github.com/boto/botocore/blob/098cc255f81a25b852e1ecdeb7adebd94c7b1b73/botocore/credentials.py#L395 + assumed_refreshable_credentials = RefreshableCredentials( + access_key=self.assumed_role.assumed_role_credentials.aws_access_key_id, + secret_key=self.assumed_role.assumed_role_credentials.aws_secret_access_key, + token=self.assumed_role.assumed_role_credentials.aws_session_token, + expiry_time=self.assumed_role.assumed_role_credentials.expiration, + refresh_using=self.refresh_credentials, + method="sts-assume-role", + ) + # Here we need the botocore session since it needs to use refreshable credentials + assumed_botocore_session = get_session() + assumed_botocore_session._credentials = assumed_refreshable_credentials + assumed_botocore_session.set_config_variable( + "region", self.identity.profile_region + ) + return session.Session( + profile_name=self.identity.profile, + botocore_session=assumed_botocore_session, + ) + + # Refresh credentials method using assume role + # This method is called "adding ()" to the name, so it cannot accept arguments + # https://github.com/boto/botocore/blob/098cc255f81a25b852e1ecdeb7adebd94c7b1b73/botocore/credentials.py#L570 + def refresh_credentials(self): + logger.info("Refreshing assumed credentials...") + + response = self.__assume_role__(self.aws_session, self.role_info) + refreshed_credentials = dict( + # Keys of the dict has to be the same as those that are being searched in the parent class + # https://github.com/boto/botocore/blob/098cc255f81a25b852e1ecdeb7adebd94c7b1b73/botocore/credentials.py#L609 + access_key=response["Credentials"]["AccessKeyId"], + secret_key=response["Credentials"]["SecretAccessKey"], + token=response["Credentials"]["SessionToken"], + expiry_time=response["Credentials"]["Expiration"].isoformat(), + ) + logger.info("Refreshed Credentials:") + logger.info(refreshed_credentials) + return refreshed_credentials + + def print_credentials(self): + # Beautify audited regions, set "all" if there is no filter region + regions = ( + ", ".join(self.identity.audited_regions) + if self.identity.audited_regions is not None + else "all" + ) + # Beautify audited profile, set "default" if there is no profile set + profile = ( + self.identity.profile if self.identity.profile is not None else "default" + ) + + report = f""" +This report is being generated using credentials below: + +AWS-CLI Profile: {Fore.YELLOW}[{profile}]{Style.RESET_ALL} AWS Filter Region: {Fore.YELLOW}[{regions}]{Style.RESET_ALL} +AWS Account: {Fore.YELLOW}[{self.identity.account}]{Style.RESET_ALL} UserId: {Fore.YELLOW}[{self.identity.user_id}]{Style.RESET_ALL} +Caller Identity ARN: {Fore.YELLOW}[{ self.identity.identity_arn}]{Style.RESET_ALL} +""" + # If -A is set, print Assumed Role ARN + if self.assumed_role.assumed_role_info.role_arn is not None: + report += f"""Assumed Role ARN: {Fore.YELLOW}[{self.assumed_role.assumed_role_info.role_arn}]{Style.RESET_ALL} + """ + print(report) + + def generate_regional_clients( + self, service: str, global_service: bool = False + ) -> dict: + try: + regional_clients = {} + service_regions = self.get_available_aws_service_regions(service) + # Check if it is global service to gather only one region + if global_service: + if service_regions: + if self.identity.profile_region in service_regions: + service_regions = [self.identity.profile_region] + service_regions = service_regions[:1] + for region in service_regions: + regional_client = self.session.session.client( + service, region_name=region, config=self.session.session_config + ) + regional_client.region = region + regional_clients[region] = regional_client + return regional_clients + except Exception as error: + logger.error( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + def get_available_aws_service_regions(self, service: str) -> list: + # Get json locally + actual_directory = pathlib.Path(os.path.dirname(os.path.realpath(__file__))) + with open_file(f"{actual_directory}/{aws_services_json_file}") as f: + data = parse_json_file(f) + # Check if it is a subservice + json_regions = data["services"][service]["regions"][self.identity.partition] + if ( + self.identity.audited_regions + ): # Check for input aws audit_info.audited_regions + regions = list( + set(json_regions).intersection(self.identity.audited_regions) + ) # Get common regions between input and json + else: # Get all regions from json of the service and partition + regions = json_regions + return regions + + def get_aws_available_regions(): + try: + actual_directory = pathlib.Path(os.path.dirname(os.path.realpath(__file__))) + with open_file(f"{actual_directory}/{aws_services_json_file}") as f: + data = parse_json_file(f) + + regions = set() + for service in data["services"].values(): + for partition in service["regions"]: + for item in service["regions"][partition]: + regions.add(item) + return list(regions) + except Exception as error: + logger.error(f"{error.__class__.__name__}: {error}") + return [] + + def get_checks_from_input_arn(audit_resources: list, provider: str) -> set: + """get_checks_from_input_arn gets the list of checks from the input arns""" + checks_from_arn = set() + is_subservice_in_checks = False + # Handle if there are audit resources so only their services are executed + if audit_resources: + services_without_subservices = ["guardduty", "kms", "s3", "elb", "efs"] + service_list = set() + sub_service_list = set() + for resource in audit_resources: + service = resource.split(":")[2] + sub_service = resource.split(":")[5].split("/")[0].replace("-", "_") + # WAF Services does not have checks + if service != "wafv2" and service != "waf": + # Parse services when they are different in the ARNs + if service == "lambda": + service = "awslambda" + elif service == "elasticloadbalancing": + service = "elb" + elif service == "elasticfilesystem": + service = "efs" + elif service == "logs": + service = "cloudwatch" + # Check if Prowler has checks in service + try: + list_modules(provider, service) + except ModuleNotFoundError: + # Service is not supported + pass + else: + service_list.add(service) + + # Get subservices to execute only applicable checks + if service not in services_without_subservices: + # Parse some specific subservices + if service == "ec2": + if sub_service == "security_group": + sub_service = "securitygroup" + if sub_service == "network_acl": + sub_service = "networkacl" + if sub_service == "image": + sub_service = "ami" + if service == "rds": + if sub_service == "cluster_snapshot": + sub_service = "snapshot" + sub_service_list.add(sub_service) + else: + sub_service_list.add(service) + checks = recover_checks_from_service(service_list, provider) + + # Filter only checks with audited subservices + for check in checks: + if any(sub_service in check for sub_service in sub_service_list): + if not (sub_service == "policy" and "password_policy" in check): + checks_from_arn.add(check) + is_subservice_in_checks = True + + if not is_subservice_in_checks: + checks_from_arn = checks + + # Return final checks list + return sorted(checks_from_arn) + + def get_regions_from_audit_resources(audit_resources: list) -> set: + """get_regions_from_audit_resources gets the regions from the audit resources arns""" + audited_regions = set() + for resource in audit_resources: + region = resource.split(":")[3] + if region: + audited_regions.add(region) + return audited_regions + + def get_tagged_resources(self, input_resource_tags: list): + """ + get_tagged_resources returns a list of the resources that are going to be scanned based on the given input tags + """ + try: + resource_tags = [] + tagged_resources = [] + for tag in input_resource_tags: + key = tag.split("=")[0] + value = tag.split("=")[1] + resource_tags.append({"Key": key, "Values": [value]}) + # Get Resources with resource_tags for all regions + for regional_client in self.generate_regional_clients( + "resourcegroupstaggingapi" + ).values(): + try: + get_resources_paginator = regional_client.get_paginator( + "get_resources" + ) + for page in get_resources_paginator.paginate( + TagFilters=resource_tags + ): + for resource in page["ResourceTagMappingList"]: + tagged_resources.append(resource["ResourceARN"]) + except Exception as error: + logger.error( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + except Exception as error: + logger.critical( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + sys.exit(1) + else: + return tagged_resources + + def get_default_region(self, service: str) -> str: + """get_default_region gets the default region based on the profile and audited service regions""" + service_regions = self.get_available_aws_service_regions(service) + default_region = ( + self.get_global_region() + ) # global region of the partition when all regions are audited and there is no profile region + if self.identity.profile_region in service_regions: + # return profile region only if it is audited + default_region = self.identity.profile_region + # return first audited region if specific regions are audited + elif self.identity.audited_regions: + default_region = self.identity.audited_regions[0] + return default_region + + def get_global_region(self) -> str: + """get_global_region gets the global region based on the audited partition""" + global_region = "us-east-1" + if self.identity.partition == "aws-cn": + global_region = "cn-north-1" + elif self.identity.partition == "aws-us-gov": + global_region = "us-gov-east-1" + elif "aws-iso" in self.identity.partition: + global_region = "aws-iso-global" + return global_region + + def __input_role_mfa_token_and_code__() -> tuple[str]: + """input_role_mfa_token_and_code ask for the AWS MFA ARN and TOTP and returns it.""" + mfa_ARN = input("Enter ARN of MFA: ") + mfa_TOTP = input("Enter MFA code: ") + return (mfa_ARN.strip(), mfa_TOTP.strip()) + + def __set_session_config__(self, aws_retries_max_attempts: bool): + session_config = Config( + retries={"max_attempts": 3, "mode": "standard"}, + user_agent_extra=BOTO3_USER_AGENT_EXTRA, + ) + if aws_retries_max_attempts: + # Create the new config + config = Config( + retries={ + "max_attempts": aws_retries_max_attempts, + "mode": "standard", + }, + ) + # Merge the new configuration + session_config = self.session.session_config.merge(config) + + return session_config + + def __assume_role__( + self, + session, + sts_endpoint_region: str, + ) -> dict: + try: + assume_role_arguments = { + "RoleArn": self.assumed_role.assumed_role_info.role_arn, + "RoleSessionName": "ProwlerAsessmentSession", + "DurationSeconds": self.assumed_role.assumed_role_info.session_duration, + } + + # Set the info to assume the role from the partition, account and role name + if self.assumed_role.assumed_role_info.external_id: + assume_role_arguments[ + "ExternalId" + ] = self.assumed_role.assumed_role_info.external_id + + if self.assumed_role.assumed_role_info.mfa_enabled: + mfa_ARN, mfa_TOTP = self.__input_role_mfa_token_and_code__() + assume_role_arguments["SerialNumber"] = mfa_ARN + assume_role_arguments["TokenCode"] = mfa_TOTP + + # Set the STS Endpoint Region + if sts_endpoint_region is None: + sts_endpoint_region = AWS_STS_GLOBAL_ENDPOINT_REGION + + sts_client = create_sts_session(session, sts_endpoint_region) + assumed_credentials = sts_client.assume_role(**assume_role_arguments) + except Exception as error: + logger.critical( + f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}" + ) + sys.exit(1) + + else: + return assumed_credentials diff --git a/prowler/providers/aws/lib/audit_info/audit_info.py b/prowler/providers/aws/lib/audit_info/audit_info.py index 908936c02b..2030c5bb56 100644 --- a/prowler/providers/aws/lib/audit_info/audit_info.py +++ b/prowler/providers/aws/lib/audit_info/audit_info.py @@ -2,7 +2,7 @@ from boto3 import session from botocore.config import Config from prowler.providers.aws.config import BOTO3_USER_AGENT_EXTRA -from prowler.providers.aws.lib.audit_info.models import AWS_Assume_Role, AWS_Audit_Info +from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info, AWSAssumeRole # Default Current Audit Info current_audit_info = AWS_Audit_Info( @@ -25,7 +25,7 @@ current_audit_info = AWS_Audit_Info( profile=None, profile_region=None, credentials=None, - assumed_role_info=AWS_Assume_Role( + assumed_role_info=AWSAssumeRole( role_arn=None, session_duration=None, external_id=None, diff --git a/prowler/providers/aws/lib/audit_info/models.py b/prowler/providers/aws/lib/audit_info/models.py index 838982e31e..20538a048f 100644 --- a/prowler/providers/aws/lib/audit_info/models.py +++ b/prowler/providers/aws/lib/audit_info/models.py @@ -7,7 +7,7 @@ from botocore.config import Config @dataclass -class AWS_Credentials: +class AWSCredentials: aws_access_key_id: str aws_session_token: str aws_secret_access_key: str @@ -15,7 +15,7 @@ class AWS_Credentials: @dataclass -class AWS_Assume_Role: +class AWSAssumeRole: role_arn: str session_duration: int external_id: str @@ -23,7 +23,7 @@ class AWS_Assume_Role: @dataclass -class AWS_Organizations_Info: +class AWSOrganizationsInfo: account_details_email: str account_details_name: str account_details_arn: str @@ -44,12 +44,12 @@ class AWS_Audit_Info: audited_partition: str profile: str profile_region: str - credentials: AWS_Credentials + credentials: AWSCredentials mfa_enabled: bool - assumed_role_info: AWS_Assume_Role + assumed_role_info: AWSAssumeRole audited_regions: list audit_resources: list - organizations_metadata: AWS_Organizations_Info - audit_metadata: Optional[Any] = None + organizations_metadata: AWSOrganizationsInfo + audit_metadata: Optional[Any] audit_config: Optional[dict] = None ignore_unused_services: bool = False diff --git a/prowler/providers/aws/lib/credentials/credentials.py b/prowler/providers/aws/lib/credentials/credentials.py index f0865d8f5d..431cf0b706 100644 --- a/prowler/providers/aws/lib/credentials/credentials.py +++ b/prowler/providers/aws/lib/credentials/credentials.py @@ -8,7 +8,7 @@ from prowler.providers.aws.config import AWS_STS_GLOBAL_ENDPOINT_REGION from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info -def validate_aws_credentials( +def validate_AWSCredentials( session: session, input_regions: list, sts_endpoint_region: str = None ) -> dict: try: @@ -38,7 +38,7 @@ def validate_aws_credentials( return caller_identity -def print_aws_credentials(audit_info: AWS_Audit_Info): +def print_AWSCredentials(audit_info: AWS_Audit_Info): # Beautify audited regions, set "all" if there is no filter region regions = ( ", ".join(audit_info.audited_regions) diff --git a/prowler/providers/aws/lib/organizations/organizations.py b/prowler/providers/aws/lib/organizations/organizations.py index fc5f13a7a8..130b7166b8 100644 --- a/prowler/providers/aws/lib/organizations/organizations.py +++ b/prowler/providers/aws/lib/organizations/organizations.py @@ -3,12 +3,12 @@ import sys from boto3 import client from prowler.lib.logger import logger -from prowler.providers.aws.lib.audit_info.models import AWS_Organizations_Info +from prowler.providers.aws.lib.audit_info.models import AWSOrganizationsInfo def get_organizations_metadata( metadata_account: str, assumed_credentials: dict -) -> AWS_Organizations_Info: +) -> AWSOrganizationsInfo: try: organizations_client = client( "organizations", @@ -30,7 +30,7 @@ def get_organizations_metadata( account_details_tags = "" for tag in list_tags_for_resource["Tags"]: account_details_tags += tag["Key"] + ":" + tag["Value"] + "," - organizations_info = AWS_Organizations_Info( + organizations_info = AWSOrganizationsInfo( account_details_email=organizations_metadata["Account"]["Email"], account_details_name=organizations_metadata["Account"]["Name"], account_details_arn=organizations_metadata["Account"]["Arn"], diff --git a/prowler/providers/aws/lib/service/service.py b/prowler/providers/aws/lib/service/service.py index 0badb1a88d..a3dd71f08e 100644 --- a/prowler/providers/aws/lib/service/service.py +++ b/prowler/providers/aws/lib/service/service.py @@ -1,10 +1,6 @@ import threading -from prowler.providers.aws.aws_provider import ( - generate_regional_clients, - get_default_region, -) -from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info +from prowler.providers.aws.aws_provider_new import AwsProvider class AWSService: @@ -15,18 +11,18 @@ class AWSService: - Also handles if the AWS Service is Global """ - def __init__(self, service: str, audit_info: AWS_Audit_Info, global_service=False): + def __init__(self, service: str, provider: AwsProvider, global_service=False): # Audit Information - self.audit_info = audit_info - self.audited_account = audit_info.audited_account - self.audited_account_arn = audit_info.audited_account_arn - self.audited_partition = audit_info.audited_partition - self.audit_resources = audit_info.audit_resources - self.audited_checks = audit_info.audit_metadata.expected_checks - self.audit_config = audit_info.audit_config + self.provider = provider + self.audited_account = provider.identity.account + self.audited_account_arn = provider.identity.account_arn + self.audited_partition = provider.identity.partition + self.audit_resources = provider.audit_resources + self.audited_checks = provider.audit_metadata.expected_checks + self.audit_config = provider.audit_config # AWS Session - self.session = audit_info.audit_session + self.session = provider.session.session # We receive the service using __class__.__name__ or the service name in lowercase # e.g.: AccessAnalyzer --> we need a lowercase string, so service.lower() @@ -34,14 +30,14 @@ class AWSService: # Generate Regional Clients if not global_service: - self.regional_clients = generate_regional_clients( - self.service, audit_info, global_service + self.regional_clients = provider.generate_regional_clients( + self.service, global_service ) # Get a single region and client if the service needs it (e.g. AWS Global Service) # We cannot include this within an else because some services needs both the regional_clients # and a single client like S3 - self.region = get_default_region(self.service, audit_info) + self.region = provider.get_default_region(self.service) self.client = self.session.client(self.service, self.region) def __get_session__(self): diff --git a/prowler/providers/aws/services/accessanalyzer/accessanalyzer_client.py b/prowler/providers/aws/services/accessanalyzer/accessanalyzer_client.py index ad5e94ddec..a60319cdbe 100644 --- a/prowler/providers/aws/services/accessanalyzer/accessanalyzer_client.py +++ b/prowler/providers/aws/services/accessanalyzer/accessanalyzer_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.accessanalyzer.accessanalyzer_service import ( AccessAnalyzer, ) +from prowler.providers.common.common import get_global_provider -accessanalyzer_client = AccessAnalyzer(current_audit_info) +accessanalyzer_client = AccessAnalyzer(get_global_provider()) diff --git a/prowler/providers/aws/services/accessanalyzer/accessanalyzer_service.py b/prowler/providers/aws/services/accessanalyzer/accessanalyzer_service.py index 64c818009b..54ee4abd00 100644 --- a/prowler/providers/aws/services/accessanalyzer/accessanalyzer_service.py +++ b/prowler/providers/aws/services/accessanalyzer/accessanalyzer_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## AccessAnalyzer class AccessAnalyzer(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.analyzers = [] self.__threading_call__(self.__list_analyzers__) self.__list_findings__() diff --git a/prowler/providers/aws/services/account/account_client.py b/prowler/providers/aws/services/account/account_client.py index 2bf199668d..d9639878e4 100644 --- a/prowler/providers/aws/services/account/account_client.py +++ b/prowler/providers/aws/services/account/account_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.account.account_service import Account +from prowler.providers.common.common import get_global_provider -account_client = Account(current_audit_info) +account_client = Account(get_global_provider()) diff --git a/prowler/providers/aws/services/account/account_service.py b/prowler/providers/aws/services/account/account_service.py index 16331fbe8a..c623bef658 100644 --- a/prowler/providers/aws/services/account/account_service.py +++ b/prowler/providers/aws/services/account/account_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService class Account(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.number_of_contacts = 4 self.contact_base = self.__get_contact_information__() self.contacts_billing = self.__get_alternate_contact__("BILLING") diff --git a/prowler/providers/aws/services/acm/acm_client.py b/prowler/providers/aws/services/acm/acm_client.py index 05a3b8bccb..61ddf2d75c 100644 --- a/prowler/providers/aws/services/acm/acm_client.py +++ b/prowler/providers/aws/services/acm/acm_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.acm.acm_service import ACM +from prowler.providers.common.common import get_global_provider -acm_client = ACM(current_audit_info) +acm_client = ACM(get_global_provider()) diff --git a/prowler/providers/aws/services/acm/acm_service.py b/prowler/providers/aws/services/acm/acm_service.py index 4f0e5de42e..8fd3196c75 100644 --- a/prowler/providers/aws/services/acm/acm_service.py +++ b/prowler/providers/aws/services/acm/acm_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## ACM class ACM(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.certificates = [] self.__threading_call__(self.__list_certificates__) self.__describe_certificates__() diff --git a/prowler/providers/aws/services/apigateway/apigateway_client.py b/prowler/providers/aws/services/apigateway/apigateway_client.py index aafa31cf7f..b36272fefd 100644 --- a/prowler/providers/aws/services/apigateway/apigateway_client.py +++ b/prowler/providers/aws/services/apigateway/apigateway_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.apigateway.apigateway_service import APIGateway +from prowler.providers.common.common import get_global_provider -apigateway_client = APIGateway(current_audit_info) +apigateway_client = APIGateway(get_global_provider()) diff --git a/prowler/providers/aws/services/apigateway/apigateway_service.py b/prowler/providers/aws/services/apigateway/apigateway_service.py index 41c14b4a40..73ea8cce0b 100644 --- a/prowler/providers/aws/services/apigateway/apigateway_service.py +++ b/prowler/providers/aws/services/apigateway/apigateway_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## APIGateway class APIGateway(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.rest_apis = [] self.__threading_call__(self.__get_rest_apis__) self.__get_authorizers__() diff --git a/prowler/providers/aws/services/apigatewayv2/apigatewayv2_client.py b/prowler/providers/aws/services/apigatewayv2/apigatewayv2_client.py index 3d88a315e5..187f6ce57f 100644 --- a/prowler/providers/aws/services/apigatewayv2/apigatewayv2_client.py +++ b/prowler/providers/aws/services/apigatewayv2/apigatewayv2_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.apigatewayv2.apigatewayv2_service import ( ApiGatewayV2, ) +from prowler.providers.common.common import get_global_provider -apigatewayv2_client = ApiGatewayV2(current_audit_info) +apigatewayv2_client = ApiGatewayV2(get_global_provider()) diff --git a/prowler/providers/aws/services/apigatewayv2/apigatewayv2_service.py b/prowler/providers/aws/services/apigatewayv2/apigatewayv2_service.py index 4b19d6e041..7c6faf196e 100644 --- a/prowler/providers/aws/services/apigatewayv2/apigatewayv2_service.py +++ b/prowler/providers/aws/services/apigatewayv2/apigatewayv2_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## ApiGatewayV2 class ApiGatewayV2(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.apis = [] self.__threading_call__(self.__get_apis__) self.__get_authorizers__() diff --git a/prowler/providers/aws/services/appstream/appstream_client.py b/prowler/providers/aws/services/appstream/appstream_client.py index 4f379f281a..e4f97b2333 100644 --- a/prowler/providers/aws/services/appstream/appstream_client.py +++ b/prowler/providers/aws/services/appstream/appstream_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.appstream.appstream_service import AppStream +from prowler.providers.common.common import get_global_provider -appstream_client = AppStream(current_audit_info) +appstream_client = AppStream(get_global_provider()) diff --git a/prowler/providers/aws/services/appstream/appstream_service.py b/prowler/providers/aws/services/appstream/appstream_service.py index 9bebb630c8..4761e70a2d 100644 --- a/prowler/providers/aws/services/appstream/appstream_service.py +++ b/prowler/providers/aws/services/appstream/appstream_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## AppStream class AppStream(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.fleets = [] self.__threading_call__(self.__describe_fleets__) self.__list_tags_for_resource__() diff --git a/prowler/providers/aws/services/athena/athena_client.py b/prowler/providers/aws/services/athena/athena_client.py index 23d3d4ad32..6de41a95b1 100644 --- a/prowler/providers/aws/services/athena/athena_client.py +++ b/prowler/providers/aws/services/athena/athena_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.athena.athena_service import Athena +from prowler.providers.common.common import get_global_provider -athena_client = Athena(current_audit_info) +athena_client = Athena(get_global_provider()) diff --git a/prowler/providers/aws/services/athena/athena_service.py b/prowler/providers/aws/services/athena/athena_service.py index ec91dc1b63..fa0a946bc6 100644 --- a/prowler/providers/aws/services/athena/athena_service.py +++ b/prowler/providers/aws/services/athena/athena_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## Athena class Athena(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.workgroups = {} self.__threading_call__(self.__list_workgroups__) self.__get_workgroups__() diff --git a/prowler/providers/aws/services/athena/athena_workgroup_encryption/athena_workgroup_encryption.py b/prowler/providers/aws/services/athena/athena_workgroup_encryption/athena_workgroup_encryption.py index 8b67d2d6fc..d9d498c45f 100644 --- a/prowler/providers/aws/services/athena/athena_workgroup_encryption/athena_workgroup_encryption.py +++ b/prowler/providers/aws/services/athena/athena_workgroup_encryption/athena_workgroup_encryption.py @@ -12,7 +12,7 @@ class athena_workgroup_encryption(Check): # Only check for enabled and used workgroups (has recent queries) if ( workgroup.state == "ENABLED" and workgroup.queries - ) or not athena_client.audit_info.ignore_unused_services: + ) or not athena_client.provider.ignore_unused_services: report = Check_Report_AWS(self.metadata()) report.region = workgroup.region report.resource_id = workgroup.name diff --git a/prowler/providers/aws/services/athena/athena_workgroup_enforce_configuration/athena_workgroup_enforce_configuration.py b/prowler/providers/aws/services/athena/athena_workgroup_enforce_configuration/athena_workgroup_enforce_configuration.py index 3fa94a5797..d0043edfc2 100644 --- a/prowler/providers/aws/services/athena/athena_workgroup_enforce_configuration/athena_workgroup_enforce_configuration.py +++ b/prowler/providers/aws/services/athena/athena_workgroup_enforce_configuration/athena_workgroup_enforce_configuration.py @@ -12,7 +12,7 @@ class athena_workgroup_enforce_configuration(Check): # Only check for enabled and used workgroups (has recent queries) if ( workgroup.state == "ENABLED" and workgroup.queries - ) or not athena_client.audit_info.ignore_unused_services: + ) or not athena_client.provider.ignore_unused_services: report = Check_Report_AWS(self.metadata()) report.region = workgroup.region report.resource_id = workgroup.name diff --git a/prowler/providers/aws/services/autoscaling/autoscaling_client.py b/prowler/providers/aws/services/autoscaling/autoscaling_client.py index 9f4d933f62..c267dfdf7f 100644 --- a/prowler/providers/aws/services/autoscaling/autoscaling_client.py +++ b/prowler/providers/aws/services/autoscaling/autoscaling_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.autoscaling.autoscaling_service import AutoScaling +from prowler.providers.common.common import get_global_provider -autoscaling_client = AutoScaling(current_audit_info) +autoscaling_client = AutoScaling(get_global_provider()) diff --git a/prowler/providers/aws/services/autoscaling/autoscaling_service.py b/prowler/providers/aws/services/autoscaling/autoscaling_service.py index 8f37bb5d99..221477f520 100644 --- a/prowler/providers/aws/services/autoscaling/autoscaling_service.py +++ b/prowler/providers/aws/services/autoscaling/autoscaling_service.py @@ -7,9 +7,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## AutoScaling class AutoScaling(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.launch_configurations = [] self.__threading_call__(self.__describe_launch_configurations__) self.groups = [] diff --git a/prowler/providers/aws/services/awslambda/awslambda_client.py b/prowler/providers/aws/services/awslambda/awslambda_client.py index 355bda1fc2..64f8779f4e 100644 --- a/prowler/providers/aws/services/awslambda/awslambda_client.py +++ b/prowler/providers/aws/services/awslambda/awslambda_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.awslambda.awslambda_service import Lambda +from prowler.providers.common.common import get_global_provider -awslambda_client = Lambda(current_audit_info) +awslambda_client = Lambda(get_global_provider()) diff --git a/prowler/providers/aws/services/awslambda/awslambda_service.py b/prowler/providers/aws/services/awslambda/awslambda_service.py index 3b9d307e1c..78faad6066 100644 --- a/prowler/providers/aws/services/awslambda/awslambda_service.py +++ b/prowler/providers/aws/services/awslambda/awslambda_service.py @@ -15,9 +15,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## Lambda class Lambda(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.functions = {} self.__threading_call__(self.__list_functions__) self.__list_tags_for_resource__() @@ -26,7 +26,7 @@ class Lambda(AWSService): # awslambda_function_no_secrets_in_code check is set if ( "awslambda_function_no_secrets_in_code" - in audit_info.audit_metadata.expected_checks + in provider.audit_metadata.expected_checks ): self.__threading_call__(self.__get_function__) diff --git a/prowler/providers/aws/services/backup/backup_client.py b/prowler/providers/aws/services/backup/backup_client.py index db6fdfe67e..371dbb4591 100644 --- a/prowler/providers/aws/services/backup/backup_client.py +++ b/prowler/providers/aws/services/backup/backup_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.backup.backup_service import Backup +from prowler.providers.common.common import get_global_provider -backup_client = Backup(current_audit_info) +backup_client = Backup(get_global_provider()) diff --git a/prowler/providers/aws/services/backup/backup_service.py b/prowler/providers/aws/services/backup/backup_service.py index 8e77349af1..fec72fc3ca 100644 --- a/prowler/providers/aws/services/backup/backup_service.py +++ b/prowler/providers/aws/services/backup/backup_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## Backup class Backup(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.backup_vaults = [] self.__threading_call__(self.__list_backup_vaults__) self.backup_plans = [] diff --git a/prowler/providers/aws/services/cloudformation/cloudformation_client.py b/prowler/providers/aws/services/cloudformation/cloudformation_client.py index 47461271ad..b48434a7a4 100644 --- a/prowler/providers/aws/services/cloudformation/cloudformation_client.py +++ b/prowler/providers/aws/services/cloudformation/cloudformation_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.cloudformation.cloudformation_service import ( CloudFormation, ) +from prowler.providers.common.common import get_global_provider -cloudformation_client = CloudFormation(current_audit_info) +cloudformation_client = CloudFormation(get_global_provider()) diff --git a/prowler/providers/aws/services/cloudformation/cloudformation_service.py b/prowler/providers/aws/services/cloudformation/cloudformation_service.py index f994db9065..76f76a2205 100644 --- a/prowler/providers/aws/services/cloudformation/cloudformation_service.py +++ b/prowler/providers/aws/services/cloudformation/cloudformation_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## CloudFormation class CloudFormation(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.stacks = [] self.__threading_call__(self.__describe_stacks__) self.__describe_stack__() diff --git a/prowler/providers/aws/services/cloudfront/cloudfront_client.py b/prowler/providers/aws/services/cloudfront/cloudfront_client.py index d33af5dfdf..1a2430876e 100644 --- a/prowler/providers/aws/services/cloudfront/cloudfront_client.py +++ b/prowler/providers/aws/services/cloudfront/cloudfront_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.cloudfront.cloudfront_service import CloudFront +from prowler.providers.common.common import get_global_provider -cloudfront_client = CloudFront(current_audit_info) +cloudfront_client = CloudFront(get_global_provider()) diff --git a/prowler/providers/aws/services/cloudfront/cloudfront_service.py b/prowler/providers/aws/services/cloudfront/cloudfront_service.py index bbab537925..05e60138d8 100644 --- a/prowler/providers/aws/services/cloudfront/cloudfront_service.py +++ b/prowler/providers/aws/services/cloudfront/cloudfront_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## CloudFront class CloudFront(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info, global_service=True) + super().__init__(__class__.__name__, provider, global_service=True) self.distributions = {} self.__list_distributions__(self.client, self.region) self.__get_distribution_config__(self.client, self.distributions, self.region) diff --git a/prowler/providers/aws/services/cloudtrail/cloudtrail_client.py b/prowler/providers/aws/services/cloudtrail/cloudtrail_client.py index 0c22cb6ba8..8c969b8664 100644 --- a/prowler/providers/aws/services/cloudtrail/cloudtrail_client.py +++ b/prowler/providers/aws/services/cloudtrail/cloudtrail_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.cloudtrail.cloudtrail_service import Cloudtrail +from prowler.providers.common.common import get_global_provider -cloudtrail_client = Cloudtrail(current_audit_info) +cloudtrail_client = Cloudtrail(get_global_provider()) diff --git a/prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_read_enabled/cloudtrail_s3_dataevents_read_enabled.py b/prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_read_enabled/cloudtrail_s3_dataevents_read_enabled.py index 6b63bd496c..e37d038c4b 100644 --- a/prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_read_enabled/cloudtrail_s3_dataevents_read_enabled.py +++ b/prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_read_enabled/cloudtrail_s3_dataevents_read_enabled.py @@ -50,7 +50,7 @@ class cloudtrail_s3_dataevents_read_enabled(Check): report.status_extended = f"Trail {trail.name} from home region {trail.home_region} has an advanced data event selector to record all S3 object-level API operations." findings.append(report) if not findings and ( - s3_client.buckets or not cloudtrail_client.audit_info.ignore_unused_services + s3_client.buckets or not cloudtrail_client.provider.ignore_unused_services ): report = Check_Report_AWS(self.metadata()) report.region = cloudtrail_client.region diff --git a/prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_write_enabled/cloudtrail_s3_dataevents_write_enabled.py b/prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_write_enabled/cloudtrail_s3_dataevents_write_enabled.py index 425f78f86e..58d6313414 100644 --- a/prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_write_enabled/cloudtrail_s3_dataevents_write_enabled.py +++ b/prowler/providers/aws/services/cloudtrail/cloudtrail_s3_dataevents_write_enabled/cloudtrail_s3_dataevents_write_enabled.py @@ -50,7 +50,7 @@ class cloudtrail_s3_dataevents_write_enabled(Check): report.status_extended = f"Trail {trail.name} from home region {trail.home_region} has an advanced data event selector to record all S3 object-level API operations." findings.append(report) if not findings and ( - s3_client.buckets or not cloudtrail_client.audit_info.ignore_unused_services + s3_client.buckets or not cloudtrail_client.provider.ignore_unused_services ): report = Check_Report_AWS(self.metadata()) report.region = cloudtrail_client.region diff --git a/prowler/providers/aws/services/cloudtrail/cloudtrail_service.py b/prowler/providers/aws/services/cloudtrail/cloudtrail_service.py index 2e6bc0288c..06de17737b 100644 --- a/prowler/providers/aws/services/cloudtrail/cloudtrail_service.py +++ b/prowler/providers/aws/services/cloudtrail/cloudtrail_service.py @@ -11,9 +11,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################### CLOUDTRAIL class Cloudtrail(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.trails = [] self.__threading_call__(self.__get_trails__) self.__get_trail_status__() diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_client.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_client.py index 33a8c85e66..d5ca262147 100644 --- a/prowler/providers/aws/services/cloudwatch/cloudwatch_client.py +++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.cloudwatch.cloudwatch_service import CloudWatch +from prowler.providers.common.common import get_global_provider -cloudwatch_client = CloudWatch(current_audit_info) +cloudwatch_client = CloudWatch(get_global_provider()) diff --git a/prowler/providers/aws/services/cloudwatch/cloudwatch_service.py b/prowler/providers/aws/services/cloudwatch/cloudwatch_service.py index f213c81646..c765c8e0bb 100644 --- a/prowler/providers/aws/services/cloudwatch/cloudwatch_service.py +++ b/prowler/providers/aws/services/cloudwatch/cloudwatch_service.py @@ -11,9 +11,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## CloudWatch class CloudWatch(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.metric_alarms = [] self.__threading_call__(self.__describe_alarms__) self.__list_tags_for_resource__() @@ -64,16 +64,16 @@ class CloudWatch(AWSService): ################## CloudWatch Logs class Logs(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.metric_filters = [] self.log_groups = [] self.__threading_call__(self.__describe_metric_filters__) self.__threading_call__(self.__describe_log_groups__) if ( "cloudwatch_log_group_no_secrets_in_logs" - in audit_info.audit_metadata.expected_checks + in provider.audit_metadata.expected_checks ): self.events_per_log_group_threshold = ( 1000 # The threshold for number of events to return per log group. diff --git a/prowler/providers/aws/services/cloudwatch/logs_client.py b/prowler/providers/aws/services/cloudwatch/logs_client.py index a937c9036d..a2901b8862 100644 --- a/prowler/providers/aws/services/cloudwatch/logs_client.py +++ b/prowler/providers/aws/services/cloudwatch/logs_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.cloudwatch.cloudwatch_service import Logs +from prowler.providers.common.common import get_global_provider -logs_client = Logs(current_audit_info) +logs_client = Logs(get_global_provider()) diff --git a/prowler/providers/aws/services/codeartifact/codeartifact_client.py b/prowler/providers/aws/services/codeartifact/codeartifact_client.py index 3c22918d0f..59cbdc0c5d 100644 --- a/prowler/providers/aws/services/codeartifact/codeartifact_client.py +++ b/prowler/providers/aws/services/codeartifact/codeartifact_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.codeartifact.codeartifact_service import ( CodeArtifact, ) +from prowler.providers.common.common import get_global_provider -codeartifact_client = CodeArtifact(current_audit_info) +codeartifact_client = CodeArtifact(get_global_provider()) diff --git a/prowler/providers/aws/services/codeartifact/codeartifact_service.py b/prowler/providers/aws/services/codeartifact/codeartifact_service.py index d0d6a65701..039faa804a 100644 --- a/prowler/providers/aws/services/codeartifact/codeartifact_service.py +++ b/prowler/providers/aws/services/codeartifact/codeartifact_service.py @@ -11,9 +11,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## CodeArtifact class CodeArtifact(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) # repositories is a dictionary containing all the codeartifact service information self.repositories = {} self.__threading_call__(self.__list_repositories__) diff --git a/prowler/providers/aws/services/codebuild/codebuild_client.py b/prowler/providers/aws/services/codebuild/codebuild_client.py index bfc1138491..39621c1ac4 100644 --- a/prowler/providers/aws/services/codebuild/codebuild_client.py +++ b/prowler/providers/aws/services/codebuild/codebuild_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.codebuild.codebuild_service import Codebuild +from prowler.providers.common.common import get_global_provider -codebuild_client = Codebuild(current_audit_info) +codebuild_client = Codebuild(get_global_provider()) diff --git a/prowler/providers/aws/services/codebuild/codebuild_service.py b/prowler/providers/aws/services/codebuild/codebuild_service.py index 9b0ab4191b..ff65734eb9 100644 --- a/prowler/providers/aws/services/codebuild/codebuild_service.py +++ b/prowler/providers/aws/services/codebuild/codebuild_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################### Codebuild class Codebuild(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.projects = [] self.__threading_call__(self.__list_projects__) self.__list_builds_for_project__() diff --git a/prowler/providers/aws/services/config/config_client.py b/prowler/providers/aws/services/config/config_client.py index 05f0fc02f2..30ccfa89f9 100644 --- a/prowler/providers/aws/services/config/config_client.py +++ b/prowler/providers/aws/services/config/config_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.config.config_service import Config +from prowler.providers.common.common import get_global_provider -config_client = Config(current_audit_info) +config_client = Config(get_global_provider()) diff --git a/prowler/providers/aws/services/config/config_service.py b/prowler/providers/aws/services/config/config_service.py index 5e6df4c030..49b742153a 100644 --- a/prowler/providers/aws/services/config/config_service.py +++ b/prowler/providers/aws/services/config/config_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## Config class Config(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.recorders = [] self.__threading_call__(self.__describe_configuration_recorder_status__) diff --git a/prowler/providers/aws/services/directoryservice/directoryservice_client.py b/prowler/providers/aws/services/directoryservice/directoryservice_client.py index 42c42b6316..b522373a71 100644 --- a/prowler/providers/aws/services/directoryservice/directoryservice_client.py +++ b/prowler/providers/aws/services/directoryservice/directoryservice_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.directoryservice.directoryservice_service import ( DirectoryService, ) +from prowler.providers.common.common import get_global_provider -directoryservice_client = DirectoryService(current_audit_info) +directoryservice_client = DirectoryService(get_global_provider()) diff --git a/prowler/providers/aws/services/directoryservice/directoryservice_service.py b/prowler/providers/aws/services/directoryservice/directoryservice_service.py index 116619b135..9e107092ba 100644 --- a/prowler/providers/aws/services/directoryservice/directoryservice_service.py +++ b/prowler/providers/aws/services/directoryservice/directoryservice_service.py @@ -12,9 +12,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## DirectoryService class DirectoryService(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__("ds", audit_info) + super().__init__("ds", provider) self.directories = {} self.__threading_call__(self.__describe_directories__) self.__threading_call__(self.__list_log_subscriptions__) diff --git a/prowler/providers/aws/services/dlm/dlm_client.py b/prowler/providers/aws/services/dlm/dlm_client.py index 877b198912..553cfb5e14 100644 --- a/prowler/providers/aws/services/dlm/dlm_client.py +++ b/prowler/providers/aws/services/dlm/dlm_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.dlm.dlm_service import DLM +from prowler.providers.common.common import get_global_provider -dlm_client = DLM(current_audit_info) +dlm_client = DLM(get_global_provider()) diff --git a/prowler/providers/aws/services/dlm/dlm_service.py b/prowler/providers/aws/services/dlm/dlm_service.py index 1c620a4405..4f176eafaa 100644 --- a/prowler/providers/aws/services/dlm/dlm_service.py +++ b/prowler/providers/aws/services/dlm/dlm_service.py @@ -6,9 +6,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## Data Lifecycle Manager class DLM(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.lifecycle_policies = {} self.__threading_call__(self.__get_lifecycle_policies__) diff --git a/prowler/providers/aws/services/documentdb/documentdb_client.py b/prowler/providers/aws/services/documentdb/documentdb_client.py index b1477ae0e8..6998b857a2 100644 --- a/prowler/providers/aws/services/documentdb/documentdb_client.py +++ b/prowler/providers/aws/services/documentdb/documentdb_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.documentdb.documentdb_service import DocumentDB +from prowler.providers.common.common import get_global_provider -documentdb_client = DocumentDB(current_audit_info) +documentdb_client = DocumentDB(get_global_provider()) diff --git a/prowler/providers/aws/services/documentdb/documentdb_service.py b/prowler/providers/aws/services/documentdb/documentdb_service.py index 9560c2face..bc004b207a 100644 --- a/prowler/providers/aws/services/documentdb/documentdb_service.py +++ b/prowler/providers/aws/services/documentdb/documentdb_service.py @@ -9,10 +9,10 @@ from prowler.providers.aws.lib.service.service import AWSService ################## DocumentDB class DocumentDB(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ self.service_name = "docdb" - super().__init__(self.service_name, audit_info) + super().__init__(self.service_name, provider) self.db_instances = {} self.__threading_call__(self.__describe_db_instances__) self.__list_tags_for_resource__() diff --git a/prowler/providers/aws/services/drs/drs_client.py b/prowler/providers/aws/services/drs/drs_client.py index 0ab6efb356..8e0132467c 100644 --- a/prowler/providers/aws/services/drs/drs_client.py +++ b/prowler/providers/aws/services/drs/drs_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.drs.drs_service import DRS +from prowler.providers.common.common import get_global_provider -drs_client = DRS(current_audit_info) +drs_client = DRS(get_global_provider()) diff --git a/prowler/providers/aws/services/drs/drs_service.py b/prowler/providers/aws/services/drs/drs_service.py index 3fe4ad1b33..76f4818e47 100644 --- a/prowler/providers/aws/services/drs/drs_service.py +++ b/prowler/providers/aws/services/drs/drs_service.py @@ -8,9 +8,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## DRS (Elastic Disaster Recovery Service) class DRS(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.drs_services = [] self.__threading_call__(self.__describe_jobs__) diff --git a/prowler/providers/aws/services/dynamodb/dax_client.py b/prowler/providers/aws/services/dynamodb/dax_client.py index ff3927ab92..afe3dea814 100644 --- a/prowler/providers/aws/services/dynamodb/dax_client.py +++ b/prowler/providers/aws/services/dynamodb/dax_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.dynamodb.dynamodb_service import DAX +from prowler.providers.common.common import get_global_provider -dax_client = DAX(current_audit_info) +dax_client = DAX(get_global_provider()) diff --git a/prowler/providers/aws/services/dynamodb/dynamodb_client.py b/prowler/providers/aws/services/dynamodb/dynamodb_client.py index a79f6ba558..639fba991f 100644 --- a/prowler/providers/aws/services/dynamodb/dynamodb_client.py +++ b/prowler/providers/aws/services/dynamodb/dynamodb_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.dynamodb.dynamodb_service import DynamoDB +from prowler.providers.common.common import get_global_provider -dynamodb_client = DynamoDB(current_audit_info) +dynamodb_client = DynamoDB(get_global_provider()) diff --git a/prowler/providers/aws/services/dynamodb/dynamodb_service.py b/prowler/providers/aws/services/dynamodb/dynamodb_service.py index ef2349a4e9..626a916c61 100644 --- a/prowler/providers/aws/services/dynamodb/dynamodb_service.py +++ b/prowler/providers/aws/services/dynamodb/dynamodb_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## DynamoDB class DynamoDB(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.tables = [] self.__threading_call__(self.__list_tables__) self.__describe_table__() @@ -121,9 +121,9 @@ class DynamoDB(AWSService): ################## DynamoDB DAX class DAX(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.clusters = [] self.__threading_call__(self.__describe_clusters__) self.__list_tags_for_resource__() diff --git a/prowler/providers/aws/services/ec2/ec2_client.py b/prowler/providers/aws/services/ec2/ec2_client.py index 2541c7e614..4eada699aa 100644 --- a/prowler/providers/aws/services/ec2/ec2_client.py +++ b/prowler/providers/aws/services/ec2/ec2_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.ec2.ec2_service import EC2 +from prowler.providers.common.common import get_global_provider -ec2_client = EC2(current_audit_info) +ec2_client = EC2(get_global_provider()) diff --git a/prowler/providers/aws/services/ec2/ec2_ebs_default_encryption/ec2_ebs_default_encryption.py b/prowler/providers/aws/services/ec2/ec2_ebs_default_encryption/ec2_ebs_default_encryption.py index a208d1ffa4..e81a87088f 100644 --- a/prowler/providers/aws/services/ec2/ec2_ebs_default_encryption/ec2_ebs_default_encryption.py +++ b/prowler/providers/aws/services/ec2/ec2_ebs_default_encryption/ec2_ebs_default_encryption.py @@ -15,8 +15,7 @@ class ec2_ebs_default_encryption(Check): report.status_extended = "EBS Default Encryption is activated." findings.append(report) elif ( - not ec2_client.audit_info.ignore_unused_services - or ebs_encryption.volumes + not ec2_client.provider.ignore_unused_services or ebs_encryption.volumes ): report.status = "FAIL" report.status_extended = "EBS Default Encryption is not activated." diff --git a/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_any_port/ec2_networkacl_allow_ingress_any_port.py b/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_any_port/ec2_networkacl_allow_ingress_any_port.py index 224b1e8d8e..55c4c796ef 100644 --- a/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_any_port/ec2_networkacl_allow_ingress_any_port.py +++ b/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_any_port/ec2_networkacl_allow_ingress_any_port.py @@ -10,7 +10,7 @@ class ec2_networkacl_allow_ingress_any_port(Check): check_port = 0 for network_acl in ec2_client.network_acls: if ( - not ec2_client.audit_info.ignore_unused_services + not ec2_client.provider.ignore_unused_services or network_acl.region in ec2_client.regions_with_sgs ): # If some entry allows it, that ACL is not securely configured diff --git a/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_22/ec2_networkacl_allow_ingress_tcp_port_22.py b/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_22/ec2_networkacl_allow_ingress_tcp_port_22.py index 272b07deea..f8b8526632 100644 --- a/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_22/ec2_networkacl_allow_ingress_tcp_port_22.py +++ b/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_22/ec2_networkacl_allow_ingress_tcp_port_22.py @@ -10,7 +10,7 @@ class ec2_networkacl_allow_ingress_tcp_port_22(Check): check_port = 22 for network_acl in ec2_client.network_acls: if ( - not ec2_client.audit_info.ignore_unused_services + not ec2_client.provider.ignore_unused_services or network_acl.region in ec2_client.regions_with_sgs ): # If some entry allows it, that ACL is not securely configured diff --git a/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_3389/ec2_networkacl_allow_ingress_tcp_port_3389.py b/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_3389/ec2_networkacl_allow_ingress_tcp_port_3389.py index 148e3c89e7..42b873b62f 100644 --- a/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_3389/ec2_networkacl_allow_ingress_tcp_port_3389.py +++ b/prowler/providers/aws/services/ec2/ec2_networkacl_allow_ingress_tcp_port_3389/ec2_networkacl_allow_ingress_tcp_port_3389.py @@ -10,7 +10,7 @@ class ec2_networkacl_allow_ingress_tcp_port_3389(Check): check_port = 3389 for network_acl in ec2_client.network_acls: if ( - not ec2_client.audit_info.ignore_unused_services + not ec2_client.provider.ignore_unused_services or network_acl.region in ec2_client.regions_with_sgs ): # If some entry allows it, that ACL is not securely configured diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_any_port/ec2_securitygroup_allow_ingress_from_internet_to_any_port.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_any_port/ec2_securitygroup_allow_ingress_from_internet_to_any_port.py index 309caef361..88c1f770c0 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_any_port/ec2_securitygroup_allow_ingress_from_internet_to_any_port.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_any_port/ec2_securitygroup_allow_ingress_from_internet_to_any_port.py @@ -8,7 +8,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_any_port(Check): findings = [] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018.py index 160a6eaaf5..f07d561db2 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018/ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_port_mongodb_27017_27018( check_ports = [27017, 27018] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21.py index 80c2677beb..531cd0e6da 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21/ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_ftp_port_20_21(Check) check_ports = [20, 21] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22.py index 0a2ecc35e5..98e4707db6 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_22(Check): check_ports = [22] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389.py index b9ae1fa267..4ba73e2ec8 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_3389(Check): check_ports = [3389] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888.py index 67b6d10ff9..3aa513d1a5 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9160_8888.py @@ -12,7 +12,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_cassandra_7199_9 check_ports = [7199, 9160, 8888] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601.py index f726df6a41..a4b105d9e5 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_kibana_9200_9300_5601.py @@ -12,7 +12,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_elasticsearch_ki check_ports = [9200, 9300, 5601] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092.py index 7ce02df92d..d2e8632354 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_kafka_9092(Check check_ports = [9092] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211.py index 6266d2d2ff..215eb0c3b6 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_memcached_11211( check_ports = [11211] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306.py index eaca5d6af4..6678aa04e4 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_mysql_3306(Check check_ports = [3306] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483.py index f51709a073..c9da15e8c6 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_oracle_1521_2483 check_ports = [1521, 2483] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432.py index b1043d8b83..c9a6786865 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_postgres_5432(Ch check_ports = [5432] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379.py index e9c7a3f1ab..6a5701b6d1 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_redis_6379(Check check_ports = [6379] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434.py index 564af09055..18cab0fb9e 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_1434.py @@ -12,7 +12,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_sql_server_1433_ check_ports = [1433, 1434] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23.py index e1fabd4508..e8b173fbfd 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23/ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23.py @@ -10,7 +10,7 @@ class ec2_securitygroup_allow_ingress_from_internet_to_tcp_port_telnet_23(Check) check_ports = [23] for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_wide_open_public_ipv4/ec2_securitygroup_allow_wide_open_public_ipv4.py b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_wide_open_public_ipv4/ec2_securitygroup_allow_wide_open_public_ipv4.py index 625da3a758..4a90f4e95b 100644 --- a/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_wide_open_public_ipv4/ec2_securitygroup_allow_wide_open_public_ipv4.py +++ b/prowler/providers/aws/services/ec2/ec2_securitygroup_allow_wide_open_public_ipv4/ec2_securitygroup_allow_wide_open_public_ipv4.py @@ -11,7 +11,7 @@ class ec2_securitygroup_allow_wide_open_public_ipv4(Check): cidr_treshold = 24 for security_group in ec2_client.security_groups: # Check if ignoring flag is set and if the VPC and the SG is in use - if not ec2_client.audit_info.ignore_unused_services or ( + if not ec2_client.provider.ignore_unused_services or ( security_group.vpc_id in vpc_client.vpcs and vpc_client.vpcs[security_group.vpc_id].in_use and len(security_group.network_interfaces) > 0 diff --git a/prowler/providers/aws/services/ec2/ec2_service.py b/prowler/providers/aws/services/ec2/ec2_service.py index 4838f04115..b08ca8aa3c 100644 --- a/prowler/providers/aws/services/ec2/ec2_service.py +++ b/prowler/providers/aws/services/ec2/ec2_service.py @@ -12,9 +12,9 @@ from prowler.providers.aws.services.ec2.lib.security_groups import check_securit ################## EC2 class EC2(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.instances = [] self.__threading_call__(self.__describe_instances__) self.__get_instance_user_data__() diff --git a/prowler/providers/aws/services/ecr/ecr_client.py b/prowler/providers/aws/services/ecr/ecr_client.py index d9775a9c36..8314806474 100644 --- a/prowler/providers/aws/services/ecr/ecr_client.py +++ b/prowler/providers/aws/services/ecr/ecr_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.ecr.ecr_service import ECR +from prowler.providers.common.common import get_global_provider -ecr_client = ECR(current_audit_info) +ecr_client = ECR(get_global_provider()) diff --git a/prowler/providers/aws/services/ecr/ecr_service.py b/prowler/providers/aws/services/ecr/ecr_service.py index 00bd72bdcb..c0d5f3d7cb 100644 --- a/prowler/providers/aws/services/ecr/ecr_service.py +++ b/prowler/providers/aws/services/ecr/ecr_service.py @@ -12,10 +12,10 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ ECR class ECR(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) - self.registry_id = audit_info.audited_account + super().__init__(__class__.__name__, provider) + self.registry_id = self.audited_account self.registries = {} self.__threading_call__(self.__describe_registries_and_repositories__) self.__threading_call__(self.__describe_repository_policies__) diff --git a/prowler/providers/aws/services/ecs/ecs_client.py b/prowler/providers/aws/services/ecs/ecs_client.py index 5f9d59c1be..f0bc85b6cb 100644 --- a/prowler/providers/aws/services/ecs/ecs_client.py +++ b/prowler/providers/aws/services/ecs/ecs_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.ecs.ecs_service import ECS +from prowler.providers.common.common import get_global_provider -ecs_client = ECS(current_audit_info) +ecs_client = ECS(get_global_provider()) diff --git a/prowler/providers/aws/services/ecs/ecs_service.py b/prowler/providers/aws/services/ecs/ecs_service.py index 1dad47524c..ed222e04f1 100644 --- a/prowler/providers/aws/services/ecs/ecs_service.py +++ b/prowler/providers/aws/services/ecs/ecs_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ ECS class ECS(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.task_definitions = [] self.__threading_call__(self.__list_task_definitions__) self.__describe_task_definition__() diff --git a/prowler/providers/aws/services/efs/efs_client.py b/prowler/providers/aws/services/efs/efs_client.py index 00e71cdc8f..30d4f6ddb1 100644 --- a/prowler/providers/aws/services/efs/efs_client.py +++ b/prowler/providers/aws/services/efs/efs_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.efs.efs_service import EFS +from prowler.providers.common.common import get_global_provider -efs_client = EFS(current_audit_info) +efs_client = EFS(get_global_provider()) diff --git a/prowler/providers/aws/services/efs/efs_service.py b/prowler/providers/aws/services/efs/efs_service.py index f4d9104df6..8465623995 100644 --- a/prowler/providers/aws/services/efs/efs_service.py +++ b/prowler/providers/aws/services/efs/efs_service.py @@ -11,9 +11,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################### EFS class EFS(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.filesystems = [] self.__threading_call__(self.__describe_file_systems__) self.__describe_file_system_policies__() diff --git a/prowler/providers/aws/services/eks/eks_client.py b/prowler/providers/aws/services/eks/eks_client.py index 4eaad65208..e5dfd326cd 100644 --- a/prowler/providers/aws/services/eks/eks_client.py +++ b/prowler/providers/aws/services/eks/eks_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.eks.eks_service import EKS +from prowler.providers.common.common import get_global_provider -eks_client = EKS(current_audit_info) +eks_client = EKS(get_global_provider()) diff --git a/prowler/providers/aws/services/eks/eks_service.py b/prowler/providers/aws/services/eks/eks_service.py index f5f9cdf539..70ac050e75 100644 --- a/prowler/providers/aws/services/eks/eks_service.py +++ b/prowler/providers/aws/services/eks/eks_service.py @@ -4,16 +4,14 @@ from pydantic import BaseModel from prowler.lib.logger import logger from prowler.lib.scan_filters.scan_filters import is_resource_filtered -from prowler.providers.aws.aws_provider import generate_regional_clients from prowler.providers.aws.lib.service.service import AWSService ################################ EKS class EKS(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) - self.regional_clients = generate_regional_clients(self.service, audit_info) + super().__init__(__class__.__name__, provider) self.clusters = [] self.__threading_call__(self.__list_clusters__) self.__describe_cluster__(self.regional_clients) diff --git a/prowler/providers/aws/services/elasticache/elasticache_client.py b/prowler/providers/aws/services/elasticache/elasticache_client.py index 5b6669bdc7..fed5adab5b 100644 --- a/prowler/providers/aws/services/elasticache/elasticache_client.py +++ b/prowler/providers/aws/services/elasticache/elasticache_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.elasticache.elasticache_service import ElastiCache +from prowler.providers.common.common import get_global_provider -elasticache_client = ElastiCache(current_audit_info) +elasticache_client = ElastiCache(get_global_provider()) diff --git a/prowler/providers/aws/services/elasticache/elasticache_service.py b/prowler/providers/aws/services/elasticache/elasticache_service.py index d41d2cac6d..353ad4ff8c 100644 --- a/prowler/providers/aws/services/elasticache/elasticache_service.py +++ b/prowler/providers/aws/services/elasticache/elasticache_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ Elasticache class ElastiCache(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.clusters = {} self.__threading_call__(self.__describe_cache_clusters__) self.__threading_call__(self.__describe_cache_subnet_groups__) diff --git a/prowler/providers/aws/services/elb/elb_client.py b/prowler/providers/aws/services/elb/elb_client.py index 25c4695640..bac9a3ba87 100644 --- a/prowler/providers/aws/services/elb/elb_client.py +++ b/prowler/providers/aws/services/elb/elb_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.elb.elb_service import ELB +from prowler.providers.common.common import get_global_provider -elb_client = ELB(current_audit_info) +elb_client = ELB(get_global_provider()) diff --git a/prowler/providers/aws/services/elb/elb_service.py b/prowler/providers/aws/services/elb/elb_service.py index 31de0c4fbf..877ae780a9 100644 --- a/prowler/providers/aws/services/elb/elb_service.py +++ b/prowler/providers/aws/services/elb/elb_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################### ELB class ELB(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.loadbalancers = [] self.__threading_call__(self.__describe_load_balancers__) self.__threading_call__(self.__describe_load_balancer_attributes__) diff --git a/prowler/providers/aws/services/elbv2/elbv2_client.py b/prowler/providers/aws/services/elbv2/elbv2_client.py index 4b4cfe6e7a..3e22247f49 100644 --- a/prowler/providers/aws/services/elbv2/elbv2_client.py +++ b/prowler/providers/aws/services/elbv2/elbv2_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.elbv2.elbv2_service import ELBv2 +from prowler.providers.common.common import get_global_provider -elbv2_client = ELBv2(current_audit_info) +elbv2_client = ELBv2(get_global_provider()) diff --git a/prowler/providers/aws/services/elbv2/elbv2_service.py b/prowler/providers/aws/services/elbv2/elbv2_service.py index 4964a8f980..0588ae9455 100644 --- a/prowler/providers/aws/services/elbv2/elbv2_service.py +++ b/prowler/providers/aws/services/elbv2/elbv2_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################### ELBv2 class ELBv2(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.loadbalancersv2 = [] self.__threading_call__(self.__describe_load_balancers__) self.listeners = [] diff --git a/prowler/providers/aws/services/emr/emr_client.py b/prowler/providers/aws/services/emr/emr_client.py index ce022feea5..e01c20803a 100644 --- a/prowler/providers/aws/services/emr/emr_client.py +++ b/prowler/providers/aws/services/emr/emr_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.emr.emr_service import EMR +from prowler.providers.common.common import get_global_provider -emr_client = EMR(current_audit_info) +emr_client = EMR(get_global_provider()) diff --git a/prowler/providers/aws/services/emr/emr_service.py b/prowler/providers/aws/services/emr/emr_service.py index 897b7bcfee..287025daba 100644 --- a/prowler/providers/aws/services/emr/emr_service.py +++ b/prowler/providers/aws/services/emr/emr_service.py @@ -11,9 +11,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## EMR class EMR(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.clusters = {} self.block_public_access_configuration = {} self.__threading_call__(self.__list_clusters__) diff --git a/prowler/providers/aws/services/fms/fms_client.py b/prowler/providers/aws/services/fms/fms_client.py index 0bd41b0c4e..e20a950736 100644 --- a/prowler/providers/aws/services/fms/fms_client.py +++ b/prowler/providers/aws/services/fms/fms_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.fms.fms_service import FMS +from prowler.providers.common.common import get_global_provider -fms_client = FMS(current_audit_info) +fms_client = FMS(get_global_provider()) diff --git a/prowler/providers/aws/services/fms/fms_service.py b/prowler/providers/aws/services/fms/fms_service.py index 6c781a6701..5e645ae544 100644 --- a/prowler/providers/aws/services/fms/fms_service.py +++ b/prowler/providers/aws/services/fms/fms_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## FMS class FMS(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info, global_service=True) + super().__init__(__class__.__name__, provider, global_service=True) self.fms_admin_account = True self.fms_policies = [] self.__list_policies__() diff --git a/prowler/providers/aws/services/glacier/glacier_client.py b/prowler/providers/aws/services/glacier/glacier_client.py index a099cd9ce2..2c50e41b7b 100644 --- a/prowler/providers/aws/services/glacier/glacier_client.py +++ b/prowler/providers/aws/services/glacier/glacier_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.glacier.glacier_service import Glacier +from prowler.providers.common.common import get_global_provider -glacier_client = Glacier(current_audit_info) +glacier_client = Glacier(get_global_provider()) diff --git a/prowler/providers/aws/services/glacier/glacier_service.py b/prowler/providers/aws/services/glacier/glacier_service.py index a74e3dbc3a..756c210ea9 100644 --- a/prowler/providers/aws/services/glacier/glacier_service.py +++ b/prowler/providers/aws/services/glacier/glacier_service.py @@ -11,9 +11,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## Glacier class Glacier(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.vaults = {} self.__threading_call__(self.__list_vaults__) self.__threading_call__(self.__get_vault_access_policy__) diff --git a/prowler/providers/aws/services/globalaccelerator/globalaccelerator_client.py b/prowler/providers/aws/services/globalaccelerator/globalaccelerator_client.py index 58991d16b6..36f901ab90 100644 --- a/prowler/providers/aws/services/globalaccelerator/globalaccelerator_client.py +++ b/prowler/providers/aws/services/globalaccelerator/globalaccelerator_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.globalaccelerator.globalaccelerator_service import ( GlobalAccelerator, ) +from prowler.providers.common.common import get_global_provider -globalaccelerator_client = GlobalAccelerator(current_audit_info) +globalaccelerator_client = GlobalAccelerator(get_global_provider()) diff --git a/prowler/providers/aws/services/globalaccelerator/globalaccelerator_service.py b/prowler/providers/aws/services/globalaccelerator/globalaccelerator_service.py index 6e79eaaf62..c394a3c095 100644 --- a/prowler/providers/aws/services/globalaccelerator/globalaccelerator_service.py +++ b/prowler/providers/aws/services/globalaccelerator/globalaccelerator_service.py @@ -7,11 +7,11 @@ from prowler.providers.aws.lib.service.service import AWSService ################### GlobalAccelerator class GlobalAccelerator(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.accelerators = {} - if audit_info.audited_partition == "aws": + if provider.audited_partition == "aws": # Global Accelerator is a global service that supports endpoints in multiple AWS Regions # but you must specify the US West (Oregon) Region to create, update, or otherwise work with accelerators. # That is, for example, specify --region us-west-2 on AWS CLI commands. diff --git a/prowler/providers/aws/services/glue/glue_client.py b/prowler/providers/aws/services/glue/glue_client.py index 4647967fec..dfdb6af066 100644 --- a/prowler/providers/aws/services/glue/glue_client.py +++ b/prowler/providers/aws/services/glue/glue_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.glue.glue_service import Glue +from prowler.providers.common.common import get_global_provider -glue_client = Glue(current_audit_info) +glue_client = Glue(get_global_provider()) diff --git a/prowler/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled.py b/prowler/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled.py index f71b4a0bf7..b339790127 100644 --- a/prowler/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled.py +++ b/prowler/providers/aws/services/glue/glue_data_catalogs_connection_passwords_encryption_enabled/glue_data_catalogs_connection_passwords_encryption_enabled.py @@ -7,7 +7,7 @@ class glue_data_catalogs_connection_passwords_encryption_enabled(Check): findings = [] for encryption in glue_client.catalog_encryption_settings: # Check only if there are Glue Tables - if encryption.tables or not glue_client.audit_info.ignore_unused_services: + if encryption.tables or not glue_client.provider.ignore_unused_services: report = Check_Report_AWS(self.metadata()) report.resource_id = glue_client.audited_account report.resource_arn = glue_client.audited_account_arn diff --git a/prowler/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled.py b/prowler/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled.py index 6ed906cc21..a8ac2105ec 100644 --- a/prowler/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled.py +++ b/prowler/providers/aws/services/glue/glue_data_catalogs_metadata_encryption_enabled/glue_data_catalogs_metadata_encryption_enabled.py @@ -7,7 +7,7 @@ class glue_data_catalogs_metadata_encryption_enabled(Check): findings = [] for encryption in glue_client.catalog_encryption_settings: # Check only if there are Glue Tables - if encryption.tables or not glue_client.audit_info.ignore_unused_services: + if encryption.tables or not glue_client.provider.ignore_unused_services: report = Check_Report_AWS(self.metadata()) report.resource_id = glue_client.audited_account report.resource_arn = glue_client.audited_account_arn diff --git a/prowler/providers/aws/services/glue/glue_service.py b/prowler/providers/aws/services/glue/glue_service.py index 24be4f5928..4c5cdd1469 100644 --- a/prowler/providers/aws/services/glue/glue_service.py +++ b/prowler/providers/aws/services/glue/glue_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## Glue class Glue(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.connections = [] self.__threading_call__(self.__get_connections__) self.tables = [] diff --git a/prowler/providers/aws/services/guardduty/guardduty_client.py b/prowler/providers/aws/services/guardduty/guardduty_client.py index 74320efcb2..36a41c52f7 100644 --- a/prowler/providers/aws/services/guardduty/guardduty_client.py +++ b/prowler/providers/aws/services/guardduty/guardduty_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.guardduty.guardduty_service import GuardDuty +from prowler.providers.common.common import get_global_provider -guardduty_client = GuardDuty(current_audit_info) +guardduty_client = GuardDuty(get_global_provider()) diff --git a/prowler/providers/aws/services/guardduty/guardduty_service.py b/prowler/providers/aws/services/guardduty/guardduty_service.py index f666a342f0..04afe17ee1 100644 --- a/prowler/providers/aws/services/guardduty/guardduty_service.py +++ b/prowler/providers/aws/services/guardduty/guardduty_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ GuardDuty class GuardDuty(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.detectors = [] self.__threading_call__(self.__list_detectors__) self.__get_detector__() diff --git a/prowler/providers/aws/services/iam/iam_client.py b/prowler/providers/aws/services/iam/iam_client.py index 2e855bb21d..8c92ca0204 100644 --- a/prowler/providers/aws/services/iam/iam_client.py +++ b/prowler/providers/aws/services/iam/iam_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.iam.iam_service import IAM +from prowler.providers.common.common import get_global_provider -iam_client = IAM(current_audit_info) +iam_client = IAM(get_global_provider()) diff --git a/prowler/providers/aws/services/iam/iam_service.py b/prowler/providers/aws/services/iam/iam_service.py index ca31b14ac5..21bf63ac28 100644 --- a/prowler/providers/aws/services/iam/iam_service.py +++ b/prowler/providers/aws/services/iam/iam_service.py @@ -48,9 +48,9 @@ def is_service_role(role): ################## IAM class IAM(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.users = self.__get_users__() self.roles = self.__get_roles__() self.account_summary = self.__get_account_summary__() diff --git a/prowler/providers/aws/services/inspector2/inspector2_client.py b/prowler/providers/aws/services/inspector2/inspector2_client.py index b243227cd7..13846315fc 100644 --- a/prowler/providers/aws/services/inspector2/inspector2_client.py +++ b/prowler/providers/aws/services/inspector2/inspector2_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.inspector2.inspector2_service import Inspector2 +from prowler.providers.common.common import get_global_provider -inspector2_client = Inspector2(current_audit_info) +inspector2_client = Inspector2(get_global_provider()) diff --git a/prowler/providers/aws/services/inspector2/inspector2_findings_exist/inspector2_findings_exist.py b/prowler/providers/aws/services/inspector2/inspector2_findings_exist/inspector2_findings_exist.py index e8fd5d2fa7..fad57d213c 100644 --- a/prowler/providers/aws/services/inspector2/inspector2_findings_exist/inspector2_findings_exist.py +++ b/prowler/providers/aws/services/inspector2/inspector2_findings_exist/inspector2_findings_exist.py @@ -33,7 +33,7 @@ class inspector2_findings_exist(Check): ) findings.append(report) else: - if inspector2_client.audit_info.ignore_unused_services: + if inspector2_client.provider.ignore_unused_services: funtions_in_region = False ec2_in_region = False for function in awslambda_client.functions.values(): @@ -42,7 +42,7 @@ class inspector2_findings_exist(Check): for instance in ec2_client.instances: if instance == inspector.region: ec2_in_region = True - if not inspector2_client.audit_info.ignore_unused_services or ( + if not inspector2_client.provider.ignore_unused_services or ( funtions_in_region or ecr_client.registries[inspector.region].repositories or ec2_in_region diff --git a/prowler/providers/aws/services/inspector2/inspector2_service.py b/prowler/providers/aws/services/inspector2/inspector2_service.py index b984e40f37..d5b7ff4d0e 100644 --- a/prowler/providers/aws/services/inspector2/inspector2_service.py +++ b/prowler/providers/aws/services/inspector2/inspector2_service.py @@ -7,9 +7,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ Inspector2 class Inspector2(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.inspectors = [] self.__threading_call__(self.__batch_get_account_status__) self.__list_findings__() diff --git a/prowler/providers/aws/services/kms/kms_client.py b/prowler/providers/aws/services/kms/kms_client.py index 4d65227a28..9890674bc9 100644 --- a/prowler/providers/aws/services/kms/kms_client.py +++ b/prowler/providers/aws/services/kms/kms_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.kms.kms_service import KMS +from prowler.providers.common.common import get_global_provider -kms_client = KMS(current_audit_info) +kms_client = KMS(get_global_provider()) diff --git a/prowler/providers/aws/services/kms/kms_service.py b/prowler/providers/aws/services/kms/kms_service.py index 4dc7fafba3..b0c17b20f8 100644 --- a/prowler/providers/aws/services/kms/kms_service.py +++ b/prowler/providers/aws/services/kms/kms_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## KMS class KMS(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.keys = [] self.__threading_call__(self.__list_keys__) if self.keys: diff --git a/prowler/providers/aws/services/macie/macie_client.py b/prowler/providers/aws/services/macie/macie_client.py index d1cd34a0bf..3d63ba74bb 100644 --- a/prowler/providers/aws/services/macie/macie_client.py +++ b/prowler/providers/aws/services/macie/macie_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.macie.macie_service import Macie +from prowler.providers.common.common import get_global_provider -macie_client = Macie(current_audit_info) +macie_client = Macie(get_global_provider()) diff --git a/prowler/providers/aws/services/macie/macie_is_enabled/macie_is_enabled.py b/prowler/providers/aws/services/macie/macie_is_enabled/macie_is_enabled.py index eeb1d13491..b1e94e0d79 100644 --- a/prowler/providers/aws/services/macie/macie_is_enabled/macie_is_enabled.py +++ b/prowler/providers/aws/services/macie/macie_is_enabled/macie_is_enabled.py @@ -17,7 +17,7 @@ class macie_is_enabled(Check): findings.append(report) else: if ( - not macie_client.audit_info.ignore_unused_services + not macie_client.provider.ignore_unused_services or session.region in s3_client.regions_with_buckets ): if session.status == "PAUSED": diff --git a/prowler/providers/aws/services/macie/macie_service.py b/prowler/providers/aws/services/macie/macie_service.py index 4831aaf858..b644e1d73b 100644 --- a/prowler/providers/aws/services/macie/macie_service.py +++ b/prowler/providers/aws/services/macie/macie_service.py @@ -6,9 +6,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## Macie class Macie(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__("macie2", audit_info) + super().__init__("macie2", provider) self.sessions = [] self.__threading_call__(self.__get_macie_session__) diff --git a/prowler/providers/aws/services/neptune/neptune_client.py b/prowler/providers/aws/services/neptune/neptune_client.py index 1708be453e..5c14060077 100644 --- a/prowler/providers/aws/services/neptune/neptune_client.py +++ b/prowler/providers/aws/services/neptune/neptune_client.py @@ -1,6 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info -from prowler.providers.aws.services.neptune.neptune_service import ( - Neptune, -) +from prowler.providers.aws.services.neptune.neptune_service import Neptune +from prowler.providers.common.common import get_global_provider -neptune_client = Neptune(current_audit_info) +neptune_client = Neptune(get_global_provider()) diff --git a/prowler/providers/aws/services/neptune/neptune_service.py b/prowler/providers/aws/services/neptune/neptune_service.py index aabbbcf334..b850a7b0e1 100644 --- a/prowler/providers/aws/services/neptune/neptune_service.py +++ b/prowler/providers/aws/services/neptune/neptune_service.py @@ -9,10 +9,10 @@ from prowler.providers.aws.lib.service.service import AWSService ################## Neptune class Neptune(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ self.service_name = "neptune" - super().__init__(self.service_name, audit_info) + super().__init__(self.service_name, provider) self.clusters = {} self.__threading_call__(self.__describe_clusters__) self.__threading_call__(self.__describe_db_subnet_groups__) diff --git a/prowler/providers/aws/services/networkfirewall/networkfirewall_client.py b/prowler/providers/aws/services/networkfirewall/networkfirewall_client.py index 685947ac4b..1859622570 100644 --- a/prowler/providers/aws/services/networkfirewall/networkfirewall_client.py +++ b/prowler/providers/aws/services/networkfirewall/networkfirewall_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.networkfirewall.networkfirewall_service import ( NetworkFirewall, ) +from prowler.providers.common.common import get_global_provider -networkfirewall_client = NetworkFirewall(current_audit_info) +networkfirewall_client = NetworkFirewall(get_global_provider()) diff --git a/prowler/providers/aws/services/networkfirewall/networkfirewall_in_all_vpc/networkfirewall_in_all_vpc.py b/prowler/providers/aws/services/networkfirewall/networkfirewall_in_all_vpc/networkfirewall_in_all_vpc.py index 692a93b2ce..f28883efae 100644 --- a/prowler/providers/aws/services/networkfirewall/networkfirewall_in_all_vpc/networkfirewall_in_all_vpc.py +++ b/prowler/providers/aws/services/networkfirewall/networkfirewall_in_all_vpc/networkfirewall_in_all_vpc.py @@ -9,7 +9,7 @@ class networkfirewall_in_all_vpc(Check): def execute(self): findings = [] for vpc in vpc_client.vpcs.values(): - if not vpc_client.audit_info.ignore_unused_services or vpc.in_use: + if not vpc_client.provider.ignore_unused_services or vpc.in_use: report = Check_Report_AWS(self.metadata()) report.region = vpc.region report.resource_id = vpc.id diff --git a/prowler/providers/aws/services/networkfirewall/networkfirewall_service.py b/prowler/providers/aws/services/networkfirewall/networkfirewall_service.py index 9e32bf2be9..1f095df4e1 100644 --- a/prowler/providers/aws/services/networkfirewall/networkfirewall_service.py +++ b/prowler/providers/aws/services/networkfirewall/networkfirewall_service.py @@ -7,9 +7,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## NetworkFirewall class NetworkFirewall(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__("network-firewall", audit_info) + super().__init__("network-firewall", provider) self.network_firewalls = [] self.__threading_call__(self.__list_firewalls__) self.__describe_firewall__() diff --git a/prowler/providers/aws/services/opensearch/opensearch_client.py b/prowler/providers/aws/services/opensearch/opensearch_client.py index fdd7f8f46b..1f4d229c6f 100644 --- a/prowler/providers/aws/services/opensearch/opensearch_client.py +++ b/prowler/providers/aws/services/opensearch/opensearch_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.opensearch.opensearch_service import ( OpenSearchService, ) +from prowler.providers.common.common import get_global_provider -opensearch_client = OpenSearchService(current_audit_info) +opensearch_client = OpenSearchService(get_global_provider()) diff --git a/prowler/providers/aws/services/opensearch/opensearch_service.py b/prowler/providers/aws/services/opensearch/opensearch_service.py index 609589c159..231df1ae53 100644 --- a/prowler/providers/aws/services/opensearch/opensearch_service.py +++ b/prowler/providers/aws/services/opensearch/opensearch_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ OpenSearch class OpenSearchService(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__("opensearch", audit_info) + super().__init__("opensearch", provider) self.opensearch_domains = [] self.__threading_call__(self.__list_domain_names__) self.__describe_domain_config__(self.regional_clients) diff --git a/prowler/providers/aws/services/organizations/organizations_client.py b/prowler/providers/aws/services/organizations/organizations_client.py index f065b4934a..1637d1c17e 100644 --- a/prowler/providers/aws/services/organizations/organizations_client.py +++ b/prowler/providers/aws/services/organizations/organizations_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.organizations.organizations_service import ( Organizations, ) +from prowler.providers.common.common import get_global_provider -organizations_client = Organizations(current_audit_info) +organizations_client = Organizations(get_global_provider()) diff --git a/prowler/providers/aws/services/organizations/organizations_service.py b/prowler/providers/aws/services/organizations/organizations_service.py index 871da04622..472efff23e 100644 --- a/prowler/providers/aws/services/organizations/organizations_service.py +++ b/prowler/providers/aws/services/organizations/organizations_service.py @@ -18,9 +18,9 @@ available_organizations_policies = [ ################## Organizations class Organizations(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.organizations = [] self.policies = [] self.delegated_administrators = [] diff --git a/prowler/providers/aws/services/rds/rds_client.py b/prowler/providers/aws/services/rds/rds_client.py index 6911ab5fb2..d5cba59b34 100644 --- a/prowler/providers/aws/services/rds/rds_client.py +++ b/prowler/providers/aws/services/rds/rds_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.rds.rds_service import RDS +from prowler.providers.common.common import get_global_provider -rds_client = RDS(current_audit_info) +rds_client = RDS(get_global_provider()) diff --git a/prowler/providers/aws/services/rds/rds_service.py b/prowler/providers/aws/services/rds/rds_service.py index 50e5bcf7ac..1a5f88a6d7 100644 --- a/prowler/providers/aws/services/rds/rds_service.py +++ b/prowler/providers/aws/services/rds/rds_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## RDS class RDS(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.db_instances = [] self.db_clusters = {} self.db_snapshots = [] diff --git a/prowler/providers/aws/services/redshift/redshift_client.py b/prowler/providers/aws/services/redshift/redshift_client.py index 4743ddb4d9..6fb9659483 100644 --- a/prowler/providers/aws/services/redshift/redshift_client.py +++ b/prowler/providers/aws/services/redshift/redshift_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.redshift.redshift_service import Redshift +from prowler.providers.common.common import get_global_provider -redshift_client = Redshift(current_audit_info) +redshift_client = Redshift(get_global_provider()) diff --git a/prowler/providers/aws/services/redshift/redshift_service.py b/prowler/providers/aws/services/redshift/redshift_service.py index 083ed80a8b..0b0906fe2b 100644 --- a/prowler/providers/aws/services/redshift/redshift_service.py +++ b/prowler/providers/aws/services/redshift/redshift_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ Redshift class Redshift(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.clusters = [] self.__threading_call__(self.__describe_clusters__) self.__describe_logging_status__(self.regional_clients) diff --git a/prowler/providers/aws/services/resourceexplorer2/resourceexplorer2_client.py b/prowler/providers/aws/services/resourceexplorer2/resourceexplorer2_client.py index 78a873b430..8ac9923af5 100644 --- a/prowler/providers/aws/services/resourceexplorer2/resourceexplorer2_client.py +++ b/prowler/providers/aws/services/resourceexplorer2/resourceexplorer2_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.resourceexplorer2.resourceexplorer2_service import ( ResourceExplorer2, ) +from prowler.providers.common.common import get_global_provider -resource_explorer_2_client = ResourceExplorer2(current_audit_info) +resource_explorer_2_client = ResourceExplorer2(get_global_provider()) diff --git a/prowler/providers/aws/services/resourceexplorer2/resourceexplorer2_service.py b/prowler/providers/aws/services/resourceexplorer2/resourceexplorer2_service.py index f81b7144bf..e14506f3d0 100644 --- a/prowler/providers/aws/services/resourceexplorer2/resourceexplorer2_service.py +++ b/prowler/providers/aws/services/resourceexplorer2/resourceexplorer2_service.py @@ -7,9 +7,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ ResourceExplorer2 class ResourceExplorer2(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__("resource-explorer-2", audit_info) + super().__init__("resource-explorer-2", provider) self.indexes = [] self.__threading_call__(self.__list_indexes__) diff --git a/prowler/providers/aws/services/route53/route53_client.py b/prowler/providers/aws/services/route53/route53_client.py index 321a6000fe..47e5f1e0b6 100644 --- a/prowler/providers/aws/services/route53/route53_client.py +++ b/prowler/providers/aws/services/route53/route53_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.route53.route53_service import Route53 +from prowler.providers.common.common import get_global_provider -route53_client = Route53(current_audit_info) +route53_client = Route53(get_global_provider()) diff --git a/prowler/providers/aws/services/route53/route53_service.py b/prowler/providers/aws/services/route53/route53_service.py index 1562c681d6..c715a7b137 100644 --- a/prowler/providers/aws/services/route53/route53_service.py +++ b/prowler/providers/aws/services/route53/route53_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## Route53 class Route53(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info, global_service=True) + super().__init__(__class__.__name__, provider, global_service=True) self.hosted_zones = {} self.record_sets = [] self.__list_hosted_zones__() @@ -139,11 +139,11 @@ class RecordSet(BaseModel): ################## Route53Domains class Route53Domains(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.domains = {} - if audit_info.audited_partition == "aws": + if self.audited_partition == "aws": # Route53Domains is a global service that supports endpoints in multiple AWS Regions # but you must specify the US East (N. Virginia) Region to create, update, or otherwise work with domains. self.region = "us-east-1" diff --git a/prowler/providers/aws/services/route53/route53domains_client.py b/prowler/providers/aws/services/route53/route53domains_client.py index d05e7ed8cc..8f0d3621c8 100644 --- a/prowler/providers/aws/services/route53/route53domains_client.py +++ b/prowler/providers/aws/services/route53/route53domains_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.route53.route53_service import Route53Domains +from prowler.providers.common.common import get_global_provider -route53domains_client = Route53Domains(current_audit_info) +route53domains_client = Route53Domains(get_global_provider()) diff --git a/prowler/providers/aws/services/s3/s3_account_level_public_access_blocks/s3_account_level_public_access_blocks.py b/prowler/providers/aws/services/s3/s3_account_level_public_access_blocks/s3_account_level_public_access_blocks.py index 1374c7279f..03453b782d 100644 --- a/prowler/providers/aws/services/s3/s3_account_level_public_access_blocks/s3_account_level_public_access_blocks.py +++ b/prowler/providers/aws/services/s3/s3_account_level_public_access_blocks/s3_account_level_public_access_blocks.py @@ -18,7 +18,7 @@ class s3_account_level_public_access_blocks(Check): report.resource_id = s3control_client.audited_account report.resource_arn = s3control_client.audited_account_arn findings.append(report) - elif s3_client.buckets or not s3_client.audit_info.ignore_unused_services: + elif s3_client.buckets or not s3_client.provider.ignore_unused_services: report.status = "FAIL" report.status_extended = f"Block Public Access is not configured for the account {s3control_client.audited_account}." report.region = s3control_client.region diff --git a/prowler/providers/aws/services/s3/s3_client.py b/prowler/providers/aws/services/s3/s3_client.py index 2e714f5e1c..e6ca7256b2 100644 --- a/prowler/providers/aws/services/s3/s3_client.py +++ b/prowler/providers/aws/services/s3/s3_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.s3.s3_service import S3 +from prowler.providers.common.common import get_global_provider -s3_client = S3(current_audit_info) +s3_client = S3(get_global_provider()) diff --git a/prowler/providers/aws/services/s3/s3_service.py b/prowler/providers/aws/services/s3/s3_service.py index 841f152cde..f7578c990a 100644 --- a/prowler/providers/aws/services/s3/s3_service.py +++ b/prowler/providers/aws/services/s3/s3_service.py @@ -12,11 +12,11 @@ from prowler.providers.aws.lib.service.service import AWSService ################## S3 class S3(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.regions_with_buckets = [] - self.buckets = self.__list_buckets__(audit_info) + self.buckets = self.__list_buckets__(provider) self.__threading_call__(self.__get_bucket_versioning__) self.__threading_call__(self.__get_bucket_logging__) self.__threading_call__(self.__get_bucket_policy__) @@ -37,7 +37,7 @@ class S3(AWSService): for t in threads: t.join() - def __list_buckets__(self, audit_info): + def __list_buckets__(self, provider): logger.info("S3 - Listing buckets...") buckets = [] try: @@ -58,8 +58,8 @@ class S3(AWSService): ): self.regions_with_buckets.append(bucket_region) # Check if there are filter regions - if audit_info.audited_regions: - if bucket_region in audit_info.audited_regions: + if provider.identity.audited_regions: + if bucket_region in provider.identity.audited_regions: buckets.append( Bucket( name=bucket["Name"], @@ -344,9 +344,9 @@ class S3(AWSService): ################## S3Control class S3Control(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info, global_service=True) + super().__init__(__class__.__name__, provider, global_service=True) self.account_public_access_block = self.__get_public_access_block__() def __get_public_access_block__(self): diff --git a/prowler/providers/aws/services/s3/s3control_client.py b/prowler/providers/aws/services/s3/s3control_client.py index 596ef2b27f..c7499e5081 100644 --- a/prowler/providers/aws/services/s3/s3control_client.py +++ b/prowler/providers/aws/services/s3/s3control_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.s3.s3_service import S3Control +from prowler.providers.common.common import get_global_provider -s3control_client = S3Control(current_audit_info) +s3control_client = S3Control(get_global_provider()) diff --git a/prowler/providers/aws/services/sagemaker/sagemaker_client.py b/prowler/providers/aws/services/sagemaker/sagemaker_client.py index d883f58778..8b0cfe5433 100644 --- a/prowler/providers/aws/services/sagemaker/sagemaker_client.py +++ b/prowler/providers/aws/services/sagemaker/sagemaker_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.sagemaker.sagemaker_service import SageMaker +from prowler.providers.common.common import get_global_provider -sagemaker_client = SageMaker(current_audit_info) +sagemaker_client = SageMaker(get_global_provider()) diff --git a/prowler/providers/aws/services/sagemaker/sagemaker_service.py b/prowler/providers/aws/services/sagemaker/sagemaker_service.py index 4ebd66d90b..8a2370a7ec 100644 --- a/prowler/providers/aws/services/sagemaker/sagemaker_service.py +++ b/prowler/providers/aws/services/sagemaker/sagemaker_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ SageMaker class SageMaker(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.sagemaker_notebook_instances = [] self.sagemaker_models = [] self.sagemaker_training_jobs = [] diff --git a/prowler/providers/aws/services/secretsmanager/secretsmanager_client.py b/prowler/providers/aws/services/secretsmanager/secretsmanager_client.py index 09475758e1..c3403a26b4 100644 --- a/prowler/providers/aws/services/secretsmanager/secretsmanager_client.py +++ b/prowler/providers/aws/services/secretsmanager/secretsmanager_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.secretsmanager.secretsmanager_service import ( SecretsManager, ) +from prowler.providers.common.common import get_global_provider -secretsmanager_client = SecretsManager(current_audit_info) +secretsmanager_client = SecretsManager(get_global_provider()) diff --git a/prowler/providers/aws/services/secretsmanager/secretsmanager_service.py b/prowler/providers/aws/services/secretsmanager/secretsmanager_service.py index abcaeac7a1..8ed0ea126b 100644 --- a/prowler/providers/aws/services/secretsmanager/secretsmanager_service.py +++ b/prowler/providers/aws/services/secretsmanager/secretsmanager_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## SecretsManager class SecretsManager(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.secrets = {} self.__threading_call__(self.__list_secrets__) diff --git a/prowler/providers/aws/services/securityhub/securityhub_client.py b/prowler/providers/aws/services/securityhub/securityhub_client.py index d7c7c7fe3f..6832cfbb47 100644 --- a/prowler/providers/aws/services/securityhub/securityhub_client.py +++ b/prowler/providers/aws/services/securityhub/securityhub_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.securityhub.securityhub_service import SecurityHub +from prowler.providers.common.common import get_global_provider -securityhub_client = SecurityHub(current_audit_info) +securityhub_client = SecurityHub(get_global_provider()) diff --git a/prowler/providers/aws/services/securityhub/securityhub_service.py b/prowler/providers/aws/services/securityhub/securityhub_service.py index 0a38d4b3f4..14a1490af8 100644 --- a/prowler/providers/aws/services/securityhub/securityhub_service.py +++ b/prowler/providers/aws/services/securityhub/securityhub_service.py @@ -8,9 +8,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## SecurityHub class SecurityHub(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.securityhubs = [] self.__threading_call__(self.__describe_hub__) diff --git a/prowler/providers/aws/services/shield/shield_client.py b/prowler/providers/aws/services/shield/shield_client.py index 277247132d..f5149f2b13 100644 --- a/prowler/providers/aws/services/shield/shield_client.py +++ b/prowler/providers/aws/services/shield/shield_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.shield.shield_service import Shield +from prowler.providers.common.common import get_global_provider -shield_client = Shield(current_audit_info) +shield_client = Shield(get_global_provider()) diff --git a/prowler/providers/aws/services/shield/shield_service.py b/prowler/providers/aws/services/shield/shield_service.py index 5b0b2cd184..cb1eb5db71 100644 --- a/prowler/providers/aws/services/shield/shield_service.py +++ b/prowler/providers/aws/services/shield/shield_service.py @@ -6,9 +6,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################### Shield class Shield(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info, global_service=True) + super().__init__(__class__.__name__, provider, global_service=True) self.protections = {} self.enabled = False self.enabled = self.__get_subscription_state__() diff --git a/prowler/providers/aws/services/sns/sns_client.py b/prowler/providers/aws/services/sns/sns_client.py index 1568449589..7b56c4e7fb 100644 --- a/prowler/providers/aws/services/sns/sns_client.py +++ b/prowler/providers/aws/services/sns/sns_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.sns.sns_service import SNS +from prowler.providers.common.common import get_global_provider -sns_client = SNS(current_audit_info) +sns_client = SNS(get_global_provider()) diff --git a/prowler/providers/aws/services/sns/sns_service.py b/prowler/providers/aws/services/sns/sns_service.py index 5bf180978a..4a28c4bd8f 100644 --- a/prowler/providers/aws/services/sns/sns_service.py +++ b/prowler/providers/aws/services/sns/sns_service.py @@ -10,9 +10,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ SNS class SNS(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.topics = [] self.__threading_call__(self.__list_topics__) self.__get_topic_attributes__(self.regional_clients) diff --git a/prowler/providers/aws/services/sqs/sqs_client.py b/prowler/providers/aws/services/sqs/sqs_client.py index ffbc3977f5..b10754b2e0 100644 --- a/prowler/providers/aws/services/sqs/sqs_client.py +++ b/prowler/providers/aws/services/sqs/sqs_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.sqs.sqs_service import SQS +from prowler.providers.common.common import get_global_provider -sqs_client = SQS(current_audit_info) +sqs_client = SQS(get_global_provider()) diff --git a/prowler/providers/aws/services/sqs/sqs_service.py b/prowler/providers/aws/services/sqs/sqs_service.py index bdc3e6a92d..4dd0b91eea 100644 --- a/prowler/providers/aws/services/sqs/sqs_service.py +++ b/prowler/providers/aws/services/sqs/sqs_service.py @@ -11,9 +11,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ SQS class SQS(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.queues = [] self.__threading_call__(self.__list_queues__) self.__get_queue_attributes__() diff --git a/prowler/providers/aws/services/ssm/ssm_client.py b/prowler/providers/aws/services/ssm/ssm_client.py index cce00a8cab..acf89d5c29 100644 --- a/prowler/providers/aws/services/ssm/ssm_client.py +++ b/prowler/providers/aws/services/ssm/ssm_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.ssm.ssm_service import SSM +from prowler.providers.common.common import get_global_provider -ssm_client = SSM(current_audit_info) +ssm_client = SSM(get_global_provider()) diff --git a/prowler/providers/aws/services/ssm/ssm_service.py b/prowler/providers/aws/services/ssm/ssm_service.py index 8aaea837f5..7c50c1ab89 100644 --- a/prowler/providers/aws/services/ssm/ssm_service.py +++ b/prowler/providers/aws/services/ssm/ssm_service.py @@ -12,9 +12,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## SSM class SSM(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.documents = {} self.compliance_resources = {} self.managed_instances = {} diff --git a/prowler/providers/aws/services/ssmincidents/ssmincidents_client.py b/prowler/providers/aws/services/ssmincidents/ssmincidents_client.py index d71616fde4..efaab4e39b 100644 --- a/prowler/providers/aws/services/ssmincidents/ssmincidents_client.py +++ b/prowler/providers/aws/services/ssmincidents/ssmincidents_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.ssmincidents.ssmincidents_service import ( SSMIncidents, ) +from prowler.providers.common.common import get_global_provider -ssmincidents_client = SSMIncidents(current_audit_info) +ssmincidents_client = SSMIncidents(get_global_provider()) diff --git a/prowler/providers/aws/services/ssmincidents/ssmincidents_service.py b/prowler/providers/aws/services/ssmincidents/ssmincidents_service.py index 1be0c5463b..da3ad41785 100644 --- a/prowler/providers/aws/services/ssmincidents/ssmincidents_service.py +++ b/prowler/providers/aws/services/ssmincidents/ssmincidents_service.py @@ -14,9 +14,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## SSMIncidents class SSMIncidents(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__("ssm-incidents", audit_info) + super().__init__("ssm-incidents", provider) self.replication_set = [] self.__list_replication_sets__() self.__get_replication_set__() diff --git a/prowler/providers/aws/services/trustedadvisor/trustedadvisor_client.py b/prowler/providers/aws/services/trustedadvisor/trustedadvisor_client.py index b037a84100..ff36e179ae 100644 --- a/prowler/providers/aws/services/trustedadvisor/trustedadvisor_client.py +++ b/prowler/providers/aws/services/trustedadvisor/trustedadvisor_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.trustedadvisor.trustedadvisor_service import ( TrustedAdvisor, ) +from prowler.providers.common.common import get_global_provider -trustedadvisor_client = TrustedAdvisor(current_audit_info) +trustedadvisor_client = TrustedAdvisor(get_global_provider()) diff --git a/prowler/providers/aws/services/trustedadvisor/trustedadvisor_service.py b/prowler/providers/aws/services/trustedadvisor/trustedadvisor_service.py index c5fc591dee..a09acc3f0a 100644 --- a/prowler/providers/aws/services/trustedadvisor/trustedadvisor_service.py +++ b/prowler/providers/aws/services/trustedadvisor/trustedadvisor_service.py @@ -9,20 +9,20 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ TrustedAdvisor class TrustedAdvisor(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__("support", audit_info) + super().__init__("support", provider) self.checks = [] self.premium_support = PremiumSupport(enabled=False) # Support API is not available in China Partition # But only in us-east-1 or us-gov-west-1 https://docs.aws.amazon.com/general/latest/gr/awssupport.html - if audit_info.audited_partition != "aws-cn": - if audit_info.audited_partition == "aws": + if provider.audited_partition != "aws-cn": + if provider.audited_partition == "aws": support_region = "us-east-1" else: support_region = "us-gov-west-1" - self.client = audit_info.audit_session.client( + self.client = provider.audit_session.client( self.service, region_name=support_region ) self.client.region = support_region diff --git a/prowler/providers/aws/services/vpc/vpc_client.py b/prowler/providers/aws/services/vpc/vpc_client.py index 22d241c4e4..506bb5c16b 100644 --- a/prowler/providers/aws/services/vpc/vpc_client.py +++ b/prowler/providers/aws/services/vpc/vpc_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.vpc.vpc_service import VPC +from prowler.providers.common.common import get_global_provider -vpc_client = VPC(current_audit_info) +vpc_client = VPC(get_global_provider()) diff --git a/prowler/providers/aws/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled.py b/prowler/providers/aws/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled.py index 9821d7f145..2177d11300 100644 --- a/prowler/providers/aws/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled.py +++ b/prowler/providers/aws/services/vpc/vpc_flow_logs_enabled/vpc_flow_logs_enabled.py @@ -6,7 +6,7 @@ class vpc_flow_logs_enabled(Check): def execute(self): findings = [] for vpc in vpc_client.vpcs.values(): - if not vpc_client.audit_info.ignore_unused_services or vpc.in_use: + if not vpc_client.provider.ignore_unused_services or vpc.in_use: report = Check_Report_AWS(self.metadata()) report.region = vpc.region report.resource_tags = vpc.tags diff --git a/prowler/providers/aws/services/vpc/vpc_service.py b/prowler/providers/aws/services/vpc/vpc_service.py index 7affa7ee4b..54bae2695d 100644 --- a/prowler/providers/aws/services/vpc/vpc_service.py +++ b/prowler/providers/aws/services/vpc/vpc_service.py @@ -11,9 +11,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################## VPC class VPC(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__("ec2", audit_info) + super().__init__("ec2", provider) self.vpcs = {} self.vpc_peering_connections = [] self.vpc_endpoints = [] diff --git a/prowler/providers/aws/services/waf/waf_client.py b/prowler/providers/aws/services/waf/waf_client.py index 7e30b16239..ae39d10857 100644 --- a/prowler/providers/aws/services/waf/waf_client.py +++ b/prowler/providers/aws/services/waf/waf_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.waf.waf_service import WAF +from prowler.providers.common.common import get_global_provider -waf_client = WAF(current_audit_info) +waf_client = WAF(get_global_provider()) diff --git a/prowler/providers/aws/services/waf/waf_service.py b/prowler/providers/aws/services/waf/waf_service.py index be68083310..1d34a48969 100644 --- a/prowler/providers/aws/services/waf/waf_service.py +++ b/prowler/providers/aws/services/waf/waf_service.py @@ -7,9 +7,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################### WAF class WAF(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__("waf-regional", audit_info) + super().__init__("waf-regional", provider) self.web_acls = [] self.__threading_call__(self.__list_web_acls__) self.__threading_call__(self.__list_resources_for_web_acl__) diff --git a/prowler/providers/aws/services/wafv2/wafv2_client.py b/prowler/providers/aws/services/wafv2/wafv2_client.py index 76832a0efe..7996becb55 100644 --- a/prowler/providers/aws/services/wafv2/wafv2_client.py +++ b/prowler/providers/aws/services/wafv2/wafv2_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.wafv2.wafv2_service import WAFv2 +from prowler.providers.common.common import get_global_provider -wafv2_client = WAFv2(current_audit_info) +wafv2_client = WAFv2(get_global_provider()) diff --git a/prowler/providers/aws/services/wafv2/wafv2_service.py b/prowler/providers/aws/services/wafv2/wafv2_service.py index 7ab640f815..df8ac63f8d 100644 --- a/prowler/providers/aws/services/wafv2/wafv2_service.py +++ b/prowler/providers/aws/services/wafv2/wafv2_service.py @@ -7,9 +7,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################### WAFv2 class WAFv2(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.web_acls = [] self.__threading_call__(self.__list_web_acls__) self.__threading_call__(self.__list_resources_for_web_acl__) diff --git a/prowler/providers/aws/services/wellarchitected/wellarchitected_client.py b/prowler/providers/aws/services/wellarchitected/wellarchitected_client.py index 0967f6720d..1ace96e587 100644 --- a/prowler/providers/aws/services/wellarchitected/wellarchitected_client.py +++ b/prowler/providers/aws/services/wellarchitected/wellarchitected_client.py @@ -1,6 +1,6 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.wellarchitected.wellarchitected_service import ( WellArchitected, ) +from prowler.providers.common.common import get_global_provider -wellarchitected_client = WellArchitected(current_audit_info) +wellarchitected_client = WellArchitected(get_global_provider()) diff --git a/prowler/providers/aws/services/wellarchitected/wellarchitected_service.py b/prowler/providers/aws/services/wellarchitected/wellarchitected_service.py index 1bf8f50ba8..c4ad76950a 100644 --- a/prowler/providers/aws/services/wellarchitected/wellarchitected_service.py +++ b/prowler/providers/aws/services/wellarchitected/wellarchitected_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ WellArchitected class WellArchitected(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.workloads = [] self.__threading_call__(self.__list_workloads__) self.__list_tags_for_resource__() diff --git a/prowler/providers/aws/services/workspaces/workspaces_client.py b/prowler/providers/aws/services/workspaces/workspaces_client.py index 9fea90781b..0a8a281293 100644 --- a/prowler/providers/aws/services/workspaces/workspaces_client.py +++ b/prowler/providers/aws/services/workspaces/workspaces_client.py @@ -1,4 +1,4 @@ -from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info from prowler.providers.aws.services.workspaces.workspaces_service import WorkSpaces +from prowler.providers.common.common import get_global_provider -workspaces_client = WorkSpaces(current_audit_info) +workspaces_client = WorkSpaces(get_global_provider()) diff --git a/prowler/providers/aws/services/workspaces/workspaces_service.py b/prowler/providers/aws/services/workspaces/workspaces_service.py index 7637cc5101..9d76ce8a5a 100644 --- a/prowler/providers/aws/services/workspaces/workspaces_service.py +++ b/prowler/providers/aws/services/workspaces/workspaces_service.py @@ -9,9 +9,9 @@ from prowler.providers.aws.lib.service.service import AWSService ################################ WorkSpaces class WorkSpaces(AWSService): - def __init__(self, audit_info): + def __init__(self, provider): # Call AWSService's __init__ - super().__init__(__class__.__name__, audit_info) + super().__init__(__class__.__name__, provider) self.workspaces = [] self.__threading_call__(self.__describe_workspaces__) self.__describe_tags__() diff --git a/prowler/providers/azure/azure_provider_new.py b/prowler/providers/azure/azure_provider_new.py index 0b45fe7567..d52e24f749 100644 --- a/prowler/providers/azure/azure_provider_new.py +++ b/prowler/providers/azure/azure_provider_new.py @@ -10,7 +10,7 @@ from pydantic import BaseModel from prowler.lib.logger import logger from prowler.providers.azure.lib.regions.regions import get_regions_config -from prowler.providers.common.provider import CloudProvider +from prowler.providers.common.provider import Provider class AzureIdentityInfo(BaseModel): @@ -28,7 +28,7 @@ class AzureRegionConfig(BaseModel): credential_scopes: list = [] -class AzureProvider(CloudProvider): +class AzureProvider(Provider): session: DefaultAzureCredential identity: AzureIdentityInfo audit_resources: Optional[Any] @@ -37,7 +37,7 @@ class AzureProvider(CloudProvider): region_config: AzureRegionConfig def __init__(self, arguments): - logger.info("Setting Azure session ...") + logger.info("Setting Azure provider ...") subscription_ids = arguments.subscription_ids logger.info("Checking if any credentials mode is set ...") diff --git a/prowler/providers/azure/services/defender/defender_client.py b/prowler/providers/azure/services/defender/defender_client.py index 9135315775..0552505183 100644 --- a/prowler/providers/azure/services/defender/defender_client.py +++ b/prowler/providers/azure/services/defender/defender_client.py @@ -1,4 +1,4 @@ from prowler.providers.azure.services.defender.defender_service import Defender -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider -defender_client = Defender(global_provider) +defender_client = Defender(get_global_provider()) diff --git a/prowler/providers/azure/services/defender/defender_service.py b/prowler/providers/azure/services/defender/defender_service.py index d234c8c06a..0609ec599d 100644 --- a/prowler/providers/azure/services/defender/defender_service.py +++ b/prowler/providers/azure/services/defender/defender_service.py @@ -9,8 +9,8 @@ from prowler.providers.azure.lib.service.service import AzureService ########################## Defender class Defender(AzureService): - def __init__(self, audit_info): - super().__init__(SecurityCenter, audit_info) + def __init__(self, provider): + super().__init__(SecurityCenter, provider) self.pricings = self.__get_pricings__() diff --git a/prowler/providers/azure/services/iam/iam_client.py b/prowler/providers/azure/services/iam/iam_client.py index 1ef0fd36b7..778ffb5cb9 100644 --- a/prowler/providers/azure/services/iam/iam_client.py +++ b/prowler/providers/azure/services/iam/iam_client.py @@ -1,4 +1,4 @@ from prowler.providers.azure.services.iam.iam_service import IAM -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider -iam_client = IAM(global_provider) +iam_client = IAM(get_global_provider()) diff --git a/prowler/providers/azure/services/iam/iam_service.py b/prowler/providers/azure/services/iam/iam_service.py index b282222135..abae5e9970 100644 --- a/prowler/providers/azure/services/iam/iam_service.py +++ b/prowler/providers/azure/services/iam/iam_service.py @@ -9,8 +9,8 @@ from prowler.providers.azure.lib.service.service import AzureService ########################## IAM class IAM(AzureService): - def __init__(self, audit_info): - super().__init__(AuthorizationManagementClient, audit_info) + def __init__(self, provider): + super().__init__(AuthorizationManagementClient, provider) self.roles = self.__get_roles__() def __get_roles__(self): diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_client.py b/prowler/providers/azure/services/sqlserver/sqlserver_client.py index 9132cf97ab..c3c99e8172 100644 --- a/prowler/providers/azure/services/sqlserver/sqlserver_client.py +++ b/prowler/providers/azure/services/sqlserver/sqlserver_client.py @@ -1,4 +1,4 @@ from prowler.providers.azure.services.sqlserver.sqlserver_service import SQLServer -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider -sqlserver_client = SQLServer(global_provider) +sqlserver_client = SQLServer(get_global_provider()) diff --git a/prowler/providers/azure/services/sqlserver/sqlserver_service.py b/prowler/providers/azure/services/sqlserver/sqlserver_service.py index 165593cbef..99ef440462 100644 --- a/prowler/providers/azure/services/sqlserver/sqlserver_service.py +++ b/prowler/providers/azure/services/sqlserver/sqlserver_service.py @@ -13,8 +13,8 @@ from prowler.providers.azure.lib.service.service import AzureService ########################## SQLServer class SQLServer(AzureService): - def __init__(self, audit_info): - super().__init__(SqlManagementClient, audit_info) + def __init__(self, provider): + super().__init__(SqlManagementClient, provider) self.sql_servers = self.__get_sql_servers__() def __get_sql_servers__(self): diff --git a/prowler/providers/azure/services/storage/storage_client.py b/prowler/providers/azure/services/storage/storage_client.py index 58651e2cb3..36a48f98ac 100644 --- a/prowler/providers/azure/services/storage/storage_client.py +++ b/prowler/providers/azure/services/storage/storage_client.py @@ -1,4 +1,4 @@ from prowler.providers.azure.services.storage.storage_service import Storage -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider -storage_client = Storage(global_provider) +storage_client = Storage(get_global_provider()) diff --git a/prowler/providers/azure/services/storage/storage_service.py b/prowler/providers/azure/services/storage/storage_service.py index b74d988de8..ffaf857748 100644 --- a/prowler/providers/azure/services/storage/storage_service.py +++ b/prowler/providers/azure/services/storage/storage_service.py @@ -9,8 +9,8 @@ from prowler.providers.azure.lib.service.service import AzureService ########################## Storage class Storage(AzureService): - def __init__(self, audit_info): - super().__init__(StorageManagementClient, audit_info) + def __init__(self, provider): + super().__init__(StorageManagementClient, provider) self.storage_accounts = self.__get_storage_accounts__() def __get_storage_accounts__(self): diff --git a/prowler/providers/common/audit_info.py b/prowler/providers/common/audit_info.py index 5ba28ab6af..52c31f97c9 100644 --- a/prowler/providers/common/audit_info.py +++ b/prowler/providers/common/audit_info.py @@ -13,11 +13,8 @@ from prowler.providers.aws.aws_provider import ( ) from prowler.providers.aws.lib.arn.arn import parse_iam_credentials_arn from prowler.providers.aws.lib.audit_info.audit_info import current_audit_info -from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info, AWS_Credentials -from prowler.providers.aws.lib.credentials.credentials import ( - print_aws_credentials, - validate_aws_credentials, -) +from prowler.providers.aws.lib.audit_info.models import AWS_Audit_Info, AWSCredentials +from prowler.providers.aws.lib.credentials.credentials import validate_AWSCredentials from prowler.providers.aws.lib.organizations.organizations import ( get_organizations_metadata, ) @@ -146,7 +143,7 @@ Azure Identity Type: {Fore.YELLOW}[{audit_info.identity.identity_type}]{Style.RE current_audit_info.original_session = aws_provider.aws_session logger.info("Validating credentials ...") # Verificate if we have valid credentials - caller_identity = validate_aws_credentials( + caller_identity = validate_AWSCredentials( current_audit_info.original_session, input_regions, sts_endpoint_region ) @@ -194,7 +191,7 @@ Azure Identity Type: {Fore.YELLOW}[{audit_info.identity.identity_type}]{Style.RE ) logger.info("Role assumed") # Set the info needed to create a session with an assumed role - current_audit_info.credentials = AWS_Credentials( + current_audit_info.credentials = AWSCredentials( aws_access_key_id=assumed_role_response["Credentials"][ "AccessKeyId" ], @@ -261,9 +258,6 @@ Azure Identity Type: {Fore.YELLOW}[{audit_info.identity.identity_type}]{Style.RE else: current_audit_info.profile_region = "us-east-1" - if not arguments.get("only_logs"): - print_aws_credentials(current_audit_info) - # Parse Scan Tags if arguments.get("resource_tags"): input_resource_tags = arguments.get("resource_tags") @@ -341,11 +335,6 @@ Azure Identity Type: {Fore.YELLOW}[{audit_info.identity.identity_type}]{Style.RE credential_scopes=region_config["credential_scopes"], ) - # TODO - remove it - # this logic is being processed in general provider - # if not arguments.get("only_logs"): - # self.print_azure_credentials(azure_audit_info) - return azure_audit_info def set_gcp_audit_info(self, arguments) -> GCP_Audit_Info: @@ -369,11 +358,6 @@ Azure Identity Type: {Fore.YELLOW}[{audit_info.identity.identity_type}]{Style.RE gcp_audit_info.project_ids, ) = gcp_provider.get_credentials() - # TODO - remove it - # this logic is being processed in general provider - # if not arguments.get("only_logs"): - # self.print_gcp_credentials(gcp_audit_info) - return gcp_audit_info def set_kubernetes_audit_info(self, arguments) -> Kubernetes_Audit_Info: diff --git a/prowler/providers/common/common.py b/prowler/providers/common/common.py index d553de05d0..6abcee09c8 100644 --- a/prowler/providers/common/common.py +++ b/prowler/providers/common/common.py @@ -3,10 +3,13 @@ from typing import Any providers_prowler_lib_path = "prowler.providers" -# SHARED PROVIDER OBJECT ACROSS ALL PROWLER CODE global_provider = None +def get_global_provider(): + return global_provider + + def set_provider(provider, arguments) -> Any: provider_class_name = f"{provider.capitalize()}Provider" import_module_path = f"prowler.providers.{provider}.azure_provider_testing" diff --git a/prowler/providers/common/provider.py b/prowler/providers/common/provider.py index fd6eec8c4f..80924db7b9 100644 --- a/prowler/providers/common/provider.py +++ b/prowler/providers/common/provider.py @@ -1,7 +1,7 @@ from abc import ABC, abstractmethod -class CloudProvider(ABC): +class Provider(ABC): @abstractmethod def setup_session(self): pass diff --git a/prowler/providers/gcp/gcp_provider_new.py b/prowler/providers/gcp/gcp_provider_new.py index 9cbd38ae25..d1031b5c13 100644 --- a/prowler/providers/gcp/gcp_provider_new.py +++ b/prowler/providers/gcp/gcp_provider_new.py @@ -8,10 +8,10 @@ from google.oauth2.credentials import Credentials from googleapiclient import discovery from prowler.lib.logger import logger -from prowler.providers.common.provider import CloudProvider +from prowler.providers.common.provider import Provider -class GcpProvider(CloudProvider): +class GcpProvider(Provider): session: Credentials default_project_id: str project_ids: list diff --git a/prowler/providers/gcp/services/apikeys/apikeys_client.py b/prowler/providers/gcp/services/apikeys/apikeys_client.py index 92de567c3a..1ff3ace813 100644 --- a/prowler/providers/gcp/services/apikeys/apikeys_client.py +++ b/prowler/providers/gcp/services/apikeys/apikeys_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.apikeys.apikeys_service import APIKeys -apikeys_client = APIKeys(global_provider) +apikeys_client = APIKeys(get_global_provider()) diff --git a/prowler/providers/gcp/services/apikeys/apikeys_service.py b/prowler/providers/gcp/services/apikeys/apikeys_service.py index 5f70a1157d..e152d337cd 100644 --- a/prowler/providers/gcp/services/apikeys/apikeys_service.py +++ b/prowler/providers/gcp/services/apikeys/apikeys_service.py @@ -6,8 +6,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## API Keys class APIKeys(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info, api_version="v2") + def __init__(self, provider): + super().__init__(__class__.__name__, provider, api_version="v2") self.keys = [] self.__get_keys__() diff --git a/prowler/providers/gcp/services/bigquery/bigquery_client.py b/prowler/providers/gcp/services/bigquery/bigquery_client.py index ea788aba97..24dd292502 100644 --- a/prowler/providers/gcp/services/bigquery/bigquery_client.py +++ b/prowler/providers/gcp/services/bigquery/bigquery_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.bigquery.bigquery_service import BigQuery -bigquery_client = BigQuery(global_provider) +bigquery_client = BigQuery(get_global_provider()) diff --git a/prowler/providers/gcp/services/bigquery/bigquery_service.py b/prowler/providers/gcp/services/bigquery/bigquery_service.py index b0cb35dbba..ee7bbba625 100644 --- a/prowler/providers/gcp/services/bigquery/bigquery_service.py +++ b/prowler/providers/gcp/services/bigquery/bigquery_service.py @@ -6,8 +6,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## BigQuery class BigQuery(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info, api_version="v2") + def __init__(self, provider): + super().__init__(__class__.__name__, provider, api_version="v2") self.datasets = [] self.tables = [] diff --git a/prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_client.py b/prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_client.py index a9aa26b509..b5d43a960d 100644 --- a/prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_client.py +++ b/prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_client.py @@ -1,6 +1,6 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.cloudresourcemanager.cloudresourcemanager_service import ( CloudResourceManager, ) -cloudresourcemanager_client = CloudResourceManager(global_provider) +cloudresourcemanager_client = CloudResourceManager(get_global_provider()) diff --git a/prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_service.py b/prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_service.py index 55b6cf1f1e..690cbe404e 100644 --- a/prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_service.py +++ b/prowler/providers/gcp/services/cloudresourcemanager/cloudresourcemanager_service.py @@ -6,8 +6,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## CloudResourceManager class CloudResourceManager(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info) + def __init__(self, provider): + super().__init__(__class__.__name__, provider) self.bindings = [] self.projects = [] diff --git a/prowler/providers/gcp/services/cloudsql/cloudsql_client.py b/prowler/providers/gcp/services/cloudsql/cloudsql_client.py index 96169972f7..3411439611 100644 --- a/prowler/providers/gcp/services/cloudsql/cloudsql_client.py +++ b/prowler/providers/gcp/services/cloudsql/cloudsql_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.cloudsql.cloudsql_service import CloudSQL -cloudsql_client = CloudSQL(global_provider) +cloudsql_client = CloudSQL(get_global_provider()) diff --git a/prowler/providers/gcp/services/cloudsql/cloudsql_service.py b/prowler/providers/gcp/services/cloudsql/cloudsql_service.py index d7528d1ec7..7b66cf4da1 100644 --- a/prowler/providers/gcp/services/cloudsql/cloudsql_service.py +++ b/prowler/providers/gcp/services/cloudsql/cloudsql_service.py @@ -6,8 +6,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## CloudSQL class CloudSQL(GCPService): - def __init__(self, audit_info): - super().__init__("sqladmin", audit_info) + def __init__(self, provider): + super().__init__("sqladmin", provider) self.instances = [] self.__get_instances__() diff --git a/prowler/providers/gcp/services/cloudstorage/cloudstorage_client.py b/prowler/providers/gcp/services/cloudstorage/cloudstorage_client.py index 7cfa837dc9..8321d704ef 100644 --- a/prowler/providers/gcp/services/cloudstorage/cloudstorage_client.py +++ b/prowler/providers/gcp/services/cloudstorage/cloudstorage_client.py @@ -1,6 +1,6 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.cloudstorage.cloudstorage_service import ( CloudStorage, ) -cloudstorage_client = CloudStorage(global_provider) +cloudstorage_client = CloudStorage(get_global_provider()) diff --git a/prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py b/prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py index 6775633e55..9e77541bf3 100644 --- a/prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py +++ b/prowler/providers/gcp/services/cloudstorage/cloudstorage_service.py @@ -8,8 +8,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## CloudStorage class CloudStorage(GCPService): - def __init__(self, audit_info): - super().__init__("storage", audit_info) + def __init__(self, provider): + super().__init__("storage", provider) self.buckets = [] self.__get_buckets__() diff --git a/prowler/providers/gcp/services/compute/compute_client.py b/prowler/providers/gcp/services/compute/compute_client.py index 3fc985d1de..7b15c08219 100644 --- a/prowler/providers/gcp/services/compute/compute_client.py +++ b/prowler/providers/gcp/services/compute/compute_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.compute.compute_service import Compute -compute_client = Compute(global_provider) +compute_client = Compute(get_global_provider()) diff --git a/prowler/providers/gcp/services/compute/compute_service.py b/prowler/providers/gcp/services/compute/compute_service.py index 88e927c4c0..eeb3a0945b 100644 --- a/prowler/providers/gcp/services/compute/compute_service.py +++ b/prowler/providers/gcp/services/compute/compute_service.py @@ -6,8 +6,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## Compute class Compute(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info) + def __init__(self, provider): + super().__init__(__class__.__name__, provider) self.regions = set() self.zones = set() self.instances = [] diff --git a/prowler/providers/gcp/services/dataproc/dataproc_client.py b/prowler/providers/gcp/services/dataproc/dataproc_client.py index 848314f533..dbc9d089f0 100644 --- a/prowler/providers/gcp/services/dataproc/dataproc_client.py +++ b/prowler/providers/gcp/services/dataproc/dataproc_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.dataproc.dataproc_service import Dataproc -dataproc_client = Dataproc(global_provider) +dataproc_client = Dataproc(get_global_provider()) diff --git a/prowler/providers/gcp/services/dataproc/dataproc_service.py b/prowler/providers/gcp/services/dataproc/dataproc_service.py index 507f870e94..5eff989a39 100644 --- a/prowler/providers/gcp/services/dataproc/dataproc_service.py +++ b/prowler/providers/gcp/services/dataproc/dataproc_service.py @@ -7,8 +7,8 @@ from prowler.providers.gcp.services.compute.compute_client import compute_client ################## Dataproc class Dataproc(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info) + def __init__(self, provider): + super().__init__(__class__.__name__, provider) self.regions = compute_client.regions self.clusters = [] self.__threading_call__(self.__get_clusters__, self.regions) diff --git a/prowler/providers/gcp/services/dns/dns_client.py b/prowler/providers/gcp/services/dns/dns_client.py index 6d290ed84c..62fabff427 100644 --- a/prowler/providers/gcp/services/dns/dns_client.py +++ b/prowler/providers/gcp/services/dns/dns_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.dns.dns_service import DNS -dns_client = DNS(global_provider) +dns_client = DNS(get_global_provider()) diff --git a/prowler/providers/gcp/services/dns/dns_service.py b/prowler/providers/gcp/services/dns/dns_service.py index 7c58f95532..7082220a37 100644 --- a/prowler/providers/gcp/services/dns/dns_service.py +++ b/prowler/providers/gcp/services/dns/dns_service.py @@ -6,8 +6,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## DNS class DNS(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info) + def __init__(self, provider): + super().__init__(__class__.__name__, provider) self.managed_zones = [] self.__get_managed_zones__() self.policies = [] diff --git a/prowler/providers/gcp/services/iam/accessapproval_client.py b/prowler/providers/gcp/services/iam/accessapproval_client.py index 8e4c0944cf..4eaf884069 100644 --- a/prowler/providers/gcp/services/iam/accessapproval_client.py +++ b/prowler/providers/gcp/services/iam/accessapproval_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.iam.iam_service import AccessApproval -accessapproval_client = AccessApproval(global_provider) +accessapproval_client = AccessApproval(get_global_provider()) diff --git a/prowler/providers/gcp/services/iam/essentialcontacts_client.py b/prowler/providers/gcp/services/iam/essentialcontacts_client.py index 23add3e86c..47cae383c0 100644 --- a/prowler/providers/gcp/services/iam/essentialcontacts_client.py +++ b/prowler/providers/gcp/services/iam/essentialcontacts_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.iam.iam_service import EssentialContacts -essentialcontacts_client = EssentialContacts(global_provider) +essentialcontacts_client = EssentialContacts(get_global_provider()) diff --git a/prowler/providers/gcp/services/iam/iam_client.py b/prowler/providers/gcp/services/iam/iam_client.py index fd36d5bade..a9367d70b7 100644 --- a/prowler/providers/gcp/services/iam/iam_client.py +++ b/prowler/providers/gcp/services/iam/iam_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.iam.iam_service import IAM -iam_client = IAM(global_provider) +iam_client = IAM(get_global_provider()) diff --git a/prowler/providers/gcp/services/iam/iam_service.py b/prowler/providers/gcp/services/iam/iam_service.py index d9690ff396..89d170c7a9 100644 --- a/prowler/providers/gcp/services/iam/iam_service.py +++ b/prowler/providers/gcp/services/iam/iam_service.py @@ -11,8 +11,8 @@ from prowler.providers.gcp.services.cloudresourcemanager.cloudresourcemanager_cl ################## IAM class IAM(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info) + def __init__(self, provider): + super().__init__(__class__.__name__, provider) self.service_accounts = [] self.__get_service_accounts__() self.__get_service_accounts_keys__() @@ -103,8 +103,8 @@ class ServiceAccount(BaseModel): ################## AccessApproval class AccessApproval(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info) + def __init__(self, provider): + super().__init__(__class__.__name__, provider) self.settings = {} self.__get_settings__() @@ -135,8 +135,8 @@ class Setting(BaseModel): ################## EssentialContacts class EssentialContacts(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info) + def __init__(self, provider): + super().__init__(__class__.__name__, provider) self.organizations = [] self.__get_contacts__() diff --git a/prowler/providers/gcp/services/kms/kms_client.py b/prowler/providers/gcp/services/kms/kms_client.py index 0bc861cbdb..b5eb4573cb 100644 --- a/prowler/providers/gcp/services/kms/kms_client.py +++ b/prowler/providers/gcp/services/kms/kms_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.kms.kms_service import KMS -kms_client = KMS(global_provider) +kms_client = KMS(get_global_provider()) diff --git a/prowler/providers/gcp/services/kms/kms_service.py b/prowler/providers/gcp/services/kms/kms_service.py index f5c30ba3f2..f6f620c1bd 100644 --- a/prowler/providers/gcp/services/kms/kms_service.py +++ b/prowler/providers/gcp/services/kms/kms_service.py @@ -8,8 +8,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## KMS class KMS(GCPService): - def __init__(self, audit_info): - super().__init__("cloudkms", audit_info) + def __init__(self, provider): + super().__init__("cloudkms", provider) self.locations = [] self.key_rings = [] self.crypto_keys = [] diff --git a/prowler/providers/gcp/services/logging/logging_client.py b/prowler/providers/gcp/services/logging/logging_client.py index 83dbdf34aa..3f031b5e97 100644 --- a/prowler/providers/gcp/services/logging/logging_client.py +++ b/prowler/providers/gcp/services/logging/logging_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.logging.logging_service import Logging -logging_client = Logging(global_provider) +logging_client = Logging(get_global_provider()) diff --git a/prowler/providers/gcp/services/logging/logging_service.py b/prowler/providers/gcp/services/logging/logging_service.py index 7936291111..bb93c3783a 100644 --- a/prowler/providers/gcp/services/logging/logging_service.py +++ b/prowler/providers/gcp/services/logging/logging_service.py @@ -6,8 +6,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## Logging class Logging(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info, api_version="v2") + def __init__(self, provider): + super().__init__(__class__.__name__, provider, api_version="v2") self.sinks = [] self.metrics = [] self.__get_sinks__() diff --git a/prowler/providers/gcp/services/monitoring/monitoring_client.py b/prowler/providers/gcp/services/monitoring/monitoring_client.py index d30491226a..3c25f9832f 100644 --- a/prowler/providers/gcp/services/monitoring/monitoring_client.py +++ b/prowler/providers/gcp/services/monitoring/monitoring_client.py @@ -1,4 +1,4 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.monitoring.monitoring_service import Monitoring -monitoring_client = Monitoring(global_provider) +monitoring_client = Monitoring(get_global_provider()) diff --git a/prowler/providers/gcp/services/monitoring/monitoring_service.py b/prowler/providers/gcp/services/monitoring/monitoring_service.py index 1ffb6ed7af..b605c90324 100644 --- a/prowler/providers/gcp/services/monitoring/monitoring_service.py +++ b/prowler/providers/gcp/services/monitoring/monitoring_service.py @@ -6,8 +6,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## Monitoring class Monitoring(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info, api_version="v3") + def __init__(self, provider): + super().__init__(__class__.__name__, provider, api_version="v3") self.alert_policies = [] self.__get_alert_policies__() diff --git a/prowler/providers/gcp/services/serviceusage/serviceusage_client.py b/prowler/providers/gcp/services/serviceusage/serviceusage_client.py index cf146dd336..36d5a19ccf 100644 --- a/prowler/providers/gcp/services/serviceusage/serviceusage_client.py +++ b/prowler/providers/gcp/services/serviceusage/serviceusage_client.py @@ -1,6 +1,6 @@ -from prowler.providers.common.common import global_provider +from prowler.providers.common.common import get_global_provider from prowler.providers.gcp.services.serviceusage.serviceusage_service import ( ServiceUsage, ) -serviceusage_client = ServiceUsage(global_provider) +serviceusage_client = ServiceUsage(get_global_provider()) diff --git a/prowler/providers/gcp/services/serviceusage/serviceusage_service.py b/prowler/providers/gcp/services/serviceusage/serviceusage_service.py index fb62219c08..d79ee8e0b8 100644 --- a/prowler/providers/gcp/services/serviceusage/serviceusage_service.py +++ b/prowler/providers/gcp/services/serviceusage/serviceusage_service.py @@ -6,8 +6,8 @@ from prowler.providers.gcp.lib.service.service import GCPService ################## ServiceUsage class ServiceUsage(GCPService): - def __init__(self, audit_info): - super().__init__(__class__.__name__, audit_info) + def __init__(self, provider): + super().__init__(__class__.__name__, provider) self.active_services = {} self.__get_active_services__() diff --git a/prowler/providers/kubernetes/kubernetes_provider_new.py b/prowler/providers/kubernetes/kubernetes_provider_new.py index 0ab765ff78..ea5552b24c 100644 --- a/prowler/providers/kubernetes/kubernetes_provider_new.py +++ b/prowler/providers/kubernetes/kubernetes_provider_new.py @@ -6,11 +6,11 @@ from colorama import Fore, Style from kubernetes import client, config from prowler.lib.logger import logger -from prowler.providers.common.provider import CloudProvider +from prowler.providers.common.provider import Provider -class KubernetesProvider(CloudProvider): - # TODO change class name from CloudProvider to Provider +class KubernetesProvider(Provider): + # TODO change class name from Provider to Provider api_client: Any context: dict audit_resources: Optional[Any]