diff --git a/prowler/lib/outputs/html.py b/prowler/lib/outputs/html.py
index a4a5f6b4cc..482d5749db 100644
--- a/prowler/lib/outputs/html.py
+++ b/prowler/lib/outputs/html.py
@@ -474,15 +474,6 @@ def get_azure_html_assessment_summary(provider):
def get_gcp_html_assessment_summary(provider):
try:
if provider.type == "gcp":
- try:
- getattr(provider.credentials, "_service_account_email")
- profile = (
- provider.credentials._service_account_email
- if provider.credentials._service_account_email is not None
- else "default"
- )
- except AttributeError:
- profile = "default"
return (
"""
@@ -507,7 +498,7 @@ def get_gcp_html_assessment_summary(provider):
-
GCP Account: """
- + profile
+ + provider.identity.profile
+ """
@@ -550,7 +541,6 @@ def get_kubernetes_html_assessment_summary(provider):
Kubernetes Cluster: """
+ provider.identity.cluster
-
+ """
diff --git a/prowler/providers/gcp/gcp_provider.py b/prowler/providers/gcp/gcp_provider.py
index 1617c37118..54a3e06711 100644
--- a/prowler/providers/gcp/gcp_provider.py
+++ b/prowler/providers/gcp/gcp_provider.py
@@ -1,7 +1,7 @@
import os
import sys
from dataclasses import dataclass
-from typing import Any, Optional
+from typing import Optional
from colorama import Fore, Style
from google import auth
@@ -9,35 +9,33 @@ from google.oauth2.credentials import Credentials
from googleapiclient import discovery
from prowler.lib.logger import logger
+from prowler.providers.common.models import Audit_Metadata
from prowler.providers.common.provider import Provider
@dataclass
class GCPIdentityInfo:
profile: str
-
-
-# TODO: why do we have variables defined in the class not passed to the __init__???
-class GcpProvider(Provider):
- # TODO: should we move session and identity to the Provider parent class?
- provider = "gcp"
- session: Credentials
default_project_id: str
- project_ids: list
- # TODO: review this since we have to create an identity object
- identity: GCPIdentityInfo
- audit_resources: Optional[Any]
- audit_metadata: Optional[Any]
- audit_config: Optional[dict]
+
+
+class GcpProvider(Provider):
+ _type: str = "gcp"
+ _session: Credentials
+ _project_ids: list
+ _identity: GCPIdentityInfo
+ _audit_config: Optional[dict]
+ # TODO: this is not optional, enforce for all providers
+ audit_metadata: Audit_Metadata
def __init__(self, arguments):
logger.info("Instantiating GCP Provider ...")
input_project_ids = arguments.project_ids
credentials_file = arguments.credentials_file
- self.session, self.default_project_id = self.setup_session(credentials_file)
+ self._session, default_project_id = self.setup_session(credentials_file)
- self.project_ids = []
+ self._project_ids = []
accessible_projects = self.get_project_ids()
if not accessible_projects:
logger.critical("No Project IDs can be accessed via Google Credentials.")
@@ -46,7 +44,7 @@ class GcpProvider(Provider):
if input_project_ids:
for input_project in input_project_ids:
if input_project in accessible_projects:
- self.project_ids.append(input_project)
+ self._project_ids.append(input_project)
else:
logger.critical(
f"Project {input_project} cannot be accessed via Google Credentials."
@@ -54,12 +52,33 @@ class GcpProvider(Provider):
sys.exit(1)
else:
# If not projects were input, all accessible projects are scanned by default
- self.project_ids = accessible_projects
+ self._project_ids = accessible_projects
- self.identity = GCPIdentityInfo(
- profile=getattr(self.session, "_service_account_email", "default")
+ self._identity = GCPIdentityInfo(
+ profile=getattr(self.session, "_service_account_email", "default"),
+ default_project_id=default_project_id,
)
+ @property
+ def identity(self):
+ return self._identity
+
+ @property
+ def type(self):
+ return self._type
+
+ @property
+ def session(self):
+ return self._session
+
+ @property
+ def project_ids(self):
+ return self._project_ids
+
+ @property
+ def audit_config(self):
+ return self._audit_config
+
def setup_session(self, credentials_file):
try:
if credentials_file:
diff --git a/prowler/providers/gcp/lib/service/service.py b/prowler/providers/gcp/lib/service/service.py
index ffe7fcf141..1181215bd5 100644
--- a/prowler/providers/gcp/lib/service/service.py
+++ b/prowler/providers/gcp/lib/service/service.py
@@ -24,7 +24,7 @@ class GCPService:
self.service = service.lower() if not service.islower() else service
self.credentials = provider.session
self.api_version = api_version
- self.default_project_id = provider.default_project_id
+ self.default_project_id = provider.identity.default_project_id
self.region = region
self.client = self.__generate_client__(
self.service, api_version, self.credentials
diff --git a/prowler/providers/gcp/services/gcr/__init__.py b/prowler/providers/gcp/services/gcr/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/prowler/providers/gcp/services/gke/gke_client.py b/prowler/providers/gcp/services/gke/gke_client.py
index 7b165a2c76..55aed9cdec 100644
--- a/prowler/providers/gcp/services/gke/gke_client.py
+++ b/prowler/providers/gcp/services/gke/gke_client.py
@@ -1,4 +1,4 @@
-from prowler.providers.gcp.lib.audit_info.audit_info import gcp_audit_info
+from prowler.providers.common.common import get_global_provider
from prowler.providers.gcp.services.gke.gke_service import GKE
-gke_client = GKE(gcp_audit_info)
+gke_client = GKE(get_global_provider())
diff --git a/prowler/providers/kubernetes/kubernetes_provider.py b/prowler/providers/kubernetes/kubernetes_provider.py
index 688c956865..cebe4ee8fa 100644
--- a/prowler/providers/kubernetes/kubernetes_provider.py
+++ b/prowler/providers/kubernetes/kubernetes_provider.py
@@ -2,12 +2,13 @@ import os
import sys
from argparse import Namespace
from dataclasses import dataclass
-from typing import Any, Optional
+from typing import Optional
from colorama import Fore, Style
from kubernetes import client, config
from prowler.lib.logger import logger
+from prowler.providers.common.models import Audit_Metadata
from prowler.providers.common.provider import Provider
@@ -33,10 +34,10 @@ class KubernetesProvider(Provider):
_type: str = "kubernetes"
_session: KubernetesSession
_namespaces: list
- audit_resources: Optional[Any]
- audit_metadata: Optional[Any]
_audit_config: Optional[dict]
_identity: KubernetesIdentityInfo
+ # TODO: this is not optional, enforce for all providers
+ audit_metadata: Audit_Metadata
def __init__(self, arguments: Namespace):
"""