feat(gcp_service): Parent class (#2641)

This commit is contained in:
Pepe Fagoaga
2023-07-31 15:01:25 +02:00
committed by GitHub
parent b4e78d28f8
commit dbbb70027a
15 changed files with 64 additions and 121 deletions

View File

@@ -0,0 +1,18 @@
from prowler.providers.gcp.gcp_provider import generate_client
class GCPService:
def __init__(self, service, audit_info, region="global", api_version="v1"):
# We receive the service using __class__.__name__ or the service name in lowercase
# e.g.: APIKeys --> we need a lowercase string, so service.lower()
self.service = service.lower() if not service.islower() else service
self.api_version = api_version
self.project_ids = audit_info.project_ids
self.default_project_id = audit_info.default_project_id
self.region = region
self.client = generate_client(service, api_version, audit_info)
def __get_client__(self):
return self.client

View File

@@ -1,18 +1,14 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## API Keys
class APIKeys:
class APIKeys(GCPService):
def __init__(self, audit_info):
self.service = "apikeys"
self.api_version = "v2"
self.project_ids = audit_info.project_ids
self.default_project_id = audit_info.default_project_id
self.region = "global"
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__(__class__.__name__, audit_info, api_version="v2")
self.keys = []
self.__get_keys__()

View File

@@ -1,16 +1,14 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## BigQuery
class BigQuery:
class BigQuery(GCPService):
def __init__(self, audit_info):
self.service = "bigquery"
self.api_version = "v2"
self.project_ids = audit_info.project_ids
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__(__class__.__name__, audit_info, api_version="v2")
self.datasets = []
self.tables = []
self.__get_datasets__()

View File

@@ -1,26 +1,20 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## CloudResourceManager
class CloudResourceManager:
class CloudResourceManager(GCPService):
def __init__(self, audit_info):
self.service = "cloudresourcemanager"
self.api_version = "v1"
self.region = "global"
self.project_ids = audit_info.project_ids
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__(__class__.__name__, audit_info)
self.bindings = []
self.projects = []
self.organizations = []
self.__get_iam_policy__()
self.__get_organizations__()
def __get_client__(self):
return self.client
def __get_iam_policy__(self):
for project_id in self.project_ids:
try:

View File

@@ -1,16 +1,13 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## CloudSQL
class CloudSQL:
class CloudSQL(GCPService):
def __init__(self, audit_info):
self.service = "sqladmin"
self.api_version = "v1"
self.project_ids = audit_info.project_ids
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__("sqladmin", audit_info)
self.instances = []
self.__get_instances__()

View File

@@ -3,16 +3,13 @@ from typing import Optional
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## CloudStorage
class CloudStorage:
class CloudStorage(GCPService):
def __init__(self, audit_info):
self.service = "storage"
self.api_version = "v1"
self.project_ids = audit_info.project_ids
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__("storage", audit_info)
self.buckets = []
self.__get_buckets__()

View File

@@ -1,18 +1,13 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## Compute
class Compute:
class Compute(GCPService):
def __init__(self, audit_info):
self.service = "compute"
self.api_version = "v1"
self.project_ids = audit_info.project_ids
self.default_project_id = audit_info.default_project_id
self.client = generate_client(self.service, self.api_version, audit_info)
self.region = "global"
super().__init__(__class__.__name__, audit_info)
self.regions = set()
self.zones = set()
self.instances = []

View File

@@ -1,18 +1,14 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
from prowler.providers.gcp.services.compute.compute_client import compute_client
################## Dataproc
class Dataproc:
class Dataproc(GCPService):
def __init__(self, audit_info):
self.service = "dataproc"
self.api_version = "v1"
self.project_ids = audit_info.project_ids
self.default_project_id = audit_info.default_project_id
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__(__class__.__name__, audit_info)
self.clusters = []
self.__get_clusters__()

View File

@@ -1,18 +1,13 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## DNS
class DNS:
class DNS(GCPService):
def __init__(self, audit_info):
self.service = "dns"
self.api_version = "v1"
self.project_ids = audit_info.project_ids
self.default_project_id = audit_info.default_project_id
self.client = generate_client(self.service, self.api_version, audit_info)
self.region = "global"
super().__init__(__class__.__name__, audit_info)
self.managed_zones = []
self.__get_managed_zones__()
self.policies = []

View File

@@ -3,27 +3,20 @@ from datetime import datetime
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
from prowler.providers.gcp.services.cloudresourcemanager.cloudresourcemanager_client import (
cloudresourcemanager_client,
)
################## IAM
class IAM:
class IAM(GCPService):
def __init__(self, audit_info):
self.service = "iam"
self.api_version = "v1"
self.project_ids = audit_info.project_ids
self.region = "global"
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__(__class__.__name__, audit_info)
self.service_accounts = []
self.__get_service_accounts__()
self.__get_service_accounts_keys__()
def __get_client__(self):
return self.client
def __get_service_accounts__(self):
for project_id in self.project_ids:
try:
@@ -109,19 +102,12 @@ class ServiceAccount(BaseModel):
################## AccessApproval
class AccessApproval:
class AccessApproval(GCPService):
def __init__(self, audit_info):
self.service = "accessapproval"
self.api_version = "v1"
self.project_ids = audit_info.project_ids
self.region = "global"
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__(__class__.__name__, audit_info)
self.settings = {}
self.__get_settings__()
def __get_client__(self):
return self.client
def __get_settings__(self):
for project_id in self.project_ids:
try:
@@ -148,18 +134,12 @@ class Setting(BaseModel):
################## EssentialContacts
class EssentialContacts:
class EssentialContacts(GCPService):
def __init__(self, audit_info):
self.service = "essentialcontacts"
self.api_version = "v1"
self.region = "global"
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__(__class__.__name__, audit_info)
self.organizations = []
self.__get_contacts__()
def __get_client__(self):
return self.client
def __get_contacts__(self):
for org in cloudresourcemanager_client.organizations:
try:

View File

@@ -3,17 +3,13 @@ from typing import Optional
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## KMS
class KMS:
class KMS(GCPService):
def __init__(self, audit_info):
self.service = "cloudkms"
self.api_version = "v1"
self.project_ids = audit_info.project_ids
self.region = "global"
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__("cloudkms", audit_info)
self.locations = []
self.key_rings = []
self.crypto_keys = []
@@ -22,9 +18,6 @@ class KMS:
self.__get_crypto_keys__()
self.__get_crypto_keys_iam_policy__()
def __get_client__(self):
return self.client
def __get_locations__(self):
for project_id in self.project_ids:
try:

View File

@@ -1,18 +1,13 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## Logging
class Logging:
class Logging(GCPService):
def __init__(self, audit_info):
self.service = "logging"
self.api_version = "v2"
self.region = "global"
self.project_ids = audit_info.project_ids
self.default_project_id = audit_info.default_project_id
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__(__class__.__name__, audit_info, api_version="v2")
self.sinks = []
self.metrics = []
self.__get_sinks__()

View File

@@ -1,17 +1,13 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## Monitoring
class Monitoring:
class Monitoring(GCPService):
def __init__(self, audit_info):
self.service = "monitoring"
self.api_version = "v3"
self.region = "global"
self.project_ids = audit_info.project_ids
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__(__class__.__name__, audit_info, api_version="v3")
self.alert_policies = []
self.__get_alert_policies__()

View File

@@ -1,23 +1,16 @@
from pydantic import BaseModel
from prowler.lib.logger import logger
from prowler.providers.gcp.gcp_provider import generate_client
from prowler.providers.gcp.lib.service.service import GCPService
################## ServiceUsage
class ServiceUsage:
class ServiceUsage(GCPService):
def __init__(self, audit_info):
self.service = "serviceusage"
self.api_version = "v1"
self.region = "global"
self.project_ids = audit_info.project_ids
self.client = generate_client(self.service, self.api_version, audit_info)
super().__init__(__class__.__name__, audit_info)
self.active_services = {}
self.__get_active_services__()
def __get_client__(self):
return self.client
def __get_active_services__(self):
for project_id in self.project_ids:
self.active_services[project_id] = []