Skip to content

Commit

Permalink
platform(general): Backfill more eval keys (#6970)
Browse files Browse the repository at this point in the history
* Backfill more eval keys

* fix flake8
  • Loading branch information
tsmithv11 authored Feb 3, 2025
1 parent e7edf67 commit 7229f61
Show file tree
Hide file tree
Showing 74 changed files with 251 additions and 50 deletions.
5 changes: 4 additions & 1 deletion checkov/arm/checks/resource/ACRAnonymousPullDisabled.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand Down Expand Up @@ -34,5 +34,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:

return CheckResult.PASSED

def get_evaluated_keys(self) -> List[str]:
return ['properties', 'properties/anonymousPullEnabled', 'sku']


check = ACRAnonymousPullDisabled()
5 changes: 4 additions & 1 deletion checkov/arm/checks/resource/ACRContainerScanEnabled.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

from __future__ import annotations
from typing import Any, Dict
from typing import Any, Dict, List
from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck

Expand All @@ -24,5 +24,8 @@ def scan_resource_conf(self, conf: Dict[str, Any]) -> CheckResult:

return CheckResult.FAILED

def get_evaluated_keys(self) -> List[str]:
return ["sku", "sku/name"]


check = ACRContainerScanEnabled()
2 changes: 2 additions & 0 deletions checkov/arm/checks/resource/ACREnableZoneRedundancy.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ def scan_resource_conf(self, conf: dict[str, list[Any]]) -> CheckResult:
# check registry. default=false
properties = conf.get("properties")
if properties and isinstance(properties, dict):
self.evaluated_keys = ["properties"]
if properties.get("zoneRedundancy") == "Disabled":
self.evaluated_keys = ["properties/zoneRedundancy"]
return CheckResult.FAILED
return CheckResult.PASSED

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand Down Expand Up @@ -41,5 +41,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
return CheckResult.PASSED
return CheckResult.FAILED

def get_evaluated_keys(self) -> List[str]:
return ['properties', 'properties/apiServerAccessProfile', 'properties/apiServerAccessProfile/authorizedIPRanges']


check = AKSApiServerAuthorizedIpRanges()
5 changes: 5 additions & 0 deletions checkov/arm/checks/resource/AKSDashboardDisabled.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,21 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
if conf.get("apiVersion") is not None:
if conf["apiVersion"] == "2017-08-31":
# No addonProfiles option to configure
self.evaluated_keys = ["apiVersion"]
return CheckResult.FAILED

properties = conf.get("properties")
self.evaluated_keys = ["properties"]
if properties is None or not isinstance(properties, dict):
self.evaluated_keys = ["properties"]
return CheckResult.FAILED
addon_profiles = conf["properties"].get("addonProfiles")
if not isinstance(addon_profiles, dict):
self.evaluated_keys = ["properties/addonProfiles"]
return CheckResult.FAILED
kube_dashboard = addon_profiles.get("kubeDashboard")
if not isinstance(kube_dashboard, dict):
self.evaluated_keys = ["properties/addonProfiles/kubeDashboard"]
return CheckResult.FAILED
enabled = kube_dashboard.get("enabled")
if enabled is not None and str(enabled).lower() == "false":
Expand Down
3 changes: 3 additions & 0 deletions checkov/arm/checks/resource/AKSLoggingEnabled.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,16 @@ def __init__(self) -> None:
def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
if "apiVersion" in conf:
if conf["apiVersion"] == "2017-08-31":
self.evaluated_keys = ["apiVersion"]
# No addonProfiles option to configure
return CheckResult.FAILED

properties = conf.get("properties")
self.evaluated_keys = ["properties"]
if isinstance(properties, dict):
addon_profiles = properties.get("addonProfiles")
if isinstance(addon_profiles, dict):
self.evaluated_keys = ["properties/addonProfiles"]
omsagent = addon_profiles.get("omsagent")
if not omsagent:
# it can be written in lowercase or camelCase
Expand Down
5 changes: 4 additions & 1 deletion checkov/arm/checks/resource/AKSMaxPodsMinimum.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from __future__ import annotations
from typing import Any
from typing import Any, List
from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
from typing import Optional
Expand Down Expand Up @@ -30,5 +30,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:

return CheckResult.PASSED

def get_evaluated_keys(self) -> List[str]:
return ["properties", "properties/agentPoolProfiles", "properties/agentPoolProfiles/maxPods"]


check = AKSMaxPodsMinimum()
5 changes: 4 additions & 1 deletion checkov/arm/checks/resource/AKSNetworkPolicy.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand Down Expand Up @@ -32,5 +32,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
return CheckResult.PASSED
return CheckResult.FAILED

def get_evaluated_keys(self) -> List[str]:
return ['properties', 'properties/networkProfile', 'properties/networkProfile/networkPolicy']


check = AKSNetworkPolicy()
3 changes: 3 additions & 0 deletions checkov/arm/checks/resource/AKSRbacEnabled.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,17 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
if "apiVersion" in conf:
if conf["apiVersion"] == "2017-08-31":
# No enableRBAC option to configure
self.evaluated_keys = ["apiVersion"]
return CheckResult.FAILED

self.evaluated_keys = ["properties"]
properties = conf.get('properties')
if not properties or not isinstance(properties, dict):
return CheckResult.FAILED
enable_RBAC = properties.get('enableRBAC')
if str(enable_RBAC).lower() == "true":
return CheckResult.PASSED
self.evaluated_keys.append("properties/enableRBAC")
return CheckResult.FAILED


Expand Down
2 changes: 2 additions & 0 deletions checkov/arm/checks/resource/APIManagementMinTLS12.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ def __init__(self) -> None:
def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
properties = conf.get("properties")
if isinstance(properties, dict) and "customProperties" in properties:
self.evaluated_keys = ["properties"]
customProperties = properties.get("customProperties")
if isinstance(customProperties, dict):
self.evaluated_keys = ["properties/customProperties"]
if customProperties.get("Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Ssl30"):
return CheckResult.FAILED
if customProperties.get("Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10"):
Expand Down
6 changes: 5 additions & 1 deletion checkov/arm/checks/resource/AppGWDefinesSecureProtocols.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from __future__ import annotations
from typing import Any
from typing import Any, List
from checkov.common.models.enums import CheckCategories, CheckResult
from checkov.arm.base_resource_check import BaseResourceCheck

Expand Down Expand Up @@ -67,5 +67,9 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
return CheckResult.FAILED
return CheckResult.FAILED

def get_evaluated_keys(self) -> List[str]:
return ["properties/sslPolicy", "properties/sslPolicy/policyType", "properties/sslPolicy/minProtocolVersion",
"properties/sslPolicy/cipherSuites"]


check = AppGWDefinesSecureProtocols()
1 change: 1 addition & 0 deletions checkov/arm/checks/resource/AppServiceAuthentication.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ def __init__(self) -> None:
super().__init__(name=name, id=id, categories=categories, supported_resources=supported_resources)

def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
self.evaluated_keys = ["name"]
if self.entity_type == "Microsoft.Web/sites/config":
if "name" in conf and "authsettings" in conf["name"]:
if "properties" in conf and "enabled" in conf["properties"]:
Expand Down
5 changes: 4 additions & 1 deletion checkov/arm/checks/resource/AppServiceClientCertificate.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand All @@ -23,5 +23,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
return CheckResult.PASSED
return CheckResult.FAILED

def get_evaluated_keys(self) -> List[str]:
return ["properties", "properties/clientCertEnabled"]


check = AppServiceClientCertificate()
5 changes: 4 additions & 1 deletion checkov/arm/checks/resource/AppServiceHTTPSOnly.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand All @@ -22,5 +22,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
return CheckResult.PASSED
return CheckResult.FAILED

def get_evaluated_keys(self) -> List[str]:
return ["properties", "properties/httpsOnly"]


check = AppServiceHTTPSOnly()
2 changes: 2 additions & 0 deletions checkov/arm/checks/resource/AppServiceHttps20Enabled.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ def __init__(self) -> None:
super().__init__(name=name, id=id, categories=categories, supported_resources=supported_resources)

def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
self.evaluated_keys = ["properties"]
http_20_enabled = find_in_dict(conf, "properties/siteConfig/http20Enabled")
if http_20_enabled and "apiVersion" in conf:
self.evaluated_keys = ["properties/siteConfig/http20Enabled", "apiVersion"]
if conf["apiVersion"] == "2018-11-01":
if isinstance(http_20_enabled, str) and str(http_20_enabled).lower() == "true":
return CheckResult.PASSED
Expand Down
5 changes: 4 additions & 1 deletion checkov/arm/checks/resource/AppServiceIdentity.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand Down Expand Up @@ -28,5 +28,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
return CheckResult.PASSED
return CheckResult.FAILED

def get_evaluated_keys(self) -> List[str]:
return ['identity', 'identity/type', 'identity/userAssignedIdentities']


check = AppServiceIdentity()
5 changes: 4 additions & 1 deletion checkov/arm/checks/resource/AppServiceInstanceMinimum.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Dict
from typing import Dict, List

from checkov.arm.base_resource_check import BaseResourceCheck
from checkov.common.models.enums import CheckCategories, CheckResult
Expand Down Expand Up @@ -30,5 +30,8 @@ def scan_resource_conf(self, conf: Dict[str, Dict[str, Dict[str, int]]]) -> Chec
return CheckResult.PASSED
return CheckResult.FAILED

def get_evaluated_keys(self) -> List[str]:
return ["properties", "properties/siteConfig", "properties/siteConfig/numberOfWorkers"]


check = AppServiceInstanceMinimum()
5 changes: 4 additions & 1 deletion checkov/arm/checks/resource/AppServiceUsedAzureFiles.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.arm.base_resource_check import BaseResourceCheck
from checkov.common.models.enums import CheckCategories, CheckResult
Expand All @@ -24,5 +24,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
return CheckResult.PASSED
return CheckResult.FAILED

def get_evaluated_keys(self) -> List[str]:
return ['properties', 'properties/azureStorageAccounts']


check = AppServiceUsedAzureFiles()
1 change: 1 addition & 0 deletions checkov/arm/checks/resource/AzureManagedDiscEncryption.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def __init__(self) -> None:
def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
properties = conf.get("properties")
if properties:
self.evaluated_keys = ["properties"]
encryption = properties.get("encryption")
if encryption:
# if the block exists, then it is enabled
Expand Down
2 changes: 2 additions & 0 deletions checkov/arm/checks/resource/AzureSearchSLAIndex.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,15 @@ def __init__(self) -> None:

def scan_resource_conf(self, conf: Dict[str, Any]) -> CheckResult:
properties = conf.get("properties", {})
self.evaluated_keys = ["properties"]
if not isinstance(properties, dict):
return CheckResult.FAILED
replica_count = properties.get("replicaCount")
if replica_count and isinstance(replica_count, int):
if replica_count >= 3:
return CheckResult.PASSED
else:
self.evaluated_keys = ["properties/replicaCount"]
return CheckResult.FAILED
else:
return CheckResult.FAILED
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ def scan_resource_conf(self, conf: Dict[str, List[Any]]) -> CheckResult:
if depends_on is None or not len(depends_on):
return CheckResult.PASSED
if any('Microsoft.Synapse/workspaces/firewallRules' in item for item in depends_on):
self.evaluated_keys = ["dependsOn"]
return CheckResult.FAILED
return CheckResult.PASSED

Expand Down
5 changes: 4 additions & 1 deletion checkov/arm/checks/resource/CosmosDBDisableAccessKeyWrite.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand All @@ -20,5 +20,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
return CheckResult.PASSED
return CheckResult.FAILED

def get_evaluated_keys(self) -> List[str]:
return ["properties", "properties/disableKeyBasedMetadataWriteAccess"]


check = CosmosDBDisableAccessKeyWrite()
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand Down Expand Up @@ -35,5 +35,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:
return CheckResult.FAILED
return CheckResult.PASSED

def get_evaluated_keys(self) -> List[str]:
return ["properties/assignableScopes", "properties/permissions/actions"]


check = CustomRoleDefinitionSubscriptionOwner()
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand Down Expand Up @@ -28,5 +28,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:

return CheckResult.PASSED

def get_evaluated_keys(self) -> List[str]:
return ["properties/parameters"]


check = DatabricksWorkspaceDBFSRootEncryptedWithCustomerManagedKey()
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand All @@ -23,5 +23,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:

return CheckResult.PASSED

def get_evaluated_keys(self) -> List[str]:
return ["properties", "properties/publicNetworkAccess"]


check = DatabricksWorkspaceIsNotPublic()
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import Any
from typing import Any, List

from checkov.common.models.enums import CheckResult, CheckCategories
from checkov.arm.base_resource_check import BaseResourceCheck
Expand Down Expand Up @@ -41,5 +41,8 @@ def scan_resource_conf(self, conf: dict[str, Any]) -> CheckResult:

return CheckResult.PASSED

def get_evaluated_keys(self) -> List[str]:
return ["properties", "properties/httpsOnly", "properties/httpSettings"]


check = FunctionAppsAccessibleOverHttps()
Loading

0 comments on commit 7229f61

Please sign in to comment.