dns
Sample rules
A few rules that use objects from this package:
non_car_cloud_dns_ensure_rsasha1_disabled
from typing import List, Dict, Optional
from cloudrail.knowledge.context.gcp.gcp_environment_context import GcpEnvironmentContext
from cloudrail.knowledge.context.gcp.resources.dns.gcp_dns_managed_zone import GcpDnsManagedZone, DnsDefKeyAlgorithm, GcpDnsManagedZoneDnsSecCfgDefKeySpecs
from cloudrail.knowledge.rules.base_rule import Issue
from cloudrail.knowledge.rules.gcp.gcp_base_rule import GcpBaseRule
from cloudrail.knowledge.rules.rule_parameters.base_paramerter import ParameterType
class CloudDnsNoRsasha1UsedRule(GcpBaseRule):
def get_id(self) -> str:
return 'non_car_cloud_dns_ensure_rsasha1_disabled'
def execute(self, env_context: GcpEnvironmentContext, parameters: Dict[ParameterType, any]) -> List[Issue]:
issues: List[Issue] = []
for cloud_dns in env_context.dns_managed_zones:
if affected_dns_keys := self._get_affected_keys(cloud_dns):
issues.append(
Issue(
f"The {cloud_dns.get_type()} `{cloud_dns.get_friendly_name()}` has rsasha1 enabled for key(s) "
f"{', '.join(key.key_type.value for key in affected_dns_keys)}",
cloud_dns,
cloud_dns))
return issues
def should_run_rule(self, environment_context: GcpEnvironmentContext) -> bool:
return bool(environment_context.dns_managed_zones)
@staticmethod
def _get_affected_keys(cloud_dns: GcpDnsManagedZone) -> Optional[List[GcpDnsManagedZoneDnsSecCfgDefKeySpecs]]:
if cloud_dns.dnssec_config and cloud_dns.dnssec_config.state == 'on':
return [default_key for default_key in cloud_dns.dnssec_config.default_key_specs
if default_key.algorithm == DnsDefKeyAlgorithm.RSASHA1]
return None
DnsDefKeyAlgorithm (str, Enum)
An enumeration.
DnsDefKeyType (str, Enum)
An enumeration.
GcpDnsManagedZone (GcpResource)
Attributes:
Name | Type | Description |
---|---|---|
name |
str |
(Required) User assigned name for this resource. Must be unique within the project. |
dns_name |
str |
(Required) The DNS name of this managed zone. |
description |
Optional[str] |
(Optional) A textual description field. |
dnssec_config |
Optional[GcpDnsManagedZoneDnsSecCfg] |
(Optional) DNSSEC configuration parameters. |
custom_invalidation(self)
inherited
A list of manual reasons why this resource should be invalidated
exclude_from_invalidation(self)
inherited
A list of attributes that should be excluded from the invalidation process
GcpDnsManagedZoneDnsSecCfg
dataclass
Attributes:
Name | Type | Description |
---|---|---|
kind |
str |
(Optional) Identifies the kind of resource. |
non_existence |
Optional[str] |
(Optional) Specifies the mechanism used to provide authenticated denial-of-existence responses. Possible values are nsec and nsec3. |
state |
str |
(Optional) Specifies whether DNSSEC is enabled, and what mode it is in. Possible values are off, on, and transfer. |
default_key_specs |
List[cloudrail.knowledge.context.gcp.resources.dns.gcp_dns_managed_zone.GcpDnsManagedZoneDnsSecCfgDefKeySpecs] |
(Optional) Specifies parameters that will be used for generating initial DnsKeys for this ManagedZone. |
GcpDnsManagedZoneDnsSecCfgDefKeySpecs
dataclass
Attributes:
Name | Type | Description |
---|---|---|
algorithm |
DnsDefKeyAlgorithm |
(Optional) String mnemonic specifying the DNSSEC algorithm of this key Possible values are ecdsap256sha256, ecdsap384sha384, rsasha1, rsasha256, and rsasha512. |
key_length |
int |
(Optional) Length of the keys in bits. |
key_type |
DnsDefKeyType |
(Optional) (Optional) Specifies whether this is a key signing key (KSK) or a zone signing key (ZSK). |
kind |
str |
(Optional) Identifies the kind of resource. |