የ ABC ደህንነት በኩበርኔትስ፡ ማረጋገጫ፣ ፍቃድ፣ ኦዲት

የ ABC ደህንነት በኩበርኔትስ፡ ማረጋገጫ፣ ፍቃድ፣ ኦዲት

ፈጥኖም ይሁን ዘግይቶ በማንኛውም ስርዓት አሠራር ውስጥ የደህንነት ጉዳይ ይነሳል-ማረጋገጫ ማረጋገጥ, የመብቶች መለያየት, ኦዲት እና ሌሎች ተግባራት. ለ Kubernetes አስቀድሞ ተፈጥሯል። ብዙ መፍትሄዎችበጣም አስቸጋሪ በሆኑ አካባቢዎች ውስጥ እንኳን ደረጃዎችን ማሟላት እንዲችሉ የሚያስችልዎ ... ተመሳሳይ ቁሳቁስ በ K8 ዎች ውስጥ በተገነቡት ስልቶች ውስጥ በተተገበሩ የደህንነት መሰረታዊ ገጽታዎች ላይ ያተኮረ ነው። በመጀመሪያ ደረጃ, ከ Kubernetes ጋር ለመተዋወቅ ለጀመሩት ጠቃሚ ይሆናል - ከደህንነት ጋር የተያያዙ ጉዳዮችን ለማጥናት እንደ መነሻ.

ማረጋገጫ

በ Kubernetes ውስጥ ሁለት አይነት ተጠቃሚዎች አሉ፡-

  • የአገልግሎት መለያዎች - በ Kubernetes API የሚተዳደሩ መለያዎች;
  • ተጠቃሚዎች - በውጫዊ እና ገለልተኛ አገልግሎቶች የሚተዳደሩ “መደበኛ” ተጠቃሚዎች።

በእነዚህ ዓይነቶች መካከል ያለው ዋነኛው ልዩነት ለአገልግሎት መለያዎች በ Kubernetes API ውስጥ ልዩ ዕቃዎች አሉ (እነሱም ይባላሉ - ServiceAccounts) በስም ቦታ እና በክላስተር ውስጥ የተከማቸ የምስጢር አይነት ነገሮች የፈቀዳ ውሂብ ስብስብ ጋር የተሳሰሩ። እንደነዚህ ያሉ ተጠቃሚዎች (የአገልግሎት መለያዎች) በዋናነት በKubernetes ክላስተር ውስጥ የሚሰሩ ሂደቶችን ወደ Kubernetes API የመዳረሻ መብቶችን ለማስተዳደር የታለሙ ናቸው።

ተራ ተጠቃሚዎች በ Kubernetes API ውስጥ ግቤቶች የላቸውም፡ በውጫዊ ስልቶች መተዳደር አለባቸው። እነሱ የታሰቡት ከጥቅሉ ውጭ ለሚኖሩ ሰዎች ወይም ሂደቶች ነው።

እያንዳንዱ የኤፒአይ ጥያቄ ከአገልግሎት መለያ፣ ከተጠቃሚ ወይም ከስም-አልባ ተደርጎ ይቆጠራል።

የተጠቃሚ ማረጋገጫ ውሂብ የሚከተሉትን ያጠቃልላል

  • የተጠቃሚ ስም - የተጠቃሚ ስም (ጉዳይ ሚስጥራዊነት ያለው!);
  • UID - በማሽን ሊነበብ የሚችል የተጠቃሚ መለያ ሕብረቁምፊ "ከተጠቃሚ ስም የበለጠ ወጥ እና ልዩ";
  • ቡድኖች - ተጠቃሚው የሚገኝባቸው ቡድኖች ዝርዝር;
  • ተጨማሪ - በፈቀዳው ዘዴ ሊጠቀሙባቸው የሚችሉ ተጨማሪ መስኮች።

ኩበርኔትስ ብዙ ቁጥር ያላቸው የማረጋገጫ ዘዴዎችን መጠቀም ይችላል፡- X509 የምስክር ወረቀቶች፣ ተሸካሚ ቶከኖች፣ አረጋጋጭ ፕሮክሲ፣ HTTP Basic Auth። እነዚህን ስልቶች በመጠቀም ብዙ ቁጥር ያላቸውን የፍቃድ ዕቅዶች መተግበር ይችላሉ፡ ከማይንቀሳቀስ ፋይል የይለፍ ቃሎች እስከ OpenID OAuth2።

ከዚህም በላይ ብዙ የፍቃድ እቅዶችን በአንድ ጊዜ መጠቀም ይቻላል. በነባሪ፣ ክላስተር የሚከተሉትን ይጠቀማል።

  • የአገልግሎት መለያ ምልክቶች - ለአገልግሎት መለያዎች;
  • X509 - ለተጠቃሚዎች.

የአገልግሎት መለያዎችን ስለማስተዳደር ጥያቄው ከዚህ ጽሑፍ ወሰን በላይ ነው, ነገር ግን በዚህ ጉዳይ ላይ እራሳቸውን በበለጠ ዝርዝር ማወቅ ለሚፈልጉ, ለመጀመር እመክራለሁ. ኦፊሴላዊ ሰነዶች ገጾች. የ X509 የምስክር ወረቀቶች እንዴት እንደሚሠሩ የሚለውን ጉዳይ በዝርዝር እንመለከታለን።

የምስክር ወረቀቶች ለተጠቃሚዎች (X.509)

ከእውቅና ማረጋገጫዎች ጋር አብሮ ለመስራት የተለመደው መንገድ የሚከተሉትን ያጠቃልላል ።

  • ቁልፍ ትውልድ;
    mkdir -p ~/mynewuser/.certs/
    openssl genrsa -out ~/.certs/mynewuser.key 2048
  • የምስክር ወረቀት ጥያቄ ማመንጨት፡-
    openssl req -new -key ~/.certs/mynewuser.key -out ~/.certs/mynewuser.csr -subj "/CN=mynewuser/O=company"
  • የ Kubernetes ክላስተር CA ቁልፎችን በመጠቀም የምስክር ወረቀት ጥያቄን ማካሄድ ፣ የተጠቃሚ የምስክር ወረቀት ማግኘት (የምስክር ወረቀት ለማግኘት የ Kubernetes ክላስተር CA ቁልፍ መዳረሻ ያለው መለያ መጠቀም አለብዎት ፣ ይህም በነባሪነት ይገኛል /etc/kubernetes/pki/ca.key):
    openssl x509 -req -in ~/.certs/mynewuser.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out ~/.certs/mynewuser.crt -days 500
  • የማዋቀሪያ ፋይል መፍጠር;
    • የክላስተር መግለጫ (ለተወሰነ የክላስተር ጭነት የCA ሰርቲፊኬት ፋይል አድራሻ እና ቦታ ይግለጹ)
      kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --server=https://192.168.100.200:6443
    • ወይም እንዴት አይደለምየሚመከር አማራጭ - የስር ሰርተፍኬቱን መግለጽ የለብዎትም (ከዚያ kubectl የክላስተር ኤፒ-አገልጋዩን ትክክለኛነት አያረጋግጥም)
      kubectl config set-cluster kubernetes  --insecure-skip-tls-verify=true --server=https://192.168.100.200:6443
    • ተጠቃሚን ወደ ውቅር ፋይል ማከል
      kubectl config set-credentials mynewuser --client-certificate=.certs/mynewuser.crt  --client-key=.certs/mynewuser.key
    • አውድ መጨመር፡-
      kubectl config set-context mynewuser-context --cluster=kubernetes --namespace=target-namespace --user=mynewuser
    • ነባሪ አውድ ምደባ፡-
      kubectl config use-context mynewuser-context

ከላይ ከተጠቀሱት ማጭበርበሮች በኋላ, በፋይሉ ውስጥ .kube/config እንደዚህ ያለ ውቅረት ይፈጠራል-

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /etc/kubernetes/pki/ca.crt
    server: https://192.168.100.200:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: target-namespace
    user: mynewuser
  name: mynewuser-context
current-context: mynewuser-context
kind: Config
preferences: {}
users:
- name: mynewuser
  user:
    client-certificate: /home/mynewuser/.certs/mynewuser.crt
    client-key: /home/mynewuser/.certs/mynewuser.key

በአካውንቶች እና በአገልጋዮች መካከል ያለውን ውቅረት ለማስተላለፍ ቀላል ለማድረግ የሚከተሉትን ቁልፎች እሴቶች ማርትዕ ጠቃሚ ነው-

  • certificate-authority
  • client-certificate
  • client-key

ይህንን ለማድረግ በእነሱ ውስጥ የተገለጹትን ፋይሎች base64 ን በመጠቀም ኮድ ማድረግ እና በማዋቀሩ ውስጥ መመዝገብ ይችላሉ ፣ ቅጥያውን ወደ ቁልፎቹ ስም ይጨምሩ። -data፣ ማለትም እ.ኤ.አ. ተቀብለዋል certificate-authority-data እና የመሳሰሉትን.

ከ kubeadm ጋር የምስክር ወረቀቶች

ከመለቀቁ ጋር ኩበሬቶች 1.15 በአልፋ ሥሪት ለሚሰጠው ድጋፍ ከምስክር ወረቀቶች ጋር መሥራት በጣም ቀላል ሆኗል kubeadm መገልገያ. ለምሳሌ፣ አሁን በተጠቃሚ ቁልፎች የውቅር ፋይል ማመንጨት ምን ሊመስል ይችላል፡-

kubeadm alpha kubeconfig user --client-name=mynewuser --apiserver-advertise-address 192.168.100.200

NB: ያስፈልጋል አድራሻ ማስታወቂያ በነባሪ በሆነው በ api-server ውቅር ውስጥ ሊገኝ ይችላል። /etc/kubernetes/manifests/kube-apiserver.yaml.

የተገኘው ውቅረት ወደ stdout ይወጣል። ውስጥ መቀመጥ አለበት። ~/.kube/config የተጠቃሚ መለያ ወይም በአከባቢ ተለዋዋጭ ውስጥ ወደተገለጸው ፋይል KUBECONFIG.

በጥልቀት ቆፍሩ

የተገለጹትን ጉዳዮች በጥልቀት ለመረዳት ለሚፈልጉ፡-

ፈቃድ

ነባሪው የተፈቀደለት መለያ በክላስተር ላይ የመስራት መብት የለውም። ፈቃዶችን ለመስጠት ኩበርኔትስ የፍቃድ አሰጣጥ ዘዴን ተግባራዊ ያደርጋል።

ከስሪት 1.6 በፊት ኩበርኔትስ የሚባል የፍቃድ አይነት ተጠቅሟል አቢክ (በባህሪ ላይ የተመሰረተ የመዳረሻ መቆጣጠሪያ). ስለ እሱ ዝርዝሮች በ ውስጥ ይገኛሉ ኦፊሴላዊ ሰነዶች. ይህ አካሄድ በአሁኑ ጊዜ እንደ ውርስ ይቆጠራል፣ ነገር ግን አሁንም ከሌሎች የማረጋገጫ አይነቶች ጋር ሊጠቀሙበት ይችላሉ።

የአሁኑ (እና የበለጠ ተለዋዋጭ) የመዳረሻ መብቶችን ለክላስተር የሚከፋፈልበት መንገድ ይባላል አር.ቢ.ሲ (ሚና ላይ የተመሠረተ የመዳረሻ መቆጣጠሪያ). ከስሪት ጀምሮ የተረጋጋ ነው ተብሏል። ኩበሬቶች 1.8. RBAC በግልጽ ያልተፈቀዱ ነገሮች ሁሉ የተከለከሉበትን የመብቶች ሞዴል ተግባራዊ ያደርጋል።
RBACን ለማንቃት, Kubernetes api-server በመለኪያው መጀመር ያስፈልግዎታል --authorization-mode=RBAC. መመዘኛዎቹ በነባሪ በመንገዱ ላይ ከሚገኘው የ api-server ውቅር ጋር በማንፀባረቂያው ውስጥ ተቀምጠዋል /etc/kubernetes/manifests/kube-apiserver.yaml, በክፍል ውስጥ command. ነገር ግን፣ RBAC አስቀድሞ በነባሪነት ነቅቷል፣ ስለዚህ ምናልባት ስለሱ መጨነቅ የለብዎትም፡ ይህንን በዋጋ ማረጋገጥ ይችላሉ። authorization-mode (ቀደም ሲል በተጠቀሰው ውስጥ kube-apiserver.yaml). በነገራችን ላይ ከትርጉሞቹ መካከል ሌሎች የፍቃድ ዓይነቶች ሊኖሩ ይችላሉ (node, webhook, always allow), ነገር ግን የእነሱን ግምት ከቁሳዊው ወሰን ውጭ እንተዋለን.

በነገራችን ላይ አስቀድመን አትመናል ጽሑፍ ከRBAC ጋር የመሥራት መርሆዎችን እና ባህሪያትን በትክክል በዝርዝር በመግለጽ እራሴን በመሠረታዊ እና ምሳሌዎች አጭር ዝርዝር ውስጥ እገድባለሁ።

የሚከተሉት የኤፒአይ አካላት በኩበርኔትስ በRBAC በኩል መዳረሻን ለመቆጣጠር ያገለግላሉ፡-

  • Role и ClusterRole - የመዳረሻ መብቶችን ለመግለፅ የሚያገለግሉ ሚናዎች፡-
  • Role በስም ቦታ ውስጥ መብቶችን እንዲገልጹ ያስችልዎታል;
  • ClusterRole - በክላስተር ውስጥ፣ እንደ ኖዶች፣ ምንጭ ያልሆኑ ዩአርኤሎች (ለምሳሌ ከኩበርኔትስ ሀብቶች ጋር ያልተገናኘ - ለምሳሌ፣ /version, /logs, /api*);
  • RoleBinding и ClusterRoleBinding - ለማሰር ጥቅም ላይ ይውላል Role и ClusterRole ለተጠቃሚ፣ የተጠቃሚ ቡድን ወይም የአገልግሎት መለያ።

የሮል እና ሮሌቢንዲንግ አካላት በስም ቦታ የተገደቡ ናቸው፣ ማለትም. በተመሳሳይ የስም ቦታ ውስጥ መሆን አለበት. ነገር ግን፣ RoleBinding የአጠቃላይ ፈቃዶችን ስብስብ ለመፍጠር እና እነሱን ተጠቅመው መዳረሻን ለመቆጣጠር የሚያስችል ClusterRoleን ሊያመለክት ይችላል።

ሚናዎች የሚከተሉትን የያዙ ህጎችን በመጠቀም መብቶችን ይገልፃሉ-

  • የኤፒአይ ቡድኖች - ይመልከቱ ኦፊሴላዊ ሰነዶች በ apiGroups እና ውፅዓት kubectl api-resources;
  • ሀብቶች (ግብዓቶች: pod, namespace, deployment እናም ይቀጥላል.);
  • ግሶች (ግሶች: set, update እናም ይቀጥላል.).
  • የንብረት ስሞች (resourceNames) - ለጉዳዩ አንድ የተወሰነ ምንጭ መድረስ ሲፈልጉ, እና ለሁሉም የዚህ አይነት ሀብቶች አይደለም.

በ Kubernetes ውስጥ ስለ ፍቃድ የበለጠ ዝርዝር ትንታኔ በገጹ ላይ ሊገኝ ይችላል ኦፊሴላዊ ሰነዶች. ይልቁንስ (ወይም ከዚህ በተጨማሪ) ስራዋን የሚያሳዩ ምሳሌዎችን እሰጣለሁ።

የRBAC አካላት ምሳሌዎች

ቀላል Role, ይህም የፖዳዎች ዝርዝር እና ሁኔታ እንዲያገኙ እና በስም ቦታ ውስጥ እንዲቆጣጠሩ ያስችልዎታል target-namespace:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: target-namespace
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

ለምሳሌ: ClusterRoleየፖዳዎች ዝርዝር እና ሁኔታ እንዲያገኙ እና በጥቅሉ ውስጥ እንዲከታተሉ የሚያስችልዎ፡-

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  # секции "namespace" нет, так как ClusterRole задействует весь кластер
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

ለምሳሌ: RoleBinding, ይህም ተጠቃሚውን ይፈቅዳል mynewuser በስም ቦታ ውስጥ "አንብብ" ፖዶች my-namespace:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: target-namespace
subjects:
- kind: User
  name: mynewuser # имя пользователя зависимо от регистра!
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role # здесь должно быть “Role” или “ClusterRole”
  name: pod-reader # имя Role, что находится в том же namespace,
                   # или имя ClusterRole, использование которой
                   # хотим разрешить пользователю
  apiGroup: rbac.authorization.k8s.io

የክስተት ኦዲት

በስርዓተ-ፆታ የኩበርኔትስ አርክቴክቸር በሚከተለው መልኩ ሊወከል ይችላል።

የ ABC ደህንነት በኩበርኔትስ፡ ማረጋገጫ፣ ፍቃድ፣ ኦዲት

ጥያቄዎችን ለማስኬድ ኃላፊነት ያለው የኩበርኔትስ ቁልፍ አካል ነው። api-አገልጋይ. በክላስተር ላይ ያሉ ሁሉም ክዋኔዎች ያልፋሉ። ስለ እነዚህ ውስጣዊ ዘዴዎች በጽሁፉ ውስጥ የበለጠ ማንበብ ይችላሉየ kubectl ሩጫን ሲሮጡ በኩበርኔትስ ውስጥ ምን ይከሰታል?».

የስርዓት ኦዲት በነባሪነት የተሰናከለው Kubernetes ውስጥ አስደሳች ባህሪ ነው። ሁሉንም ጥሪዎች ወደ Kubernetes API እንዲገቡ ይፈቅድልዎታል። እርስዎ እንደሚገምቱት፣ የክላስተርን ሁኔታ ከመቆጣጠር እና ከመቀየር ጋር የተያያዙ ሁሉም ድርጊቶች የሚከናወኑት በዚህ ኤፒአይ ነው። ስለ ችሎታዎቹ ጥሩ መግለጫ (እንደተለመደው) በ ውስጥ ይገኛል። ኦፊሴላዊ ሰነዶች K8s በመቀጠል ርዕሱን በቀላል ቋንቋ ለማቅረብ እሞክራለሁ።

እና ስለዚህ, ኦዲት ማድረግን ለማንቃት, ከዚህ በታች በበለጠ ዝርዝር ውስጥ በተገለጹት በ api-server ውስጥ ሶስት አስፈላጊ መለኪያዎችን ወደ መያዣው ውስጥ ማለፍ አለብን ።

  • --audit-policy-file=/etc/kubernetes/policies/audit-policy.yaml
  • --audit-log-path=/var/log/kube-audit/audit.log
  • --audit-log-format=json

ከነዚህ ሶስት አስፈላጊ መመዘኛዎች በተጨማሪ ከኦዲት ጋር የተያያዙ ብዙ ተጨማሪ ቅንጅቶች አሉ፡ ከሎግ ማሽከርከር እስከ ዌብሆክ መግለጫዎች። የምዝግብ ማስታወሻ ማሽከርከር መለኪያዎች ምሳሌ፡

  • --audit-log-maxbackup=10
  • --audit-log-maxsize=100
  • --audit-log-maxage=7

ግን በእነሱ ላይ የበለጠ በዝርዝር አንቀመጥም - ሁሉንም ዝርዝሮች በ ውስጥ ማግኘት ይችላሉ። kube-apiserver ሰነድ.

ቀደም ሲል እንደተገለፀው ሁሉም መመዘኛዎች በአፒ-አገልጋይ ውቅር (በነባሪ) በማንፀባረቂያው ውስጥ ተቀምጠዋል /etc/kubernetes/manifests/kube-apiserver.yaml), በክፍል ውስጥ command. ወደ 3ቱ አስፈላጊ መለኪያዎች እንመለስ እና እነሱን እንመርምር።

  1. audit-policy-file - የኦዲት ፖሊሲን የሚገልጽ ወደ YAML ፋይል የሚወስድ መንገድ። ወደ ይዘቱ በኋላ እንመለሳለን, አሁን ግን ፋይሉ በ api-server ሂደት ​​መነበብ እንዳለበት አስተውያለሁ. ስለዚህ በማጠራቀሚያው ውስጥ መትከል አስፈላጊ ነው ፣ ለዚህም የሚከተለውን ኮድ ወደ ትክክለኛው የውቅር ክፍሎች ማከል ይችላሉ ።
      volumeMounts:
        - mountPath: /etc/kubernetes/policies
          name: policies
          readOnly: true
      volumes:
      - hostPath:
          path: /etc/kubernetes/policies
          type: DirectoryOrCreate
        name: policies
  2. audit-log-path - ወደ መዝገብ መዝገብ የሚወስደው መንገድ. መንገዱ እንዲሁም ለኤፒ-አገልጋይ ሂደት ተደራሽ መሆን አለበት፣ ስለዚህ መጫኑን በተመሳሳይ መንገድ እንገልፃለን።
      volumeMounts:
        - mountPath: /var/log/kube-audit
          name: logs
          readOnly: false
      volumes:
      - hostPath:
          path: /var/log/kube-audit
          type: DirectoryOrCreate
        name: logs
  3. audit-log-format - የኦዲት መዝገብ ቅርጸት. ነባሪው ነው። json፣ ግን የድሮው የጽሑፍ ቅርጸት እንዲሁ ይገኛል (legacy).

የኦዲት ፖሊሲ

አሁን የምዝግብ ማስታወሻ ፖሊሲን ስለሚገልጽ ስለተጠቀሰው ፋይል። የመጀመሪያው የኦዲት ፖሊሲ ጽንሰ-ሐሳብ ነው level, የመግቢያ ደረጃ. እነሱም የሚከተሉት ናቸው።

  • None - አትመዝገብ;
  • Metadata — የምዝግብ ማስታወሻ ጥያቄ ዲበ ውሂብ፡ ተጠቃሚ፣ የጥያቄ ጊዜ፣ የዒላማ ምንጭ (ፖድ፣ የስም ቦታ፣ ወዘተ)፣ የድርጊት አይነት (ግስ)፣ ወዘተ.
  • Request - የምዝግብ ማስታወሻ ሜታዳታ እና የጥያቄ አካል;
  • RequestResponse - የምዝግብ ማስታወሻ ሜታዳታ፣ አካል እና ምላሽ አካል ይጠይቁ።

የመጨረሻዎቹ ሁለት ደረጃዎች (እ.ኤ.አ.)Request и RequestResponse) ምንጮችን ያልደረሱ ጥያቄዎችን አይመዝግቡ (የሀብት ያልሆኑ ዩአርኤሎች የሚባሉት መዳረሻ)።

እንዲሁም ሁሉም ጥያቄዎች ያልፋሉ በርካታ ደረጃዎች:

  • RequestReceived - ጥያቄው በአቀነባባሪው የተቀበለበት እና በአቀነባባሪዎች ሰንሰለት ላይ ገና ያልተላለፈበት ደረጃ;
  • ResponseStarted - የምላሽ ራስጌዎች ይላካሉ, ነገር ግን ምላሽ ሰጪ አካል ከመላኩ በፊት. ለረጅም ጊዜ ለሚሰሩ መጠይቆች የተፈጠረ (ለምሳሌ፡- watch);
  • ResponseComplete - የምላሹ አካል ተልኳል, ምንም ተጨማሪ መረጃ አይላክም;
  • Panic - ያልተለመደ ሁኔታ ሲታወቅ ክስተቶች ይፈጠራሉ.

ሊጠቀሙባቸው የሚችሉትን ማንኛውንም እርምጃዎች ለመዝለል omitStages.

በፖሊሲ ፋይል ውስጥ፣ የተለያዩ የምዝግብ ማስታወሻዎች ያላቸውን በርካታ ክፍሎች መግለጽ እንችላለን። በመመሪያው መግለጫ ውስጥ የተገኘው የመጀመሪያው ተዛማጅ ህግ ተግባራዊ ይሆናል.

የ kubelet daemon በማኒፌስት ውስጥ ለውጦችን ከኤፒ-አገልጋይ ውቅር ጋር ይከታተላል እና ከተገኘ፣ መያዣውን በኤፒ-ሰርቨር እንደገና ያስጀምራል። ግን አንድ አስፈላጊ ዝርዝር አለ- በመመሪያው ፋይል ላይ የተደረጉ ለውጦች በእሱ ችላ ይባላሉ. በፖሊሲ ፋይሉ ላይ ለውጦችን ካደረጉ በኋላ, api-server ን እራስዎ እንደገና ማስጀመር ያስፈልግዎታል. አፒ-አገልጋይ ስለጀመረ የማይንቀሳቀስ ፖድ, ቡድን kubectl delete እንደገና እንዲጀምር አያደርገውም። በእጅዎ ማድረግ ይኖርብዎታል docker stop የኦዲት ፖሊሲው በተለወጠበት ኩቤ-ማስተሮች ላይ፡-

docker stop $(docker ps | grep k8s_kube-apiserver | awk '{print $1}')

ኦዲት ማድረግን ሲያነቃ ያንን ማስታወስ አስፈላጊ ነው። በ kube-apiserver ላይ ያለው ጭነት ይጨምራል. በተለይም የጥያቄ አውድ ለማከማቸት የማህደረ ትውስታ ፍጆታ ይጨምራል። ምዝግብ ማስታወሻው የሚጀምረው የምላሽ ራስጌ ከተላከ በኋላ ብቻ ነው። ጭነቱ በኦዲት ፖሊሲ ውቅር ላይም ይወሰናል.

የፖሊሲዎች ምሳሌዎች

ምሳሌዎችን በመጠቀም የፖሊሲ ፋይሎችን አወቃቀር እንይ።

አንድ ቀላል ፋይል ይኸውና policyሁሉንም ነገር በደረጃ ለመመዝገብ Metadata:

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata

በመመሪያው ውስጥ የተጠቃሚዎችን ዝርዝር መግለጽ ይችላሉ (Users и ServiceAccounts) እና የተጠቃሚ ቡድኖች. ለምሳሌ፣ የስርዓት ተጠቃሚዎችን ችላ የምንለው በዚህ መንገድ ነው፣ ነገር ግን የተቀረውን ሁሉንም ነገር በደረጃ ያስገቡ Request:

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: None
    userGroups:
      - "system:serviceaccounts"
      - "system:nodes"
    users:
      - "system:anonymous"
      - "system:apiserver"
      - "system:kube-controller-manager"
      - "system:kube-scheduler"
  - level: Request

ዒላማዎቹን መግለጽም ይቻላል፡-

  • የስም ቦታዎች (namespaces);
  • ግሶች (ግሶች: get, update, delete እና ሌሎች);
  • ሀብቶች (ግብዓቶችይህ ማለት: pod, configmaps ወዘተ) እና የንብረት ቡድኖች (apiGroups).

ትኩረት ይስጡ! ግብዓቶች እና የመርጃ ቡድኖች (ኤፒአይ ቡድኖች፣ ማለትም apiGroups)፣ እንዲሁም በክላስተር ውስጥ የተጫኑ ስሪቶቻቸው፣ ትእዛዞቹን በመጠቀም ማግኘት ይችላሉ።

kubectl api-resources
kubectl api-versions

የሚከተለው የኦዲት ፖሊሲ በ ውስጥ ምርጥ ተሞክሮዎችን ለማሳየት ቀርቧል አሊባባ ክላውድ ሰነድ:

apiVersion: audit.k8s.io/v1beta1
kind: Policy
# Не логировать стадию RequestReceived
omitStages:
  - "RequestReceived"
rules:
  # Не логировать события, считающиеся малозначительными и не опасными:
  - level: None
    users: ["system:kube-proxy"]
    verbs: ["watch"]
    resources:
      - group: "" # это api group с пустым именем, к которому относятся
                  # базовые ресурсы Kubernetes, называемые “core”
        resources: ["endpoints", "services"]
  - level: None
    users: ["system:unsecured"]
    namespaces: ["kube-system"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["configmaps"]
  - level: None
    users: ["kubelet"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["nodes"]
  - level: None
    userGroups: ["system:nodes"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["nodes"]
  - level: None
    users:
      - system:kube-controller-manager
      - system:kube-scheduler
      - system:serviceaccount:kube-system:endpoint-controller
    verbs: ["get", "update"]
    namespaces: ["kube-system"]
    resources:
      - group: "" # core
        resources: ["endpoints"]
  - level: None
    users: ["system:apiserver"]
    verbs: ["get"]
    resources:
      - group: "" # core
        resources: ["namespaces"]
  # Не логировать обращения к read-only URLs:
  - level: None
    nonResourceURLs:
      - /healthz*
      - /version
      - /swagger*
  # Не логировать сообщения, относящиеся к типу ресурсов “события”:
  - level: None
    resources:
      - group: "" # core
        resources: ["events"]
  # Ресурсы типа Secret, ConfigMap и TokenReview могут содержать  секретные данные,
  # поэтому логируем только метаданные связанных с ними запросов
  - level: Metadata
    resources:
      - group: "" # core
        resources: ["secrets", "configmaps"]
      - group: authentication.k8s.io
        resources: ["tokenreviews"]
  # Действия типа get, list и watch могут быть ресурсоёмкими; не логируем их
  - level: Request
    verbs: ["get", "list", "watch"]
    resources:
      - group: "" # core
      - group: "admissionregistration.k8s.io"
      - group: "apps"
      - group: "authentication.k8s.io"
      - group: "authorization.k8s.io"
      - group: "autoscaling"
      - group: "batch"
      - group: "certificates.k8s.io"
      - group: "extensions"
      - group: "networking.k8s.io"
      - group: "policy"
      - group: "rbac.authorization.k8s.io"
      - group: "settings.k8s.io"
      - group: "storage.k8s.io"
  # Уровень логирования по умолчанию для стандартных ресурсов API
  - level: RequestResponse
    resources:
      - group: "" # core
      - group: "admissionregistration.k8s.io"
      - group: "apps"
      - group: "authentication.k8s.io"
      - group: "authorization.k8s.io"
      - group: "autoscaling"
      - group: "batch"
      - group: "certificates.k8s.io"
      - group: "extensions"
      - group: "networking.k8s.io"
      - group: "policy"
      - group: "rbac.authorization.k8s.io"
      - group: "settings.k8s.io"
      - group: "storage.k8s.io"
  # Уровень логирования по умолчанию для всех остальных запросов
  - level: Metadata

ሌላው የኦዲት ፖሊሲ ጥሩ ምሳሌ ነው። በ GCE ውስጥ ጥቅም ላይ የዋለ መገለጫ.

ለኦዲት ዝግጅቶች በፍጥነት ምላሽ ለመስጠት, ይቻላል የድር መንጠቆን ይግለጹ. ይህ ጉዳይ በ ውስጥ የተሸፈነ ነው ኦፊሴላዊ ሰነዶች፣ ከዚህ ጽሑፍ ወሰን ውጭ እተወዋለሁ።

ውጤቶች

ጽሑፉ ለግል የተበጁ የተጠቃሚ መለያዎችን ለመፍጠር ፣ መብቶቻቸውን እንዲለዩ እና ድርጊቶቻቸውን እንዲመዘግቡ የሚያስችልዎ በ Kubernetes ስብስቦች ውስጥ ያሉትን መሰረታዊ የደህንነት ዘዴዎች አጠቃላይ እይታ ይሰጣል ። በንድፈ ሀሳብም ሆነ በተግባር እንደዚህ አይነት ጉዳዮች ላጋጠማቸው ጠቃሚ እንደሚሆን ተስፋ አደርጋለሁ። እንዲሁም በ "PS" ውስጥ በተሰጠው Kubernetes ውስጥ የደህንነት ርዕሰ ጉዳይ ላይ ያሉትን ሌሎች ቁሳቁሶችን ዝርዝር እንዲያነቡ እመክራለሁ - ምናልባትም ከነሱ መካከል ለእርስዎ አስፈላጊ በሆኑ ችግሮች ላይ አስፈላጊ ዝርዝሮችን ያገኛሉ.

PS

በብሎጋችን ላይ ያንብቡ፡-

ምንጭ: hab.com

አስተያየት ያክሉ