Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Nota. transl.: L-awtur tal-artiklu, Reuven Harrison, għandu aktar minn 20 sena esperjenza fl-iżvilupp tas-softwer, u llum huwa s-CTO u l-ko-fundatur ta’ Tufin, kumpanija li toħloq soluzzjonijiet ta’ ġestjoni tal-politika tas-sigurtà. Filwaqt li jqis il-politiki tan-netwerk ta' Kubernetes bħala għodda pjuttost qawwija għas-segmentazzjoni tan-netwerk fi cluster, jemmen ukoll li mhumiex daqshekk faċli biex jiġu implimentati fil-prattika. Dan il-materjal (pjuttost voluminuż) huwa maħsub biex itejjeb l-għarfien tal-ispeċjalisti dwar din il-kwistjoni u jgħinhom joħolqu l-konfigurazzjonijiet meħtieġa.

Illum, ħafna kumpaniji qed jagħżlu dejjem aktar Kubernetes biex imexxu l-applikazzjonijiet tagħhom. L-interess f'dan is-software huwa tant għoli li xi wħud qed isejħu lil Kubernetes "is-sistema operattiva l-ġdida għaċ-ċentru tad-dejta." Gradwalment, Kubernetes (jew k8s) qed jibda jiġi pperċepit bħala parti kritika tan-negozju, li teħtieġ l-organizzazzjoni ta 'proċessi tan-negozju maturi, inkluża s-sigurtà tan-netwerk.

Għal professjonisti tas-sigurtà li huma mħawda billi jaħdmu ma 'Kubernetes, ir-rivelazzjoni reali tista' tkun il-politika default tal-pjattaforma: ħalli kollox.

Din il-gwida tgħinek tifhem l-istruttura interna tal-politiki tan-netwerk; jifhmu kif huma differenti mir-regoli għal firewalls regolari. Se jkopri wkoll xi nases u jipprovdi rakkomandazzjonijiet biex jgħin fl-iżgurar tal-applikazzjonijiet fuq Kubernetes.

politiki tan-netwerk Kubernetes

Il-mekkaniżmu tal-politika tan-netwerk Kubernetes jippermettilek li timmaniġġja l-interazzjoni tal-applikazzjonijiet skjerati fuq il-pjattaforma fis-saff tan-netwerk (it-tielet fil-mudell OSI). Il-politiki tan-netwerk m'għandhomx xi wħud mill-karatteristiċi avvanzati tal-firewalls moderni, bħall-infurzar tal-OSI Layer 7 u l-iskoperta tat-theddid, iżda jipprovdu livell bażiku ta 'sigurtà tan-netwerk li huwa punt ta' tluq tajjeb.

Il-politiki tan-netwerk jikkontrollaw il-komunikazzjonijiet bejn il-miżwed

Il-piżijiet tax-xogħol f'Kubernetes huma mqassma fuq pods, li jikkonsistu f'kontenitur wieħed jew aktar skjerati flimkien. Kubernetes jassenja lil kull pod indirizz IP li huwa aċċessibbli minn pods oħra. Il-politiki tan-netwerk ta’ Kubernetes jistabbilixxu drittijiet ta’ aċċess għal gruppi ta’ pods bl-istess mod li l-gruppi tas-sigurtà fil-cloud jintużaw biex jikkontrollaw l-aċċess għal istanzi ta’ magni virtwali.

Definizzjoni tal-Politika tan-Netwerk

Bħal riżorsi oħra ta' Kubernetes, il-politiki tan-netwerk huma speċifikati f'YAML. Fl-eżempju hawn taħt, l-applikazzjoni balance aċċess għal postgres:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: balance
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

(Nota. transl.: din il-screenshot, bħal dawk kollha simili sussegwenti, inħoloq mhux bl-użu ta’ għodod indiġeni ta’ Kubernetes, iżda bl-użu tal-għodda Tufin Orca, li ġiet żviluppata mill-kumpanija tal-awtur tal-artiklu oriġinali u li tissemma fl-aħħar tal-materjal.)

Biex tiddefinixxi l-politika tan-netwerk tiegħek, ser ikollok bżonn għarfien bażiku ta 'YAML. Din il-lingwa hija bbażata fuq indentazzjoni (speċifikata bi spazji aktar milli tabs). Element indentjat jappartjeni għall-eqreb element indentjat fuqu. Element tal-lista ġdid jibda b'sing, l-elementi l-oħra kollha għandhom il-forma valur ewlieni.

Wara li ddeskriviet il-politika f'YAML, uża kubectlbiex toħloqha fil-cluster:

kubectl create -f policy.yaml

Speċifikazzjoni tal-Politika tan-Netwerk

L-ispeċifikazzjoni tal-politika tan-netwerk Kubernetes tinkludi erba 'elementi:

  1. podSelector: jiddefinixxi l-imżiewed affettwati minn din il-politika (miri) - meħtieġa;
  2. policyTypes: jindika liema tipi ta' politiki huma inklużi f'dan: dħul u/jew ħruġ - fakultattiv, iżda nirrakkomanda li nispeċifika b'mod espliċitu fil-każijiet kollha;
  3. ingress: jiddefinixxi permess deħlin traffiku lejn il-miżwed fil-mira - fakultattiv;
  4. egress: jiddefinixxi permess ħierġa it-traffiku mill-imżiewed fil-mira huwa fakultattiv.

Eżempju meħud mill-websajt Kubernetes (bdejt role fuq app), turi kif l-erba' elementi huma użati:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:    # <<<
    matchLabels:
      app: db
  policyTypes:    # <<<
  - Ingress
  - Egress
  ingress:        # <<<
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:         # <<<
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà
Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Jekk jogħġbok innota li l-erba' elementi m'għandhomx għalfejn jiġu inklużi. Huwa biss obbligatorju podSelector, parametri oħra jistgħu jintużaw kif mixtieq.

Jekk inħallu barra policyTypes, il-politika se tiġi interpretata kif ġej:

  • B'mod awtomatiku, huwa preżunt li jiddefinixxi n-naħa tad-dħul. Jekk il-politika ma tiddikjarax dan b'mod espliċitu, is-sistema tassumi li t-traffiku kollu huwa pprojbit.
  • L-imġieba fuq in-naħa tal-ħruġ tkun iddeterminata mill-preżenza jew in-nuqqas tal-parametru tal-ħruġ korrispondenti.

Biex tevita żbalji nirrakkomanda dejjem tagħmilha espliċita policyTypes.

Skond il-loġika ta 'hawn fuq, jekk il-parametri ingress u / jew egress titħalla barra, il-politika tiċħad it-traffiku kollu (ara "Regola ta' tqaxxir" hawn taħt).

Il-politika default hija Ħalli

Jekk l-ebda politika ma tkun definita, Kubernetes jippermetti t-traffiku kollu awtomatikament. Il-miżwed kollha jistgħu jiskambjaw informazzjoni liberament bejniethom. Dan jista 'jidher kontrointuwittiv minn perspettiva ta' sigurtà, imma ftakar li Kubernetes kien iddisinjat oriġinarjament mill-iżviluppaturi biex jippermetti l-interoperabbiltà tal-applikazzjoni. Il-politiki tan-netwerk ġew miżjuda aktar tard.

Spazji tal-ismijiet

L-ispazji tal-isem huma l-mekkaniżmu ta’ kollaborazzjoni ta’ Kubernetes. Huma ddisinjati biex jiżolaw ambjenti loġiċi minn xulxin, filwaqt li l-komunikazzjoni bejn l-ispazji hija permessa awtomatikament.

Bħal ħafna mill-komponenti Kubernetes, il-politiki tan-netwerk jgħixu fi spazju tal-isem speċifiku. Fil-blokk metadata tista' tispeċifika għal liema spazju tappartjeni l-politika:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: my-namespace  # <<<
spec:
...

Jekk l-ispazju tal-isem mhuwiex speċifikat b'mod espliċitu fil-metadejta, is-sistema tuża l-ispazju tal-isem speċifikat f'kubectl (b'mod awtomatiku namespace=default):

kubectl apply -n my-namespace -f namespace.yaml

jien nirrekomandalek speċifika namespace b'mod espliċitu, sakemm ma tkunx qed tikteb politika li timmira għal bosta spazji tal-isem f'daqqa.

Il-prinċipali element podSelector fil-politika se tagħżel imżiewed mill-ispazju tal-isem li jappartjeni għalih il-politika (huwa mċaħħad aċċess għall-imżiewed minn spazju tal-isem ieħor).

Bl-istess mod, podSelectors fi blokki tad-dħul u l-ħruġ jistgħu jagħżlu biss imżiewed mill-ispazju tal-isem tagħhom stess, sakemm ovvjament ma tgħaqqadhomx magħhom namespaceSelector (dan se jiġi diskuss fit-taqsima "Iffiltra mill-ispazji tal-isem u l-imżiewed").

Regoli dwar l-Ismijiet tal-Politika

L-ismijiet tal-politika huma uniċi fl-istess spazju tal-isem. Ma jistax ikun hemm żewġ policies bl-istess isem fl-istess spazju, iżda jista’ jkun hemm policies bl-istess isem fi spazji differenti. Dan huwa utli meta trid terġa' tapplika l-istess politika f'diversi spazji.

B'mod speċjali jogħġobni wieħed mill-metodi tal-ismijiet. Tikkonsisti fil-kombinazzjoni tal-isem tal-ispazju tal-isem mal-miżwed fil-mira. Pereżempju:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres  # <<<
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Tikketti

Tista 'tehmeż tikketti tad-dwana ma' oġġetti Kubernetes, bħal imżiewed u spazji tal-isem. Tikketti (tikketti - tikketti) huma l-ekwivalenti ta 'tikketti fil-sħaba. Il-politiki tan-netwerk Kubernetes jużaw tikketti biex jagħżlu imżiewedli għalihom japplikaw:

podSelector:
  matchLabels:
    role: db

… jew spazji tal-isemli għalihom japplikaw. Dan l-eżempju jagħżel il-miżwed kollha fl-ispazji tal-isem bit-tikketti korrispondenti:

namespaceSelector:
  matchLabels:
    project: myproject

Attenzjoni waħda: meta tuża namespaceSelector kun żgur li l-ispazji tal-isem li tagħżel fihom it-tikketta t-tajba. Kun konxju li built-in namespaces bħal default и kube-system, awtomatikament ma fihomx tikketti.

Tista' żżid tikketta ma' spazju bħal dan:

kubectl label namespace default namespace=default

Fl-istess ħin, namespace fit-taqsima metadata għandha tirreferi għall-isem attwali tal-ispazju, mhux it-tikketta:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default   # <<<
spec:
...

Sors u destinazzjoni

Il-politiki tal-firewall jikkonsistu f'regoli b'sorsi u destinazzjonijiet. Il-politiki tan-netwerk Kubernetes huma definiti għal mira - sett ta 'miżwed li japplikaw għalihom - u mbagħad jistabbilixxu regoli għad-dħul u/jew il-ħruġ tat-traffiku. Fl-eżempju tagħna, il-mira tal-politika se tkun il-miżwed kollha fl-ispazju tal-isem default b'tikketta biċ-ċavetta app u t-tifsira db:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: db   # <<<
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà
Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Subsezzjoni ingress f'din il-politika, tiftaħ it-traffiku deħlin għall-imżiewed fil-mira. Fi kliem ieħor, id-dħul huwa s-sors u l-mira hija d-destinazzjoni korrispondenti. Bl-istess mod, il-ħruġ huwa d-destinazzjoni u l-mira hija s-sors tagħha.

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Dan huwa ekwivalenti għal żewġ regoli tal-firewall: Ingress → Target; Goal → Ħruġ.

Ħruġ u DNS (importanti!)

Billi tillimita t-traffiku ħerġin, tagħti attenzjoni speċjali lid-DNS - Kubernetes juża dan is-servizz biex jimmappa s-servizzi għal indirizzi IP. Pereżempju, il-politika li ġejja mhux se taħdem għax ma ppermettiex l-applikazzjoni balance aċċess DNS:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  policyTypes:
  - Egress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Tista' tirranġaha billi tiftaħ aċċess għas-servizz DNS:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:               # <<<
    ports:            # <<<
    - protocol: UDP   # <<<
      port: 53        # <<<
  policyTypes:
  - Egress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

L-aħħar element to hija vojta, u għalhekk indirettament tagħżel il-miżwed kollha fl-ispazji tal-isem kollha, li jippermetti balance ibgħat mistoqsijiet DNS lis-servizz Kubernetes xieraq (normalment jaħdem fl-ispazju kube-system).

Dan l-approċċ jaħdem, madankollu permissiv żżejjed u mhux sigur, għaliex tippermetti li mistoqsijiet DNS jiġu diretti barra l-cluster.

Tista' ttejjebha fi tliet passi suċċessivi.

1. Ħalli mistoqsijiet DNS biss внутри cluster billi żżid namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:
    - namespaceSelector: {} # <<<
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

2. Ħalli mistoqsijiet DNS fl-ispazju tal-isem biss kube-system.

Biex tagħmel dan għandek bżonn iżżid tikketta mal-ispazju tal-isem kube-system: kubectl label namespace kube-system namespace=kube-system - u ikteb fil-politika bl-użu namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
  - to:
    - namespaceSelector:         # <<<
        matchLabels:             # <<<
          namespace: kube-system # <<<
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

3. Nies paranojde jistgħu jmorru saħansitra aktar u jillimitaw mistoqsijiet DNS għal servizz DNS speċifiku fil kube-system. It-taqsima "Iffiltra mill-ispazji tal-isem U l-imżiewed" tgħidlek kif tikseb dan.

Għażla oħra hija li ssolvi d-DNS fil-livell tal-ispazju tal-isem. F'dan il-każ, ma jkunx hemm bżonn li jinfetaħ għal kull servizz:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.dns
  namespace: default
spec:
  podSelector: {} # <<<
  egress:
  - to:
    - namespaceSelector: {}
    ports:
    - protocol: UDP
      port: 53
  policyTypes:
  - Egress

Vojta podSelector jagħżel il-miżwed kollha fl-ispazju tal-isem.

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

L-ewwel logħba u ordni ta’ regola

Fil-firewalls konvenzjonali, l-azzjoni (Ħalli jew Iċħad) fuq pakkett hija determinata mill-ewwel regola li tissodisfa. F'Kubernetes, l-ordni tal-politiki ma jimpurtax.

B'mod awtomatiku, meta l-ebda politika ma tkun stabbilita, il-komunikazzjonijiet bejn il-miżwed huma permessi u jistgħu jiskambjaw informazzjoni liberament. Ladarba tibda tifformula l-politiki, kull pod affettwat minn tal-inqas waħda minnhom issir iżolata skont id-disġunzjoni (JEW loġika) tal-politiki kollha li għażlu. Il-miżwed mhux affettwati minn ebda politika jibqgħu miftuħa.

Tista 'tbiddel din l-imġieba billi tuża regola ta' tqaxxir.

Ir-regola tat-tqaxxir (“Ċaħda”)

Il-politiki tal-firewall tipikament jiċħdu kwalunkwe traffiku li mhuwiex permess b'mod espliċitu.

M'hemm l-ebda azzjoni ta 'ċaħda f'Kubernetes, madankollu, effett simili jista 'jinkiseb b'politika regolari (permissiva) billi tagħżel grupp vojt ta' mżiewed tas-sors (dħul):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Din il-politika tagħżel il-miżwed kollha fl-ispazju tal-isem u tħalli d-dħul mhux definit, u tiċħad it-traffiku kollu li jkun dieħel.

B'mod simili, tista' tirrestrinġi t-traffiku kollu ħierġa minn spazju tal-isem:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-egress
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Jekk jogħġbok innota li kwalunkwe politika addizzjonali li tippermetti t-traffiku għall-imżiewed fl-ispazju tal-isem se tieħu preċedenza fuq din ir-regola (simili għaż-żieda ta' regola ta' permess qabel regola ta' ċaħda f'konfigurazzjoni ta' firewall).

Ħalli kollox (Kull-Kull-Kull-Ħalli)

Biex toħloq politika Ħalli Kollha, trid tissupplimenta l-politika Tiċħad hawn fuq b'element vojt ingress:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
  namespace: default
spec:
  podSelector: {}
  ingress: # <<<
  - {}     # <<<
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Jippermetti aċċess minn il-miżwed kollha fl-ispazji tal-isem kollha (u l-IP kollha) għal kwalunkwe pod fl-ispazju tal-isem default. Din l-imġieba hija attivata b'mod awtomatiku, għalhekk normalment ma teħtieġx li tiġi definita aktar. Madankollu, xi kultant jista 'jkollok bżonn tiddiżattiva temporanjament xi permessi speċifiċi biex tiddijanjostika l-problema.

Ir-regola tista' titnaqqas biex tippermetti aċċess biss għal sett speċifiku ta 'miżwed (app:balance) fl-ispazju tal-isem default:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-to-balance
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: balance
  ingress: 
  - {}
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Il-politika li ġejja tippermetti t-traffiku kollu tad-dħul u l-ħruġ, inkluż l-aċċess għal kwalunkwe IP barra l-cluster:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  ingress:
  - {}
  egress:
  - {}
  policyTypes:
  - Ingress
  - Egress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà
Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Jikkombinaw Politiki Multipli

Il-politiki huma kkombinati bl-użu JEW loġiku fi tliet livelli; Il-permessi ta' kull pod huma stabbiliti skont id-disjunction tal-politiki kollha li jaffettwawh:

1. Fl-għelieqi from и to Jistgħu jiġu definiti tliet tipi ta’ elementi (li kollha huma kkombinati bl-użu OR):

  • namespaceSelector — jagħżel l-ispazju tal-isem kollu;
  • podSelector — jagħżel imżiewed;
  • ipBlock — tagħżel subnet.

Barra minn hekk, in-numru ta 'elementi (anke dawk identiċi) fis-subsezzjonijiet from/to mhux limitat. Kollha kemm huma se jingħaqdu b'OR loġiku.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    - podSelector:
        matchLabels:
          app: admin
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

2. Ġewwa t-taqsima tal-politika ingress jista' jkollu ħafna elementi from (magħquda minn OR loġiku). Bl-istess mod, sezzjoni egress jistgħu jinkludu ħafna elementi to (magħquda wkoll b'disġunzjoni):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
  - from:
    - podSelector:
        matchLabels:
          app: admin
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

3. Politika differenti huma kkombinati wkoll ma 'OR loġiku

Iżda meta tgħaqqadhom, hemm limitazzjoni waħda li fuqha rrimarka Chris Cooney: Kubernetes jista 'biss jgħaqqad politiki ma' differenti policyTypes (Ingress jew Egress). Il-politiki li jiddefinixxu d-dħul (jew il-ħruġ) se jissostitwixxu lil xulxin.

Relazzjoni bejn namespaces

B'mod awtomatiku, il-qsim ta' informazzjoni bejn ispazji tal-isem huwa permess. Dan jista' jinbidel bl-użu ta' politika ta' ċaħda li tirrestrinġi t-traffiku ħerġin u/jew li jidħol fl-ispazju tal-isem (ara "Regola ta' tqaxxir" hawn fuq).

Ladarba tkun imblukkat l-aċċess għal spazju tal-isem (ara r-"Regola tal-Istrippjar" hawn fuq), tista' tagħmel eċċezzjonijiet għall-politika ta' ċaħda billi tippermetti konnessjonijiet minn spazju tal-isem speċifiku billi tuża namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector: # <<<
        matchLabels:
          namespace: default
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Bħala riżultat, il-miżwed kollha fl-ispazju tal-isem default se jkollhom aċċess għall-imżiewed postgres fl-ispazju tal-isem database. Imma x'jiġri jekk trid tiftaħ aċċess għal postgres imżiewed speċifiċi biss fl-ispazju tal-isem default?

Iffiltra mill-ispazji tal-isem u l-imżiewed

Kubernetes verżjoni 1.11 u ogħla jippermettilek tgħaqqad l-operaturi namespaceSelector и podSelector billi tuża AND loġiku. Jidher bħal dan:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          namespace: default
      podSelector: # <<<
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Għaliex dan huwa interpretat bħala AND minflok is-soltu OR?

innota li podSelector ma jibda b'sing. F'YAML dan ifisser li podSelector u bilwieqfa quddiemu namespaceSelector irreferi għall-istess element tal-lista. Għalhekk, huma kkombinati ma 'AND loġiku.

Żieda sing qabel podSelector se jirriżulta fil-ħolqien ta’ element ġdid ta’ lista, li se jkun ikkombinat ma’ dak preċedenti namespaceSelector bl-użu loġiku OR.

Biex tagħżel imżiewed b'tikketta speċifika fl-ispazji tal-ismijiet kollha, daħħal vojt namespaceSelector:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector: {}
      podSelector:
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Tikketti multipli jingħaqdu ma' I

Ir-regoli għal firewall b'oġġetti multipli (hosts, netwerks, gruppi) huma kkombinati bl-użu JEW loġiku. Ir-regola li ġejja taħdem jekk is-sors tal-pakkett jaqbel Host_1 Or Host_2:

| Source | Destination | Service | Action |
| ----------------------------------------|
| Host_1 | Subnet_A    | HTTPS   | Allow  |
| Host_2 |             |         |        |
| ----------------------------------------|

Għall-kuntrarju, fil-Kubernetes id-diversi tikketti fil podSelector jew namespaceSelector huma kkombinati ma' AND loġiku. Pereżempju, ir-regola li ġejja tagħżel imżiewed li għandhom iż-żewġ tikketti, role=db И version=v2:

podSelector:
  matchLabels:
    role: db
    version: v2

L-istess loġika tapplika għat-tipi kollha ta’ operaturi: seletturi tal-mira tal-politika, seletturi tal-pods, u seletturi tal-ispazji tal-isem.

Subnets u indirizzi IP (IPBlocks)

Il-firewalls jużaw VLANs, indirizzi IP, u subnets biex jissegmentaw netwerk.

F'Kubernetes, l-indirizzi IP huma assenjati lill-imżiewed awtomatikament u jistgħu jinbidlu ta' spiss, għalhekk it-tikketti jintużaw biex jintgħażlu l-imżiewed u l-ispazji tal-isem fil-politiki tan-netwerk.

Subnets (ipBlocks) jintużaw meta jiġu mmaniġġjati konnessjonijiet esterni (Tramuntana-Nofsinhar) li jidħlu (dħul) jew ħerġin (ħruġ). Pereżempju, din il-politika tiftaħ għall-imżiewed kollha mill-ispazju tal-isem default aċċess għas-servizz Google DNS:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-dns
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 8.8.8.8/32
    ports:
    - protocol: UDP
      port: 53

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Is-selettur tal-miżwed vojt f'dan l-eżempju jfisser "agħżel il-miżwed kollha fl-ispazju tal-isem."

Din il-politika tippermetti biss aċċess għal 8.8.8.8; aċċess għal kwalunkwe IP ieħor huwa pprojbit. Allura, essenzjalment, inti bblokkajt l-aċċess għas-servizz intern tad-DNS Kubernetes. Jekk xorta trid tiftaħha, indika dan b'mod espliċitu.

Normalment ipBlocks и podSelectors huma esklussivi reċiprokament, peress li l-indirizzi IP interni tal-imżiewed ma jintużawx fihom ipBlocks. Billi tindika imżiewed IP interni, fil-fatt se tippermetti konnessjonijiet lejn/minn imżiewed b'dawn l-indirizzi. Fil-prattika, ma tkunx taf liema indirizz IP tuża, u għalhekk m'għandhomx jintużaw biex tagħżel imżiewed.

Bħala kontroeżempju, il-politika li ġejja tinkludi l-IPs kollha u għalhekk tippermetti aċċess għall-pods l-oħra kollha:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-any
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Tista 'tiftaħ aċċess biss għal IPs esterni, esklużi l-indirizzi IP interni tal-imżiewed. Pereżempju, jekk is-subnet tal-pod tiegħek hija 10.16.0.0/14:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: egress-any
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 10.16.0.0/14

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Portijiet u protokolli

Tipikament imżiewed jisimgħu port wieħed. Dan ifisser li inti tista 'sempliċement ma tispeċifikax in-numri tal-port fil-politiki u tħalli kollox bħala default. Madankollu, huwa rrakkomandat li l-politiki jsiru kemm jista 'jkun restrittivi, għalhekk f'xi każijiet xorta tista' tispeċifika l-portijiet:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    - podSelector:
        matchLabels:
          app: admin
    ports:             # <<<
      - port: 443      # <<<
        protocol: TCP  # <<<
      - port: 80       # <<<
        protocol: TCP  # <<<
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Innota li s-selettur ports japplika għall-elementi kollha fil-blokk to jew from, li fih. Biex tispeċifika portijiet differenti għal settijiet differenti ta 'elementi, maqsuma ingress jew egress f’diversi subtaqsimiet ma’ to jew from u f'kull reġistru l-portijiet tiegħek:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default.postgres
  namespace: default
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: indexer
    ports:             # <<<
     - port: 443       # <<<
       protocol: TCP   # <<<
  - from:
    - podSelector:
        matchLabels:
          app: admin
    ports:             # <<<
     - port: 80        # <<<
       protocol: TCP   # <<<
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
  - Ingress

Introduzzjoni għall-Politiki tan-Netwerk ta' Kubernetes għall-Professjonisti tas-Sigurtà

Operazzjoni tal-port default:

  • Jekk tħalli barra d-definizzjoni tal-port kompletament (ports), dan ifisser il-protokolli kollha u l-portijiet kollha;
  • Jekk tħalli barra d-definizzjoni tal-protokoll (protocol), dan ifisser TCP;
  • Jekk tħalli barra d-definizzjoni tal-port (port), dan ifisser il-portijiet kollha.

L-aħjar prattika: Tistrieħx fuq valuri awtomatiċi, speċifika dak li għandek bżonn b'mod espliċitu.

Jekk jogħġbok innota li trid tuża port ports, mhux portijiet tas-servizz (aktar dwar dan fil-paragrafu li jmiss).

Il-politiki huma definiti għall-imżiewed jew is-servizzi?

Tipikament, il-miżwed f'Kubernetes jaċċessaw lil xulxin permezz ta' servizz - bilanċ virtwali tat-tagħbija li jidderieġi mill-ġdid it-traffiku lejn il-miżwed li jimplimentaw is-servizz. Tista' taħseb li l-politiki tan-netwerk jikkontrollaw l-aċċess għas-servizzi, iżda dan mhux il-każ. Il-politiki tan-netwerk Kubernetes jaħdmu fuq port ports, mhux portijiet tas-servizz.

Pereżempju, jekk servizz jisma' l-port 80, iżda jidderieġi mill-ġdid it-traffiku lejn il-port 8080 tal-miżwed tiegħu, trid tispeċifika eżattament 8080 fil-politika tan-netwerk.

Tali mekkaniżmu għandu jitqies bħala subottimali: jekk l-istruttura interna tas-servizz (il-portijiet li minnhom jisimgħu l-imżiewed) tinbidel, il-politiki tan-netwerk ikollhom jiġu aġġornati.

Approċċ arkitettoniku ġdid li juża Service Mesh (per eżempju, ara dwar Istio hawn taħt - madwar trad.) jippermettilek tlaħħaq ma 'din il-problema.

Huwa meħtieġ li tirreġistra kemm Ingress kif ukoll Egress?

It-tweġiba fil-qosor hija iva, sabiex il-pod A jikkomunika mal-pod B, għandu jitħalla joħloq konnessjoni ħerġin (għal dan għandek bżonn tikkonfigura politika ta 'ħruġ), u l-pod B għandu jkun jista' jaċċetta konnessjoni li tidħol ( għal dan, għalhekk, għandek bżonn politika ta 'dħul). policy).

Madankollu, fil-prattika, tista 'tistrieħ fuq il-politika default biex tippermetti konnessjonijiet f'direzzjoni waħda jew fiż-żewġ direzzjonijiet.

Jekk xi pod-sors se jintgħażlu minn wieħed jew aktar ħruġ-politiċi, ir-restrizzjonijiet imposti fuqha se jkunu determinati mid-disjunction tagħhom. F'dan il-każ, ser ikollok bżonn tippermetti b'mod espliċitu konnessjoni mal-pod -destinatarju. Jekk pod ma jintgħażel minn xi politika, it-traffiku ħierġa (ħruġ) tiegħu huwa permess awtomatikament.

Bl-istess mod, id-destin tal-miżwed huwadestinatarju, magħżula minn wieħed jew aktar ingress-politiċi, se jiġu determinati mid-disjunction tagħhom. F'dan il-każ, trid espliċitament tħalliha tirċievi traffiku mill-pod tas-sors. Jekk pod ma jintgħażel minn ebda politika, it-traffiku kollu li jidħol għalih huwa permess awtomatikament.

Ara Stateful jew Stateless hawn taħt.

Zkuk

Il-politiki tan-netwerk Kubernetes ma jistgħux jirreġistraw it-traffiku. Dan jagħmilha diffiċli biex jiġi ddeterminat jekk politika tkunx qed taħdem kif maħsub u jikkomplika ħafna l-analiżi tas-sigurtà.

Kontroll tat-traffiku għal servizzi esterni

Il-politiki tan-netwerk ta' Kubernetes ma jippermettux li tispeċifika isem ta' dominju kwalifikat bis-sħiħ (DNS) fit-taqsimiet tal-ħruġ. Dan il-fatt iwassal għal inkonvenjent sinifikanti meta wieħed jipprova jirrestrinġi t-traffiku għal destinazzjonijiet esterni li m'għandhomx indirizz IP fiss (bħal aws.com).

Kontroll tal-Politika

Il-firewalls iwissuk jew saħansitra jirrifjutaw li jaċċettaw il-politika ħażina. Kubernetes jagħmel ukoll xi verifika. Meta tistabbilixxi politika ta' netwerk permezz ta' kubectl, Kubernetes jista' jiddikjara li mhux korrett u jirrifjuta li jaċċettaha. F'każijiet oħra, Kubernetes se jieħu l-politika u jimliha bid-dettalji neqsin. Jistgħu jidhru bl-użu tal-kmand:

kubernetes get networkpolicy <policy-name> -o yaml

Żomm f’moħħok li s-sistema ta’ validazzjoni ta’ Kubernetes mhix infallibbli u tista’ titlef xi tipi ta’ żbalji.

Исполнение

Kubernetes ma jimplimentax politiki tan-netwerk innifsu, iżda huwa sempliċiment portal API li jiddelega l-piż tal-kontroll lil sistema sottostanti msejħa Container Networking Interface (CNI). L-issettjar ta 'politiki fuq cluster Kubernetes mingħajr ma jiġi assenjat is-CNI xieraq huwa l-istess bħall-ħolqien ta' politiki fuq server ta 'ġestjoni tal-firewall mingħajr ma mbagħad tinstallahom fuq firewalls. Huwa f'idejk li tiżgura li jkollok CNI deċenti jew, fil-każ ta' pjattaformi Kubernetes, ospitat fil-cloud (tista' tara l-lista tal-fornituri hawn — madwar. trans.), jippermettu politiki tan-netwerk li se jistabbilixxu CNI għalik.

Innota li Kubernetes mhux se twissik jekk tissettja politika tan-netwerk mingħajr is-CNI helper xieraq.

Statali jew Apolidi?

Is-CNIs kollha tal-Kubernetes li ltqajt magħhom huma stateful (pereżempju, Calico juża Linux conntrack). Dan jippermetti lill-pod li jirċievi tweġibiet fuq il-konnessjoni TCP li beda mingħajr ma jkollu għalfejn jerġa' jistabbilixxiha. Madankollu, m'inix konxju ta' standard Kubernetes li jiggarantixxi l-istat.

Ġestjoni Avvanzata tal-Politika tas-Sigurtà

Hawn huma xi modi kif ittejjeb l-infurzar tal-politika tas-sigurtà f'Kubernetes:

  1. Il-mudell arkitettoniku Service Mesh juża kontenituri sidecar biex jipprovdi telemetrija dettaljata u kontroll tat-traffiku fil-livell tas-servizz. Bħala eżempju nistgħu nieħdu Istio.
  2. Xi wħud mill-bejjiegħa tas-CNI estendew l-għodod tagħhom biex imorru lil hinn mill-politiki tan-netwerk Kubernetes.
  3. Tufin Orca Jipprovdi viżibilità u awtomazzjoni tal-politiki tan-netwerk Kubernetes.

Il-pakkett Tufin Orca jamministra l-politiki tan-netwerk Kubernetes (u huwa s-sors tal-screenshots hawn fuq).

informazzjoni addizzjonali

Konklużjoni

Il-politiki tan-netwerk Kubernetes joffru sett tajjeb ta 'għodod għas-segmentazzjoni tal-clusters, iżda mhumiex intuwittivi u għandhom ħafna irqaq. Minħabba din il-kumplessità, nemmen li ħafna politiki tal-clusters eżistenti huma buggy. Soluzzjonijiet possibbli għal din il-problema jinkludu l-awtomatizzazzjoni tad-definizzjonijiet tal-politika jew l-użu ta’ għodod oħra ta’ segmentazzjoni.

Nispera li din il-gwida tgħin biex tiċċara xi mistoqsijiet u ssolvi kwistjonijiet li tista 'tiltaqa' magħhom.

PS minn traduttur

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment