mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-03-22 03:08:23 +00:00
feat(compliance): add csa ccm for the oraclecloud provider (#10057)
This commit is contained in:
@@ -13,9 +13,10 @@ All notable changes to the **Prowler API** are documented in this file.
|
|||||||
- Attack Paths: Queries definition now has short description and attribution [(#9983)](https://github.com/prowler-cloud/prowler/pull/9983)
|
- Attack Paths: Queries definition now has short description and attribution [(#9983)](https://github.com/prowler-cloud/prowler/pull/9983)
|
||||||
- Attack Paths: Internet node is created while scan [(#9992)](https://github.com/prowler-cloud/prowler/pull/9992)
|
- Attack Paths: Internet node is created while scan [(#9992)](https://github.com/prowler-cloud/prowler/pull/9992)
|
||||||
- Attack Paths: Add full paths set from [pathfinding.cloud](https://pathfinding.cloud/) [(#10008)](https://github.com/prowler-cloud/prowler/pull/10008)
|
- Attack Paths: Add full paths set from [pathfinding.cloud](https://pathfinding.cloud/) [(#10008)](https://github.com/prowler-cloud/prowler/pull/10008)
|
||||||
- Support CSA CCM for the AWS provider [(#10018)](https://github.com/prowler-cloud/prowler/pull/10018)
|
- Support CSA CCM 4.0 for the AWS provider [(#10018)](https://github.com/prowler-cloud/prowler/pull/10018)
|
||||||
- Support CSA CCM 4.0 for the GCP provider [(#10042)](https://github.com/prowler-cloud/prowler/pull/10042)
|
- Support CSA CCM 4.0 for the GCP provider [(#10042)](https://github.com/prowler-cloud/prowler/pull/10042)
|
||||||
- Support CSA CCM for the Azure provider [(#10039)](https://github.com/prowler-cloud/prowler/pull/10039)
|
- Support CSA CCM 4.0 for the Azure provider [(#10039)](https://github.com/prowler-cloud/prowler/pull/10039)
|
||||||
|
- Support CSA CCM 4.0 for the Oracle Cloud provider [(#10057)](https://github.com/prowler-cloud/prowler/pull/10057)
|
||||||
|
|
||||||
### 🔐 Security
|
### 🔐 Security
|
||||||
|
|
||||||
|
|||||||
@@ -36,8 +36,9 @@ from prowler.lib.outputs.compliance.cis.cis_kubernetes import KubernetesCIS
|
|||||||
from prowler.lib.outputs.compliance.cis.cis_m365 import M365CIS
|
from prowler.lib.outputs.compliance.cis.cis_m365 import M365CIS
|
||||||
from prowler.lib.outputs.compliance.cis.cis_oraclecloud import OracleCloudCIS
|
from prowler.lib.outputs.compliance.cis.cis_oraclecloud import OracleCloudCIS
|
||||||
from prowler.lib.outputs.compliance.csa.csa_aws import AWSCSA
|
from prowler.lib.outputs.compliance.csa.csa_aws import AWSCSA
|
||||||
from prowler.lib.outputs.compliance.csa.csa_gcp import GCPCSA
|
|
||||||
from prowler.lib.outputs.compliance.csa.csa_azure import AzureCSA
|
from prowler.lib.outputs.compliance.csa.csa_azure import AzureCSA
|
||||||
|
from prowler.lib.outputs.compliance.csa.csa_gcp import GCPCSA
|
||||||
|
from prowler.lib.outputs.compliance.csa.csa_oraclecloud import OracleCloudCSA
|
||||||
from prowler.lib.outputs.compliance.ens.ens_aws import AWSENS
|
from prowler.lib.outputs.compliance.ens.ens_aws import AWSENS
|
||||||
from prowler.lib.outputs.compliance.ens.ens_azure import AzureENS
|
from prowler.lib.outputs.compliance.ens.ens_azure import AzureENS
|
||||||
from prowler.lib.outputs.compliance.ens.ens_gcp import GCPENS
|
from prowler.lib.outputs.compliance.ens.ens_gcp import GCPENS
|
||||||
@@ -137,6 +138,7 @@ COMPLIANCE_CLASS_MAP = {
|
|||||||
],
|
],
|
||||||
"oraclecloud": [
|
"oraclecloud": [
|
||||||
(lambda name: name.startswith("cis_"), OracleCloudCIS),
|
(lambda name: name.startswith("cis_"), OracleCloudCIS),
|
||||||
|
(lambda name: name.startswith("csa_"), OracleCloudCSA),
|
||||||
],
|
],
|
||||||
"alibabacloud": [
|
"alibabacloud": [
|
||||||
(lambda name: name.startswith("cis_"), AlibabaCloudCIS),
|
(lambda name: name.startswith("cis_"), AlibabaCloudCIS),
|
||||||
|
|||||||
31
dashboard/compliance/csa_ccm_4_0_oraclecloud.py
Normal file
31
dashboard/compliance/csa_ccm_4_0_oraclecloud.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import warnings
|
||||||
|
|
||||||
|
from dashboard.common_methods import get_section_containers_kisa_ismsp
|
||||||
|
|
||||||
|
warnings.filterwarnings("ignore")
|
||||||
|
|
||||||
|
|
||||||
|
def get_table(data):
|
||||||
|
data["REQUIREMENTS_ID"] = (
|
||||||
|
data["REQUIREMENTS_ID"] + " - " + data["REQUIREMENTS_DESCRIPTION"]
|
||||||
|
)
|
||||||
|
|
||||||
|
data["REQUIREMENTS_ID"] = data["REQUIREMENTS_ID"].apply(
|
||||||
|
lambda x: x[:150] + "..." if len(str(x)) > 150 else x
|
||||||
|
)
|
||||||
|
|
||||||
|
aux = data[
|
||||||
|
[
|
||||||
|
"REQUIREMENTS_ID",
|
||||||
|
"REQUIREMENTS_ATTRIBUTES_SECTION",
|
||||||
|
"CHECKID",
|
||||||
|
"STATUS",
|
||||||
|
"REGION",
|
||||||
|
"ACCOUNTID",
|
||||||
|
"RESOURCEID",
|
||||||
|
]
|
||||||
|
].copy()
|
||||||
|
|
||||||
|
return get_section_containers_kisa_ismsp(
|
||||||
|
aux, "REQUIREMENTS_ATTRIBUTES_SECTION", "REQUIREMENTS_ID"
|
||||||
|
)
|
||||||
@@ -12,7 +12,8 @@ All notable changes to the **Prowler SDK** are documented in this file.
|
|||||||
- AI Skills: Added a skill for creating new Attack Paths queries in openCypher, compatible with Neo4j and Neptune [(#9975)](https://github.com/prowler-cloud/prowler/pull/9975)
|
- AI Skills: Added a skill for creating new Attack Paths queries in openCypher, compatible with Neo4j and Neptune [(#9975)](https://github.com/prowler-cloud/prowler/pull/9975)
|
||||||
- CSA CCM 4.0 for the AWS provider [(#10018)](https://github.com/prowler-cloud/prowler/pull/10018)
|
- CSA CCM 4.0 for the AWS provider [(#10018)](https://github.com/prowler-cloud/prowler/pull/10018)
|
||||||
- CSA CCM 4.0 for the GCP provider [(#10042)](https://github.com/prowler-cloud/prowler/pull/10042)
|
- CSA CCM 4.0 for the GCP provider [(#10042)](https://github.com/prowler-cloud/prowler/pull/10042)
|
||||||
- CSA CCM for the Azure provider [(#10039)](https://github.com/prowler-cloud/prowler/pull/10039)
|
- CSA CCM 4.0 for the Azure provider [(#10039)](https://github.com/prowler-cloud/prowler/pull/10039)
|
||||||
|
- CSA CCM 4.0 for the Oracle Cloud provider [(#10057)](https://github.com/prowler-cloud/prowler/pull/10057)
|
||||||
- OCI regions updater script and CI workflow [(#10020)](https://github.com/prowler-cloud/prowler/pull/10020)
|
- OCI regions updater script and CI workflow [(#10020)](https://github.com/prowler-cloud/prowler/pull/10020)
|
||||||
- `image` provider for container image scanning with Trivy integration [(#9984)](https://github.com/prowler-cloud/prowler/pull/9984)
|
- `image` provider for container image scanning with Trivy integration [(#9984)](https://github.com/prowler-cloud/prowler/pull/9984)
|
||||||
|
|
||||||
|
|||||||
@@ -67,8 +67,9 @@ from prowler.lib.outputs.compliance.cis.cis_m365 import M365CIS
|
|||||||
from prowler.lib.outputs.compliance.cis.cis_oraclecloud import OracleCloudCIS
|
from prowler.lib.outputs.compliance.cis.cis_oraclecloud import OracleCloudCIS
|
||||||
from prowler.lib.outputs.compliance.compliance import display_compliance_table
|
from prowler.lib.outputs.compliance.compliance import display_compliance_table
|
||||||
from prowler.lib.outputs.compliance.csa.csa_aws import AWSCSA
|
from prowler.lib.outputs.compliance.csa.csa_aws import AWSCSA
|
||||||
from prowler.lib.outputs.compliance.csa.csa_gcp import GCPCSA
|
|
||||||
from prowler.lib.outputs.compliance.csa.csa_azure import AzureCSA
|
from prowler.lib.outputs.compliance.csa.csa_azure import AzureCSA
|
||||||
|
from prowler.lib.outputs.compliance.csa.csa_gcp import GCPCSA
|
||||||
|
from prowler.lib.outputs.compliance.csa.csa_oraclecloud import OracleCloudCSA
|
||||||
from prowler.lib.outputs.compliance.ens.ens_aws import AWSENS
|
from prowler.lib.outputs.compliance.ens.ens_aws import AWSENS
|
||||||
from prowler.lib.outputs.compliance.ens.ens_azure import AzureENS
|
from prowler.lib.outputs.compliance.ens.ens_azure import AzureENS
|
||||||
from prowler.lib.outputs.compliance.ens.ens_gcp import GCPENS
|
from prowler.lib.outputs.compliance.ens.ens_gcp import GCPENS
|
||||||
@@ -1072,6 +1073,18 @@ def prowler():
|
|||||||
)
|
)
|
||||||
generated_outputs["compliance"].append(cis)
|
generated_outputs["compliance"].append(cis)
|
||||||
cis.batch_write_data_to_file()
|
cis.batch_write_data_to_file()
|
||||||
|
elif compliance_name == "csa_ccm_4.0_oraclecloud":
|
||||||
|
filename = (
|
||||||
|
f"{output_options.output_directory}/compliance/"
|
||||||
|
f"{output_options.output_filename}_{compliance_name}.csv"
|
||||||
|
)
|
||||||
|
csa_ccm_4_0_oraclecloud = OracleCloudCSA(
|
||||||
|
findings=finding_outputs,
|
||||||
|
compliance=bulk_compliance_frameworks[compliance_name],
|
||||||
|
file_path=filename,
|
||||||
|
)
|
||||||
|
generated_outputs["compliance"].append(csa_ccm_4_0_oraclecloud)
|
||||||
|
csa_ccm_4_0_oraclecloud.batch_write_data_to_file()
|
||||||
else:
|
else:
|
||||||
filename = (
|
filename = (
|
||||||
f"{output_options.output_directory}/compliance/"
|
f"{output_options.output_directory}/compliance/"
|
||||||
|
|||||||
7307
prowler/compliance/oraclecloud/csa_ccm_4.0_oraclecloud.json
Normal file
7307
prowler/compliance/oraclecloud/csa_ccm_4.0_oraclecloud.json
Normal file
File diff suppressed because it is too large
Load Diff
96
prowler/lib/outputs/compliance/csa/csa_oraclecloud.py
Normal file
96
prowler/lib/outputs/compliance/csa/csa_oraclecloud.py
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
from prowler.config.config import timestamp
|
||||||
|
from prowler.lib.check.compliance_models import Compliance
|
||||||
|
from prowler.lib.outputs.compliance.compliance_output import ComplianceOutput
|
||||||
|
from prowler.lib.outputs.compliance.csa.models import OracleCloudCSAModel
|
||||||
|
from prowler.lib.outputs.finding import Finding
|
||||||
|
|
||||||
|
|
||||||
|
class OracleCloudCSA(ComplianceOutput):
|
||||||
|
"""
|
||||||
|
This class represents the OracleCloud CSA compliance output.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
- _data (list): A list to store transformed data from findings.
|
||||||
|
- _file_descriptor (TextIOWrapper): A file descriptor to write data to a file.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
- transform: Transforms findings into OracleCloud CSA compliance format.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def transform(
|
||||||
|
self,
|
||||||
|
findings: list[Finding],
|
||||||
|
compliance: Compliance,
|
||||||
|
compliance_name: str,
|
||||||
|
) -> None:
|
||||||
|
"""
|
||||||
|
Transforms a list of findings into OracleCloud CSA compliance format.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
- findings (list): A list of findings.
|
||||||
|
- compliance (Compliance): A compliance model.
|
||||||
|
- compliance_name (str): The name of the compliance model.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
- None
|
||||||
|
"""
|
||||||
|
for finding in findings:
|
||||||
|
# Get the compliance requirements for the finding
|
||||||
|
finding_requirements = finding.compliance.get(compliance_name, [])
|
||||||
|
for requirement in compliance.Requirements:
|
||||||
|
if requirement.Id in finding_requirements:
|
||||||
|
for attribute in requirement.Attributes:
|
||||||
|
compliance_row = OracleCloudCSAModel(
|
||||||
|
Provider=finding.provider,
|
||||||
|
Description=compliance.Description,
|
||||||
|
TenancyId=finding.account_uid,
|
||||||
|
Region=finding.region,
|
||||||
|
AssessmentDate=str(timestamp),
|
||||||
|
Requirements_Id=requirement.Id,
|
||||||
|
Requirements_Description=requirement.Description,
|
||||||
|
Requirements_Name=requirement.Name,
|
||||||
|
Requirements_Attributes_Section=attribute.Section,
|
||||||
|
Requirements_Attributes_CCMLite=attribute.CCMLite,
|
||||||
|
Requirements_Attributes_IaaS=attribute.IaaS,
|
||||||
|
Requirements_Attributes_PaaS=attribute.PaaS,
|
||||||
|
Requirements_Attributes_SaaS=attribute.SaaS,
|
||||||
|
Requirements_Attributes_ScopeApplicability=attribute.ScopeApplicability,
|
||||||
|
Status=finding.status,
|
||||||
|
StatusExtended=finding.status_extended,
|
||||||
|
ResourceId=finding.resource_uid,
|
||||||
|
ResourceName=finding.resource_name,
|
||||||
|
CheckId=finding.check_id,
|
||||||
|
Muted=finding.muted,
|
||||||
|
Framework=compliance.Framework,
|
||||||
|
Name=compliance.Name,
|
||||||
|
)
|
||||||
|
self._data.append(compliance_row)
|
||||||
|
# Add manual requirements to the compliance output
|
||||||
|
for requirement in compliance.Requirements:
|
||||||
|
if not requirement.Checks:
|
||||||
|
for attribute in requirement.Attributes:
|
||||||
|
compliance_row = OracleCloudCSAModel(
|
||||||
|
Provider=compliance.Provider.lower(),
|
||||||
|
Description=compliance.Description,
|
||||||
|
TenancyId="",
|
||||||
|
Region="",
|
||||||
|
AssessmentDate=str(timestamp),
|
||||||
|
Requirements_Id=requirement.Id,
|
||||||
|
Requirements_Description=requirement.Description,
|
||||||
|
Requirements_Name=requirement.Name,
|
||||||
|
Requirements_Attributes_Section=attribute.Section,
|
||||||
|
Requirements_Attributes_CCMLite=attribute.CCMLite,
|
||||||
|
Requirements_Attributes_IaaS=attribute.IaaS,
|
||||||
|
Requirements_Attributes_PaaS=attribute.PaaS,
|
||||||
|
Requirements_Attributes_SaaS=attribute.SaaS,
|
||||||
|
Requirements_Attributes_ScopeApplicability=attribute.ScopeApplicability,
|
||||||
|
Status="MANUAL",
|
||||||
|
StatusExtended="Manual check",
|
||||||
|
ResourceId="manual_check",
|
||||||
|
ResourceName="Manual check",
|
||||||
|
CheckId="manual",
|
||||||
|
Muted=False,
|
||||||
|
Framework=compliance.Framework,
|
||||||
|
Name=compliance.Name,
|
||||||
|
)
|
||||||
|
self._data.append(compliance_row)
|
||||||
@@ -59,6 +59,35 @@ class GCPCSAModel(BaseModel):
|
|||||||
Name: str
|
Name: str
|
||||||
|
|
||||||
|
|
||||||
|
class OracleCloudCSAModel(BaseModel):
|
||||||
|
"""
|
||||||
|
OracleCloudCSAModel generates a finding's output in CSV CSA format for OracleCloud.
|
||||||
|
"""
|
||||||
|
|
||||||
|
Provider: str
|
||||||
|
Description: str
|
||||||
|
TenancyId: str
|
||||||
|
Region: str
|
||||||
|
AssessmentDate: str
|
||||||
|
Requirements_Id: str
|
||||||
|
Requirements_Description: str
|
||||||
|
Requirements_Name: str
|
||||||
|
Requirements_Attributes_Section: str
|
||||||
|
Requirements_Attributes_CCMLite: str
|
||||||
|
Requirements_Attributes_IaaS: str
|
||||||
|
Requirements_Attributes_PaaS: str
|
||||||
|
Requirements_Attributes_SaaS: str
|
||||||
|
Requirements_Attributes_ScopeApplicability: list[dict]
|
||||||
|
Status: str
|
||||||
|
StatusExtended: str
|
||||||
|
ResourceId: str
|
||||||
|
CheckId: str
|
||||||
|
Muted: bool
|
||||||
|
ResourceName: str
|
||||||
|
Framework: str
|
||||||
|
Name: str
|
||||||
|
|
||||||
|
|
||||||
class AzureCSAModel(BaseModel):
|
class AzureCSAModel(BaseModel):
|
||||||
"""
|
"""
|
||||||
AzureCSAModel generates a finding's output in CSV CSA format for Azure.
|
AzureCSAModel generates a finding's output in CSV CSA format for Azure.
|
||||||
|
|||||||
Reference in New Issue
Block a user