chore(gcp): working outputs (#3490)

Co-authored-by: Sergio Garcia <sergargar1@gmail.com>
This commit is contained in:
Pepe Fagoaga
2024-03-04 17:54:41 +01:00
committed by GitHub
parent 33242079f7
commit fc59183045
6 changed files with 47 additions and 37 deletions
+1 -11
View File
@@ -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 (
"""
<div class="col-md-2">
@@ -507,7 +498,7 @@ def get_gcp_html_assessment_summary(provider):
<ul class="list-group list-group-flush">
<li class="list-group-item">
<b>GCP Account:</b> """
+ profile
+ provider.identity.profile
+ """
</li>
</ul>
@@ -550,7 +541,6 @@ def get_kubernetes_html_assessment_summary(provider):
<li class="list-group-item">
<b>Kubernetes Cluster:</b> """
+ provider.identity.cluster
+ """
</li>
<li class="list-group-item">
+39 -20
View File
@@ -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:
+1 -1
View File
@@ -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
@@ -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())
@@ -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):
"""