From f042ff88a590a44942947f39b6dceeab6742a401 Mon Sep 17 00:00:00 2001 From: shireenf-ibm Date: Mon, 10 Jun 2024 16:44:38 +0300 Subject: [PATCH 1/2] support match expression operators for generating and selecting representative peers + first examples --- pkg/netpol/connlist/connlist_test.go | 22 ++ pkg/netpol/connlist/conns_formatter.go | 49 ++- pkg/netpol/connlist/exposure_analysis_test.go | 8 +- pkg/netpol/eval/exposure.go | 50 +++- pkg/netpol/eval/internal/k8s/netpol.go | 70 +++-- pkg/netpol/eval/internal/k8s/peer.go | 3 + pkg/netpol/eval/internal/k8s/pod.go | 5 + .../internal/k8s/representative_selectors.go | 279 ++++++++++++++++++ pkg/netpol/eval/resources.go | 18 +- .../internal/common/netpol_commands_common.go | 7 + ...sion_does_not_exist_op_connlist_output.dot | 26 ++ ..._does_not_exist_op_connlist_output.dot.png | Bin 0 -> 47136 bytes ..._does_not_exist_op_connlist_output.dot.svg | 114 +++++++ ...sion_does_not_exist_op_connlist_output.txt | 19 ++ ...h_expression_exists_op_connlist_output.dot | 25 ++ ...pression_exists_op_connlist_output.dot.png | Bin 0 -> 47291 bytes ...pression_exists_op_connlist_output.dot.svg | 107 +++++++ ...h_expression_exists_op_connlist_output.txt | 18 ++ ...match_expression_in_op_connlist_output.dot | 30 ++ ...h_expression_in_op_connlist_output.dot.png | Bin 0 -> 46131 bytes ...h_expression_in_op_connlist_output.dot.svg | 111 +++++++ ...match_expression_in_op_connlist_output.txt | 15 + ...h_expression_not_in_op_connlist_output.dot | 26 ++ ...pression_not_in_op_connlist_output.dot.png | Bin 0 -> 47950 bytes ...pression_not_in_op_connlist_output.dot.svg | 114 +++++++ ...h_expression_not_in_op_connlist_output.txt | 19 ++ .../namespace_and_deployments.yaml | 52 ++++ .../netpol.yaml | 21 ++ .../namespace_and_deployments.yaml | 52 ++++ .../netpol.yaml | 21 ++ .../netpol.yaml | 25 ++ .../ns_and_deployments.yaml | 31 ++ .../namespace_and_deployments.yaml | 52 ++++ .../netpol.yaml | 27 ++ 34 files changed, 1351 insertions(+), 65 deletions(-) create mode 100644 pkg/netpol/eval/internal/k8s/representative_selectors.go create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.txt create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.txt create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.txt create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.txt create mode 100644 tests/test_exposure_with_match_expression_does_not_exist_op/namespace_and_deployments.yaml create mode 100644 tests/test_exposure_with_match_expression_does_not_exist_op/netpol.yaml create mode 100644 tests/test_exposure_with_match_expression_exists_op/namespace_and_deployments.yaml create mode 100644 tests/test_exposure_with_match_expression_exists_op/netpol.yaml create mode 100644 tests/test_exposure_with_match_expression_in_op/netpol.yaml create mode 100644 tests/test_exposure_with_match_expression_in_op/ns_and_deployments.yaml create mode 100644 tests/test_exposure_with_match_expression_not_in_op/namespace_and_deployments.yaml create mode 100644 tests/test_exposure_with_match_expression_not_in_op/netpol.yaml diff --git a/pkg/netpol/connlist/connlist_test.go b/pkg/netpol/connlist/connlist_test.go index 5f4df51f..c32eda75 100644 --- a/pkg/netpol/connlist/connlist_test.go +++ b/pkg/netpol/connlist/connlist_test.go @@ -956,4 +956,26 @@ var goodPathTests = []struct { exposureAnalysis: true, outputFormats: ExposureValidFormats, }, + // tests on exposure with matchExpression selectors (generating representative peers from selectors with matchExpression + // requires special handling) + { + testDirName: "test_exposure_with_match_expression_not_in_op", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, + { + testDirName: "test_exposure_with_match_expression_in_op", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, + { + testDirName: "test_exposure_with_match_expression_exists_op", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, + { + testDirName: "test_exposure_with_match_expression_does_not_exist_op", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, } diff --git a/pkg/netpol/connlist/conns_formatter.go b/pkg/netpol/connlist/conns_formatter.go index 980cd8c5..107933ec 100644 --- a/pkg/netpol/connlist/conns_formatter.go +++ b/pkg/netpol/connlist/conns_formatter.go @@ -9,8 +9,7 @@ package connlist import ( "fmt" "sort" - - "k8s.io/apimachinery/pkg/labels" + "strings" "github.com/np-guard/netpol-analyzer/pkg/netpol/internal/common" ) @@ -57,8 +56,20 @@ func formSingleP2PConn(conn Peer2PeerConnection) singleConnFields { } // commonly (to be) used for exposure analysis output formatters - -const entireCluster = "entire-cluster" +const ( + entireCluster = "entire-cluster" + stringInBrackets = "[%s]" + mapOpen = "{" + mapClose = "}" + equal = "=" + comma = "," + key = "key" + colon = ": " + space = " " + notIn = "NotIn" + doesNotExist = "DoesNotExist" + exists = "Exists" +) // formSingleExposureConn returns a representation of single exposure connection fields as singleConnFields object func formSingleExposureConn(peer, repPeer string, conn common.Connection, isIngress bool) singleConnFields { @@ -80,16 +91,28 @@ func formExposureItemAsSingleConnFiled(peerStr string, exposureItem XgressExposu } // convertLabelsMapToString returns a string representation of the given labels map +// considers the special labels (with requirements such as Exists, DoesNotExist, NotIn) func convertLabelsMapToString(labelsMap map[string]string) string { - return labels.SelectorFromSet(labels.Set(labelsMap)).String() + labelsSrings := make([]string, 0) + for k, v := range labelsMap { + if v == common.ExistsVal { + labelsSrings = append(labelsSrings, k+space+exists) + continue + } + if v == common.DoesNotExistVal { + labelsSrings = append(labelsSrings, k+space+doesNotExist) + continue + } + if strings.HasPrefix(v, common.NotPrefix) { + labelsSrings = append(labelsSrings, k+space+notIn+space+v[1:]) + continue + } + labelsSrings = append(labelsSrings, k+equal+v) + } + sort.Strings(labelsSrings) + return mapOpen + strings.Join(labelsSrings, comma) + mapClose } -const ( - stringInBrackets = "[%s]" - mapOpen = "{" - mapClose = "}" -) - // getRepresentativeNamespaceString returns a string representation of a potential peer with namespace labels. // if namespace with multiple words adds [] , in case of textual (non-graphical) output func getRepresentativeNamespaceString(nsLabels map[string]string, txtOutFlag bool) string { @@ -99,7 +122,7 @@ func getRepresentativeNamespaceString(nsLabels map[string]string, txtOutFlag boo } res := "" if len(nsLabels) > 0 { - res += "namespace with " + mapOpen + convertLabelsMapToString(nsLabels) + mapClose + res += "namespace with " + convertLabelsMapToString(nsLabels) } else { res += allNamespacesLbl } @@ -117,7 +140,7 @@ func getRepresentativePodString(podLabels map[string]string, txtOutFlag bool) st if len(podLabels) == 0 { res += allPeersLbl } else { - res += "pod with " + mapOpen + convertLabelsMapToString(podLabels) + mapClose + res += "pod with " + convertLabelsMapToString(podLabels) } if txtOutFlag { return fmt.Sprintf(stringInBrackets, res) diff --git a/pkg/netpol/connlist/exposure_analysis_test.go b/pkg/netpol/connlist/exposure_analysis_test.go index ddcaa0b4..b0023e67 100644 --- a/pkg/netpol/connlist/exposure_analysis_test.go +++ b/pkg/netpol/connlist/exposure_analysis_test.go @@ -149,7 +149,7 @@ func TestExposureBehavior(t *testing.T) { lenIngressExposedConns: 2, ingressExp: []*xgressExposure{ peerExposedToEntireClusterOnTCP8050, - newExpDataWithLabelAndTCPConn(map[string]string{"foo.com/managed-state": "managed"}, nil, []int{8050, 8090}), + newExpDataWithLabelAndTCPConn(map[string]string{"foo.com/managed-state": "managed"}, map[string]string{}, []int{8050, 8090}), }, lenEgressExposedConns: 0, }, @@ -184,9 +184,9 @@ func TestExposureBehavior(t *testing.T) { isEgressProtected: false, lenIngressExposedConns: 3, ingressExp: []*xgressExposure{ - newExpDataWithLabelAndTCPConn(map[string]string{"foo.com/managed-state": "managed"}, nil, []int{8050}), - newExpDataWithLabelAndTCPConn(map[string]string{"release": "stable"}, nil, []int{}), - newExpDataWithLabelAndTCPConn(map[string]string{"effect": "NoSchedule"}, nil, []int{8050}), + newExpDataWithLabelAndTCPConn(map[string]string{"foo.com/managed-state": "managed"}, map[string]string{}, []int{8050}), + newExpDataWithLabelAndTCPConn(map[string]string{"release": "stable"}, map[string]string{}, []int{}), + newExpDataWithLabelAndTCPConn(map[string]string{"effect": "NoSchedule"}, map[string]string{}, []int{8050}), }, lenEgressExposedConns: 0, }, diff --git a/pkg/netpol/eval/exposure.go b/pkg/netpol/eval/exposure.go index 59c263a5..98068679 100644 --- a/pkg/netpol/eval/exposure.go +++ b/pkg/netpol/eval/exposure.go @@ -30,18 +30,40 @@ func generateNewPodName(index int) string { } // generateRepresentativePeers : generates and adds to policy engine representative peers where each peer -// has namespace and pod labels inferred from single policy rule labels in the given list of selectors; -// for example, if a rule within policy has namespaceSelector "foo: managed", then a representative pod in such a +// has namespace and pod labels inferred from single entry of selectors in a policy rule list; +// +// - for example, if a rule within policy has an entry: namespaceSelector "foo: managed", then a representative pod in such a // namespace with those labels will be added, representing all potential pods in such a namespace. -// generated representative peers are unique; i.e. if different rules (e.g in different policies or different directions) has same labels : -// one representative peer is generated to represent both -func (pe *PolicyEngine) generateRepresentativePeers(selectorsLabels []k8s.SingleRuleLabels, policyName, policyNs string) (err error) { - for i := range selectorsLabels { +// - generated representative peers are unique; i.e. if different rules (e.g in different policies or different directions) +// has same labels, one representative peer is generated to represent both +func (pe *PolicyEngine) generateRepresentativePeers(selectors []k8s.SingleRuleSelectors, policyName, policyNs string) (err error) { + for i := range selectors { + // 1. first convert each rule selectors' pair (podSelector and namespaceSelector) to pairs of its matching labels maps. + // each pair contains map of namespaceLabels and map of podLabels + // a representative peer will be generated for each pair + labelsPairs := k8s.ConvertSelectorsToLabelsCombinations(&selectors[i]) + // 2. secondly: for each pair of labels, generate a representative peer + err := pe.generateRepresentativePeerPerLabelsPair(labelsPairs, selectors[i].PolicyNsFlag, policyName, policyNs, i) + if err != nil { + return err + } + } + return nil +} + +// generateRepresentativePeerPerLabelsPair : gets list of pairs of namespaceLabels and podLabels maps, +// and creates a new representative peer for each pair. +// if policyNsFlag is true, i.e. the namespaceSelector is nil, a representative peer is created in +// the namespace of the policy with given podLabels maps. +func (pe *PolicyEngine) generateRepresentativePeerPerLabelsPair(labelsPairs k8s.LabelsPairsList, policyNsFlag bool, policyName, + policyNs string, selectorNum int) (err error) { + for i := range labelsPairs { // if ns labels of the rule selector was nil, then the namespace of the pod is same as the policy's namespace - if selectorsLabels[i].PolicyNsFlag { - _, err = pe.AddPodByNameAndNamespace(generateNewPodName(i), policyNs, &selectorsLabels[i]) + if policyNsFlag { + _, err = pe.AddPodByNameAndNamespace(generateNewPodName(i+selectorNum), policyNs, &labelsPairs[i]) } else { - _, err = pe.AddPodByNameAndNamespace(generateNewPodName(i), generateNewNamespaceName(policyName, i), &selectorsLabels[i]) + _, err = pe.AddPodByNameAndNamespace(generateNewPodName(i+selectorNum), generateNewNamespaceName(policyName, i+selectorNum), + &labelsPairs[i]) } if err != nil { return err @@ -68,7 +90,7 @@ func (pe *PolicyEngine) extractLabelsAndRefineRepresentativePeers(podObj *k8s.Po // refineRepresentativePeersMatchingLabels removes from the policy engine all representative peers // with labels matching the given labels of a real pod -// representative peers matching any-namespace will not be removed. +// representative peers matching any-namespace or any-pod in a namespace will not be removed. func (pe *PolicyEngine) refineRepresentativePeersMatchingLabels(realPodLabels, realNsLabels map[string]string) { keysToDelete := make([]string, 0) // look for representative peers with labels matching the given real pod's (and its namespace) labels @@ -87,7 +109,13 @@ func (pe *PolicyEngine) refineRepresentativePeersMatchingLabels(realPodLabels, r // in the general conns compute and won't get here. continue } - // remove representative peer matching both realPodLabels and realNsLabels. + if peer.HasUnusualNsLabels || peer.Pod.HasUnusualPodLabels { + // a representative peer with labels inferred from requirements of matchExpression with operators : Exists/DoesNotExist/NotIn + // will not be refined + continue + } + // representative peer with regular labels inferred from selectors with matchLabels or matchExpression with operator In; + // is removed (refined) if matches both realPodLabels and realNsLabels. if potentialPodSelector.Matches(labels.Set(realPodLabels)) && potentialNsSelector.Matches(labels.Set(realNsLabels)) { keysToDelete = append(keysToDelete, key) } diff --git a/pkg/netpol/eval/internal/k8s/netpol.go b/pkg/netpol/eval/internal/k8s/netpol.go index 0626ec41..7f0466a0 100644 --- a/pkg/netpol/eval/internal/k8s/netpol.go +++ b/pkg/netpol/eval/internal/k8s/netpol.go @@ -208,7 +208,14 @@ func (np *NetworkPolicy) ruleSelectsPeer(rulePeers []netv1.NetworkPolicyPeer, pe return false, err } peerNamespace := peer.GetPeerNamespace() - peerMatchesNamespaceSelector = selector.Matches(labels.Set(peerNamespace.Labels)) + // checking if a selector matches labels by peer type; since representative peers selectors may need special handling + if isRepresentativePod(peer) { + // representative peer's namespace labels may be inferred from a rule with special matchExpression requirements + // and also contains the representative ns name label which is not relevant for comparison + peerMatchesNamespaceSelector = SelectorMatchesRepresentativePeerLabels(selector, peer.GetPeerNamespace().Labels, true) + } else { + peerMatchesNamespaceSelector = selector.Matches(labels.Set(peerNamespace.Labels)) + } } if !peerMatchesNamespaceSelector { continue // skip to next peerObj @@ -220,7 +227,13 @@ func (np *NetworkPolicy) ruleSelectsPeer(rulePeers []netv1.NetworkPolicyPeer, pe if err != nil { return false, err } - peerMatchesPodSelector = selector.Matches(labels.Set(peer.GetPeerPod().Labels)) + // checking if a selector matches labels by peer type; since representative peers selectors may need special handling + if isRepresentativePod(peer) { + peerMatchesPodSelector = SelectorMatchesRepresentativePeerLabels(selector, peer.GetPeerPod().Labels, + peer.GetPeerPod().HasUnusualPodLabels) + } else { + peerMatchesPodSelector = selector.Matches(labels.Set(peer.GetPeerPod().Labels)) + } } if peerMatchesPodSelector { return true, nil // matching both pod selector and ns_selector here @@ -431,6 +444,11 @@ func (np *NetworkPolicy) Selects(p *Pod, direction netv1.PolicyType) (bool, erro if !np.policyAffectsDirection(direction) { return false, nil } + // currently ignoring policies which select representative peers, as exposure analysis goal is + // to hint where a policy selecting real workloads can be tightened + if p.IsPodRepresentative() { + return false, nil + } // @todo check if the empty selector is handled by Matches() below if len(np.Spec.PodSelector.MatchLabels) == 0 && len(np.Spec.PodSelector.MatchExpressions) == 0 { @@ -451,11 +469,11 @@ func (np *NetworkPolicy) fullName() string { // ///////////////////////////////////////////////////////////////////////////////////////////// // pre-processing computations - currently performed for exposure-analysis goals only; -// SingleRuleLabels contains maps of : labels inferred from namespaceSelector or/and podSelector +// SingleRuleSelectors contains labels.Selector objects parsed from namespaceSelector or/and podSelector // within a single rule in the policy -type SingleRuleLabels struct { - NsLabels map[string]string - PodLabels map[string]string +type SingleRuleSelectors struct { + NsSelector labels.Selector + PodSelector labels.Selector // policyNsFlag indicates if the rule contains only podSelector; // so the NsLabels map contains only the default name key of the policy's namespace PolicyNsFlag bool @@ -463,9 +481,8 @@ type SingleRuleLabels struct { // ScanPolicyRulesForGeneralConnsAndRepresentativePeers scans policy rules and : // - updates policy's general connections with all destinations or/ and with entire cluster for ingress and/ or egress directions -// - returns list of selectors labels from rules which has non-empty namespace selectors (from rules with namespaceSelector only) -// TODO: support checking rules with podSelector -func (np *NetworkPolicy) ScanPolicyRulesForGeneralConnsAndRepresentativePeers() (rulesSelectors []SingleRuleLabels, err error) { +// - returns list of labels.selectors from rules which has non-empty selectors +func (np *NetworkPolicy) ScanPolicyRulesForGeneralConnsAndRepresentativePeers() (rulesSelectors []SingleRuleSelectors, err error) { if np.policyAffectsDirection(netv1.PolicyTypeIngress) { selectors, err := np.scanIngressRules() if err != nil { @@ -483,8 +500,8 @@ func (np *NetworkPolicy) ScanPolicyRulesForGeneralConnsAndRepresentativePeers() return rulesSelectors, nil } -func (np *NetworkPolicy) scanIngressRules() ([]SingleRuleLabels, error) { - rulesSelectors := []SingleRuleLabels{} +func (np *NetworkPolicy) scanIngressRules() ([]SingleRuleSelectors, error) { + rulesSelectors := []SingleRuleSelectors{} for _, rule := range np.Spec.Ingress { rulePeers := rule.From rulePorts := rule.Ports @@ -497,8 +514,8 @@ func (np *NetworkPolicy) scanIngressRules() ([]SingleRuleLabels, error) { return rulesSelectors, nil } -func (np *NetworkPolicy) scanEgressRules() ([]SingleRuleLabels, error) { - rulesSelectors := []SingleRuleLabels{} +func (np *NetworkPolicy) scanEgressRules() ([]SingleRuleSelectors, error) { + rulesSelectors := []SingleRuleSelectors{} for _, rule := range np.Spec.Egress { rulePeers := rule.To rulePorts := rule.Ports @@ -519,54 +536,47 @@ func (np *NetworkPolicy) scanEgressRules() ([]SingleRuleLabels, error) { // else: returns selectors of non-general rules (rules that are not exposed to entire world or cluster). // this func assumes rules are legal (rules correctness check occurs later) func (np *NetworkPolicy) doRulesExposeToAllDestOrEntireCluster(rules []netv1.NetworkPolicyPeer, rulePorts []netv1.NetworkPolicyPort, - isIngress bool) (rulesSelectors []SingleRuleLabels, err error) { + isIngress bool) (rulesSelectors []SingleRuleSelectors, err error) { if len(rules) == 0 { err = np.updateNetworkPolicyGeneralConn(true, true, rulePorts, isIngress) return nil, err } for i := range rules { - var ruleSel SingleRuleLabels + var ruleSel SingleRuleSelectors if rules[i].IPBlock != nil { continue } - // note: LabelSelectorAsMap returns a nil map for nil selector, - // and returns empty map (map[string]string{}) for empty selector (all) - nsSelectorMap, err := metav1.LabelSelectorAsMap(rules[i].NamespaceSelector) + nsSelector, err := np.parseNetpolLabelSelector(rules[i].NamespaceSelector) if err != nil { return nil, err } - podSelectorMap, err := metav1.LabelSelectorAsMap(rules[i].PodSelector) + podSelector, err := np.parseNetpolLabelSelector(rules[i].PodSelector) if err != nil { return nil, err } // a rule is exposed to entire cluster if : // 1. the podSelector is nil (no podselector) but the namespaceSelector is empty ({}) // 2. both podSelector and namespaceSelector are empty ({}) - if (rules[i].PodSelector == nil && isEmptyMap(nsSelectorMap)) || - (isEmptyMap(nsSelectorMap) && isEmptyMap(podSelectorMap)) { + if nsSelector.Empty() && (rules[i].PodSelector == nil || podSelector.Empty()) { err = np.updateNetworkPolicyGeneralConn(false, true, rulePorts, isIngress) return nil, err } - // else (selector not empty) - ruleSel.PodLabels = podSelectorMap + // else (at least one of the selectors is not empty) + ruleSel.PodSelector = podSelector.DeepCopySelector() // special case: ns selector is nil but podSelector is not, so the namespace of the rule is // the policy's namespace; adding the k8s namespace name key to ruleSel.NsLabels if rules[i].NamespaceSelector == nil && rules[i].PodSelector != nil { ruleSel.PolicyNsFlag = true - ruleSel.NsLabels = map[string]string{common.K8sNsNameLabelKey: np.Namespace} + nsNameLabelSel := map[string]string{common.K8sNsNameLabelKey: np.Namespace} + ruleSel.NsSelector = labels.SelectorFromSet(nsNameLabelSel) } else { - ruleSel.NsLabels = nsSelectorMap + ruleSel.NsSelector = nsSelector.DeepCopySelector() } rulesSelectors = append(rulesSelectors, ruleSel) } return rulesSelectors, nil } -// isEmptyMap gets a labels map and returns if it is not nil but empty map -func isEmptyMap(labelsMap map[string]string) bool { - return labelsMap != nil && len(labelsMap) == 0 -} - func (np *NetworkPolicy) updateNetworkPolicyGeneralConn(allDests, entireCluster bool, rulePorts []netv1.NetworkPolicyPort, isIngress bool) error { ruleConns, err := np.ruleConnections(rulePorts, nil) diff --git a/pkg/netpol/eval/internal/k8s/peer.go b/pkg/netpol/eval/internal/k8s/peer.go index d104010b..265f5bcd 100644 --- a/pkg/netpol/eval/internal/k8s/peer.go +++ b/pkg/netpol/eval/internal/k8s/peer.go @@ -65,6 +65,9 @@ type RepresentativePeer struct { // and its namespace is a fake namespace with the namespaceSelector labels (those labels also stored in PotentialNamespaceLabels) Pod *Pod PotentialNamespaceLabels map[string]string + // HasUnusualNsLabels indicates if the potential namespace labels set of the representative peer contains any labels inferred + // from a selector with matchExpression with operator:NotIn, Exists, DoesNotExist - which require special handling + HasUnusualNsLabels bool } const podKind = "Pod" diff --git a/pkg/netpol/eval/internal/k8s/pod.go b/pkg/netpol/eval/internal/k8s/pod.go index 1a5a4051..7387a223 100644 --- a/pkg/netpol/eval/internal/k8s/pod.go +++ b/pkg/netpol/eval/internal/k8s/pod.go @@ -60,6 +60,9 @@ type Pod struct { // - and the maximal connection-set for which the pod is exposed to all namespaces by network policies // on egress direction EgressExposureData PodExposureInfo + // HasUnusualPodLabels indicates if the pod labels set (in case of representative peer's pod) contains any labels inferred + // from a selector with matchExpression with operator:NotIn, Exists, DoesNotExist - which require special handling + HasUnusualPodLabels bool } // Owner encapsulates pod owner workload info @@ -90,6 +93,7 @@ func PodFromCoreObject(p *corev1.Pod) (*Pod, error) { FakePod: false, IngressExposureData: initiatePodExposure(), EgressExposureData: initiatePodExposure(), + HasUnusualPodLabels: false, } copy(pr.IPs, p.Status.PodIPs) @@ -214,6 +218,7 @@ func PodsFromWorkloadObject(workload interface{}, kind string) ([]*Pod, error) { pod.FakePod = false pod.IngressExposureData = initiatePodExposure() pod.EgressExposureData = initiatePodExposure() + pod.HasUnusualPodLabels = false for k, v := range podTemplate.Labels { pod.Labels[k] = v } diff --git a/pkg/netpol/eval/internal/k8s/representative_selectors.go b/pkg/netpol/eval/internal/k8s/representative_selectors.go new file mode 100644 index 00000000..7523407b --- /dev/null +++ b/pkg/netpol/eval/internal/k8s/representative_selectors.go @@ -0,0 +1,279 @@ +/* +Copyright 2023- IBM Inc. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package k8s + +import ( + "strings" + + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/selection" + + "github.com/np-guard/netpol-analyzer/pkg/netpol/internal/common" +) + +// this file handles converting and checking match of representative peers' labels. +// since a representative peer is a peer inferred from a network-policy rule, its pod's and namespace's labels +// may have special labels cases, and thus need to be handled differently from usual accepted k8s labels (regular :). + +// examples: +// 1. if we have a policy rule with: +// - podSelector: +// matchExpressions: +// {key: app, operator: Exists} +// +// this rule will be converted when generating a matching representative peer. +// the representative peer's pod will has an `app: ` in its podLabels map. +// +// 2. if we have a policy rule with: +// - podSelector: +// matchExpressions: +// {key: name, operator: In, values: [payroll, web]} +// two different representative peers will be generated from this PodSelector; one with pod label {name:payroll} , +// and the second with pod label {name:web} + +// /////////////////////////////////////////// +const ( + notSuffix = ")" + comma = "," +) + +// labelsSet is an alias for labels map (map[string]string) +type labelsSet map[string]string + +// copyLabelsSet - helping func, copies the current labelsSet (map of labels) +func (ls labelsSet) copyLabelsSet() labelsSet { + res := make(labelsSet, len(ls)) + for k, v := range ls { + res[k] = v + } + return res +} + +// RepresentativePeerLabels contains the namespace and pod labels for generating a single representative peer +type RepresentativePeerLabels struct { + // NsLabels the labels of the namespace of the representative peer + NsLabels labelsSet + // PodLabels the labels of the pod of the representative peer + PodLabels labelsSet + // UnusualPodLabelsFlag indicates if the labels set inferred from a podSelector that contains + // matchExpression with operator:NotIn, Exists, DoesNotExist - which require special handling + UnusualPodLabelsFlag bool + // UnusualNsLabelsFlag indicates if the labels set inferred from a namespaceSelector that contains + // matchExpression with operator:NotIn, Exists, DoesNotExist - which require special handling + UnusualNsLabelsFlag bool +} + +// LabelsPairsList list of pairs of matching labels which were inferred from combinations of policy rules' selectors, +// each pair in the list represents labels of a single representative peer +// i.e. a representative peer will be generated for each item in the list +type LabelsPairsList []RepresentativePeerLabels + +// ****************************************************************** // +// Converting selector to list of labels sets [](map[string]string)): +// ------------------------------------------------------------------ +// - selector with "matchLabels", is converted to one map of labels since "matchLabels" rule can only be used for exact matching +// with all of its : labels. +// - selector with "matchExpression" is set-based matching so it may be converted to number of maps, also, might need special handling +// according to the operator, as following: +// * operator In: selector will be converted to number of sets (of :) equal to length of requirement's values list; +// each set will contain the key and a single value from the values list. +// * operator Exists : selector will be converted to a one set with :"" +// * operator DoesNotExist: selector will be converted to one set with :"" +// * operator NotIn :selector will be converted to one set with : "!()" (the list of values joined) +// +// *** a selector with multiple matchLabels/matchExpressions : the converted sets of each will be And-ed.(all +// combinations will be generated) +// *************************************************************************** // + +// ConvertSelectorsToLabelsCombinations gets selectors pair (podSelector and nsSelector) +// and converts it to a list of all pairs of matching labels maps; +// by translating the two selectors to all possible requirements and pairing all relevant combinations. +// +// for example : +// single rule selectors: {NsSelector: {key: env, operator: In, values:(env-1,env-2)}, +// +// PodSelector: {key: app, operator: In, values:(app1,app2)}} +// +// will result in 4 combinations of of representative peers labels as following: +// 1. {NsLabels: {env: env-1}, PodLabels:{app: app1}} +// 2. {NsLabels: {env: env-1}, PodLabels:{app: app2}} +// 3. {NsLabels: {env: env-2}, PodLabels:{app: app1}} +// 4. {NsLabels: {env: env-2}, PodLabels:{app: app2}} +func ConvertSelectorsToLabelsCombinations(ruleSelectors *SingleRuleSelectors) LabelsPairsList { + res := LabelsPairsList{} + nsLabelsCombinations, unusualNsLabels := convertSingleSelectorToItsMaps(ruleSelectors.NsSelector) + podLabelsCombinations, unusualPodLabels := convertSingleSelectorToItsMaps(ruleSelectors.PodSelector) + // create all possible combinations of matching nsLabels and podLabels + for _, nsLabels := range nsLabelsCombinations { + for _, podLabels := range podLabelsCombinations { + representativePeerLabels := RepresentativePeerLabels{ + NsLabels: nsLabels, + PodLabels: podLabels, + UnusualPodLabelsFlag: unusualPodLabels, + UnusualNsLabelsFlag: unusualNsLabels, + } + res = append(res, representativePeerLabels) + } + } + return res +} + +// convertSingleSelectorToItsMaps gets a single selector and converts it to its all possible matching labels sets +// +// for example: a selector with: +// {key: name, operator: In, values: [payroll, web]} +// will be converted to two different maps, one with {name:payroll} , and the other {name:web} +// +// more details above (Converting selector to list of labels sets) +func convertSingleSelectorToItsMaps(selector labels.Selector) ([]labelsSet, bool) { + // all requirements of the given selector + requirements, _ := selector.Requirements() + if len(requirements) == 0 { // an empty set + return []labelsSet{{}}, false + } + // res will contain all different combinations conducted from the different requirements + res := []labelsSet{{}} + unusualLabels := false // to indicate requirements of Exists, DoesNotExist or NotIn + + for _, req := range requirements { + // newResult will contain the current res with all the new combinations from current requirement + // (used with In operator as more than one set may be added for its values) + newResult := make([]labelsSet, 0) + + switch req.Operator() { + case selection.Equals: + // requirement with Equals operator is inferred from single matchLabels :,(exactly one value for one key) + // iterate the current res (maps created till now) and add this requirement to each set in the result + res = appendKeyAndValueToAllSetsInAList(res, req.Key(), req.Values().List()[0]) + case selection.In: + // inferred from matchExpression with In operator + // loop the possible values in the requirement, each value will be a part of a different labelsSet. + // so for each value: copy the current res (previous labelsSets from the previous requirements) and add the + // : (each set with a different value from this values list) + // i.e. new sets will be added to the list + for _, val := range req.Values().List() { + for _, ls := range res { + newLs := ls.copyLabelsSet() + newLs[req.Key()] = val + newResult = append(newResult, newLs) + } + } + res = newResult + case selection.Exists: + // inferred from matchExpression with Exists, iterate current result and add key:"" to each set + res = appendKeyAndValueToAllSetsInAList(res, req.Key(), common.ExistsVal) + unusualLabels = true + case selection.DoesNotExist: + // inferred from matchExpression with DoesNotExist, iterate current result and add key:"" to each set + res = appendKeyAndValueToAllSetsInAList(res, req.Key(), common.DoesNotExistVal) + unusualLabels = true + case selection.NotIn: + // inferred from matchExpression with NotIn, iterate current result and add key:"!(values)" to each set + res = appendKeyAndValueToAllSetsInAList(res, req.Key(), common.NotPrefix+strings.Join(req.Values().List(), comma)+notSuffix) + unusualLabels = true + } + } + return res, unusualLabels +} + +// appendKeyAndValueToAllSetsInAList iterates given list of sets and adds given key:val to each set +func appendKeyAndValueToAllSetsInAList(listOfMaps []labelsSet, key, val string) (res []labelsSet) { + for _, ls := range listOfMaps { + ls[key] = val + res = append(res, ls) + } + return res +} + +// ******************************************************************************************************* // +// Checking if a given selector matches a representative peer's labels : +// --------------------------------------------------------------------- +// 1. if the representative labels have no unusual requirements, then labels.selector Matches func is used to +// compare between the selector and representative peer's labels. +// 2. if the representative selector contains labels with special/unusual requirements +// (which are formed while converting policy rules); then +// check the equivalence of the requirements of the selector and the representative peer's labels. +// +// to check if a given selector matches the representative labels: +// loop the selector requirements and compare each to the representative labels as following: +// - if the requirement operator is In/ Equals: then representative labels should contain +// the key with an exact match to the requirement value/s. +// - if the requirement operator is Exists : then the representative labels must include the key, and it's value must +// be different from / !() -> because these are not equivalent with operator : Exists +// (explanation: NotIn selects peer with key with a value not from the list, and all peers without the key (not equivalent with exists)) +// - if the requirement operator is DoesNotExist : the the representative labels must not include the key or include +// it with value : +// - if the requirement operator is NotIn : +// * the val of the same key should not be (notIn and exists are not equiv; notIn selects also doesNotExist) +// * if the val of the same key in the representative labels is !(); +// then the list of values of the requirement needs to be contained in the !() list +// or the representative labels should Match the requirement (i.e. key does not exist/ key with value not from the list) +// ******************************************************************************************************* // + +// SelectorMatchesRepresentativePeerLabels given a selector from a policy rule and labelsSet of representative peer; +// check if the selector matches the labels, considering the cases of unusual labels values of a generated representative peer +// +//gocyclo:ignore +func SelectorMatchesRepresentativePeerLabels(selector labels.Selector, pLabels labelsSet, hasUnusualLabels bool) bool { + if !hasUnusualLabels { + return selector.Matches(labels.Set(pLabels)) + } + // check if given selector requirements, matches the labels of the representative peer + selectorReqs, _ := selector.Requirements() + for _, req := range selectorReqs { + val, ok := pLabels[req.Key()] + switch req.Operator() { + case selection.Equals, selection.In: + // Equals or In requirements means that the labels map must contain the key with a value from the values list of the requirement. + if !ok || (ok && !req.Matches(labels.Set(pLabels))) { + return false + } + case selection.Exists: + // if the requirement for a key in a policy rule selector is to exist, then it must appear in the representative peer's labels + // and its value must not be or !() + if !ok || val == common.DoesNotExistVal || strings.HasPrefix(val, common.NotPrefix) { + return false + } + case selection.DoesNotExist: + // if requirement is does not exist, so if the key is in the representative labels it must have the val, + // otherwise no match + if ok && val != common.DoesNotExistVal { + return false + } + case selection.NotIn: + // if the selector requirement is NotIn, a representative peer with label: req.Key : !(values), the values list should contain the + // req.Values.List , if the value is then it is not a match, + // otherwise the requirement should match given labels + // (key does not exist or has any value which is not in the req.Values.List) + if (ok && + strings.HasPrefix(val, common.NotPrefix) && !representativeValListContainsRequirementValList(val, req.Values().List())) || + val == common.ExistsVal || + !req.Matches(labels.Set(pLabels)) { + return false + } + } + } + return true +} + +// representativeValListContainsRequirementValList gets the values of the representative peer NotIn label (as string) +// and a list of a requirement values; returns if the list is contained in the representative values. +func representativeValListContainsRequirementValList(representativeNotInVal string, requirementValues []string) bool { + // split the representative string to the values and put theem in a set + repValList := strings.Split(representativeNotInVal[2:len(representativeNotInVal)-1], comma) + repValsSet := make(map[string]bool, len(repValList)) // a set from the representative values list + for _, val := range repValList { + repValsSet[val] = true + } + // check that all values in the requirement's list are contained in the set + for _, val := range requirementValues { + if !repValsSet[val] { + return false + } + } + return true +} diff --git a/pkg/netpol/eval/resources.go b/pkg/netpol/eval/resources.go index 508082a3..cc021877 100644 --- a/pkg/netpol/eval/resources.go +++ b/pkg/netpol/eval/resources.go @@ -403,7 +403,7 @@ func (pe *PolicyEngine) upsertNetworkPolicy(np *netv1.NetworkPolicy) error { var err error // for exposure analysis only: scan policy ingress and egress rules: // 1. to store allowed connections to entire cluster and to all destinations (if such connections are allowed by the policy) - // 2. to get selectors and generate representativePeers (each specified rule, gets a representative peer) + // 2. to get selectors and generate representativePeers if pe.exposureAnalysisFlag { rulesSelectors, scanErr := newNetpol.ScanPolicyRulesForGeneralConnsAndRepresentativePeers() if scanErr != nil { @@ -587,19 +587,23 @@ func (pe *PolicyEngine) ConvertPeerNamedPort(namedPort string, peer Peer) (int32 // AddPodByNameAndNamespace adds a new fake pod to: // the pe.podsMap in case of fake ingress-controller pods // or the pe.representativePeersMap in case of exposure-analysis peers -func (pe *PolicyEngine) AddPodByNameAndNamespace(name, ns string, objLabels *k8s.SingleRuleLabels) (Peer, error) { +func (pe *PolicyEngine) AddPodByNameAndNamespace(name, ns string, objLabels *k8s.RepresentativePeerLabels) (Peer, error) { var nsLabels, podLabels map[string]string + var hasUnusualNsLabels, hasUnusualPodLabels bool if objLabels != nil { nsLabels = objLabels.NsLabels podLabels = objLabels.PodLabels + hasUnusualNsLabels = objLabels.UnusualNsLabelsFlag + hasUnusualPodLabels = objLabels.UnusualPodLabelsFlag } podStr := types.NamespacedName{Namespace: ns, Name: name}.String() newPod := &k8s.Pod{ - Name: name, - Namespace: ns, - FakePod: true, - Labels: podLabels, + Name: name, + Namespace: ns, + FakePod: true, + Labels: podLabels, + HasUnusualPodLabels: hasUnusualPodLabels, } if err := pe.resolveSingleMissingNamespace(ns, nsLabels); err != nil { return nil, err @@ -611,7 +615,7 @@ func (pe *PolicyEngine) AddPodByNameAndNamespace(name, ns string, objLabels *k8s if _, ok := pe.representativePeersMap[keyStrFromLabels]; ok { // we already have a representative peer with same labels return nil, nil } - newRepresentativePeer := &k8s.RepresentativePeer{Pod: newPod, PotentialNamespaceLabels: nsLabels} + newRepresentativePeer := &k8s.RepresentativePeer{Pod: newPod, PotentialNamespaceLabels: nsLabels, HasUnusualNsLabels: hasUnusualNsLabels} pe.representativePeersMap[keyStrFromLabels] = newRepresentativePeer return newRepresentativePeer, nil } diff --git a/pkg/netpol/internal/common/netpol_commands_common.go b/pkg/netpol/internal/common/netpol_commands_common.go index 8840773f..5cb64a7d 100644 --- a/pkg/netpol/internal/common/netpol_commands_common.go +++ b/pkg/netpol/internal/common/netpol_commands_common.go @@ -25,3 +25,10 @@ const ( IngressPodName = "ingress-controller" IngressPodNamespace = "ingress-controller-ns" ) + +// common consts +const ( + ExistsVal = "" + DoesNotExistVal = "" + NotPrefix = "!(" +) diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot new file mode 100644 index 00000000..fd5b82a2 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot @@ -0,0 +1,26 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + "hello-world/workload-b[Deployment]" [label="workload-b[Deployment]" color="blue" fontcolor="blue"] + "pod with {app DoesNotExist}_in_hello-world" [label="pod with {app DoesNotExist}" color="red2" fontcolor="red2"] + label="hello-world" + } + subgraph "cluster_namespace with {env DoesNotExist}" { + color="red2" + fontcolor="red2" + "all pods_in_namespace with {env DoesNotExist}" [label="all pods" color="red2" fontcolor="red2"] + label="namespace with {env DoesNotExist}" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "0.0.0.0-255.255.255.255" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "all pods_in_namespace with {env DoesNotExist}" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "entire-cluster" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "hello-world/workload-a[Deployment]" -> "pod with {app DoesNotExist}_in_hello-world" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-b[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-b[Deployment]" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "pod with {app DoesNotExist}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..e9ea64dee0ae0c52a6220724df1b842143501bb4 GIT binary patch literal 47136 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 UdrCu+{8X--l(J-nxY6hT1)pt(5&!@I literal 0 HcmV?d00001 diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot.svg b/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot.svg new file mode 100644 index 00000000..14d65f77 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.dot.svg @@ -0,0 +1,114 @@ + + + + + + + + +cluster_namespace with {env DoesNotExist} + +namespace with {env DoesNotExist} + + +cluster_hello_world + +hello-world + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +pod with {app DoesNotExist}_in_hello-world + +pod with {app DoesNotExist} + + + +hello-world/workload-a[Deployment]->pod with {app DoesNotExist}_in_hello-world + + +All Connections + + + +hello-world/workload-b[Deployment] + +workload-b[Deployment] + + + +hello-world/workload-b[Deployment]->hello-world/workload-a[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-b[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-b[Deployment]->entire-cluster + + +All Connections + + + +pod with {app DoesNotExist}_in_hello-world->hello-world/workload-a[Deployment] + + +All Connections + + + +all pods_in_namespace with {env DoesNotExist} + +all pods + + + +all pods_in_namespace with {env DoesNotExist}->hello-world/workload-a[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255->hello-world/workload-b[Deployment] + + +All Connections + + + +entire-cluster->hello-world/workload-b[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.txt new file mode 100644 index 00000000..d7012035 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_match_expression_does_not_exist_op_connlist_output.txt @@ -0,0 +1,19 @@ +0.0.0.0-255.255.255.255 => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => hello-world/workload-a[Deployment] : All Connections + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => hello-world/[pod with {app DoesNotExist}] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= [namespace with {env DoesNotExist}]/[all pods] : All Connections +hello-world/workload-a[Deployment] <= hello-world/[pod with {app DoesNotExist}] : All Connections +hello-world/workload-b[Deployment] <= 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] <= entire-cluster : All Connections + +Workloads not protected by network policies: +hello-world/workload-b[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Ingress diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.dot new file mode 100644 index 00000000..bd48705f --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.dot @@ -0,0 +1,25 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + "hello-world/workload-b[Deployment]" [label="workload-b[Deployment]" color="blue" fontcolor="blue"] + "pod with {app Exists}_in_hello-world" [label="pod with {app Exists}" color="red2" fontcolor="red2"] + label="hello-world" + } + subgraph "cluster_namespace with {env Exists}" { + color="red2" + fontcolor="red2" + "all pods_in_namespace with {env Exists}" [label="all pods" color="red2" fontcolor="red2"] + label="namespace with {env Exists}" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "0.0.0.0-255.255.255.255" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "all pods_in_namespace with {env Exists}" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "entire-cluster" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "hello-world/workload-a[Deployment]" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-a[Deployment]" -> "pod with {app Exists}_in_hello-world" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-b[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..151af5e6492b2c519504d1107524cc9788a6fa39 GIT binary patch literal 47291 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 z%0D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 V8@ERuKuQQiMe!M|Sl%S$e*mL3%CG + + + + + + + +cluster_hello_world + +hello-world + + +cluster_namespace with {env Exists} + +namespace with {env Exists} + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +hello-world/workload-b[Deployment] + +workload-b[Deployment] + + + +hello-world/workload-a[Deployment]->hello-world/workload-b[Deployment] + + +All Connections + + + +pod with {app Exists}_in_hello-world + +pod with {app Exists} + + + +hello-world/workload-a[Deployment]->pod with {app Exists}_in_hello-world + + +All Connections + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-b[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-b[Deployment]->entire-cluster + + +All Connections + + + +all pods_in_namespace with {env Exists} + +all pods + + + +all pods_in_namespace with {env Exists}->hello-world/workload-a[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255->hello-world/workload-b[Deployment] + + +All Connections + + + +entire-cluster->hello-world/workload-b[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.txt new file mode 100644 index 00000000..0f51a44e --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_match_expression_exists_op_connlist_output.txt @@ -0,0 +1,18 @@ +0.0.0.0-255.255.255.255 => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-a[Deployment] => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => hello-world/[pod with {app Exists}] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= [namespace with {env Exists}]/[all pods] : All Connections +hello-world/workload-b[Deployment] <= 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] <= entire-cluster : All Connections + +Workloads not protected by network policies: +hello-world/workload-b[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Ingress diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot new file mode 100644 index 00000000..ee5a5352 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot @@ -0,0 +1,30 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + label="hello-world" + } + subgraph "cluster_namespace with {env=env_1}" { + color="red2" + fontcolor="red2" + "pod with {app=app-1}_in_namespace with {env=env-1}" [label="pod with {app=app-1}" color="red2" fontcolor="red2"] + "pod with {app=app-2}_in_namespace with {env=env-1}" [label="pod with {app=app-2}" color="red2" fontcolor="red2"] + label="namespace with {env=env-1}" + } + subgraph "cluster_namespace with {env=env_2}" { + color="red2" + fontcolor="red2" + "pod with {app=app-1}_in_namespace with {env=env-2}" [label="pod with {app=app-1}" color="red2" fontcolor="red2"] + "pod with {app=app-2}_in_namespace with {env=env-2}" [label="pod with {app=app-2}" color="red2" fontcolor="red2"] + label="namespace with {env=env-2}" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "hello-world/workload-a[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-a[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "pod with {app=app-1}_in_namespace with {env=env-1}" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {app=app-1}_in_namespace with {env=env-2}" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {app=app-2}_in_namespace with {env=env-1}" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {app=app-2}_in_namespace with {env=env-2}" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..b6ed4c2e33bce6299316797139a7754f247c31ee GIT binary patch literal 46131 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 z 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 Hi?II#1VG%j literal 0 HcmV?d00001 diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot.svg b/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot.svg new file mode 100644 index 00000000..6dcbc173 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.dot.svg @@ -0,0 +1,111 @@ + + + + + + + + +cluster_namespace with {env=env_2} + +namespace with {env=env-2} + + +cluster_namespace with {env=env_1} + +namespace with {env=env-1} + + +cluster_hello_world + +hello-world + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-a[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-a[Deployment]->entire-cluster + + +All Connections + + + +pod with {app=app-1}_in_namespace with {env=env-1} + +pod with {app=app-1} + + + +pod with {app=app-1}_in_namespace with {env=env-1}->hello-world/workload-a[Deployment] + + +All Connections + + + +pod with {app=app-2}_in_namespace with {env=env-1} + +pod with {app=app-2} + + + +pod with {app=app-2}_in_namespace with {env=env-1}->hello-world/workload-a[Deployment] + + +All Connections + + + +pod with {app=app-1}_in_namespace with {env=env-2} + +pod with {app=app-1} + + + +pod with {app=app-1}_in_namespace with {env=env-2}->hello-world/workload-a[Deployment] + + +All Connections + + + +pod with {app=app-2}_in_namespace with {env=env-2} + +pod with {app=app-2} + + + +pod with {app=app-2}_in_namespace with {env=env-2}->hello-world/workload-a[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.txt new file mode 100644 index 00000000..5c4c16bc --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_match_expression_in_op_connlist_output.txt @@ -0,0 +1,15 @@ +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= [namespace with {env=env-1}]/[pod with {app=app-1}] : All Connections +hello-world/workload-a[Deployment] <= [namespace with {env=env-1}]/[pod with {app=app-2}] : All Connections +hello-world/workload-a[Deployment] <= [namespace with {env=env-2}]/[pod with {app=app-1}] : All Connections +hello-world/workload-a[Deployment] <= [namespace with {env=env-2}]/[pod with {app=app-2}] : All Connections + +Workloads not protected by network policies: +hello-world/workload-a[Deployment] is not protected on Egress diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.dot new file mode 100644 index 00000000..b65df021 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.dot @@ -0,0 +1,26 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + "hello-world/workload-b[Deployment]" [label="workload-b[Deployment]" color="blue" fontcolor="blue"] + "pod with {app NotIn (a-app,b-app)}_in_hello-world" [label="pod with {app NotIn (a-app,b-app)}" color="red2" fontcolor="red2"] + label="hello-world" + } + subgraph "cluster_namespace with {env NotIn (env_a,env_b)}" { + color="red2" + fontcolor="red2" + "all pods_in_namespace with {env NotIn (env-a,env-b)}" [label="all pods" color="red2" fontcolor="red2"] + label="namespace with {env NotIn (env-a,env-b)}" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "0.0.0.0-255.255.255.255" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "all pods_in_namespace with {env NotIn (env-a,env-b)}" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "entire-cluster" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "hello-world/workload-a[Deployment]" -> "pod with {app NotIn (a-app,b-app)}_in_hello-world" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-b[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-b[Deployment]" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "pod with {app NotIn (a-app,b-app)}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..9ccd1b38366ac30ddeb8c11c4ef19f34a165abc2 GIT binary patch literal 47950 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 + + + + + + + +cluster_namespace with {env NotIn (env_a,env_b)} + +namespace with {env NotIn (env-a,env-b)} + + +cluster_hello_world + +hello-world + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +pod with {app NotIn (a-app,b-app)}_in_hello-world + +pod with {app NotIn (a-app,b-app)} + + + +hello-world/workload-a[Deployment]->pod with {app NotIn (a-app,b-app)}_in_hello-world + + +All Connections + + + +hello-world/workload-b[Deployment] + +workload-b[Deployment] + + + +hello-world/workload-b[Deployment]->hello-world/workload-a[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-b[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-b[Deployment]->entire-cluster + + +All Connections + + + +pod with {app NotIn (a-app,b-app)}_in_hello-world->hello-world/workload-a[Deployment] + + +All Connections + + + +all pods_in_namespace with {env NotIn (env-a,env-b)} + +all pods + + + +all pods_in_namespace with {env NotIn (env-a,env-b)}->hello-world/workload-a[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255->hello-world/workload-b[Deployment] + + +All Connections + + + +entire-cluster->hello-world/workload-b[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.txt new file mode 100644 index 00000000..885336d4 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_match_expression_not_in_op_connlist_output.txt @@ -0,0 +1,19 @@ +0.0.0.0-255.255.255.255 => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => hello-world/workload-a[Deployment] : All Connections + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => hello-world/[pod with {app NotIn (a-app,b-app)}] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= [namespace with {env NotIn (env-a,env-b)}]/[all pods] : All Connections +hello-world/workload-a[Deployment] <= hello-world/[pod with {app NotIn (a-app,b-app)}] : All Connections +hello-world/workload-b[Deployment] <= 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] <= entire-cluster : All Connections + +Workloads not protected by network policies: +hello-world/workload-b[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Ingress diff --git a/tests/test_exposure_with_match_expression_does_not_exist_op/namespace_and_deployments.yaml b/tests/test_exposure_with_match_expression_does_not_exist_op/namespace_and_deployments.yaml new file mode 100644 index 00000000..528cef18 --- /dev/null +++ b/tests/test_exposure_with_match_expression_does_not_exist_op/namespace_and_deployments.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-b + namespace: hello-world + labels: + app: b-app +spec: + selector: + matchLabels: + app: b-app + template: + metadata: + labels: + app: b-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8050 diff --git a/tests/test_exposure_with_match_expression_does_not_exist_op/netpol.yaml b/tests/test_exposure_with_match_expression_does_not_exist_op/netpol.yaml new file mode 100644 index 00000000..1e09382d --- /dev/null +++ b/tests/test_exposure_with_match_expression_does_not_exist_op/netpol.yaml @@ -0,0 +1,21 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: match-exp-values-exists-op + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: + - from: + - namespaceSelector: + matchExpressions: + - key: env + operator: DoesNotExist + egress: + - to: + - podSelector: + matchExpressions: + - key: app + operator: DoesNotExist diff --git a/tests/test_exposure_with_match_expression_exists_op/namespace_and_deployments.yaml b/tests/test_exposure_with_match_expression_exists_op/namespace_and_deployments.yaml new file mode 100644 index 00000000..528cef18 --- /dev/null +++ b/tests/test_exposure_with_match_expression_exists_op/namespace_and_deployments.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-b + namespace: hello-world + labels: + app: b-app +spec: + selector: + matchLabels: + app: b-app + template: + metadata: + labels: + app: b-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8050 diff --git a/tests/test_exposure_with_match_expression_exists_op/netpol.yaml b/tests/test_exposure_with_match_expression_exists_op/netpol.yaml new file mode 100644 index 00000000..ebeef49a --- /dev/null +++ b/tests/test_exposure_with_match_expression_exists_op/netpol.yaml @@ -0,0 +1,21 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: match-exp-values-exists-op + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: + - from: + - namespaceSelector: + matchExpressions: + - key: env + operator: Exists + egress: + - to: + - podSelector: + matchExpressions: + - key: app + operator: Exists diff --git a/tests/test_exposure_with_match_expression_in_op/netpol.yaml b/tests/test_exposure_with_match_expression_in_op/netpol.yaml new file mode 100644 index 00000000..c6704c75 --- /dev/null +++ b/tests/test_exposure_with_match_expression_in_op/netpol.yaml @@ -0,0 +1,25 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: combined-match-exp-values-in-op + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: + - from: + - namespaceSelector: + matchExpressions: + - key: env + operator: In + values: + - env-1 + - env-2 + podSelector: + matchExpressions: + - key: app + operator: In + values: + - app-1 + - app-2 \ No newline at end of file diff --git a/tests/test_exposure_with_match_expression_in_op/ns_and_deployments.yaml b/tests/test_exposure_with_match_expression_in_op/ns_and_deployments.yaml new file mode 100644 index 00000000..3fc694b8 --- /dev/null +++ b/tests/test_exposure_with_match_expression_in_op/ns_and_deployments.yaml @@ -0,0 +1,31 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- diff --git a/tests/test_exposure_with_match_expression_not_in_op/namespace_and_deployments.yaml b/tests/test_exposure_with_match_expression_not_in_op/namespace_and_deployments.yaml new file mode 100644 index 00000000..528cef18 --- /dev/null +++ b/tests/test_exposure_with_match_expression_not_in_op/namespace_and_deployments.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-b + namespace: hello-world + labels: + app: b-app +spec: + selector: + matchLabels: + app: b-app + template: + metadata: + labels: + app: b-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8050 diff --git a/tests/test_exposure_with_match_expression_not_in_op/netpol.yaml b/tests/test_exposure_with_match_expression_not_in_op/netpol.yaml new file mode 100644 index 00000000..27370099 --- /dev/null +++ b/tests/test_exposure_with_match_expression_not_in_op/netpol.yaml @@ -0,0 +1,27 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: match-exp-values-exists-op + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: + - from: + - namespaceSelector: + matchExpressions: + - key: env + operator: NotIn + values: + - env-a + - env-b + egress: + - to: + - podSelector: + matchExpressions: + - key: app + operator: NotIn + values: + - a-app + - b-app \ No newline at end of file From 2946510bebd4e789de8d26797cbec26bd210ab5a Mon Sep 17 00:00:00 2001 From: shireenf-ibm Date: Tue, 11 Jun 2024 12:08:15 +0300 Subject: [PATCH 2/2] more tests --- pkg/netpol/connlist/connlist_test.go | 51 ++++++ ...iple_match_expressions_connlist_output.dot | 24 +++ ..._match_expressions_connlist_output.dot.png | Bin 0 -> 81741 bytes ..._match_expressions_connlist_output.dot.svg | 129 ++++++++++++++ ...iple_match_expressions_connlist_output.txt | 23 +++ ...with_different_rules_1_connlist_output.dot | 23 +++ ..._different_rules_1_connlist_output.dot.png | Bin 0 -> 53925 bytes ..._different_rules_1_connlist_output.dot.svg | 123 +++++++++++++ ...with_different_rules_1_connlist_output.txt | 23 +++ ...with_different_rules_2_connlist_output.dot | 23 +++ ..._different_rules_2_connlist_output.dot.png | Bin 0 -> 51357 bytes ..._different_rules_2_connlist_output.dot.svg | 123 +++++++++++++ ...with_different_rules_2_connlist_output.txt | 23 +++ ...with_different_rules_3_connlist_output.dot | 23 +++ ..._different_rules_3_connlist_output.dot.png | Bin 0 -> 54584 bytes ..._different_rules_3_connlist_output.dot.svg | 123 +++++++++++++ ...with_different_rules_3_connlist_output.txt | 23 +++ ...with_different_rules_4_connlist_output.dot | 23 +++ ..._different_rules_4_connlist_output.dot.png | Bin 0 -> 53471 bytes ..._different_rules_4_connlist_output.dot.svg | 123 +++++++++++++ ...with_different_rules_4_connlist_output.txt | 23 +++ ...with_different_rules_5_connlist_output.dot | 29 ++++ ..._different_rules_5_connlist_output.dot.png | Bin 0 -> 69936 bytes ..._different_rules_5_connlist_output.dot.svg | 162 ++++++++++++++++++ ...with_different_rules_5_connlist_output.txt | 26 +++ ...with_different_rules_6_connlist_output.dot | 32 ++++ ..._different_rules_6_connlist_output.dot.png | Bin 0 -> 52930 bytes ..._different_rules_6_connlist_output.dot.svg | 126 ++++++++++++++ ...with_different_rules_6_connlist_output.txt | 22 +++ .../namespace_and_deployments.yaml | 52 ++++++ .../netpol.yaml | 29 ++++ .../namespace_and_deployments.yaml | 52 ++++++ .../netpol.yaml | 28 +++ .../namespace_and_deployments.yaml | 52 ++++++ .../netpol.yaml | 28 +++ .../namespace_and_deployments.yaml | 52 ++++++ .../netpol.yaml | 28 +++ .../namespace_and_deployments.yaml | 52 ++++++ .../netpol.yaml | 28 +++ .../namespace_and_deployments.yaml | 52 ++++++ .../netpol.yaml | 28 +++ .../namespace_and_deployments.yaml | 52 ++++++ .../netpol.yaml | 45 +++++ 43 files changed, 1878 insertions(+) create mode 100644 test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.txt create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.txt create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.txt create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.txt create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.txt create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.txt create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.dot create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.dot.png create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.dot.svg create mode 100644 test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.txt create mode 100644 tests/test_exposure_rule_with_multiple_match_expressions/namespace_and_deployments.yaml create mode 100644 tests/test_exposure_rule_with_multiple_match_expressions/netpol.yaml create mode 100644 tests/test_exposure_with_different_rules_1/namespace_and_deployments.yaml create mode 100644 tests/test_exposure_with_different_rules_1/netpol.yaml create mode 100644 tests/test_exposure_with_different_rules_2/namespace_and_deployments.yaml create mode 100644 tests/test_exposure_with_different_rules_2/netpol.yaml create mode 100644 tests/test_exposure_with_different_rules_3/namespace_and_deployments.yaml create mode 100644 tests/test_exposure_with_different_rules_3/netpol.yaml create mode 100644 tests/test_exposure_with_different_rules_4/namespace_and_deployments.yaml create mode 100644 tests/test_exposure_with_different_rules_4/netpol.yaml create mode 100644 tests/test_exposure_with_different_rules_5/namespace_and_deployments.yaml create mode 100644 tests/test_exposure_with_different_rules_5/netpol.yaml create mode 100644 tests/test_exposure_with_different_rules_6/namespace_and_deployments.yaml create mode 100644 tests/test_exposure_with_different_rules_6/netpol.yaml diff --git a/pkg/netpol/connlist/connlist_test.go b/pkg/netpol/connlist/connlist_test.go index c32eda75..c51c35e6 100644 --- a/pkg/netpol/connlist/connlist_test.go +++ b/pkg/netpol/connlist/connlist_test.go @@ -978,4 +978,55 @@ var goodPathTests = []struct { exposureAnalysis: true, outputFormats: ExposureValidFormats, }, + { + testDirName: "test_exposure_rule_with_multiple_match_expressions", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, + { + // in this test's netpol, the rules are not equiv + // because NotIn means either does not exist or exists with value not in values. + // but a pod that matches both rules (like workload-b) connects with workload-a on both ports + testDirName: "test_exposure_with_different_rules_1", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, + { + // in this test's netpol, the rules are not equiv, but the In rule contains the Exists rule + // so the representative peer inferred from `In` rule; connects with workload-a on both rules' ports + testDirName: "test_exposure_with_different_rules_2", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, + { + // in this test's netpol, the rules are not equiv, but the DoesNotExist rule contains the NotIn rule + // so the representative peer inferred from `DoesNotExist` rule; connects with workload-a on both rules' ports + testDirName: "test_exposure_with_different_rules_3", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, + { + // in this test's netpol,both rules are with NotIn operator, where one values list contains the other. + // so the representative peer inferred from `NotIn with the longest values list rule; connects with workload-a on both rules' ports + // since workload-b matches both NotIn (does not have key role in its labels), it also connect on both ports to workload-a + testDirName: "test_exposure_with_different_rules_4", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, + { + // in this test's netpol,rules with In and NotIn, where one values list contains the other. + // so the representative peers inferred from `In` has different connections from each other, depends if the peer + // matches also the NotIn rule or not + testDirName: "test_exposure_with_different_rules_5", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, + { + // in this test's netpol, rules are combined + // second rule matches also first rule, so representative peer inferred from second rule + // has connections of both rules + testDirName: "test_exposure_with_different_rules_6", + exposureAnalysis: true, + outputFormats: ExposureValidFormats, + }, } diff --git a/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot new file mode 100644 index 00000000..074d6b4d --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot @@ -0,0 +1,24 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + "hello-world/workload-b[Deployment]" [label="workload-b[Deployment]" color="blue" fontcolor="blue"] + "pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=api,tier Exists}_in_hello-world" [label="pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=api,tier Exists}" color="red2" fontcolor="red2"] + "pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=frontend,tier Exists}_in_hello-world" [label="pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=frontend,tier Exists}" color="red2" fontcolor="red2"] + "pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=web,tier Exists}_in_hello-world" [label="pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=web,tier Exists}" color="red2" fontcolor="red2"] + label="hello-world" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "0.0.0.0-255.255.255.255" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "entire-cluster" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "hello-world/workload-a[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-a[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-a[Deployment]" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=api,tier Exists}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=frontend,tier Exists}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=web,tier Exists}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..22adda598b07d308447eadd78154a1a5d2280b2b GIT binary patch literal 81741 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 MTShm_weLs#A2S0Ka{vGU literal 0 HcmV?d00001 diff --git a/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot.svg b/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot.svg new file mode 100644 index 00000000..8e36cc1b --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.dot.svg @@ -0,0 +1,129 @@ + + + + + + + + +cluster_hello_world + +hello-world + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +hello-world/workload-b[Deployment] + +workload-b[Deployment] + + + +hello-world/workload-a[Deployment]->hello-world/workload-b[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-a[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-a[Deployment]->entire-cluster + + +All Connections + + + +hello-world/workload-b[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +hello-world/workload-b[Deployment]->entire-cluster + + +All Connections + + + +pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=api,tier Exists}_in_hello-world + +pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=api,tier Exists} + + + +pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=api,tier Exists}_in_hello-world->hello-world/workload-a[Deployment] + + +All Connections + + + +pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=frontend,tier Exists}_in_hello-world + +pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=frontend,tier Exists} + + + +pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=frontend,tier Exists}_in_hello-world->hello-world/workload-a[Deployment] + + +All Connections + + + +pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=web,tier Exists}_in_hello-world + +pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=web,tier Exists} + + + +pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=web,tier Exists}_in_hello-world->hello-world/workload-a[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255->hello-world/workload-b[Deployment] + + +All Connections + + + +entire-cluster->hello-world/workload-b[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.txt new file mode 100644 index 00000000..53a0453f --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_rule_with_multiple_match_expressions_connlist_output.txt @@ -0,0 +1,23 @@ +0.0.0.0-255.255.255.255 => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => entire-cluster : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= hello-world/[pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=api,tier Exists}] : All Connections +hello-world/workload-a[Deployment] <= hello-world/[pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=frontend,tier Exists}] : All Connections +hello-world/workload-a[Deployment] <= hello-world/[pod with {app NotIn (b-app,c-app,d-app),env DoesNotExist,role=web,tier Exists}] : All Connections +hello-world/workload-b[Deployment] <= 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] <= entire-cluster : All Connections + +Workloads not protected by network policies: +hello-world/workload-a[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Ingress diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.dot new file mode 100644 index 00000000..dabeb044 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.dot @@ -0,0 +1,23 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + "hello-world/workload-b[Deployment]" [label="workload-b[Deployment]" color="blue" fontcolor="blue"] + "pod with {app Exists}_in_hello-world" [label="pod with {app Exists}" color="red2" fontcolor="red2"] + "pod with {app NotIn (x)}_in_hello-world" [label="pod with {app NotIn (x)}" color="red2" fontcolor="red2"] + label="hello-world" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "0.0.0.0-255.255.255.255" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "entire-cluster" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "hello-world/workload-a[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-a[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-a[Deployment]" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-b[Deployment]" -> "hello-world/workload-a[Deployment]" [label="TCP 8080,9090" color="gold2" fontcolor="darkgreen"] + "pod with {app Exists}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 8080" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {app NotIn (x)}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 9090" color="gold2" fontcolor="darkgreen" weight=1] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..e7bc45f7c11e7223a835a11165a99707e50bed0b GIT binary patch literal 53925 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

    >nqETt_io!vjJ zuvGzSmTVFpM}9&EkgQ+)p@3R5G6HwE%bUQleAH{?|1|+;dGuj!ikz@B-bNUiia7Ea zLKd^t9|LY`*6h|ocy%fcE;v;}Y;h*~fA+p}eLM>E6$Oh|Jdy~7eEy}Lb@nWZOWs@~ z)2jY7=z4keWj#-okb3`kcP8}{;HdsuUydc}+{Ok06c7J=cjj-|4Rf&I2g9;`+hdP3 zSLDrau(VXwze%0)uL#$9nxXJx5;@QY1?B`=9eoWcd?{ypUev{al>}CLSMUaLo*fS& zwKm?DumygLAv^m3CI1qy^%FTrIaIoomPk!gmeFQJuK7SfvMA2-(K=Nafy+GltV$dp zZ>=l*T1VD|oeFe!&V@x1sn&-5mpLb+_UvcWeb4r4283yxsS|-p9gtl^LIYpl~&VeC!>^;d-{=bwSV7vb>MJD7IORk5#I;4 zN2+i9A3VA0Dj!w55tVyEfDplzp6d!9Ra?tZ%sc?%Fojosa8Kr1?-8Btnh?tMDe zjNmO8tBior_50oef*LS70@vB?UGdQzVgp_aS8-d^f0rl%hR9ddH4$qEb{Ufy12@| z@BsefTBu;yYt`n7&!5jHupWPL3t)U0#@58DIQN2Yw??n-Y!`hD1xM+`H8q->tG=GCrM3!kGH&RFta4*z&ARq>T?So_!?H7HP&aPO)+Gy^N`;9ONNM{8`O9I z&V$B!ve8Cnc+^MmpQ||$&ClOx;T(hZ)f}PC8MaT7zD9dQh6i<*f9eyAfyGxYfCQt* zP)`3`4vmjb>>(LR({7UDjdx44#iULIR_TEQlM<&^)1m5(H^`@Hv-?%UT* zo+hLB>Ghwyd+Jtt>tMvFPeDJh>$*OCGNA-r|AzXbDgWa~Y;je_jBR2YdUh}`++L2uM8$D+~)*6^S8TGrYXGzNmN&txAj!X*}vjr81ct0NgYLxsC#5H@E9L<@|iNzAyumFZ#-*+xLR>SHF)} z>xdZ|mS23NAlzpSM*sNC!J&5irFR(1uE@sFE2!lFDv?s2kFPd%fQ2_H>Xfufwnbaq z^Zr&&s@FhzK3?yr5TKnCuZ9sT+kp88fIz0mDn;(yrWVvGKQs2KWc3sy<{q^+ z@)`%u5kA18pOk_5it?;@+NSuts^)9M->T{QR^l>Ei2Cw`Rb?O__R52S?m~@}s?xt3 zGzChLhK5omCdnorgbbvvyRx`--H4Nv5;?7G@8CNO@wLljq2<1+>etGKN<;nMl>yWJ z6lH&XXSHRre#Wug`)B7%9Cx^SUejn2=qk#SGopX=m~vpXHZ8I}*z?oqjg8ggeP&q$ z)wbVCIg7^+tx6)o7b3b^&6~oaS3rr{ex1P?AonbF-1&K!$LWfCbka+8>mv=noJ#aV zfs02RZo@#~^ssi{jSOwZ1l_T^@!;T0q~M<7Ye)!2uia_t^LX#e36fZQsE0Qn-*Nxm zyh5%Uz2}TQ$}bB)BZFbhsrIdcD(P(hA?xC18|edFxIlbEe2N}dXyno<6BBi$zeV7G z?jQP$0K0xL_8q{$a5?g8XHlr-bM|Rj0MB9ITc}u + + + + + + + +cluster_hello_world + +hello-world + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +hello-world/workload-b[Deployment] + +workload-b[Deployment] + + + +hello-world/workload-a[Deployment]->hello-world/workload-b[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-a[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-a[Deployment]->entire-cluster + + +All Connections + + + +hello-world/workload-b[Deployment]->hello-world/workload-a[Deployment] + + +TCP 8080,9090 + + + +hello-world/workload-b[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +hello-world/workload-b[Deployment]->entire-cluster + + +All Connections + + + +pod with {app Exists}_in_hello-world + +pod with {app Exists} + + + +pod with {app Exists}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 8080 + + + +pod with {app NotIn (x)}_in_hello-world + +pod with {app NotIn (x)} + + + +pod with {app NotIn (x)}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 9090 + + + +0.0.0.0-255.255.255.255->hello-world/workload-b[Deployment] + + +All Connections + + + +entire-cluster->hello-world/workload-b[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.txt new file mode 100644 index 00000000..d25920b3 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_1_connlist_output.txt @@ -0,0 +1,23 @@ +0.0.0.0-255.255.255.255 => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => hello-world/workload-a[Deployment] : TCP 8080,9090 + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => entire-cluster : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= hello-world/[pod with {app Exists}] : TCP 8080 +hello-world/workload-a[Deployment] <= hello-world/[pod with {app NotIn (x)}] : TCP 9090 +hello-world/workload-b[Deployment] <= 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] <= entire-cluster : All Connections + +Workloads not protected by network policies: +hello-world/workload-a[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Ingress diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot new file mode 100644 index 00000000..87d82259 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot @@ -0,0 +1,23 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + "hello-world/workload-b[Deployment]" [label="workload-b[Deployment]" color="blue" fontcolor="blue"] + "pod with {app Exists}_in_hello-world" [label="pod with {app Exists}" color="red2" fontcolor="red2"] + "pod with {app=x}_in_hello-world" [label="pod with {app=x}" color="red2" fontcolor="red2"] + label="hello-world" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "0.0.0.0-255.255.255.255" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "entire-cluster" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "hello-world/workload-a[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-a[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-a[Deployment]" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-b[Deployment]" -> "hello-world/workload-a[Deployment]" [label="TCP 8080" color="gold2" fontcolor="darkgreen"] + "pod with {app Exists}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 8080" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {app=x}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 8080,9090" color="gold2" fontcolor="darkgreen" weight=1] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..c95b672b9256f3e9ae07c5f1a6915ae5a235b61e GIT binary patch literal 51357 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 literal 0 HcmV?d00001 diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot.svg b/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot.svg new file mode 100644 index 00000000..979afea3 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.dot.svg @@ -0,0 +1,123 @@ + + + + + + + + +cluster_hello_world + +hello-world + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +hello-world/workload-b[Deployment] + +workload-b[Deployment] + + + +hello-world/workload-a[Deployment]->hello-world/workload-b[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-a[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-a[Deployment]->entire-cluster + + +All Connections + + + +hello-world/workload-b[Deployment]->hello-world/workload-a[Deployment] + + +TCP 8080 + + + +hello-world/workload-b[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +hello-world/workload-b[Deployment]->entire-cluster + + +All Connections + + + +pod with {app Exists}_in_hello-world + +pod with {app Exists} + + + +pod with {app Exists}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 8080 + + + +pod with {app=x}_in_hello-world + +pod with {app=x} + + + +pod with {app=x}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 8080,9090 + + + +0.0.0.0-255.255.255.255->hello-world/workload-b[Deployment] + + +All Connections + + + +entire-cluster->hello-world/workload-b[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.txt new file mode 100644 index 00000000..d8708992 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_2_connlist_output.txt @@ -0,0 +1,23 @@ +0.0.0.0-255.255.255.255 => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => hello-world/workload-a[Deployment] : TCP 8080 + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => entire-cluster : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= hello-world/[pod with {app Exists}] : TCP 8080 +hello-world/workload-a[Deployment] <= hello-world/[pod with {app=x}] : TCP 8080,9090 +hello-world/workload-b[Deployment] <= 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] <= entire-cluster : All Connections + +Workloads not protected by network policies: +hello-world/workload-a[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Ingress diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.dot new file mode 100644 index 00000000..45a3a130 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.dot @@ -0,0 +1,23 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + "hello-world/workload-b[Deployment]" [label="workload-b[Deployment]" color="blue" fontcolor="blue"] + "pod with {app DoesNotExist}_in_hello-world" [label="pod with {app DoesNotExist}" color="red2" fontcolor="red2"] + "pod with {app NotIn (x)}_in_hello-world" [label="pod with {app NotIn (x)}" color="red2" fontcolor="red2"] + label="hello-world" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "0.0.0.0-255.255.255.255" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "entire-cluster" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "hello-world/workload-a[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-a[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-a[Deployment]" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-b[Deployment]" -> "hello-world/workload-a[Deployment]" [label="TCP 9090" color="gold2" fontcolor="darkgreen"] + "pod with {app DoesNotExist}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 8080,9090" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {app NotIn (x)}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 9090" color="gold2" fontcolor="darkgreen" weight=1] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..60a175d89de7b3e38e3260eddd7c85149f04ad68 GIT binary patch literal 54584 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 z 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 ycR6701`Zjn)>^p?G + + + + + + + +cluster_hello_world + +hello-world + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +hello-world/workload-b[Deployment] + +workload-b[Deployment] + + + +hello-world/workload-a[Deployment]->hello-world/workload-b[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-a[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-a[Deployment]->entire-cluster + + +All Connections + + + +hello-world/workload-b[Deployment]->hello-world/workload-a[Deployment] + + +TCP 9090 + + + +hello-world/workload-b[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +hello-world/workload-b[Deployment]->entire-cluster + + +All Connections + + + +pod with {app DoesNotExist}_in_hello-world + +pod with {app DoesNotExist} + + + +pod with {app DoesNotExist}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 8080,9090 + + + +pod with {app NotIn (x)}_in_hello-world + +pod with {app NotIn (x)} + + + +pod with {app NotIn (x)}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 9090 + + + +0.0.0.0-255.255.255.255->hello-world/workload-b[Deployment] + + +All Connections + + + +entire-cluster->hello-world/workload-b[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.txt new file mode 100644 index 00000000..5f792732 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_3_connlist_output.txt @@ -0,0 +1,23 @@ +0.0.0.0-255.255.255.255 => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => hello-world/workload-a[Deployment] : TCP 9090 + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => entire-cluster : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= hello-world/[pod with {app DoesNotExist}] : TCP 8080,9090 +hello-world/workload-a[Deployment] <= hello-world/[pod with {app NotIn (x)}] : TCP 9090 +hello-world/workload-b[Deployment] <= 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] <= entire-cluster : All Connections + +Workloads not protected by network policies: +hello-world/workload-a[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Ingress diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.dot new file mode 100644 index 00000000..174d5e24 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.dot @@ -0,0 +1,23 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + "hello-world/workload-b[Deployment]" [label="workload-b[Deployment]" color="blue" fontcolor="blue"] + "pod with {role NotIn (w,x,y,z)}_in_hello-world" [label="pod with {role NotIn (w,x,y,z)}" color="red2" fontcolor="red2"] + "pod with {role NotIn (x,y)}_in_hello-world" [label="pod with {role NotIn (x,y)}" color="red2" fontcolor="red2"] + label="hello-world" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "0.0.0.0-255.255.255.255" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "entire-cluster" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "hello-world/workload-a[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-a[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-a[Deployment]" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-b[Deployment]" -> "hello-world/workload-a[Deployment]" [label="TCP 8080,9090" color="gold2" fontcolor="darkgreen"] + "pod with {role NotIn (w,x,y,z)}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 8080,9090" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {role NotIn (x,y)}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 9090" color="gold2" fontcolor="darkgreen" weight=1] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..55dd81bcfd8592bd2881dcdaf7a8034d74449890 GIT binary patch literal 53471 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 + + + + + + + +cluster_hello_world + +hello-world + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +hello-world/workload-b[Deployment] + +workload-b[Deployment] + + + +hello-world/workload-a[Deployment]->hello-world/workload-b[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-a[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-a[Deployment]->entire-cluster + + +All Connections + + + +hello-world/workload-b[Deployment]->hello-world/workload-a[Deployment] + + +TCP 8080,9090 + + + +hello-world/workload-b[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +hello-world/workload-b[Deployment]->entire-cluster + + +All Connections + + + +pod with {role NotIn (w,x,y,z)}_in_hello-world + +pod with {role NotIn (w,x,y,z)} + + + +pod with {role NotIn (w,x,y,z)}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 8080,9090 + + + +pod with {role NotIn (x,y)}_in_hello-world + +pod with {role NotIn (x,y)} + + + +pod with {role NotIn (x,y)}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 9090 + + + +0.0.0.0-255.255.255.255->hello-world/workload-b[Deployment] + + +All Connections + + + +entire-cluster->hello-world/workload-b[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.txt new file mode 100644 index 00000000..8bf9f4bc --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_4_connlist_output.txt @@ -0,0 +1,23 @@ +0.0.0.0-255.255.255.255 => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => hello-world/workload-a[Deployment] : TCP 8080,9090 + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => entire-cluster : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= hello-world/[pod with {role NotIn (w,x,y,z)}] : TCP 8080,9090 +hello-world/workload-a[Deployment] <= hello-world/[pod with {role NotIn (x,y)}] : TCP 9090 +hello-world/workload-b[Deployment] <= 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] <= entire-cluster : All Connections + +Workloads not protected by network policies: +hello-world/workload-a[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Ingress diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot new file mode 100644 index 00000000..21207bc3 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot @@ -0,0 +1,29 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + "hello-world/workload-b[Deployment]" [label="workload-b[Deployment]" color="blue" fontcolor="blue"] + "pod with {role NotIn (x,y)}_in_hello-world" [label="pod with {role NotIn (x,y)}" color="red2" fontcolor="red2"] + "pod with {role=w}_in_hello-world" [label="pod with {role=w}" color="red2" fontcolor="red2"] + "pod with {role=x}_in_hello-world" [label="pod with {role=x}" color="red2" fontcolor="red2"] + "pod with {role=y}_in_hello-world" [label="pod with {role=y}" color="red2" fontcolor="red2"] + "pod with {role=z}_in_hello-world" [label="pod with {role=z}" color="red2" fontcolor="red2"] + label="hello-world" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "0.0.0.0-255.255.255.255" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "entire-cluster" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "hello-world/workload-a[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-a[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-a[Deployment]" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-b[Deployment]" -> "hello-world/workload-a[Deployment]" [label="TCP 9090" color="gold2" fontcolor="darkgreen"] + "pod with {role NotIn (x,y)}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 9090" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {role=w}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 8080,9090" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {role=x}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 8080" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {role=y}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 8080" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {role=z}_in_hello-world" -> "hello-world/workload-a[Deployment]" [label="TCP 8080,9090" color="gold2" fontcolor="darkgreen" weight=1] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..f6af1105c2a217e738cdbfc9c999ed43bf1e0ba4 GIT binary patch literal 69936 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≪{8<>2F4tRKuA_WACe25i(hHMBvcC3t|2pGC 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 SC@&!3Atfd!TJrAmkN*RJv0j`2 literal 0 HcmV?d00001 diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot.svg b/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot.svg new file mode 100644 index 00000000..de25572e --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.dot.svg @@ -0,0 +1,162 @@ + + + + + + + + +cluster_hello_world + +hello-world + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +hello-world/workload-b[Deployment] + +workload-b[Deployment] + + + +hello-world/workload-a[Deployment]->hello-world/workload-b[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-a[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-a[Deployment]->entire-cluster + + +All Connections + + + +hello-world/workload-b[Deployment]->hello-world/workload-a[Deployment] + + +TCP 9090 + + + +hello-world/workload-b[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +hello-world/workload-b[Deployment]->entire-cluster + + +All Connections + + + +pod with {role NotIn (x,y)}_in_hello-world + +pod with {role NotIn (x,y)} + + + +pod with {role NotIn (x,y)}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 9090 + + + +pod with {role=w}_in_hello-world + +pod with {role=w} + + + +pod with {role=w}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 8080,9090 + + + +pod with {role=x}_in_hello-world + +pod with {role=x} + + + +pod with {role=x}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 8080 + + + +pod with {role=y}_in_hello-world + +pod with {role=y} + + + +pod with {role=y}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 8080 + + + +pod with {role=z}_in_hello-world + +pod with {role=z} + + + +pod with {role=z}_in_hello-world->hello-world/workload-a[Deployment] + + +TCP 8080,9090 + + + +0.0.0.0-255.255.255.255->hello-world/workload-b[Deployment] + + +All Connections + + + +entire-cluster->hello-world/workload-b[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.txt new file mode 100644 index 00000000..14a60820 --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_5_connlist_output.txt @@ -0,0 +1,26 @@ +0.0.0.0-255.255.255.255 => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => hello-world/workload-a[Deployment] : TCP 9090 + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => entire-cluster : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= hello-world/[pod with {role NotIn (x,y)}] : TCP 9090 +hello-world/workload-a[Deployment] <= hello-world/[pod with {role=w}] : TCP 8080,9090 +hello-world/workload-a[Deployment] <= hello-world/[pod with {role=x}] : TCP 8080 +hello-world/workload-a[Deployment] <= hello-world/[pod with {role=y}] : TCP 8080 +hello-world/workload-a[Deployment] <= hello-world/[pod with {role=z}] : TCP 8080,9090 +hello-world/workload-b[Deployment] <= 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] <= entire-cluster : All Connections + +Workloads not protected by network policies: +hello-world/workload-a[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Ingress diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.dot b/test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.dot new file mode 100644 index 00000000..b64ede9a --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.dot @@ -0,0 +1,32 @@ +digraph { + subgraph "cluster_hello_world" { + color="black" + fontcolor="black" + "hello-world/workload-a[Deployment]" [label="workload-a[Deployment]" color="blue" fontcolor="blue"] + "hello-world/workload-b[Deployment]" [label="workload-b[Deployment]" color="blue" fontcolor="blue"] + label="hello-world" + } + subgraph "cluster_namespace with {app DoesNotExist,env Exists,foo=managed}" { + color="red2" + fontcolor="red2" + "pod with {app=app-x,role NotIn (monitoring,search,web)}_in_namespace with {app DoesNotExist,env Exists,foo=managed}" [label="pod with {app=app-x,role NotIn (monitoring,search,web)}" color="red2" fontcolor="red2"] + label="namespace with {app DoesNotExist,env Exists,foo=managed}" + } + subgraph "cluster_namespace with {env=env_1,foo=managed}" { + color="red2" + fontcolor="red2" + "pod with {app=app-x,role=api}_in_namespace with {env=env-1,foo=managed}" [label="pod with {app=app-x,role=api}" color="red2" fontcolor="red2"] + label="namespace with {env=env-1,foo=managed}" + } + "0.0.0.0-255.255.255.255" [label="0.0.0.0-255.255.255.255" color="red2" fontcolor="red2"] + "entire-cluster" [label="entire-cluster" color="red2" fontcolor="red2" shape=diamond] + "0.0.0.0-255.255.255.255" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "entire-cluster" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=1] + "hello-world/workload-a[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-a[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "hello-world/workload-a[Deployment]" -> "hello-world/workload-b[Deployment]" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "0.0.0.0-255.255.255.255" [label="All Connections" color="gold2" fontcolor="darkgreen"] + "hello-world/workload-b[Deployment]" -> "entire-cluster" [label="All Connections" color="gold2" fontcolor="darkgreen" weight=0.5] + "pod with {app=app-x,role NotIn (monitoring,search,web)}_in_namespace with {app DoesNotExist,env Exists,foo=managed}" -> "hello-world/workload-a[Deployment]" [label="TCP 9090" color="gold2" fontcolor="darkgreen" weight=1] + "pod with {app=app-x,role=api}_in_namespace with {env=env-1,foo=managed}" -> "hello-world/workload-a[Deployment]" [label="TCP 8080,9090" color="gold2" fontcolor="darkgreen" weight=1] +} \ No newline at end of file diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.dot.png b/test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.dot.png new file mode 100644 index 0000000000000000000000000000000000000000..c629e9cb441e8bb81e2e990b40d1a9247e4eba4b GIT binary patch literal 52930 zcmcfoWmFtp8!d`9F(60?F2UX1-QC?Cf(LgW=6cT~*4-&Nkpr#NERI9ey)lk8^ zyEyc+>tYt$)uphxIfN3mmRam$tyNvPQy1#;f2Iv+y>nU%b$|Z+`Ot(FAAsZ#)MUbR z$GLa)yv5APIl5y)Hl!2Vni<7&nanwV*W}H&=lyptJv*H7ZFIn2lhmNg|BgU^K3d@X zcPJnyy!7e6qv+}AdZ_=7wpsFQ{`Wmjg#RCXZ91Q&_H~Fnzs++R70_nq2eYS*FU})L z11D%}E$rvpaafVipnm#@%MWD5GpF^Eo_D|RPNbD7fMKDip3kc9+}?_K1G|4E6=qC$ zAk2>15tL-GQp>U!%%rYQ(@ui=)YrHBilF5=Ef^}ay%S)HrIa_=?5g?yUb65|yJwH} zhnuQZO*^|EM{~baOO#Tv9h<}$(8Kj|PB@_QJSV#!Z{5$DM+A%R%3Jb;gQnPX?WyW1 zFg5C^8l9;fo2oI40R<$t#LYTR5>kqIt3``(NGF>x#{KUbXBYQB1Hjpoy*xH-4dVy5sWoel5D zcWG>-aj7|&-_Sz^F_~%5-Z!i;{TQL8jCdC({$rV~#WJcI#Yo;1`f6srkmX4u#?!+M zTs=M15|Ea<;_Q6d%+*v#PV4Bz^8W0qL=H3Zq;}vCJhKiyIDhtPXRWVPN=L zGKT-s4y=qyft@wuk*W-o*`%Z~U)XS73Fx#;+)p`$g7+f1r|icg zmaKoXTEP&$h~p#Ju43baBgg(;Kr8R9Ap4uiTdaXHP8a9kGFe?WEeEgR8STE+P&`a> zMI4ok?@luGi@fKvBz`Hc1ngA(_d~M5?2~2Oc*IgI(kwpQgCmEJY&J^RO&2Z8Rk?0w z&0$f;WOpaKht%UB$tDirPAY( zqUUqv8v~n$R@gqItFULVw*84gvk>o|t&)B>BTCLNE;6jQX1v4gplBhbqKt%hL|@3FIn zKVUB(^Rexkm|?VhLdKN^tZanCMfI5QU?54d8dgv>8xP9S0*k5n-OA-GstZd6%Eb1~ zRFdLgtkqc=%u?xLlQfM}hjCU~sul;~k-(~|%BiZ_=gR6sB|{eb0*#{oUd&iZyV12?!xT6@P;^xngJoxB>=*L9yVSEUB)Ge7JUV=*UC+=j z#O+FD48g|9uV?E|K6bk7hqXR0Z$=IW4nf^xW7roIa5=SIfVWX+p?v()Us%wdJ)Wd! z(K^6S4Oi|IZsXofymzu#i}SwMMhM9js!n~RlA3l%^Xj*|V#!R0eQq`4sm#8SiHtb}F10`G|3LOK!4I&6X~i71lrYEEk43sUaRX z*hY8#qx7l$YSY1?(+hgo-U%6Or})xU(UWuqvG{=qY~)+H=ZS4n64<06E#-fe^~W(} zv8)zU**7fMEv4#WNQ$WvrB!D!(SPAi zYWrU!|VoKPLS>p%5PqO3!I>0Dq~gEX1LDUzjTw> zb97fI2)~UOT;dyN#3i3t4)J#G)%AyP>PckD@FFHz zMQrss-em2Tl^s@>_ik&39o|0@;wEez648;QGr08L`h---8iApC2o_W^s{TL3F*aV1{ghL+vu z%DwxYF~9#N5?KDG_RNC32{}hZw-_0;s2TahZ@>8le zZmCiIiT^)ju~)gu4Qn{Ym(@+)=cLXbo}@rME+(4~*$k;|33EM=;|A49c%Ei(y9k3GlGeL6H?svJOp6nawVByO}tZ zp;4!WkBVD1Fp&IS5n5Q3zEa)`5i0>tb_HbGqB7b>n>4ZQ6#d#pZCP%rlau^aSB)Wj zePW6NNiH`CSN!lU;*WJVI+{!v7;ZQ1g1n=yLV+gIhO3Uc6Kf_tYdN_AVDhbTZ z>19J9sau?u(3fX3OtU#xZEv1x(nnBNM~R{4uJZJYE5b3=#HEh{+e*Ng{U0q3@6An5 zy~OBtj)gVr3AnZ)$z|P;)YmKGPqNfCXQPdF&PnX|FrYr8a_b|G*Nb8;*CME@{w^tY z!uY9~vRYX}bZS8HNmDFT@C29$QRUf8=Js0=Ru`8&2 z!5)53EEKh_^!i^8_a;yLWd(BC)N+z@%`ochdUf9~iN|@w)GZU4xlJM?pw|r!bFa^g zXIPz(qDk$(a5-4k_(l}%LBAG|xatc6Avq<&u$R))oi>d&e4|C+df@5!j+5_uS~FFwf)P&nubK*y)QL+yK@oa3C2Xtt0L{e5iU(|<)J z%w>HcMeG@{c_!IlIUShL)o&lb@rWm8r-dAxX%_ugHDh zSh?Bmr)ZsPtE>o8R)5O7EM%DvZs(9<%d`#J7xEv=<*cgv-=@xRAji=ZAme^NYzU?H z9ZnI?i48EHx$TO>Su3SDByi)k^gM>ncjyOBaJ(R<U6^23}qMb3AU5Ul3H&8kOtF6|cnRFp9DKb?b(1JW6aq*k{} zieX{<2tox1iSleX$27IDZw%k%l9B=w-ag0`FyXcQQq-nJHY+tkv|2YGT4Qd`9U7i$ z9cI1Qnxa+qqW{z_Smdt+4Cr_iYb(Pw(xE!D&MI(NYGik;HqS(6GoUn0CExZ^bv7Wt z2&s?2)2ka@f|Bim9 z|E~T2+t*U*mZ3o5o}*{veCzJI-y*NtAG~_cqPU5;eS1mF`je+qJi-GGZ%Fw0cdD$} zsCt_kh2cI2Qy_Y?V}kpTS&2f}i9nqJ11q-3h$un}ogmmi7{bvb(qEkhc4StlTiHlB zm=nnyW8>r=-Z||;hJ@KHmwn&!+}#7fq2Jpw3-rE%1R@2NK5dDSKsHpD3~swuZ2PSS zx@07a=tIT_+^X|t{EE|qZthSdiHeuv`*6aMg!}||FVZnWMnp|GGe)>372-mY$M&2l zsjwePr6@n0)DjjJ4t|o|1S-iRybB{Vq=6z z4-2>8UQ8Kdk^@9P$WDWLI>zx(jf`#=$ty*#Ea%>tj z2pnkDLx&OBGb@@2tSUT{suP)Mh@wHaWIz)7uBf=}k*5^#RcIE2Mm1ObL5rr>0P~@E z`fJHeD^z^EzqHq{IIS{~q)kIiM=NTq(F2n3e74Ys%X4?$oU?n;`c$JIX^0nY8VnrQ z30Y{A@1S;XkcEOts$O2eKQ;C7w~|T{(&CCIgQjk}N|uKHm@zY^#GiCK4i2hqX%g{k zD&7!r;jW*~nB{u#Qd0bRl5+9kn?15HB%C}tfV4mX&VJ>V+|%_9(X4?vNVtAErKjuR zai|l7gK2;W?bx!|336;nSsqK5+jSYBXK~`PtW(O3p=b(yvz(TO#EplRa;}_N@ZoKe z5-Yr_@USX*Tu3p!E`pkXy+xf`Fs<&a6#*tmaag#Na8!1;GNpCGNR0nHbuO|B(TIaI zoU&E`h5nU|e-tMYB>@SHLbT6fi^;@RkY{V>*XOOGN|{w7DrU1_zP^ zni^kAJF?t)dbbSeFn|#b^zh*AI#vII%JjbI&QO03oV;n1R_!qrINFEhdtarK_wsO;7JvzsKVac|22QiavK|} zBbXr>Nvv8hQ|!|5Yktz3D?2oGZ5eud%QO{qdS0NUUTJrVg&Z&Qj8RkN@G!HyIdhp> z4v8BC0yrBw+y*%pI$WIwcvi}W&8SM`?-l4Lk`T<%QQYH$hJMz{bdQHe@+w`)6!VLq z3r7we^W>A4mW~YEXCg`w!)ygb!N21aM6hClP=M3UO34<0!<;z9kyxb6Qo#cn#&YCv zAA*<1bm->R`QyKEXFM_61LmS_s2B6NxnpkOZN4a+q@d7T`3Ifdn2e4w9gCb@8ZMVc zCX*&sC^t4^1hvhTXM^(j>XA5tSBGxbAqIRL=Ig>igbV#Cc?9i%!!3;XGk-RT7;#6B z05GHoQYxwsv$&tilxO|kh2*iG@Vp{_f(_bPkjC8jF_U2q8O1{X z47jPp7Ij0K8&3@Ny5d_XPWZh`O%kU;&#sJyFL18~2Ll0Nlzr$G)u2p8)!he&>5CcX z>7gMWw6a=8V&SzbZ~^z+(r!3U274awTOW>nM1VU2e+B^fPrSg1NxLJ0tZJ) zm{-eEHz`D@nPBl{6=Mhg*ab2z-@^lY23-2NbQ*TLVA5hb;PO&}NL`C6K2fY$MFl25 zU%1Q|LLPd5w0$ zpcLy+;xLHo(Wao4YEnJm#n*p_5+scG)Y;tJebzDl4Y8@l5nR^ZMIe(RME!P6c8(CZ zC?wBuXQz8K#qA@U3<<>x6CG0YiHli7jpH8RWm((05D$Hn-rPUXmbdAKZ90Atv& z0eQEn(Y6K_4b5qdXUFOqf2|!9eFa{W88rjKj*3bNHwofpavu1(x+lARvHWQ$Bjb3X zN}_1fL6m<~n39%e+qZkB$Y~fA@Z3U~uc2WHbTH2;B^Ha!> zm9@WrGb7;tOvC2qcZXxuw(2Ca%ilr9;n2{4w@*BtALLKEMMTHUw3LZwW=ODqy7QFQ zD4!n3FE8)>m21is=5rL|^5Up94qBPcUCGWTB^6Rl(9op?zw~O>oFk%PMn%_0WC#eH z9vQE$I>^hDkm8JvEiBf=T+FaYkRPj+Gq0x~D3k%H2$({+zQe3p2F%ypa z0#XRe^O`P*$veAetWcNSAo7(XcjN+6;@`}K6Bo$7;!g9FJNr4M>Se>iu^h!)v#J#q z1=~{Y)A0)D!B*6cJb!|g_D*7=MDg6>&^n0-@C%2QRn1zy&o@G_9%0_L;1CXQwLqBIXYk`Y4xQl;m z1a7W0ISt3d(|;6@imoT6o>HM)qkWV}%EZg3baA@MyL4D>bw3o7in+y8E{yFxi+u;e zbd14pCwDccm*cj1Aqeg1YHrSZe(Y%-S*$rsa|42p-5Q7LC^Qs2wNzFtTONGx(R#!VnOB;Y>!~ip07{BQ3>unH zt5PK7xwIzktn-Qf`r+u;u9=Ty209w-f0t}NL1Ml*?&ZuPZzJZ}2m|x(xkbt>PGVql zbs0AQD}omVsNnHoW;}YLNcp3WZd0iYxNO$@wx+g}=JKbt1tl%5sPq?5G6-aB1Fuenr7wBL_H+ zrDZH4UOXaxVrp9cu9@EZ&%nu*rpj3WXVZOUDwqCLdE7GwD-Y8ph1CV_G>LRYb~(fGeia5 zTo3Z{9*!86HmE=B=T2n3^m1{@IXv&&gNTKT7#s^29LXTv81c5FJF%&0 zJ6i+pL>Tucb`V@MEu|doRt=qMl1tZ(!0&f(Sj>Xc^#%&IR$(h2_Qp=-vl7SCu`CBD zV1zWW_-T=nXeKLkhUDSC14B`DUb8cL2kHbXhM6W~z^C)#xVH!Zse5r~2?*D}6EDvW z;z5_g9F|Ozp`Q&Ot_Qa$SXrMY;~UGe1>SRevOS%)Y^=8Qc-~0`Ay)l@%9#$i+6@WA zNV97c)TtKHX~mSpmNA<#o7VN9Y`Rv;hjZl0FDN+g@>fz;-j85^!eNX4k-WPX7KU+@ zNIzeuk==4B#e)lN!FoE)*3`lsn|zU^cENKpij|ouno2o8vtQn>1*lOjiw;Qss;YoI zdPMM`Xzu-)qD^4y4y>4YEd*a`kkc+q`Hk&4wY65Ehx49^ zk_s_ADZ+rn_+Y>ho*+UtWsL^EG_zyoGPXa2iTIbsu*PLc!%v?KK^_S2t@2TK7)UM~8hnbtOSUqM~w|*Dcg*|b?f=N^6U2| zn5-#o%97LazQrpSxBR!sXYG#xaP%xIUNwd%ON|KKP_?G4HgG{b&|iMv9mm|BBH(in zG}I#t1r$?VY=+&GsHdUR2*d(Fov|M}+64+_ei&Cw93t-L_G@IvmXIz2Ivucfy^L!g zT60M`vf0?M-r$gti|4s7Ek@`6KYtoNf$|pQc7-TdavU?Z0C@1?y%66B)!Ae zLSG}FjtiXi!S$-1xm6o(Z?4z74tD;_;0xT7_0C`wYN14eEb4 zL(=V6n_CMrt6$b%(YP``4n%3cJg+;e>rr}N#{l4u&g^V?G1a(w2loA#-L`UJHLl&a zsR4Y?v&J4)@8(x?{^>Fe!_}IB+k?Vg{U@OYqdvFMMFm(niN&%Hxwk>qi7Gi@?W*pl z1>^cS^0F4!qw>b?*MI)y2h(jwbCP3Yn!(Wh+3>42#)#tkb@M{L56b&x4Zu`sG&#HF z!Sd=iLNgk5?~>M&2Kk=ndDk0CwecZkWQT@^#>mO6v;>kJP;dqtU&{p&Jfd0|@&9o;H&)l!A4ZsCiUj9KBMRIr?nx>@p zw|ZeNhF{O?pJ}$tU9LFR=83GXR=d}9R59LfhE=uoBM2hx{YBgR%evyjO&9?2ntFMD z%baJeTP=5bcHV6quH~n8FJgcPyrf!HXQB>e`5b!gXaAck+dN*}MZkf#nwR@IZ-GLik4-}gzL!GdKfmLE4_hCl`#NbG;8z@^ zFMCGx>46;D2NNqK=KU55fuht#hV$WjK;!tA9(+i zQ6=50>S?Tn>OQ&PhHS!Sb@`|aBmh)QIS@Gk0Z1cpOvc}Bf5oWN@)Ed{Rc=3fae7Nl zvcf7_d@-KfiM6)V=H^Dvm<%L&Z*MN)kyrtOTF1h>_D3BIT@&(NO|3)7W5<`aM_Z}s zN)%+bgZuzTU}wT!zJBI;Zx}SRoytyMX$lvY7vDW-5B@-&7oMOiIb0Si75k39eLt0Z z-jE66bIXhlL&6;E;{FarwHaHodQIdomvT3$PO{4YrI$oa}VYefMhFZV!53*HF}eqH5oGOm$%J5jp(C$UB{fv zPy*Qmd#z@`yASPIIuS5ZW`GbDoXF|^4}I^t*NcIOyLJ5^=YI^xu!&5b41?_7B@lcc z%#NUj`K@h7%i*;EIQ$EF=DvQrj;+;*i%fLxl)?(MKY*V)kEI{@UP|^fJJ&}d9%b_O zJ0E=)>{=M7Uj84txn{&&X%XkI^go0%ojrU6ZKZh@=%-Bqk^@n1yAB}aIbteSia(s`Ee?SZ!Z=th{YU<+h3t=74MpX^w~7ish@%%#j3O zs#V;sdY-|2j)oOT=A3pL=lzK9^WFQ5*Zx#zyrJWyxD27~M(vXsZ9{Ei60I?wyr6O% zBs<7qW6@5<5ByHv*rI$585f?FUd!zLTBpf>^AQdErq` z*f;dBvk-EVEITLHcLPv9>+5nbcANml*D5R8*rbWoudBYd-WbD3_8-WagN@O2bjWja z(+X#Yfzd$tYi168c0^ab(3WO^|0;6WKrt6AjKI$RWm$s2mca{ZCle13`9D=x+pTo4 zjIq$Y_D2j;?NBqX%%E~7SH}X_?(ekJcxP}`_UuUaBLM#xh6lQw)}kQ0(s|MJCj&8S znGBAI-S#qW0b>LpoEnF?z^=^!utXSk5;Xc!OHx$Yccl=&nP5Rrb2*1pulGd&-($v$ z(Vc$BE!;3B?{bGv+kLwBCm z;S2j$Z=+ZvSKCa+P*i4PaAV0$n0e-tG*sOmeLKk-8{eikf4o?3Ih{eF>_zHH$iXO7Zuswlj^jIZ?a2~6=AVp2D`qxK8f)RXg#VFfa3 z8#dn+hQCL+ikD#=vFa$ouf;IV> zTyp;PM%~zT(wP*=;y5YFK|lePl_mv6YXXvZ7*%b^Ck%&8SI~%%J&|Q~PkgnY;le+9 zEUvn%l`-Oy)r}IUHrG|tE7s%zS<#~C0OO*?!7Czy(~~J)t?Tv0u4Qunc`}OS_ap$< zve{hmUIY;H>mMF}bB{mxCB=|(^Hb`_hXjLoMon0q$Rw4i6z0e$ul3&u*gfChz_SR` zrCrZUNpbtCnOW9Da6ifk^A;F7)jcCGJ)n>8v{W(doS9q?IWR2^(%4!FfOG||6h<&a`&Mbak;b1YBkGt(q`IJPwlT&5Qon>yeNP#;JS$G$Bsv!{3`%M+f;#I5T| zqGN>Q$nO4(;C5{)99W+Cx87)PQqhJr|8AV$4&%d4q!Z2K{#5--N%?Sg5(W7C84mbE z+(BC2kQ!`1>qA0kzp&&EC*RjMOD%LbM`9QI2lZ<$1v`uj-j_^1;ZO+V}~1U;A;AAKVx z96CjkA$7&WuKOL~wOtWU;(}WL{95U7HzmrCDcc@6JzH|m2^Ho(ff|p)PCy`YLKME_ zRw0U4ei4`S@vNE&gFC@g3S~aDd>|pLYgmSbJz2~64gw@%+Y7{a@OimX3{1u|c4O#2 z$@wkyBS+0IMF&<p%tTr)YQd)7h>S;G4A3b2ZzI|ud z{(UN2I9CHvNQsgzb_FL+=WUvpygW7%Eg8V5FZ`aC4jqGDZu(oV`&IW@Yg|D{6sL;c zH>xg?9&t2oEIn9~J?Y}}(^cR}V=?lbgS?dFT4e>v#fo=BkI5zf4Jurac#?c1jv|J` zy(qzs)Pbo z`FKAW2kj`cF4kSlm3rDCHs-^+uCtMg@sN7EON>kiYJ3ulgpG|o{$4P5xfWBODAQ#1 zm7P%W9^P^Q%|I5WBuZ1E`M(kUdYp)^hP5e7na9KXO4nsSyLJn5l1Af!!S}LXRQ!fY zp;i2d!5>)7xHc31(3sIBsXV2OPsYE+wEa@Q$>QCFu#128Ypk^2a)VWenw62lJl0c& zgOsr?o5n4rJn2UO;ZO2^vXKDTT`wFTd~@c@A-2?da})_W+pPY>S1Y`{UZ1^OhQsRb zYx)lLggaV!R+tAAaUm=KsV6_d@3J$Y-(vzGTfmRTfBBOhe07tXo=~jbQcadCCSRMK zJOA`geTV+EhatpAjr(wxV2L}~1KQv)f=@#;^G?+<~E$92W8{=9cW7L+9{i{J+XVS$D8yBE^sB&)@@xTEK z42&MJ5&0%J9>qOXw>T2=79D^B1Ee#@xzY*!mmJ>8TMIQN{s!LjF*~lyE8*A24q_Nq z@3)F!VgddzU_vS~#$`E1!aO|+cd~L&sll`UQh#gkzlh4HXY9v>!{^@BYnqZPvO3jy zWgZ`FYa>Rm`}Pmox3MS$gQ7~lahR9)X(^U>4G#W3-)ZMKx&uu;7kz_Ssr@pERrF(S zy!aD#6Hq>j4j3G*Jc~5 z*UilJ%d^IRlth)uiTiD`JA!-$s`9np3QrBwbtYByTv?DLZE|4gR;HJZoeuZF=1a*} zyG6gj=Z7eqz4sFFq5B@ygop3?rZLuAQofIN!u}5kIoL7cfrXq^U z0osbg5Rau&6={M?3{woi_iN?9|CRfv)3DCttV16U6VnCt5j@R?4v$!>XET4~EzdVZ zLOGi}ZL$!Ho?yUaCAn-;@?pS|lw@g`Q%fnZ2he_t96Ru&2^Ux!H2YS2b7W=<+%+<1 zOJE5T)%7IJ3=S5mIxBq8R;mL(zI!;TU@z6o?b!IlWwQjM?YK+zA{{SURN8+*lrK7s z$02J)*~5$rFe`nR>#I_i8hh~9rLIfodkHc)fR?;rKfH6&3#Vgz8^yrgukgSXyls)F1t5~9;JFbjE1JYzL~?iAb>OZw&@cbWlLiKDe{1dhR}AK>lr$|+ zmBu;SznIYQ983@b+ZL{C?+N$CFoMge4nU7>b6wd;{gs|cicijbzgLaTecKHxxp-x^&g5M&Epl2}DDyGsA~1G?@aN`dfpg|`Nw?8UM}&YeZyW@cOJddS2 zO?x?0XuA#&cI%1x*%W*qj#WmJpI(P5=YbflH#g5$d)$SxSEZW7xcs(He_cz@I_!@2 z2On=LoYi$=`jn~dU%Za=UsF50xsMJH_3KByXH|j1SL48lnm`aF#h|UEJNk{P$gk^P zBJC-4g_FJq<vI-|onB(D-%4V?SSRqhq zGaYdnNeoHSA)?chxw;hN3>*CcE$)sb2+OVo&|4_N?l!7mFk?s+pSOE=Vd%lwt`6(a^~kbgbv){>vd-sm zePxMFPp^)vFB)21ooe?6+{8U$=-7oQR7f`Bzg{8^L|sILi4XYv2P0}QV8h3c})PmZGxaDR4G+g)dz5vb7*`C@u*?(sNXN=(61=+(F*&mBDODHRrPA%vV1aS7h-78&y|6{nYdC@ zk@!iG-!@K)z+?SKsLu%O!C~kJbnR}}4KvlE;9@4;^PdO5pt~RMf?m#pCL(cvnP+CB zhn-$!%>%;(x}FsD<1XQ#xX6`7tfeaA>wcV#hBYI+s7ALcz(nxAj}4oB80Oq8m`T-H z^`c)bE#X;NO>Pbc?-V4s?ETamE~|{Q=k;);w#~+ntt%_(9L^1HV67=McP$Hy%_gU1{#+s%>U~Zp}ZXF=M#&A z7fV}Cxq#Ld02A2ncTw!sv2IJofdUA#G7zOee0HRtWG3s=jpr zK*j&zi;;*fr{4ho^;6IsTGqiVZzP(!&uPX+csC1P99@<~7D^rm!x!1@=vjArxlZCO=ou5dq|A>OYj?{+}Swd`_8`EK^&(-08RT)ow5f zbXzpt+L`rWXb5xBP z7y>vEAeMqEsfrqaTh$g*#m*!o6+Ry+}pe; zEURFc%_aaGv0ACa&7MTHq#WIRtecu$Nr)C5;7*CHMNvrtGx81B^#nvb_>-j_-vRmokoRi&6QYEpgGU+_`yK0!s)&eKxA=wDBd={Q7=9thG01KeRO)Zr<3)=@ko9r9==d6>?Z;Z@#p#Cu7i?dRv;e6VaP$;+&m&fRoM#|}-QAWm-KhOOyXP4o&wpMR$EE;QK^)b2@ z82}d5w*WMv7_<5@C0RsKr`ZYYv(1jgcmI=L2G8q8)dyHnLjUI009@&Q6#%*FOU2GE zAWJiRpNHkhu?>Wnl^G;x*NjLKKn*ci;Tu-T^t`GXt+7(A1b@q(*UAc$a%gxPDTU%)fz+|H6nFdH7YGm>8697kH zSjzrD$#99~?SljW=o2y}Jxw!Bk;8D0O*fX|b5{Z;B1KJ_Ts}HnZVbTslcO{8fQd~b zpgjeoy<}$bbl$XeNS>M%n?E$>*SU52EUrHNcmj5I>48X~-~9$G0~`zh1IezR`|)@J zfXV>yB_xZ0_aX2&wbddGz^y2NDb?6MhgkzaKP|10KRpP^bK&I$z)hg)f(wJ3U74fy zT4A-y0Kgx>K^RO!xiXZixeY6gA21L>1XVypx<)RZ@Q}v28vzl;?JBpLv3N3irXDpw zuO+&auJ2Xl1Bj zSK;L|9Kb`OdjkDT6!_Vs^Ca)Wl`>uA74b3}Ml<`&*iFxQF(RW}IJIeH*!50JhX$;L zLZPpSF8fKyG+#lp2uQ8@a95BVxjBnbterm7hqnHw)j(k6b*?Kosf6ag$ zcb=G?LG_o9kq@{pFo~x|H7ZwQ6YAo|Vegr5; z?(Vgf(Yt%OlVqKZ08MK1hN&T~NoRD+P>4(U2$@u{KL->dd%%6wQUN-K!B}h-$D!v5ZnN{F97PGvswWj z!Kn(sE~7=ixxqG^E4`vy|A)?NBHVrVOEPw475C;;;o$xPs8bH+d+uL^cXuY=I8!v2 zz)v;3$;YKiL7l5yFaZ$Kbi$zz$&hzl#Mca*ZfTT}Yff#ODx!d}UR?zceD@X_!hqd9 zfY?%-BLv|0{Jwm?Xt`xoGKFqUjZAq2ugAB7q5AE}R)f&d^cju1m2DiwvI zqI(F+3If+2mNkle;c^2d+CIpVwCJ^oztX#T@Q~rF-<9zYSj1@&@e%T&`=u2|&u$1fJH{EEdi2-SqzBM{A@pFE@ z%Iw#uk#3TJTALgcQ7sjg%|~NlS5SP*hYbeDCJBPhRy{Tb0U^TOAJGcI2=EM9QTG5B zMHw+LC&-=)*0^Uh+}z1ez=ll-2GCZH#MLEua!}p|me5O(=!8d>%#sa7F+9DM3jb4$ zVE38mz7xQAVH4LX{~{NvAO!~}Uav*qD3m?;(XBsz8{oHIxu}gEnLZs%2oN}+sm0!p zoW_3{-65*}w)o3maPxv9&d8P>E(oB+KKURcGB>0l#m=-3pQ&pD#Lqv0fq<3NsMiMq z4yHr&U1Z!`+)6AIVjt-oTJ5RZGp1FH^Iu6H86m-ct?>oTmreB1Zxaju-95#w2Q`El(a3gP(x53YlZmfR~0e&WzC$vZq?Y&`FMX z6@X<|q#QWzC8mIEO?s5c^idWIYEx+GlNPv7hz8xq*RHnP5O95^maZD}l&s*pJ7&pH zK2H}87{ZuRyYqsel_?<@fSVa-+AY7BF#TY_aQHEkl4kdxs>TjWDt3g(jmbyVSYA;< zDAk5827sXKu*Q?A*F}fQ8Ch&brR{dqb<%0T6ZBu zB!asxjj+4UZZG~oGiA!4yqT7U)NQAlk6J_I5M#tZ8&!L}bCi|!OOZ-N{mbg^&NAJh z$FDc;UhxY0?mXNlJM1VL1`uZ3pjAp7CeswS_aw5GcQ-=zK5NR`;OET^pr2R=_%*iq z&p$CJ0|P}+i^lr-w$SC!CcUT$i(}m@c@*{W!<&7uRY%gzE4M>x6m0L@UGrz+M>K{z z{Ub_(h8Mb~Joh&-Iz0M3C6OJu60|r7ePpTl`7h0DV*K8!#%Q`Ez;{*rdM0;yMLbsH z?xCZCsw(|Xpg6i-uwdV*>h5`J>ej1L5=T*8(Vvx3`4UQXj76mZVJ`RyIhSb&-0R;f z&69k|z(Od4CfwTzQf@d=#5t;^np-FcRJ;rRevI||jic*+AZg)KGNDB1RVm<N?xOBJa&82~-vhh#o|f6w)B*ycZSAcZ(`QWkIe4f8OV5)s)g< z?E5!?Cb`44WdMh&rH4l;>K=#g%vC%+>Gw_#MjX3UqfBL%ddL|DWQ=HmBg5hMha||& zQ_3aq;dQft53~K>ILWJ&a^LeqHx6vqBLj$F{$g7sw@A;;Agj=n7Ov&8M1NYpnaV#K zs&hMVz!8c-_xj_!_FkKD*{ZCw=zDV8L;h+Kw_EparAB!eP_(wj!u&<_4^_8AOdyCm#D`mUA+AV zQ@z>WPn^D}*FCRX)SylcL10~V3c)UI^$d@l_ChJW&Vfxw7P*~Fr28x;NPy1h*IL9W z@d(A&QaD8HkyF7qJJ28lu$un)~w0Uk#52=QX@Z7V_nMd)T+U&0+#x1>q%JS8 zJS#dI?3!MTgnQ#7Cm-L`uQE?~`TxCz_L$3w8n3DRP_XL>z~YX7RUq1Ao92$@LG|wWdOM2bnp`4E;>iL?Y#3M(4e&C7 z)efo&8;ROXSYLW$_ZkBEeWSUqoYE@tz3Z)m-bY8j5d_do;r9eV(JkHY&+fVL;W%A` z-Qi?R@30G2#J&%YeE@-2Dt}}Z-u#U=POBPiFCzNCT!8DdD>I&7^P=wr5P{?g+WNW8 zdwk|Y zcWtle`!8tOpNtP&W%Ji_n>VeYKZ3Txw>kfDy0?5g{F`<||C>^O%!LC4>H*evfVPm~ zvTp8pQ1;zZEB_cCHpuMoqr)e>jj#Vb8Kecr+x$h*ylq(ND$CE%qy9a>FvSCw!e9<0 zvmhNmy87OsIDp3)cBpqlZ~P9J-!5}V`u6>*)=T!X)vnlUP{jw|rxP924+lg7!%LOH z`HGtUUT*bkUiSSfyDA?=>Yh0_8EBAG@R53L&e<<}%ApI+Xl)a)0x0_3+ck!Rf{(tB z+<1vz1J{AnvS_b=Mml(w384h!3}UA}56}Ge>anF?`Rw}XVOh=IR53$f^ZqC7@4)nm zNA6cjo=W*7-~6IYA8$k5df|6Jtv}zq_AOr`bmz6EzD_K+$DjNFfyCYct}7#Bc!%dZ zzeTurWVD8?ym*J8+%5%9KKTP8$W1=JbLH7S^XOK1dffrEzQzRy+QIc~g0=A7EZGz9H9{^&7YI z74$BKRh0*C;UO-n0KGj0kHrm@3$ZQ;(5;T?BDDD)`W(Igi(i0sqbHBFTY6&-i_?^or& z65$m1^r&1Y3+g8VA{khJIH_=x_ZFW>(zMh=qLr?}MFe#wzoodiuW=9l-W@lty!|8% zhD!~yJ9n_Z58f;*7AZ-0R@CCZ_cEg4Q0U%Y0gg^O2?lyX$ZwixO+JRb<=Z=3BM9<< zS8g{dzJ~@(qwu5{nAinbl&$RxWPTsarhKRAu!>VwfEzJq`V{A?0$f5xHsu zxZGB8RW{6ysw%NJ!=a+(uC8Eyj<+KcsoHckku|AQ@ov@U`(wds8VsSUp0oLCPP1a< z$7sWi7u^SZUG`&x1Mc?0e;bw06SvKx&JDUQX%7aI97Q0zpRp^qJGI@__k8fIXSGp| znwnnEeOYoTFWb07*hb6=&)L1^I?60xzMqfq>TNDO!uDDJlj*!V?JQR@ec(K2SH9;T z;YRZ_Job5Q`fhn0We|6}uT7ZSkSvP6Ut=pRVjFSFsX2sk4%n>-Vy|1Pm}TrsU@dA` za@0bReF01dN=J3FcEr^*^NnhZ(#Ln`VBTd`$YQNdo|Y<{FY>av_Z9|ztx9>p)1ks6 z9-z>mj6ICqR1se~suj);bzGwKW(>G8^)LOci{Tzzi}RdqyLaCn?0+|yTzMCKbZ#^N zRnoD?uF2DG1Wo3O#0PgmY-(a$v@!81nJ2({{p3Ap@T*^YWx2tNkJX8-Sn}gS!l^N} z(BG4Q|A(uu45*@u);^#}Dcva{C`flJNOyO)ba$t8cSs9JcXxNkp}V``z&H5bdw+aC z#6!&N*(;w_d%{%3FKYY1%nyshti0{52_67HuYB-{f(dsnQifRa+f%K09&f5DTD06x z1$hyl9cHIh{iBqTn)%^eZnv8Jqe40nR*IX;(@-v+3vY$FvAzkFe>)Yroe(e7`I_{S zRbils6-mc0vUwoHYs24f`e@4EPsYZ>AISB8tb7A#YrBj6Eaq&3SHj| zDjN4Ax9;R#0e6nG5aXMpI}=!vTq8BfCEaP{-5)mh8vaoa#fSQC7JSv3koe5fbM*1L z)K#Uv-Z9DhGctU{kIP#!x8E+stiVp;+qbG_tEdv#F@K4){iBFI)`dS%<0ri6-2)pw z&2X>V9mo(=4DGiT9_;Ux>&p5-?*dpIP_TfpW;CChTZgZo-U`3;VVwr?2)sR?pvuQL zRXe95tE!F;hlx`9{#XnN z!WMZpGCKzE3UW>lLCp2Y0M zgNE;CAWLNh#{bD|7fKlR)`R_Y9D=N1!$6lyS(nDfAaSx z@_kjEDu6Y74GpG5`_2X778<<{TgsLm^I)_qlP$~=%U-R+5UdtO7vU>OJ_ND0Z}|Y$ z_Tv{{U7?lX0`pLCSe_U5-hIvCxP%p$$F|&V*x0^HkPU@jDxHU=Hnzp_qy~Jl(#u-G zRn~a9w(ke9{Ep)@pZKA}?M26(8*0L+24_kIVD1nfIf-nE+r*eX@^!w)wpuIjktO7B z9?pi>#dHL9iy?}^lRQyQR7b`|hhxG3&q4n0IbamnW;E`jEM!v~E~2A073Z?>q=)7V zUJCTt5udwSZ8GUOEcja1$MA(XASI7=tsWc4Zf(wVFAqKU+CU(DRdZIBJ}Q;Bxz`7c z^J&1T`DNbFr&N1K(V{=|GVnJY@%Gy(d-p;sxpU?)rwLv_Ta-v&Im7yDO}^x0&!{*? zTF8dxx#~OXlpUUN18bA7o^KWW))-de{ljy6y~~+K=+t7J_>c}&a9nWed45teG}!*2KHLPdg5(Eps(e1f0dG_6x*pSBneappZ1u zwX^yuT*I>g)nl~F1DXFpEHT?+^=*G=Sh`(-eY)c}c^P>M)DB zfJ7-=;%YPlTx!UL0O}`rWr_Zmqm|85SMDu$&FZf#@h{yn?&23TO&|&miUyD4+jp*P zc=@FxsrO|H!()y=I6~_FOy98pWO4qtFwekcR@-64Z-^p;l~3W3R#zMtZpM)7vv(R6 zk@MJ8WkNuD!a?{$c4`%&)XC!YdFj63lyTzdsN+XallMg(!Xz4p_gAI{=CLGg;#D0 z%4q-ysr(9r5P-FX(XYwdY3ptdtpq^Gx06@Y9L4d~eRTEG{`anFr*B~4Dr5YM3cUh= zcD%ppWND2RatTDth37f#jyU_u2-K26|Ies4W4P#>j#jT*Cq9y(hkqc%1Vz%h2_!*E zGMBoNV1?G9Q|O{)3^A|m0$>&F>y8ZI5#NnjTsu8$TzC}$Vy1ClZlaoUoCKN-9pKe| zl!oS!#t*R?NWI1{q8@bo0RnBl0nm>3QH;PSVQWOtr?H@i&UgTK+1~?W?`YrD{COT* zD6J9&T3o6!7$ok0{#!}f-y9YMq91^N=xp@8f4nqq>+RfK>MOM-R!6n99CK6v>4%6u zm-a39Dai;Z0^w?O6+mkQCxB13BJ(YM09fq5Z%nG2SGal86<3Bv^-2lZ=r;x2G}^J; zkCO4o$%Cg|pY%cAsQ=Uz0b{Oer|&tmm=c~nR>HK= zeh&Ym1kNiZ(kNgTpO&TH{r|YsTi0L1%0<0RG+3wbKD~4;ocpMt*s-4wWlLDOOy{ebXZ@?e3g?5x_@xeP?&& zRGmnt{oF&^B@o?3UBG(BhC~n zqw{M4$1!XP>sC_EKc=<0`4JqjN~r1=Ie%jwkyQ5viR$^BXuE;E{#Jdh(kNG@pEckj zq9J2H0f8zJ>DFODIL3c;7!sEC)$J#NaG1Hg?Iq{_4dp>+1_TJgDd;%HcX&O+>ma=H zJ<=sLUL)seA3!?Xui{V7E8C)bFo%FeG?EE{#X7JdZkhHl7p(U(uI=&_r8M!%d)Y(7 zI-yQ_$pB*fr^%0?Z=A0H1ZVE8hiv$ z0&ND2vf9yAx*eKju_H)BoR^hay}?G;huvD?VMME7)5jiFN*a?vK0cS5)x zk?G)WUp{%=9J*9_3cxfI!h$}AzbcRf0q0@J(*hU~iy4q7?vhno4`!}$2uAF`O=3_y zdK~lFcs;>rJ{!Vd6V70-M7_og6uhrC5IsDpZu}LltiyY(hqp5E?ei%dpSq?EteE$) z+_<{A)mbh#{+ua_4rlb8n3Ckm)qqpEAao#BC)$J5HLJcDHJm9HrN;E=05?Q_vIJmZ zH#v^kg%Ph|(Vgk<$4m$z-=z}^o_L!XRZGx8NG0K7lFL~KY^KM}0&3*{+|nF&So_=y zh`4ffo?(6WJC6jRLG=4;uew+Hg{h6Wr_&h1GxpZiQ&MG~{yH`P;t@tbP;EDfAx@58 zM9d-CH4Zf_!*Y?tkXnah{>1d&b-o3xaE=TF#G4R@=(}YgSaup0K?CV*mX=myHs^>UXJlmL;^Kl*Hk__gYIHfXE3xXX%xfY$+&v{{ z_>&m+8yv}xZ>IPp{_pA2_<5a^T_**%dAw|rLsDNH+A1^-nKMwh{&Lwq-Px2Vx$RHp zjij=bsn(;799gM&k-*!oQ{DjBDVBk-5W$;mJvT%a3uc0 z#uM3sp;$C%Rxg%rQyDvUQ~1)q?=@0dOe3A6-wvEs4LdRL@vWYgE-h)aS-4wy0S^v3 zI5_a{$<8JP-QV9IAG-qmw;(Zb@c=;*3u-DVy)ey2`!95KWz-`GP)Jfsov#SFgHcnU>5WGTK(I&z zAQ>$!fXHw7Ewz79(h8Z>G+J;I_G%a|%&Ou1=2?x)rGc zXz5B2Pfp^G!Vn;9`gVtP!GT!CYO8^e^Imf`94CP~90z>gC1Ro{B|hS6HsYFmF!5*N zg*qA;o$EI*rqHXhp~_eR@(@M4PA=9n9)A!wG&rHI*&91z+=o9@Ln~h~Zxd~4r%K0~ zndws8{lfQ74QLZ3Sr48B3YsL#9Ru5biG>vDkwlLbU|F!cWy<-6MnQ$hQMrin0)B0s zJIjY}!`)0FS=3OaQ$fJdBdCP`1i<%Wv}twG*3`r%ud${4(0!2FXaUz13`9TU%$wuX7ys3St%zR{^Y39 zo!NC3xl=~b^wn6umoSXr8Hv4N9u*ZZDDVDB`_dO)3LaN;pPw7Jrqd8WtC-VT#`3|? zJ1AVV(4b)p2IW#_t(3mL++vD^3x=wmh+sel>SPyz4d)t*T~GOQns_?4HNg~1 zt@LGBhV!4A?E@FD=}MU$2PRzZqus;JK(q%=)xJ7@1NiDI{OVbvGAL!k!tfeIdG3oy zpZP475T`XKV8(imK%0B4;1|E=5-uo?7& zqO~+b12g$9KgXsn%f9;lz|QiKrDF4d^6Q)uld(Mb`X=yrL|al%%466c9TmQKzbXTT z{{iYjSqj*o3AC-sI7SxgB@emE9@TfILUuAsYT6h99di0)H;do) z>?GfFyY1)oC&gI}k45zF8Nj!zum6aD1uvBqtez#+@RtDMGi2X*Z(jN8BGV7Jb=1>Ey)yNbf$SyTyY^-_);zZnsbC5K3H8K^p0QJs#hkAi_NYHLuY%`DY zZjX7UTTbhmrb2)mFu7fy0dIpcc}vb1&Ps8=RpQdfWcA5v*omyklG<*CS-G@&*;)DT zH-V_UhYyJjceB;bVI7vuSAQToNZU#7uk7Yk+PZt)DfGXc1`8z>a2fHF{I7TdazQu@ z4;t1jfy77kCl_l~&NhFt{hQUXAZJqI5z26TtY{eo_7p%(q#?f2Jl`M%9;WHvGm$d# za?-pCtX?5ARge9)aA4K#f~9%otk;_3v`bxu#!ExZP9o_$T!bWXtHviyZ!^0{u-ap> z6deYzF|^iyH$g+om5l{NSMfG8wvdQb`;qRjX2ug=rF2)#Y&H~4J(ynGBZA|wL&N7} zYdA5HzAmp!|Md|l|GSz$7gaw;$P0z#LUV@|+Oo}!W=^|G>4iV8{fBYci}vHl^6)X7 zJDXkO-&K{;l6~;+S3;ovBZNOe>WN1L%#*)f!ogh0jMbIHH$6M`Hdf{5`7(o0SW4J- z8-(Nsc+)Kp3p-6fXdxgvM-aea5o#m|Z{of7@#@&u87um_Pquel9@w$jcqS((q4R)q@uw5Ok0hpsgW3g3eI25{`GV?JxelT3Y$GR=tU7q&mX2P_S| zRa|ZK*}8q>;9#1d;OJ&wdS66CnFgwo9o`2%{dau&f%ZERo)7l4Yq;nnv&GEV!#?1|HhUqvdi>)>tRT1KTcl4)rAJy?oMYxvNazj7?P>GzL(fa|G1zy!3=`e2 zU*w0dKpwvVd7M}nUI6f&;P)J;K9@?e1_H59pg%KFBEMxmQXzO7ZY6e zQN8Q@V&ojO^X2NwQQE+JiN7L2Sb8BmzX*d0Tk?@JLmUAVg7H)DfI5F-{S{%_z8L_dFZvbo&p{` z)D;|jr{++IiN)BG5gL(@pW9!(*zdHmZalix=!iyw%c+n(Ggz$#vgXuGq=j$D1jck4 zb>D!b9}+W03-Uz!A`2qwe{Vl=7++?Mn41;TdCYoLS^}Rften=Id(K;oZ%bF3h`ycp zE(sQfqA|mt)Ac>pe5Lj4`R(!@U5+FGHT8pX>Dqzf^z_;yi*%rpB5+*MSd9S)1A&}e zXHQ1@g5HI3V}o0?XFLms@vR>$EWtAy9L`&bqp4kVJ!U);W*pvTaeTx9Yk@cRoYONd zSceBPN`Zmzrl;F=&dhO9*9TSuk%je0(a;(6-k!ALi;4z^AGa6-ong6T0LbpPhSmJp zVLF5AboIGPg*`sR>+Jh}36HHkP%;w0AHZ zKz#qVz?WR|u@CFFe`K#P#YD>0Waa%*@TO<8vpeks?v8JrB*cDRGkG=}8<^tkvjNzw zzx{iQMQ&vIj?wNwYzA#jj^KP%WC2`(lWwqw48cjQ*J!Kl-1!1HzdxMBwLz+bLaCixBmxJKZ={=iw*}_FB0Wbp?=Y1Ba zrfD>^yQ`~yhr`^$!l$eK4Gq7}%gHSRQ`<_t9t6l1=f4WA*H z3}HF6nAr2J*!o+oF6Z%EsP3->#gl(SrE7#PjKN)fYNKVTqUT{y6>FoqVZd z-af(5J>~EkRdusFPJOxA0siG%@28jZ0)oZA>4Zk&9iC}1oRV-os9y$%&g!5Scp1CA zj)UMc9WW2MTafz}3(C?(OPJ1U?(+BMDStVMZn_QTupSw!Z{mrb0?B$eac>W!Jxcy|ORVY=)~--;>*% zntYWUKjgqu4gQP>_Vq$cY^LIP`Qm$6qBHyMk(3@&X1%`og7;WmDKA#xQO1nMOv3@8hUOV*?Rh9K2qF&&|IsF)VvXA=x?^!|67hHaqVT5N+=0BZve&c;dt) zG9&IU&o49e4-~?1r%oeHCWZZN<2u{qK-bq97^U?%FPD6G_hYE2J^<_fs)|SptECt( z+5pJn6@zMS?8{LDkb>uc)2Wi$sh_xLUeT+^>(&MyyQ>t za`XPaoVa+XN=qZ3Lm`YXqj{3SJiWAVTGu+K+w2r-orSvBaWEGkQv+9@T0LYs*#}~Z zVovfcE>APt?#FkEKPYpx(n_Uf(|o2Lui0x}Rs~h=8aT0C)Gp?ybhb9S6>5#6MuZbL z?cVbM>di{LxD*e6auPKX*cDV^MSOG8Gp9|)iWSKd7>*yE5pllx*ij+cnJP1Ew7>`& z-|<5S}lGs;F>&viYjwO__m%66=l5F9Q2#4ZC4PQ&xAib-CHr@Uq&}H9X&N z_A5AFQp3PtYq5qwIKl)EUmpQ6ht(p+*zm(y+DN7Zg`}k7UyZ`0R!xuXkj6&Nhf}Xa z)0&eIgiGLzDd{v55fS>IH3@UtP6X`j!$uWdA0}({!8?*^yG;~^&LOOV)bHtzuq;B9 zQnNoKl`60(Sv;BNSi1ql0Z|=L`wRN@fZDmlnAp`5ETGDBOoGN!N(Cv8r2d3|xq?E_ z-Fo6En40yCh;mC{QhEQSOMc~L<3`>(o40=3Caj+`PXe51 zEArU_e>`bo@9WoU%XyvYpVxk{_$Lj0)$R=d-sPo{Y%oiF=>6az8Gg})j7hD0vA+-T z!ZAQbbzLW2b)n2Jr?1Tuba=4uE-tgJsJP*S3;-u0X_Z(?NwM2;H4o~6}Rr%ED^=J|Nsc&rJ+lG1|HfvjAoU^6dO zX*>;`^C#3;U+|N}V$8O+oE|6cw32hn^zZq<9XoY_!OpTKJI!ENeebzYw#Ff-$?2mc$MDh{p{b4 za^1U8r?UY{YxeGlNFZr|r5HnC4Xu^8Lpa)Z>%mjz(|sGlzPmqFzCbPz1k5U3wmxf! z%*x-=tjRWHO>$i(ojxE{E0ay=Fc8r4HJ@rf`dhMPA)cIX^|c(o0rZ3S3&a3$bRd6d zBL0KDCbQc38th-In*8LzldB_JX|_3e+@u{T@3tLqWrE$bo9jGJAC_Pm#EogMBeF4i zeRpX4Ap<#lzq~kB%4z_gj&lH#veXJ z4dljBob#WDaoCZQ35O5@t(JCzX_sfZPKKYHwKyIBI-R@)(9JwaOzSvVL8L2>=cD@5 z^DTYq`7jgUhtJ0am_adD>T{*KeMrFDivARKIJNrKm`yCdB*xXE@^>PI$M0t@v9M%t zmpCM z?;SZdKhmR+(I0=!6x<}JZ9utn&N>}DJ``nqnj^c^$^{ z#{AbGvb>~@-*YB!G`L;^p=8XFE&Rf6cN78K=3pI9t_VQG)e z4+p_yP=s88nAFzW2wI-F#Y!aZ#_1}p1Te?LspXc0Cr8Ummlm!s3~!IdhKIW5E0TB~ zrCtbH&b!^xIzZt&H;AN5dsUWN$?wGz*7gg|*Ms^;di>#4+K9&Zq#?upQP02Li3T#P zKH~xy+M3rTf?eBvZT{}mua7}9_z_Q zEy|+%gRVOw-leR)Gh+yB<_2hz#D(4V!Xp%UlD_s3WnDyg#xvKU*;3JD$s<-E;LZ)& zy9Su_7dY|^x*e8y4aw}}rWgHG6$Yk%_$pE+uDnF)=^_y@&yjo)$6!=^@W2hTNDK;^ z<7W#*%3%ZBbdJq^xyK7}C2i!4#Qa?6Qn^$XakQ9S%V8aQ8qI^xpWza#CF8uC{>(5~ z@1acXyK`;aUD=Du$&H;%STvcpC0kj|_YR=z_j)W;g`>Z9c<9H`a)wG}(}%b|&3RqN zwg%8kf}u;N_siWmKu7a7!XB0+8MV0YRT?p1U`V2C;iWQ#l(0xitZz809ix; zn81Vh)0^^pTixnhwg(fg>>IyFyM^)^9JXN0+W9b>wb$|<%rtTcztSxbmK z)%}%y&tUu@GT-#{Okr_xJeSi2E^evauEZFxS^X|iSGlfG$!w#pUsZXOYRUK0{^LJ2 z%k$H=mMK~0VKoofw1;dur9|$eTT*{DLuu5@-Pn}MPNvdIiVz5P?-%MTX0lOwd&4up zii#i|dYw7iv6K?^tR@y*f2rO5JO-SoSif4UbU#>imcxP;qkyJb%j=~Y$C4M#&KyQ2 zS*?{?#TU)$IVt7tp7kDVSsCxHAgi+JeeN=8BMSeQpDS}vXGgS@1v&H3yf&w1v`?~c zSKX4eN z&v!Ny@s%{{u5{TE3QCOL_n!79HScvC95Mt~!D=Oxqm7*TGmIq(``2~E(B;{rN@|1t zbrDuo@$u$E2}%|Z#|%1EVHHQ_(jfk{Rx7cR1VdxD+TpQVt0`%>H?bOtAG*;mD(9zT~+$WnY z(;=5*%SKi6P_=qPW4Dr~cu*v&7vc`?*jz0`$2`YB+aNcjHmjTsb{Lp7CN;~;O}Fd( zzSw6ZgnWjpYXZW>eqt1tL<$K`D>eii8?`F#Y>rJ|Z}NG1trD2i6__)kSTmwrt60Rq zuIf(G#Mm@?$UM_->-LsI31CxDQ@kJi?o}df1t31I>&>gFuJG`FQE27r#y722gr^Oj zru)YuPbUY}3rkDwxIGy>C6gp11qUB%Ov=(N4ZpM=2K<<~rCo1JS=A5F7=6TZg#6mw zX7E;2TCwaq&9kIi{OJ4s0cKwupN%m-goUlH2@1&2N0kf2llOEC8_gBUk7kn^%SK<` z+2l`sr`;`(h#pNV1pMh;5K+u~Vp_+rB_ua+)w-Fc%gc?wk!hTY&>FX=zJaLKiqa2LV8FYNnV{nb+fRk$XAMuzS8a zs|^WZVYNj?ot##9&f0foA7t6^ovO@aK!p9GKYD{_&xH>h>`o{$Cf;(&>0R1Z8^5~r z0x|BpHu{mC!~_dMBKRhTFgV2XY3}xl;C^8Z4r^)2ytvA_j#K;ybrl49(WfNsT+6T&+$#T$?;f$=z_lT>HL|QH|1ybwL!re##K(zxdo*dO@ zvmNSjX9NiTfTPaJg*YwLx+A@Yfg@23y5Vf}4?}K>Jnl+vHIE)N(`)HWPAi~*DE74U z!gi=gu`}L0+QkL6ZZw|LSwvYYB&sJRHN7tq{BlM4xcdB#y`10;_r^m6f2Aj z4D9S?R9UT_a5_mH=~#s>R>F9D^dTA1gEG)Uv#aT*enQQ&T4B}ND=Q}3**4acQAFs! z^JD(>=>T%8n3u=D<48#o0Byv~iHK;C%9@WGoxh{E)}Jxvau>F~cxnz%nS}+FW*qgp+JoYwM%s6{Sge-a z9=Ey&3Kg3l{iBG;Z+aZa%VlWgHcCeJAU29huF444980b(#ucRz%SAZA>jbN|wwG5b zOGnFw^2G3aQq=fivZ||W3>BbT#XOGaymSfrc%SQYEdG$g z1F?&LH!kJA%GwvG=78m%B(!!#)h}^FY=*{&9FbOHQ;rj=YEk3|5mrS2+k9bvmcZ~NdCoEac%^&g5@p` zvlFXy53yhR+NAi4fh}=n#--@H>x-9ylI!51vGHoD{b{P|J>Z3p-~KJ!yNylUEiB$I zsGN*ldJqawpScfsG9F3*mB}e*)F&!|sa$T%ayNUtzdJsmtYQyZ73d9&88hOl*A&H$ zyjC{-38_TUJl)HJ?J_uFnl$T4rRo(#IW6$8QAr%ba+QOx3!GHx7OZxd+$5*>Xj&$o zLD(9m{$spdKxFoK+E=RC5xGsaJhR!u>RS8VFH4aDts+=4rrWZwxNM`Yt!IdCbFS^g z;GH!U&_V>y6;~U;X2jSqnr4HE%@s-H;C}z9xD0koTwV?+t?{zNXR?Shx>nCK#H`gk zJQ8ts+jE{Z+aIY&vqZn5`xxLCT$oq;n*oUZgTRp-EAHrHe8?G864$LL(f~&8;kgag zzR-%RJ{~98+5*Zc<||>w8T;;TuVq->Al}_B`~n3aYvJzNsJAUveG*>L^1@4ibP$Zl zb?i|1#nzU;t@ZQ1_-5bcFz(Y1n@ZKYRMzzwk zfo$z~E^9x0-W}V#o;$B=(|vY7T8)e*>p=nE0bALL+y^KB^2^3axrHoH>jvD4e$g7k9J1Dgf{#8Pe%)Ar!zRY zG^?~VWWr0zWe-k;l1bxp*j`albHxRbj$A+nk}^~0#dFUdhhs9fjpvCzJKI%1$o~q| zDHd?#N!H0|Z$g_Da(|%G*1xUS_nC2(mPOfy zp-S!3`T68)=Dv{U3PsqsFIT|B?qSbybNb8Ca;V26aNl6K;Upi`Dj;*4%!Ep~T+Bt8 zYe$Pcn$Z(Y_W5gfG+DjPn_s^&tZ*3_e=FRao&2ZYVqg*FnuB02$1ng3isji~7?AKq zk0f_pPuKk>8Lbm9DIYIs^F?mgjEKjh96HtN=3@?OoEE9Og6!*C&^(_b6L9)>@@urd z&*+Q$0#FyoYl|ONti0#vG^|*=G9};*%MrG@`ka!AiXU3dJe(5HN7S`7&{A*qzxzeY zg_=Q~s}&FbSD1*(&l4q*u#Mz7ruRCj)Y{7Znf$WmE9}TdGibbS{_1N+$2UAG*RszK=J5b zT1v?E8zrI5>H`*=LGV0-W9-yE6?M~cp5rz`uH3%I?Q%v_vt(il*s(|VZYhh-8iyCw zP9$F5py)l&M8Qk(;rA%pWa&7E2Q!Y0f`1HJT-@3)u7U#S8$WcuRL^vwh-imDJPy-4 z#^iaQm@^v)Cr~6@sLI$ZY9^q?*3;*KotZ8K-n@__9Ezf{*9;Vyb3*}6@Ql2c(w&>E z4mNtM_k-=`W*en49sjGNV_`7@Wt+k~SmHQ@OVZ)jx{ao3P{WASCWElNPtHDB9fY$F zIT~oNFs)|1-b_=N0gw6mr$_O4nE$-kvg(Atozw0*4wMLF(5Kgh?hU_uB4UduN<{$y zuG_x-N5vXATc4|YAneELtjiqC5ivtCl3uZo&*Pt!xMrKjS72C|xF@yU{7>zv< z&tOUl{~xl^eS6KuEy9OAPOsJ}+L{wv)lrVCOwJFm1T@;vYw=Tt6>7;8@^~Dr#u?D? zUhB3GCKYQNf*Q@vkIheqW$V`8NIUwYfrKLYCz3DlIl^w1_Q&c-XbI-53QF188#iM> zHP9ZO6(6VsoeUiGMfTO(h)DIWb?6B%3Dv*StveJ@mY^rj4O$J5K441nf#?`YrKE8> zg2)g{94HE1+0(MtvfT`&eTdk3vD-r=kc1h|OZ*&TaPZ2>B-6Z?|!b2@D4DF3?w-81(7SBsfTkmkVZX(p>33AAv`EK3zY z{ZRl?>C#w`_T1Q)=e16_g%8;8#ItvW`gnSai4LW;X+A{V5|ZTdWmSj!lN!;pOQ-*= zBRk0os&6{^c@4^>WhvMXcH36`>$_z{ubTP!PsqSGA;17PQ5KHxbMx@ASvsSI;j{go z%F61nn}}03|4SKQ_NZR?Lji*s?}s1>4r`a5PX{R0E>83Oe|rJou@F;I zb(uT$zKbJXx$a$?{6shduh%a__qoWecKGqAo&(z?lG63i)ARmPvRsQ0wC*jSy=Kna zzNDmU&sH`VRk&+2d3J)62khWA8!p73F|`lWzf={rxILGEudVL51eAn)8JP?MoE9mM z2Z})We|TkTRAF6F@f3zTX%$}Od00n4sT{FPCeKIfc(p8~DDe)D)8h!i59-5*I`kNC z)sQo=f$suAJ!&3WbhJz%3gL(3_Xq(6@A8G-LS?_>Qe9BOmr#j?{;@yKCQO?-1@Z@@s0so%_du?IT)ldF@?rY) zQB?)@ zc6%iQ&o*o%jU2!5J_q$*+fqgQPZ<3SA77~0&psnq?3fs6Mblg8@B%-1As4Fw@nVMF zU!?pohQx7padCeI!@c~NNF^;&2oAY8<+vK+7F>6n=1@lhnrD$9T07=({Tug53(Zsl zSjF-EXx+aGANK&oeZ`;Ap8YbM!xm*QeNdBo3|{d)p6W-zC+`&*_UHDl7?yyxL|a_x zUI}(8$B!Ok$BgMV%*57sNbG7zejEXa_AU;AUyU4ty_$XieJLXI>pe)`Kx=Arq%GL2 z180rVGd53Rk+$s+x5BUSOMoJ#E;&u(ASYZyP)bFpcC+^@O~EO{XA3`@=LNVpePAt(k%%*`eED*+_-+@MVYz3 z_EnL3L^<=)v!lCs$2JD8g6xxj6v}HyP7ryB?D109a6BDI0`(=fHB9)eLXUqGZ`aXU zr`yRs?+&5hJ{Mt{WL*uh1T1h6T1(J>JM4l&g5z!oXt4c6iBILe&xIm`iO%ne9ZwFA zMfnS(bRzuiQUv~J0vVErPtA=oK!5-JHG>pN!xTymumpzwMJI1~sfWnzC|Jz?Xl z*(YyxJPumY^AGpG1vh}VQoj<%>URt|4?ijX0paE`Vzt=M=WD+|A8S zbxb%(_(ws#ZiG*iw6{~^eJ>QP=+=+AoWMv=lePC@N1VXo{e*hVB9(L2lY8H$I$8v$ zIsmuw5pXLnW%n?xCyM179I z5KyKHEX4?f9|!0f#c3U2{pIa0a`tbU|1t{7IG33+ELGaG`eoXE= z<6b{Yme&B;VC=N4oYW3SL6c(dg_ahT5NR{8nl~!C(;fEb=XK4WuehRKp`t+Q+SNfS z(wlTpRaFH!p03b1ek2!p*qHBM$H%at?nd&r?>FXT7ak(naa7u8zLnJa{z~#rm^=%E zb_T7qL&w>|n9%QvZ(V%=DgO^00`?0d&thH5OAVLh02q#6#pXhpR2(+cs59!w%}r@Q z=2)&R?zFcC@JHo*09w!IiW~sd7pG8 zl1W9eGl*@?5>%8FRo;CBGFhqh41ARne?YMNL7!y9A_yub+&`)3d-^JSh#y(MBmJdU zP0u<2SS-&=I>1r`Qs9qn1bbb3ZFVdHTNe=fWAasIT7Q`0NmCY3&Yi`VEp zuh0u(vUZ_V?d+GN9pVUjmM>WM251Uuwr%{XL_K97M%EWfNI?QcUq=Yi1hb;pvlA}K z@ERomG?2I???Xo80tOpjUT-`em&0emoA|Rx1&_xOS<{9H0iXdqQ^xlg1Rx9OAx4T% zMcga_%;25cTjx^`LDez;tdxlFC}uKXuro=)eVypJRABsVQ^~%a)W-2XQ{BvS!Od-= zW)JAWh`(==Xahrrfll30h_i)s4TS=OEQQ6Kgheo}*AKv?no_YQ7$1bf;ttiYE@RcT z9}VS^wlDcva@(j|>_mvjqAcS|FobV^Bg zcQ;6PcXxO9UjE+ijB?ztzP^Bhr&DlM-iz1yDT+SrR7{A2Z( zPx!AW+Oya$fP3<+<+f>BzXijx8?jrgTm)}owLeW%@6Ok}!e~dah;6@uf))Ud2bDDY ze}Z~ZS|PucxVOu5fl49PfoitlSV8YAS8Q$3p0+krlL#^bC@3__P+*KJWIm^X+AG<5 zd`@?RG@vlL5Lp@C}F^8iWGWq~lU;vH28bXk&ZD-Y$s)BueiTDde9PmA}k9 zT_6{P=3{B-Sqr7{a5n$mphL=D7Z;Bo)4N2(Ib+@Ll)xA|eBTYsAfa^to&5D06`K&V zdbk?R*GKJSiinAM_wD9*sReI>37K9iXC2fUPExOkqu;=o@4kFdgSl-vz!=e#Jn`9!5Av8u=rTzp5{r&To7S&1yg3ioo0Od!2o9I4@1vnbVE^W> zDsEbDT29NMKhjgYBCTAjsdm}jeB1SBUB4HqxnY?>3I9Kz^NhD(#lDatL|qCx{3=7^0WdH@5 ze$erhmse@y9WVr_;)3#mjmD<%rQ11Cy(fUrTv&)JV+OdLeIhmsl6bBV16OW~^|MJLwx3np;X55T1eVk_cm@{pP2ZZ1ZdzV>{ zt1eH$OJ1(!_^zdIjtt?B{m+s?iPoM8AMzsfXmXlwETRS~J2vqqX6~J?OfFlub&Ap8 z(o)ZM>L5cgjbVr-XVbd@;>GKKcHcPXm#?EAZnS8{wC%NX8z)+Fm+XGLRFCwOn5SREPDn+lzCYN{l|IpVz&P_T%Qk zD!uMM%IF)Yid{RDSfSfdvjuVJ#%t|C{)7|fxKmilqMN0-YhKIT|A7>pVw+jIqf8yp z&?|lr8px)^lcT|v6Gza^{#&TR{Wtt=WP&s8u0h+$Wn|b-LjL!zG0l4u-DozAAtBF5 zRq6;^1|J>9*>&mNLW?~U&kl-m)@QrXM&l6Jbac!b@6vDFeiDj7)4`{Lq2rQCh<|F@ z*W1b)n*Li`RNcCNpBeNixH88Ow$}fko|~@Lk@6KG`g$(Z@KYHH+lJA&PqJjz*8Y_t z>pAoQ!34h_fLIFEz0HUt8BB>Lc(HpdQEWuO6w;DjOx9(l|Ih9YAk<8gunZx*k>le6 zh6n>4meHQnx(vpEYgri(FkTG3a3ZMY0pm9iT<=|J{xNdDcMTJc{RlKPsA(PgZljUzAPt-@rtlfvI?EPI zcs7@yPVPM>0o?V^OpIIU;Bm$w=UgI^CA%8JzPKZFq9tF|oU_90Eh4|U|L@wTEZCB{ zG*WldW2ve8{Vq*RsNR8ox2uGm@wUqn|DrZ0n;tAnh}w5j2OMiXqqgM}!E2G*ug*?f<6>!_1}mJd*x0xm-7((fBi3 z^nz(6>NQejfZCPEy@*6m<++WJBZ1-OUKJP4${tPa^D0m|JNy=J%1le(GR;c?5HR^eEOJpei zDrybOpy`tZJ^^Kem>Yv{|7YapDEa>ZxhWqHU(46wSE}I8X!o2nVQMZQ*2_D9L;DLn z?8NKj35-|uNCyJ|H{rsFXo>y+m$4*a9+~Aiz+FCeLdk-5WD*OBIo8~=fzHZJMs+^j zAg$Pj^ZhZhfs-r=Gy&Al*VShL9#~KvMn4mgSa7!VPsHG}@LTb0v~t7p29*bI0M5F3``w2dTC5klrc;4e4CY#gn%c{CORetThp5vp zC$&*{{0qA`O+LZ$b&)qCJn30>Ma=9BpBPpPCoeeiovp|nB}Fy^Rv?h!?BV17aA?9U zaN}ecq^06Rwd*L*skzRMVCVYxLW2%fX;M>fiS!r~qG|FF;=hPn!s5#&sT_zuRAG~IBx90IOPw8$? z?H+vh<9uWJ`n9qp^^YgXV0m;aiPv(c%fH;xlae`=X&o|8XV}PB94~K^BS4$Z*;nW$ zzZ5t-H()OPpYfME7xGTU7Uv8UJO39L%-T$oo`R)9;Z`2+|Jz{iGU?iI_|KvuT8KvH zlWT3co-YCTP{|cbv*_j5A}1tIM5pF--@|`;pEP>5xviCCZo$OMWQa$Zru^wLGi0i4 zqXu`tZ&eP$DnAgQ65mPcM$0M1va6^A><5yYq+DJQd(Q5%zgmQml$lU2XC`_e|7kp! zCm!GI|0&dm7Hr5}X+80?PEPs-6}AmUugF9hxSmP04gwU)zmyVaoE-cjzR3f60InV} zx$p$}@3b>DNvZkx7brx$+J^z+y3zmB)Bnqfhd=bPGl~W11Io2DNkRX%NgUvefM~X$ zDI9YdBlpvi1kCyLFmRS@J^=@5cpC~B*}z#Qt4MEhEs@TQ$!F%^Q#lleCDsPcISdHILQmY1uE?>jg~QPLTz)@Yu|+L+k_>k>IP0DcnDaQ z-rs=)6nms0oE)!_QLq|Hoy8FL^@G`9f*|HKv1JVLe>9u@Txem4i9sY!8yvJP07HnuRHGihzKbY09R-xHrA_ zC&7OhS2dB0>%d98$jQ7*tGx4mGV(mwTP2L60@WZ?#AFaa6YXKjqSX3?yYxETC2ZU0 zE0Dfu^4;=xA_fMGJQ&shZ|`Yax2PKLjS3U-Q_unnBn0uA|HjEV0zSmzf8j~+)UA0M zK+)k>zS2bF`)rGX`W3_mvKF!;(F`b($^f;2(wUHEM-A|vB}k*Y5QF^Qo?MY(*T4ET z4lb~+RluDf0E$}t7A?nD@pWOiLVK)3pO)cd_wRbLUn79yvyg(FuUpW*N`|69>iLQ2 zva0_4Zo4!`xRakKvMwz8Ud~(SJ#&FR^G6_Z_h?}^VNXVg$(dUbV0gvHt#mWfHjl^& z`P$(d+_clB{r9_fXZ^GkS{WA*~W`G}C(CrSVL>4H&A04;Fh*pm_ z8`hCU<`zXI>poP9^1GBuq8;WA8s~Ou)4F?8!bcgJ^l`!jgy~jZoiQDeiyD-1C{Pt# zJXE>#BW_~~rDK}r*JDJBHzh%%c2|}j5rd)orBZ=DYM69fYtLf$t{Xol@SJ&{JeO;9 z1cBR4Lh`yTOoMaZz$2zC*R#xAw46Fe<4k7B_9j`RT0G>|huB8soLD_JYjksIDAu|z zhZG_H81SLLKITu&5~npW+V3^{?QyB^uuWXPz{kwG8T}|B=!(#T6o&sC1_DP@rhk)wvr;tX1$!MOE-1@V5Q-G@nJ8i!OcC_m+h(SXv6g$Q|l z*5_B=f@U91JWI#c%IW4Ft)X)Pb+Bf4yEyvLB7zES)=$mK(*Gq!!03nvewgx65*6S- ziIqbUF9|hUHg^Jv6na6bZ4P>U9JIoJkK2G2A#2GIzh&qdaxXk~rrR-=jF})=e^z9t z3XUFkzQ{r&P-Oz#1^=Zp7|T1zz75i+3;&JKY+xr?L`z~71?Lo&A2Z;ogv{^z*?QM-U}3W$$c1j`D4 z1}zkf0%Lqtz@)S=2rW^ax={_ssy^0VNy|^WYMgsqu%X9dHn(`o3<$iC~nww+gd|4J19_ zHz&am^x@|V0vRHf+Q9Gx@)_DcUG!PcwUF7lvPAho5-T<}_@?!Yjm>UA{9S{>N_0PX z0Qdy@fAQki)gZ_ehyu^qFx;p7zE2syus(X?$ojPO_32mrKDp^68A#0$Hp&-BXA8V! z1?PbWt{RM!J$|dLByRIal6IPLrZy(cYUBtU2ggUV_cac?HIEB|9MZgTAlN!-|H|GV z4vT{JI@<7P;eKekC?pMs2fxNMAwZ$A_Lm$eS&+KLWde$^ApVj*&|;KC^NFba5CHmr z>z^WZ!URS35OLi>Kx1+=#f)2sjsnKSLTq#b`61lTcOB0A%>+<5_c&1O-M|mwf=OK;^N9N`d zyob4}K|#&PQcwgh64aUcBjvChUc@ItU^Q>o00G%h4)31~KW9R+cQ2aNi#lzS$nawl z|KBwqSfHCe{gy6?sX@b2?LJ#(kwv)vIhef4P{}Pa6n$v%1{yM1B9K7< zDMY2NEJcvqFu04ZjpKwR;{9aw7?<%*xPh8%**R+m(Ax~hc7R(Gq!MZ~V_&}mppN|f zcx#*cO>h5=J^EMP!PjoQ=Xh5ty=6eSo;h*1n~+2+dk7&RCU|r?2K2w)E&d>iFb3Mj z3_K~?${$gg{UiCVPK*0>fkDfbYFdTmN*T|Yn@)s42eG{76Y-I~zP;7>!h~q5JTh!p zl-I*vT6e@IyP;q#l|J!f(vScSJ~`7Nyvr$7=rh7+vD7!BEzu;vIgk`KZ5FCUapUMTJo7!h;Db1 zqO&X;-v2H6Q$i~v@YBZ|-3DFnOE3$K&Q(Jw3zd$Tv8e6$$Mg;64afF&g`F_W9$Op~ z0i5a}-#7g&DgqX!>2wb1nv&71GUK#6Jgxk)e{=TWswCi6Zay*S7!TODP-dI*xeU96 z`74IV3lAy@52F9erT&*|7liV&BoZMUTx$x_N!!+AJ5&@$R}AxJFGTTZtAChgei=VT zD~2F^=@J?lJ1@_6hiz-47Scaa$}NR;5ZRUEqu)BZak7a$$HS+4 zdGA;D$5;rBDCdM%;+uj6>E?QyR>oD?K-0ohP0v(~s@){Ss?a#bTD{<{5;2cz`f#=_ zHI)7j5BEc7bTs=u+Bido%~skZAFPb2gqN?PFRX2jNRSljG9sin=FrIb3&jC-Jfj$q zm5fcEC%xbH>j;u2u?x~m zO0xz{6NyMg4rq{R1PN=xLg*w=`R%~1)d!twiF8WKqTuZ^Gr)CRZIIeG3^pcpGk{m; z^;g*d710q@VQtgmd$#!5dK^k`3F5O>m2e%$wNTkPr}Z7#4oX3Bjmhj7R*R)mW-YIi z-n6LJ-*(kjwz#c-@Y(okeeJ7{*y4V85Oh#;%HpuQI*Kpy{`{1nHAw|(hdy%R2@epD zeci0UN2L>qsw7;!9i{bmjY?}#f=Q&xqa5$u7TSDsdppY+6llxBfz|M$zV?>bLh#45 zE3t#cN4Ue_b_fV|y!i!gV@Qr<6Y~Q-x05Z{HFL_&XJ`Mj5lWeG$bbOvuX7!WO>yR| z5XhLnMn{L$*S)aXP6%+o-sDYG%}w3M3^YYc90|_84$&1kPG;HmpGZ(I^b|!vWj%@EDOB`rgGQ98Co28m7{CT`0M9oRe%=1K- zz1={Z{{>xLD)>7iqwmjzp}}w7Q~gCM)ARj`8~??4Lg z4WaS3SLA}T!U7(F$m{|zLvLmjb)o9j#D}L#U570o;)5Zl_gCuYYYHcp4=p+H8wp%_ zFI`#L1xv;3SrFc1BP7EPU6fAkKWNFNoF(-3dTWG^%6E1`d~sm?K}dt~ufr`lrf-G7 zd1p!l)6m-e*&&k~bSBwv!2j$!HhcC)f-wOCP@i^gWq~KRDiM#!O zkBpfzaWWc{&~ zoQb0E#KF>XaL;d|Z+;$vF&Z{%GJ!o*)QDBm(eb#-w6eZ3PfjfLV=qcroNrRn7Avk* zCyY+vR+R=H@z3Dkjq3T75t}+2pzQoEebF+|QR3Xf>ppVscV46RX&hEya?0q|%(TK7 zLFcY2XZlAV@JUnpZNcbq33$L>^=k8ISw18b=B|#vv#)a3x195;)6=%yvS=p!@WI4N z)ShK?FHG(Y1Tw16tXc^6S{Mt^}heGr%M=sQ@@)%CLR=#cub zJn^%{JYvYxlifQx{20N3SfJf>9!|Wu#0V8)C*i8Nc;%OIOKCt7JVX>38@nVMTTzWl zL4M?=tBNke-j#G|94@Y!BHG1$O<-`)I-mq8_aov@xsY~)j_DPrPuux=Gkw-&TFocr zcQF^*L45N`l8$bWva_a2{JpQzR}wjv<`kD?>h@6lzMd{y4LTyCk*=N#4LX1eqNKdY z6uZb2y~3CO%@PD^Rw}y-qkbr(W^DKAF0$lnn=xQmX6rvN^*Ie1K6fu)zKD3wI{ z*L{(`;m??i%oT<-an^s^hAH0M$J%&kcw+6olWACDA3{~#b23B#3gV>yNipDe;iIkt80h)LN7^?!9s8# z!orHnihf1?`ZeN@pF(CtQb-kR2%(1pSwj+~o#ejM>|c5hTB+xjtgM!-2M40%#k*~8 zx8*tI7WgkZD$BmAeDN$alskd=sj*On-SRB=H<`W#S*vSiPeHyu>2VW)2UyyUsmIhF zRN`3n-9j@c&vfi9FE0`NiD>KUf>l@7a_1o;I+4IiQjx;)b_4=XDrQG2hPe42zNlKc zpw!rou%y)3wK;31^4I&bUX(Z;hN}FDJ1U9bF#=%g3uNE=QDO9IFT< zIEf()31c$)?N!#Wi1eRB%C2jJjHCET9SRLZ4p3f{fdY{`3X^Vd7ePzxfI#%O>vtH6 zV8t$?UB{nx?|#V}AuMCWwUUX{z|qt|#v0K?It4^yjtx?!bOi;bvB&EhMH%Av6JM~iS>N)HVL4HL}bojEG z={ED6s!ZDXAtE??Mpx zm?Gt*qQ&+;3jGWYLe0ovw9>N1V@wR4nhB1HDJqdID2=1}l-_Z)Yrh>-5{)tJi!!|Ueq7!kccT+-& zfy>YD?ft>YOR%@s8}Bo>Coa_?eh-OAg!{qHJ~DBkqhQ-8iOWBl()OGTl!u>_v0Di% zW8fn~z`zR`QFMocI-$`$Mo*sZP+yIsopb1(%ET0Hm!W=skF(r=nf}Y=M@564p4Wjn zXv?|s`>2j1kB149k@-?9+Far>h(5SNLw}PU!hbNx=KgrBQ`4f2{S#owUq(hL3(Hvd z?adCtmRQc&yfm>PeriIWu@M|+g1aP~HVtl4T^S=isqaYdZc9*t^jE`dHFaubC21zo!54KI`qbz z`OR8YsfT~JnC~JS_{c($B(Ma>U6lLZIX#rF;*SmMwEYOA_0{Ox! zm=0Vac)ytp07N+ifs9g@hcie|H&bc%b_{!_)L!QWdh49C_Lz8^I6X5`{1rY%%Ty{#6jVz z=!DcE;Xz*C+ewi|yy|*9084cvgb_c#Cf{#Gl}Cs25jM9S`Si!mu2MRBp08B=%@ zN1gFXI>-0VZsl3RQJM3BXf|BLFhCX=Z8HF+52I5N{`hTY8sR}|62otyf&$d7kE$9p zFL4pLc#t+@V}edK5z!q74*xm>gQykjygi8|$^ky)`|C<~U86-cYnd@%9brU0{rS${ zC(Ht2^QKh#SlX5#Fie#ks)L#9t%LVwvhDI4<}2$2ZTw-Rzw382s9_lu3MKJV}iF#?Ot;t(sqT?Y0U&LE>w7f93=&m^NHwL+ z`Py){&rqvqXiG%>_I7WRW#gIs;cHH?#XmA;Diq||+_Yd~1(TD1H6-7BVXUtgv??L_ ztjgrUwX<@={Can-{jC2>{y;tE`Bm2T*oz=H9yEYW3PQr6bM84S7;_h=DV1DPqHZ!{ z?SXb2hEcLGx9(~81tkv9h^wc1O3IL5^hqe>j@>UE!eEJwb1P6+yjJe=N};_cm84Tb z2IxBu=i<58AXeVpJ}ysTn|U_e=h~gl0!1nF?z4+)_IIcdOOK*+iXIxdhUkY~!n*yR zs#c!aZloTE^KRGejz}#HSIQ^KF6u7aL`&2RH_J2qaw`4WW*${ed>F1N%3pO+XP4Qh z=lAEU2deFJ585Eh^8ym2<*C3zJP*=sZo|dt%x~n~_&N0a{kxdZnkP<66J=%wacXKB zw5X*wO}mxE`7cWXdD#5Rkmp$Sf9s*x2^XYB>|QWp*9S^@W&Q`-WI<1WobKnC|_Fw{lafA6wL`Os*@1pj- z6CvqUGykWlmX z-EF~bVfw<7X5;dk)xAhfM!la}zW71IL-)Q1W07g!&p9K`?M7NW*&bARQ`$JyFo1+{ z%5C!4OhJXy{t%AKyYMnHprb3%Zq!<+<#s+qZhaxlpb8;k7);7_jP0W#s zgXcYr> z8t@Dd-m<@4F3L<$wg=C285V&av#_w#YSF7VmM}2iQ0>y~6B0m7qE}G;s{7R-Ph#wn zE$Zh8-P_I3Ef%Dagc0g6zJZZxPSv{mR+W{rX@XKKkE^NT(rw+pFLR~*+`pSs*%Ta( zmJVoX9iDgi*TebWAluoY+wc5(e!c-s{PNk8X69<(+eWXD=DX)u%wmSwJRMyqOn` zU;TA~FE>-vj@_r8D}`@7d0i2;OXmHV2Q0~IMw`#EgdpSNAk$yy#!K}l7j^|$Kv zaVgs&wjalwgMTsNK{1IdSva5T!_gNp>(k+6P;Tq>^l8#e%Y_`1?%zLup@*k`iQFrH z7+^1GBS)eiA9r_*@fJ!_?L7Lh$RGM|vZW6`)pUtDv z_=|f7;1BCiHZwYG|M|g!7xB#s(ihrK_D8d8^A%m!ooLf5kD|SOV1bI6`E{8Lx?NI4 zTx^p+3d0bu{&5#CAhD}4+q6s%{4|+gDjYJ0oxgy`o3Fw$gu{|eZnhqdveAl&cU5H9 z`N3U0Xw$+Dx7CFINonD%tGKH^r=#zeujGa^sYdvAywo}E)@SuX&k3EErp!BS;{(hw z6ZH!i21nb&AaHD)Y z;6jqSGCd45GqtKgo;tIo#MwmG!HK%=kF3+A@H_zfwlC6NsQLC&p|E<z`praLL<7lwVscx_~ z?i{(2>oI3ZBw?x)HvMWkCb&7M?$Te)qqo!r4dtnw9iJW zcO}p>ytn;Br9XzTFZmotb1C}`7S1hIOB$GgH!^Zm19@1ucvIQ>WC8y6{E!r$P~FSs z3ET%dDUS8@3ODQ9SdM{QE=`^z^qVYnTTPpl2gijDfeje&s!g>w&DvXyqA#9RP3|W| z*KgFyZMuNoc-@Nu$G`?)pld9*O=Q=sZ(xipohCV(@2I3d`YdYL90W`0Bt_{6K@+U23DlYDi|U7ZjqaYWq(Wb{X^}`TK|6 zELUQo!_3VUG#-Cl@_d+E*7OmLBJ+!AZximD>P-3&l^MpFNVa3zH`kdI8dVut|2Lsf z-EN<^9uc@S=lyE3>AdnvV`i{Vd(|&PpQ@5bYDnizT|^GQWGsDNS*@Nqz1snTdXc(O zv%qM*EFW$tA`THi((;T8cI5fVI)J34{yh?p_oot$p6Sgkp%G#519Rp@>x@6;8uHI%9M8>`{mGFBk~fd{Z+wDg=b`Dc zWtuZ}a@C4byA@JALf|$^#pONpXuq7cq%Jg{EH@Uqs{%K2V}|b-Hu}6i4P4#Ui)X)_ zv62?&IhCkJFoE5)!e>=hVrigKxN%f_PI~V^$9Q(#v#YT1+tXc`Gqg$^ywCbWxQEN3)QYFO znRRE~l`U&-5sM6wm!ayk*KxX5F9*6~(>V=C>{AS0phS&#R0M??M$N79VnXhywDtJ@ zT2pU-vWzlCe*0#HO$OMhf^YhEHb|o_2Gtoj_v1~z(fdw1{^i^!i_;JExS+>hY9a^`{J@@c47qV@(Lkki8XdAgP zE8OeGCFA4MO--2DNQ30%4jvW7aOLG ziw{oMFu!=J#nR!e(wKRz9wEKkY4Iqw->!o3xmx>8o>*KvWI_f?pm7LW?%|>-H+B`Q zj_&JJS4Q_7pc)=2Os>XaE^k_qo{#UXE-Y?(v2nSr^bA>jm>7QnJHhCKRV#sv%#PY- zJq8*wx6|7OA4D{YZyTbZzL``E@Wa+va5m<$7)S5a5PctIGDeHPC`ws>ylEYp$YDyP z+g}y98ep(5FBeiuMCxg9yk;~1x8la|*nE?e$UZky1UpQZ&__ndneqIvVh|$QwOGGh zSYn6igi|u%xaw^@@1a@_S(I@NJ^PHTAe~BhcT~IodAaOmg9s?&{DOj=qemQaQ1Ee! zy;}QhKEv$qv*h}TCGkoAPwM3uCky%$yYW;idqnjT7CU>zqkC+sSBr<0!196-YXi5G z$J-i<%7i65c(k|I*9%Y9?hC~;Pg{Ma+XkxD_{d~&db@><;&c1D%=qJKvdcRbOYQNq zC)d}t%VujX1H3nkjY~*dE&Kr+rpvE!>UVZIaXNN# zs;W@leSVGyi&E1?dxy?uW`cUem<+%A{2q=wHo_l{O%`hChwgWa)m^6kvK=dj^B*@# zdQPu*ad^6a=~4-D?G_6q*@k3Lx;g&m8byT%U2^RukaYhS`Bp^;!P?JR#=G=4esgtR4&}cT~}WqG3GbjuiBihF8RQxJrK?qE7$9L~!= zz*X|r+`?gI&x2RclTWi|uz3rb2qBMO=D9_4Ie3H#vCLkgWp_aF*Wx5J5o7o4bTPuW z-$>3nh?FP8CJsa*>T`1h&&$m%ziF)x^L3Y#Z(`30J#-2QgD;;W9liS7bdg^gFJyD3 zDq=BD3^OVnbGIg;ehH1yJ=DiO^~XM)^5oT8?#{l7n!IDnJhT$sgC19uY4KC$fXa4r z_T;>ow75y*Mws^`wJzLNbJjb?ogL_fSU$4M@^`1lq;~Gt2|N3=Ku2u4z#rISRC`$+ zAra))&&9`^>|OunhgsHzCEg^NwzhD4cF7rgd%M`{<1-A=#>E`}XxdT~QmnD1L+`bI z^H?68>4X1Xt;g8)q!OAp^&E-lcyZ8Jxpk;SYtBCQ_OOy(KwMT4ivL4JQ3&L5*`$Xh z5xht2fbE#uRDTRFkLs{pimKh}?^ZJmC^cneV{Sf%AJ$VTLXpdr?f45Cn(ERBZf7Fh z*!I-~6-ln6YUm3UM8BZmPO3!9hmhP2G<$@e)#JlLs;77<=jB+s=U+}<5Z2bl6IdYg zD=3Njax{HDZd6xyWCOf>=UdHu z1Gz)TP}4UmI@acHn!Al@eZsc`{ zDxql4lYm@2bO?!+)@|nR#kqHA(XFC;AaS9hzVNRKKB_E;h*S~UCOBU{-`lTpFn0eA z-KnvCd=3eyUV0|I_y4&8Vbb(`;-rh3NB2Po7-)BNuEPZpP0^hJ9OO^=HU|jNoz5bONMdZUpC-S7ARwXwn`hpZI}gd2hNG> znj!V0l9i5|M-zx5wJ{uTXu^f}YMVBJma-k)po{fNK<_xjjKDA)lx{Mi%aW5$%=$}m zEuGFG;1-6JB_4>)Zwx)yf1z^=whVJTh@ZnJ@zR?>Gh)Uu&~M1?Y*AHsfU;OY0yobu z-Uo}`<{Q^osyAvMK+^$FL!|F^O3( z^lajC5O=3y=Y;G21 zy-%mC3Wb~_4f~7E4FPFAl2qT;HvVx-o}q4cH$rFm-@Tg15mJ^1e}tL2x)gkB&xb#8suRwIujAsd6k%Tk({($vb~nu>PU*i&;TA0|!n{!y zos1?)tK4uS^`2WQW#wZ5VV;pFyulG?q#0tQ!=F|g^!HVjj)jfhkB`HUf@*TUmOr{V z&a{r{!&`RqCw3Tlk?ILuGzj@RO}>9pWge-sHFmsZc1c1#k=pgp(Me@@OT3~V&wV#? z)-QJ!QZ;u|xanm)Ty|*T)P*5^SuYX4X;*Vxm850Hk!Qu(#&)u0B96*`N*L8?^JT7r zsQVXl}X7kjIvc@mf->!!6zp3#$1 zKV&;wyxyal!os=TF^him>Cx5H3|ERCR3uKCTN4WhByMVBRJp9PO-MQTW#XSMT{Nj; zD?=4wOxUU=-$O%>707uzXjGKzp{I3gitIxk_(UC-8>W&)W9bYCyxJR;4puSz};WL^xo(NgWMRpa)qxoz$^2afWEUh*y&M0)UdJs6%GDWA9AyRw_2 zO34^jS2tUc24X%WIIfh)OrES!*L+~pe3Cj3ws@2^FTPK%Jo-X}7tF@it&pjaD~B}s zBkCOabQ>J0nH8_pfUO-mk6vf^Qx`x;7C(c0JstDO<9K?hhbC1&?`he};rR3L(ZUB5 z6wBJhaSx0Sz(gkgIe8L6RuN6fKVnj zZ2$3C6QTzNg!7?N$XyHh`@Kc!J}hlUJt6^E07M1}VF4v0?G`P^CC9asR;26`iKSOq zpdSL%-X7poj?)b*Ecv(OEL4i*AV3yhq|2XX4#S`%BU5)kujRo8sLa!WyThI^RRTBm z%xw3l(r+O|DeP9u%`RJB|}Ryj~99>jJ{M#fa7>SU{M%@NtE9RG9$UXjx z_Hs(5`5?-8@N|<{QF&xO-DZX4pzepjoL@72Jt~w_#oEJt;`g-0pdca=v^ViEo1*`^ z-Yh66KMt9acme^N%x@wR7PJ{H(9+C%2y?feUMs|r&nLG!TdEz~wKciu1>yK$0=f{x zd`5qaj5C#kq(fkwY%LW?Slywt|_ScLg?wR{GsP3^$OC(-0LSEe6 z1{h9j`nZeAk@=F=Yvt`7W`MDYW1474*r9Eh*&98Wa2t8^pT)=iq^XcsQVU=Ui z7BJGB2J5aST7Q)INgoy=KrS)cfZ@CZglW+c>n)`DOh(3=a2`Qp5uMdrCWA@yX<=2B zU&~&t8xwMx4E0%#^Q?e$uv@oV8;7{r zV9;?lqOxpMU5$#6Z!kCa_o7Sg{xJ7lRaK>B;OmCG9Z&Oer={!q^#Kr!pwzC=)qrf6dFj!*++_RcXsx;7!NR9X{R~^yH>C zv^@V+FaEdL2QFP@&lX0*pjL(ovMj7YGe^t0_18e`PO8+^74R{@=#=TyGvc{#l3wDz zzHY-8+=lS*p&<|*PGr}+FiPU|9m`~LV>cQS)FHI9Yn$LaCj%NhD7f4na6h$&5#;3y zSkPk9wq=OK^AnYq`?iV&Sz^7PUOt`&7LwX7__F+(SUG8>!Q{et7BME{u(SyUKT^+b z3wGNV&zb9^VFK>XX19c;l6WrVV>C<(8LpRW>Q~3{lwl-xYp@9RML%ovGnlMMk_anmEGIfo%2{szw z`~m^`5&~|mMrW4Fgb6bY7nlBedkp(+m^dxws+ZJWk&uL;5?(hgZl^k@LmL7fn8su| z8D%iwrggZkfBx=*|2`fE|F=I;sr-CFB$85qsT%OU4<~at!hzl!VIs1K4qTht`rCuV zdy5}CExG|!6pi3(me6(=`Ot}sg5)!ni%UEk{6y{zci4Pd`m7T%nn-!oWVKtZ`2gll zjU@<+)AMM>vr6<1DTDk|ef_`Nvp?&-_4XW{Xp~^!psy%ua8T!KaxyhCJ)TV}GA=ji zbNEOvb_VY&)*<2x++j}-$d#``w7d|mc>F$T1xP3k#Ds)+9vlz~iIR#)4y|J4%8W{4 zQ|QcBq@wFW;;(!0RaWs~GO0d((FUC)?j5pn-skXu?Sq#<^?Dqu_G$&GLK+%WuUkk& zXuwq`ol*ogDV|xRw{NYovVL^*3zno0U^K$?dQ{+Xom5sL!^8;e2@^oCMB2fzxfgJ`$ApbMW zZz!L(++29BAU3wZuCDcR1CXQ%>InnyrAwjPOj(bY=NGjA z)f8Z=doj%jT--&|_jrk&|aUQhoC6 zfK1t$822kTxEqw_BNgf$++<+^Z~N`AuybaDF)+T0_$#SXt0;+YZRwj*bKAd%$Q^U& z{*f#@y63aThZgh&3p9Zx6BiL#s~7;vCs_&~F^S_Rz*WQoO_-fMTLqgdCxj09ks^ns zD?6K*{9RxmHXGd8nZw^LMp6mTj9_mfuT;#Dt)O5LwzvY70u2J@jcBM{&sDuW*oKPA z$e4FAG^5#Q%r=tQ5y^BvRtUPb?4aw%zXIMjV59DIhko^FZi zPpZQK8p2@oU~CceB%7RGzcihkO0U6mbObucfK-eACKiw<@!|reGX7SU*xa0Z>sw^O zN3nF|?r^N`@Ee`(B9;7#@e6gpr(AZjJY;4T?@q|r*42I9*9Wj2sZswZ$0RQ7_fW4uQ844#fE)_e&qAeQLQt2k&flUR z!~yA3a-eHB0GCFn4)u`>F$S90c#oq`oJD~O2c8c80=&9Uq2J4cl*MqIT`;s-fQVA%+Z z!!R?CE{OMj_@M3Mw|F!$8<0W5`Z=>4MKsge+|DyN(3Za`my`q`ctP_uQ4-ckUKGq< z0WkddyU1qdzC-UTag10j*sH1?WwAq#zfs8jkXty?#tjS59kE+(_ z?1A1rg~1sHeQSv60g55}fdt{6iNy!o(&lMrP8kK%;0hQf- z%ZL09$mW)r@A|A6RaN%$`g?~h7XTtQDlaSy8qE24kIFmuBtO1$wyvy*k0+E}y_^#@ zs!TuVVTAZrBz60z_Kfz>Rt0@*em-H^HR~%ePm`35jHHk3j8M*$2{NA4Od`sruZ~z^>MJvRoBX9(??s9sqy^xLqZ|{7n)P2!NYe zb)ly%vVYV~*~!Rs%d3BQNbXoe1JKtkeVr4TqH2tc-uVT+%AZU|tZ%+y!s8=uJ5043+8 z2YFE&n^e1%YM$`XKrYji>}W8s2*bh-d%C*q($iDidqu?TU%#$?*QEX;A~;|*BQssa z-pnz)@gr}>>)o*_m?r-v6H=Q@5T<^VDrPyZZR~~}iw-vm^!NqR0Gh1g0_6UG?_glf z{*#c`e;~_yHGcp5NJN_GtJe5`{o&dL3cm=5g<9(s&@TCn_B&#%NYJclD4vOQR2k@2 z^|b%4G* + + + + + + + +cluster_namespace with {env=env_1,foo=managed} + +namespace with {env=env-1,foo=managed} + + +cluster_namespace with {app DoesNotExist,env Exists,foo=managed} + +namespace with {app DoesNotExist,env Exists,foo=managed} + + +cluster_hello_world + +hello-world + + + +hello-world/workload-a[Deployment] + +workload-a[Deployment] + + + +hello-world/workload-b[Deployment] + +workload-b[Deployment] + + + +hello-world/workload-a[Deployment]->hello-world/workload-b[Deployment] + + +All Connections + + + +0.0.0.0-255.255.255.255 + +0.0.0.0-255.255.255.255 + + + +hello-world/workload-a[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +entire-cluster + +entire-cluster + + + +hello-world/workload-a[Deployment]->entire-cluster + + +All Connections + + + +hello-world/workload-b[Deployment]->0.0.0.0-255.255.255.255 + + +All Connections + + + +hello-world/workload-b[Deployment]->entire-cluster + + +All Connections + + + +pod with {app=app-x,role NotIn (monitoring,search,web)}_in_namespace with {app DoesNotExist,env Exists,foo=managed} + +pod with {app=app-x,role NotIn (monitoring,search,web)} + + + +pod with {app=app-x,role NotIn (monitoring,search,web)}_in_namespace with {app DoesNotExist,env Exists,foo=managed}->hello-world/workload-a[Deployment] + + +TCP 9090 + + + +pod with {app=app-x,role=api}_in_namespace with {env=env-1,foo=managed} + +pod with {app=app-x,role=api} + + + +pod with {app=app-x,role=api}_in_namespace with {env=env-1,foo=managed}->hello-world/workload-a[Deployment] + + +TCP 8080,9090 + + + +0.0.0.0-255.255.255.255->hello-world/workload-b[Deployment] + + +All Connections + + + +entire-cluster->hello-world/workload-b[Deployment] + + +All Connections + + + diff --git a/test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.txt b/test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.txt new file mode 100644 index 00000000..f06263ce --- /dev/null +++ b/test_outputs/connlist/exposure_test_exposure_with_different_rules_6_connlist_output.txt @@ -0,0 +1,22 @@ +0.0.0.0-255.255.255.255 => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => hello-world/workload-b[Deployment] : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections + +Exposure Analysis Result: +Egress Exposure: +hello-world/workload-a[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-a[Deployment] => entire-cluster : All Connections +hello-world/workload-b[Deployment] => 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] => entire-cluster : All Connections + +Ingress Exposure: +hello-world/workload-a[Deployment] <= [namespace with {app DoesNotExist,env Exists,foo=managed}]/[pod with {app=app-x,role NotIn (monitoring,search,web)}] : TCP 9090 +hello-world/workload-a[Deployment] <= [namespace with {env=env-1,foo=managed}]/[pod with {app=app-x,role=api}] : TCP 8080,9090 +hello-world/workload-b[Deployment] <= 0.0.0.0-255.255.255.255 : All Connections +hello-world/workload-b[Deployment] <= entire-cluster : All Connections + +Workloads not protected by network policies: +hello-world/workload-a[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Egress +hello-world/workload-b[Deployment] is not protected on Ingress diff --git a/tests/test_exposure_rule_with_multiple_match_expressions/namespace_and_deployments.yaml b/tests/test_exposure_rule_with_multiple_match_expressions/namespace_and_deployments.yaml new file mode 100644 index 00000000..528cef18 --- /dev/null +++ b/tests/test_exposure_rule_with_multiple_match_expressions/namespace_and_deployments.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-b + namespace: hello-world + labels: + app: b-app +spec: + selector: + matchLabels: + app: b-app + template: + metadata: + labels: + app: b-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8050 diff --git a/tests/test_exposure_rule_with_multiple_match_expressions/netpol.yaml b/tests/test_exposure_rule_with_multiple_match_expressions/netpol.yaml new file mode 100644 index 00000000..519a36ef --- /dev/null +++ b/tests/test_exposure_rule_with_multiple_match_expressions/netpol.yaml @@ -0,0 +1,29 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: multiple-match-exp + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: + - from: + - podSelector: + matchExpressions: + - key: env + operator: DoesNotExist + - key: role + operator: In + values: + - frontend + - web + - api + - key: app + operator: NotIn + values: + - b-app + - c-app + - d-app + - key: tier + operator: Exists \ No newline at end of file diff --git a/tests/test_exposure_with_different_rules_1/namespace_and_deployments.yaml b/tests/test_exposure_with_different_rules_1/namespace_and_deployments.yaml new file mode 100644 index 00000000..528cef18 --- /dev/null +++ b/tests/test_exposure_with_different_rules_1/namespace_and_deployments.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-b + namespace: hello-world + labels: + app: b-app +spec: + selector: + matchLabels: + app: b-app + template: + metadata: + labels: + app: b-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8050 diff --git a/tests/test_exposure_with_different_rules_1/netpol.yaml b/tests/test_exposure_with_different_rules_1/netpol.yaml new file mode 100644 index 00000000..b8ab5250 --- /dev/null +++ b/tests/test_exposure_with_different_rules_1/netpol.yaml @@ -0,0 +1,28 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: match-exp-1 + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: # rules are not equiv + - from: + - podSelector: + matchExpressions: + - key: app + operator: NotIn + values: + - x + ports: + - port: 9090 + protocol: TCP + - from: + - podSelector: + matchExpressions: + - key: app + operator: Exists + ports: + - port: 8080 + protocol: TCP diff --git a/tests/test_exposure_with_different_rules_2/namespace_and_deployments.yaml b/tests/test_exposure_with_different_rules_2/namespace_and_deployments.yaml new file mode 100644 index 00000000..528cef18 --- /dev/null +++ b/tests/test_exposure_with_different_rules_2/namespace_and_deployments.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-b + namespace: hello-world + labels: + app: b-app +spec: + selector: + matchLabels: + app: b-app + template: + metadata: + labels: + app: b-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8050 diff --git a/tests/test_exposure_with_different_rules_2/netpol.yaml b/tests/test_exposure_with_different_rules_2/netpol.yaml new file mode 100644 index 00000000..f262247e --- /dev/null +++ b/tests/test_exposure_with_different_rules_2/netpol.yaml @@ -0,0 +1,28 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: match-exp-2 + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: + - from: + - podSelector: + matchExpressions: + - key: app + operator: In + values: + - x + ports: + - port: 9090 + protocol: TCP + - from: + - podSelector: + matchExpressions: + - key: app + operator: Exists + ports: + - port: 8080 + protocol: TCP diff --git a/tests/test_exposure_with_different_rules_3/namespace_and_deployments.yaml b/tests/test_exposure_with_different_rules_3/namespace_and_deployments.yaml new file mode 100644 index 00000000..528cef18 --- /dev/null +++ b/tests/test_exposure_with_different_rules_3/namespace_and_deployments.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-b + namespace: hello-world + labels: + app: b-app +spec: + selector: + matchLabels: + app: b-app + template: + metadata: + labels: + app: b-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8050 diff --git a/tests/test_exposure_with_different_rules_3/netpol.yaml b/tests/test_exposure_with_different_rules_3/netpol.yaml new file mode 100644 index 00000000..a411e3ed --- /dev/null +++ b/tests/test_exposure_with_different_rules_3/netpol.yaml @@ -0,0 +1,28 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: match-exp-3 + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: + - from: + - podSelector: + matchExpressions: + - key: app + operator: NotIn + values: + - x + ports: + - port: 9090 + protocol: TCP + - from: + - podSelector: + matchExpressions: + - key: app + operator: DoesNotExist + ports: + - port: 8080 + protocol: TCP diff --git a/tests/test_exposure_with_different_rules_4/namespace_and_deployments.yaml b/tests/test_exposure_with_different_rules_4/namespace_and_deployments.yaml new file mode 100644 index 00000000..528cef18 --- /dev/null +++ b/tests/test_exposure_with_different_rules_4/namespace_and_deployments.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-b + namespace: hello-world + labels: + app: b-app +spec: + selector: + matchLabels: + app: b-app + template: + metadata: + labels: + app: b-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8050 diff --git a/tests/test_exposure_with_different_rules_4/netpol.yaml b/tests/test_exposure_with_different_rules_4/netpol.yaml new file mode 100644 index 00000000..fb4e49f8 --- /dev/null +++ b/tests/test_exposure_with_different_rules_4/netpol.yaml @@ -0,0 +1,28 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: match-exp-4 + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: + - from: + - podSelector: + matchExpressions: + - key: role + operator: NotIn + values: ["x", "y"] + ports: + - port: 9090 + protocol: TCP + - from: + - podSelector: + matchExpressions: + - key: role + operator: NotIn + values: ["w", "x", "y", "z"] + ports: + - port: 8080 + protocol: TCP diff --git a/tests/test_exposure_with_different_rules_5/namespace_and_deployments.yaml b/tests/test_exposure_with_different_rules_5/namespace_and_deployments.yaml new file mode 100644 index 00000000..528cef18 --- /dev/null +++ b/tests/test_exposure_with_different_rules_5/namespace_and_deployments.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-b + namespace: hello-world + labels: + app: b-app +spec: + selector: + matchLabels: + app: b-app + template: + metadata: + labels: + app: b-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8050 diff --git a/tests/test_exposure_with_different_rules_5/netpol.yaml b/tests/test_exposure_with_different_rules_5/netpol.yaml new file mode 100644 index 00000000..e80a4a14 --- /dev/null +++ b/tests/test_exposure_with_different_rules_5/netpol.yaml @@ -0,0 +1,28 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: match-exp-5 + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: + - from: + - podSelector: + matchExpressions: + - key: role + operator: NotIn + values: ["x", "y"] + ports: + - port: 9090 + protocol: TCP + - from: + - podSelector: + matchExpressions: + - key: role + operator: In + values: ["w", "x", "y", "z"] + ports: + - port: 8080 + protocol: TCP diff --git a/tests/test_exposure_with_different_rules_6/namespace_and_deployments.yaml b/tests/test_exposure_with_different_rules_6/namespace_and_deployments.yaml new file mode 100644 index 00000000..528cef18 --- /dev/null +++ b/tests/test_exposure_with_different_rules_6/namespace_and_deployments.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: hello-world +spec: {} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-a + namespace: hello-world + labels: + app: a-app +spec: + selector: + matchLabels: + app: a-app + template: + metadata: + labels: + app: a-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8000 # containerport1 + - containerPort: 8050 # containerport2 + - containerPort: 8090 # containerport3 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: workload-b + namespace: hello-world + labels: + app: b-app +spec: + selector: + matchLabels: + app: b-app + template: + metadata: + labels: + app: b-app + spec: + containers: + - name: hello-world + image: quay.io/shfa/hello-world:latest + ports: + - containerPort: 8050 diff --git a/tests/test_exposure_with_different_rules_6/netpol.yaml b/tests/test_exposure_with_different_rules_6/netpol.yaml new file mode 100644 index 00000000..b8ac8dae --- /dev/null +++ b/tests/test_exposure_with_different_rules_6/netpol.yaml @@ -0,0 +1,45 @@ +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: match-exp-6 + namespace: hello-world +spec: + podSelector: + matchLabels: + app: a-app + ingress: + - from: + - namespaceSelector: + matchExpressions: + - key: env + operator: Exists + - key: app + operator: DoesNotExist + matchLabels: + foo: managed + podSelector: + matchExpressions: + - key: role + operator: NotIn + values: ["monitoring", "search", "web"] + matchLabels: + app: app-x + ports: + - port: 9090 + protocol: TCP + # following rule matches the first one (will connect on 8080, 9090) + - from: + - podSelector: + matchLabels: + app: app-x + matchExpressions: + - key: role + operator: In + values: ["api"] + namespaceSelector: + matchLabels: + foo: managed + env: env-1 + ports: + - port: 8080 + protocol: TCP