Source code for illumio.rules.ruleset
# -*- coding: utf-8 -*-
"""This module provides classes related to policy rule sets.
Copyright:
© 2022 Illumio
License:
Apache2, see LICENSE for more details.
"""
from dataclasses import dataclass
from typing import List
from illumio.util import MutableObject, pce_api
from illumio.policyobjects import LabelSet
from .rule import Rule, DenyRule
from .iptablesrule import IPTablesRule
[docs]
@dataclass
@pce_api('rule_sets', is_sec_policy=True)
class RuleSet(MutableObject):
"""Represents a rule set object in the PCE.
Rule sets provide scope boundaries for security policy rules. Scopes are
defined using application, environment, and location labels. Rules within
the set will default to applying to workloads with these labels.
Rule sets can contain:
- rules: Standard allow rules (sec_rules)
- deny_rules: Block rules; each carries an ``override`` flag. Rules are
evaluated in the order override-deny (``override=True``) > allow > deny
(``override=False``). A ruleset exposes a single ``deny_rules`` array
holding both kinds — there is no separate override-deny array.
- ip_tables_rules: Custom IP tables rules
Deny rules are created against a ruleset by passing it as the ``parent``
argument, e.g. ``pce.deny_rules.create(rule, parent=ruleset)``.
See https://docs.illumio.com/core/21.5/Content/Guides/security-policy/create-security-policy/rulesets.htm
Usage:
>>> import illumio
>>> pce = illumio.PolicyComputeEngine('pce.company.com', port=443, org_id=1)
>>> pce.set_credentials('api_key', 'api_secret')
>>> app_label = pce.labels.create({'key': 'app', 'value': 'A-App'})
>>> env_label = pce.labels.create({'key': 'env', 'value': 'E-Prod'})
>>> loc_label = pce.labels.create({'key': 'loc', 'value': 'L-AWS'})
>>> ruleset = illumio.RuleSet(
... name='RS-RINGFENCE',
... scopes=[
... illumio.LabelSet(
... labels=[app_label, env_label, loc_label]
... )
... ]
... )
>>> ruleset = pce.rule_sets.create(ruleset)
>>> ruleset
Ruleset(
href='/orgs/1/sec_policy/draft/rule_sets/19',
name='RS-RINGFENCE'
)
>>> # Create a deny rule within the ruleset
>>> deny_rule = illumio.DenyRule.build(
... providers=[external_ip_list],
... consumers=[internal_label],
... ingress_services=[{'port': 22, 'proto': 'tcp'}],
... name='DR-Block-SSH'
... )
>>> deny_rule = pce.deny_rules.create(deny_rule, parent=ruleset)
"""
enabled: bool = None
scopes: List[LabelSet] = None
rules: List[Rule] = None
deny_rules: List[DenyRule] = None
ip_tables_rules: List[IPTablesRule] = None
__all__ = [
'RuleSet',
]