Азбука бСзопасности Π² Kubernetes: аутСнтификация, авторизация, Π°ΡƒΠ΄ΠΈΡ‚

Азбука бСзопасности Π² Kubernetes: аутСнтификация, авторизация, Π°ΡƒΠ΄ΠΈΡ‚

Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π² эксплуатации любой систСмы встаёт вопрос бСзопасности: обСспСчСния Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, раздСлСния ΠΏΡ€Π°Π², Π°ΡƒΠ΄ΠΈΡ‚Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡. Для Kubernetes ΡƒΠΆΠ΅ создано мноТСство Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ соотвСтствия стандартам Π΄Π°ΠΆΠ΅ Π² вСсьма Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… окруТСниях… Π­Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» посвящён Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ аспСктам бСзопасности, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… встроСнных ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² K8s. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Kubernetes, β€” ΠΊΠ°ΠΊ отправная Ρ‚ΠΎΡ‡ΠΊΠ° для изучСния вопросов, связанных с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ.

АутСнтификация

Π’ Kubernetes Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ:

  • Service Accounts β€” Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρ‹, управляСмыС Kubernetes API;
  • Users β€” Β«Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅Β» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, управляСмыС внСшними, нСзависимыми сСрвисами.

ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ этих Ρ‚ΠΈΠΏΠΎΠ² Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для Service Accounts ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Kubernetes API (ΠΎΠ½ΠΈ Ρ‚Π°ΠΊ ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ β€” ServiceAccounts), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ привязаны ΠΊ пространству ΠΈΠΌΡ‘Π½ ΠΈ Π½Π°Π±ΠΎΡ€Ρƒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, хранящихся Π² кластСрС Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… Ρ‚ΠΈΠΏΠ° Secrets. Π’Π°ΠΊΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ (Service Accounts) ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Π² основном для управлСния ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа ΠΊ Kubernetes API процСссов, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² кластСрС Kubernetes.

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΆΠ΅ Users Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ записСй Π² Kubernetes API: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ внСшними ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ. Они ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для людСй ΠΈΠ»ΠΈ процСссов, ΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… Π²Π½Π΅ кластСра.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ запрос ΠΊ API привязан Π»ΠΈΠ±ΠΎ ΠΊ Service Account, Π»ΠΈΠ±ΠΎ ΠΊ User, Π»ΠΈΠ±ΠΎ считаСтся Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌ.

АутСнтификационныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя:

  • Username β€” имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (зависит ΠΎΡ‚ рСгистра!);
  • UID β€” машинно-читаСмая строка ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, которая Β«Π±ΠΎΠ»Π΅Π΅ консистСнтна ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°, Ρ‡Π΅ΠΌ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΒ»;
  • Groups β€” список Π³Ρ€ΡƒΠΏΠΏ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ;
  • Extra β€” Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Kubernetes ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ большоС количСство ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ: сСртификаты X509, Bearer-Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ прокси, HTTP Basic Auth. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ этих ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ большоС количСство схСм Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ: ΠΎΡ‚ статичного Ρ„Π°ΠΉΠ»Π° с паролями Π΄ΠΎ OpenID OAuth2.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, допускаСтся использованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… схСм Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² кластСрС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ:

  • service account tokens β€” для Service Accounts;
  • X509 β€” для Users.

Вопрос ΠΏΡ€ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ServiceAccounts Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π° ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с этим вопросом Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π½Π°Ρ‡Π°Ρ‚ΡŒ со страницы ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠœΡ‹ ΠΆΠ΅ рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ вопрос Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСртификатов 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"
  • ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запроса Π½Π° сСртификат ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ CA кластСра Kubernetes, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сСртификата ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (для получСния сСртификата Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ доступ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ Ρ†Π΅Π½Ρ‚Ρ€Π° сСртификации кластСра Kubernetes, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ находится Π² /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 Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ api-server кластСра):
      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

Π‘ Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ Kubernetes 1.15 Ρ€Π°Π±ΠΎΡ‚Π° с сСртификатами стала Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ благодаря Π°Π»ΡŒΡ„Π°-вСрсии Π΅Ρ‘ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ kubeadm. НапримСр, Π²ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ гСнСрация ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ:

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

NB: Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ advertise address ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅ api-server, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ располоТСн Π² /etc/kubernetes/manifests/kube-apiserver.yaml.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ Π² stdout. Π•Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ~/.kube/config ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ ΠΆΠ΅ Π² Ρ„Π°ΠΉΠ», ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния KUBECONFIG.

ΠšΠΎΠΏΠ½ΡƒΡ‚ΡŒ Π³Π»ΡƒΠ±ΠΆΠ΅

Для ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Π΅Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² описанных вопросах:

Авторизация

Авторизованная учСтная запись ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π² Π½Π° дСйствия Π² кластСрС. Для прСдоставлСния Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π² Kubernetes Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π”ΠΎ вСрсии 1.6 Π² Kubernetes примСнялся Ρ‚ΠΈΠΏ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ABAC (Attribute-based access control). ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎ Π½Ρ‘ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π’ настоящСС врСмя этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ считаСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ (legacy), ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‹ всё Π΅Ρ‰Ρ‘ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΆΠ΅ (ΠΈ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ) способ раздСлСния ΠΏΡ€Π°Π² доступа ΠΊ кластСру называСтся RBAC (Role-based access control). Он Π±Ρ‹Π» объявлСн ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ с вСрсии Kubernetes 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, поэтому Π΄Π°Π»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΡΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ пСрСчислСниСм основ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Для управлСния доступом Π² Kubernetes Ρ‡Π΅Ρ€Π΅Π· RBAC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ сущности API:

  • Role ΠΈ ClusterRole β€” Ρ€ΠΎΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слуТат для описания ΠΏΡ€Π°Π² доступа:
  • Role позволяСт ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… пространства ΠΈΠΌΡ‘Π½;
  • ClusterRole β€” Π² Ρ€Π°ΠΌΠΊΠ°Ρ… кластСра, Π² Ρ‚ΠΎΠΌ числС ΠΊ кластСр-спСцифичным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Ρ‚ΠΈΠΏΠ° ΡƒΠ·Π»ΠΎΠ², non-resources urls (Ρ‚.Π΅. Π½Π΅ связанных с рСсурсами Kubernetes β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /version, /logs, /api*);
  • RoleBinding ΠΈ ClusterRoleBinding β€” слуТит для привязки Role ΠΈ ClusterRole ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ ServiceAccount.

Бущности Role ΠΈ RoleBinding ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ namespace’ом, Ρ‚.Π΅. Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ пространства ΠΈΠΌΠ΅Π½. Однако RoleBinding ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ClusterRole, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ доступом с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ.

Π ΠΎΠ»ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΏΡ€Π°Π²Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠ² ΠΏΡ€Π°Π²ΠΈΠ», содСрТащих:

  • Π³Ρ€ΡƒΠΏΠΏΡ‹ API β€” см. ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ apiGroups ΠΈ Π²Ρ‹Π²ΠΎΠ΄ kubectl api-resources;
  • рСсурсы (resources: pod, namespace, deployment ΠΈ Ρ‚.ΠΏ.);
  • Π³Π»Π°Π³ΠΎΠ»Ρ‹ (verbs: set, update ΠΈ Ρ‚.ΠΏ.).
  • ΠΈΠΌΠ΅Π½Π° рСсурсов (resourceNames) β€” для случая, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ рСсурсу, Π° Π½Π΅ ΠΊΠΎ всСм рСсурсам этого Ρ‚ΠΈΠΏΠ°.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Ρ€Π°Π·Π±ΠΎΡ€ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Kubernetes ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° страницС ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ВмСсто этого (Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ β€” Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ этому) ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ сущностСй RBAC

ΠŸΡ€ΠΎΡΡ‚Π°Ρ Role, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ список ΠΈ статус pod’ов ΠΈ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π½ΠΈΠΌΠΈ Π² пространствС ΠΈΠΌΠ΅Π½ 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, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ список ΠΈ статус pod’ов ΠΈ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π½ΠΈΠΌΠΈ Π²ΠΎ всСм кластСрС:

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ RoleBinding, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ mynewuser Β«Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΒ» pod’ы Π² пространствС ΠΈΠΌΠ΅Π½ 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

Аудит событий

Π‘Ρ…Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Kubernetes ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Азбука бСзопасности Π² Kubernetes: аутСнтификация, авторизация, Π°ΡƒΠ΄ΠΈΡ‚

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Kubernetes, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запросов, β€” api-server. ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ кластСром проходят Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этих Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«Π§Ρ‚ΠΎ происходит Π² Kubernetes ΠΏΡ€ΠΈ запускС kubectl run?Β».

Аудит систСмы β€” интСрСсная Ρ„ΠΈΡ‡Π° Π² Kubernetes, которая ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π°. Она позволяСт Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС обращСния ΠΊ Kubernetes API. Как Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Π΅Ρ€Π΅Π· этот 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

Помимо этих Ρ‚Ρ€Ρ‘Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², сущСствуСт мноТСство Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… настроСк, относящихся ΠΊ Π°ΡƒΠ΄ΠΈΡ‚Ρƒ: ΠΎΡ‚ Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ² Π΄ΠΎ описаний webhook. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ²:

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

Но ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π½Π° Π½ΠΈΡ… Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ β€” Π½Π°ΠΉΡ‚ΠΈ всС Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ kube-apiserver.

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² манифСстС с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ api-server (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ /etc/kubernetes/manifests/kube-apiserver.yaml), Π² сСкции command. ВСрнСмся ΠΊ 3 ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΈΡ…:

  1. audit-policy-file β€” ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ YAML-Ρ„Π°ΠΉΠ»Π° с описаниСм ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ (policy) Π°ΡƒΠ΄ΠΈΡ‚Π°. К Π΅Π³ΠΎ содСрТимому ΠΌΡ‹ Π΅Ρ‰Ρ‘ вСрнёмся, Π° ΠΏΠΎΠΊΠ° Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступСн для чтСния процСссом 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 β€” ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Ρ„Π°ΠΉΠ»Π° Π»ΠΎΠ³Π°. ΠŸΡƒΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступСн процСссу api-server’a, поэтому Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ описываСм Π΅Π³ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅:
      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).

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π°ΡƒΠ΄ΠΈΡ‚Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ± упомянутом Ρ„Π°ΠΉΠ»Π΅ с описаниСм ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ логирования. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ понятиС audit policy β€” это level, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ логирования. Они Π±Ρ‹Π²Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ:

  • None β€” Π½Π΅ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ;
  • Metadata β€” Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ запроса: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, врСмя запроса, Ρ†Π΅Π»Π΅Π²ΠΎΠΉ рСсурс (pod, namespace ΠΈ Ρ‚.ΠΏ.), Ρ‚ΠΈΠΏ дСйствия (verb) ΠΈ Ρ‚.ΠΏ.;
  • Request β€” Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ‚Π΅Π»ΠΎ запроса;
  • RequestResponse β€” Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π΅Π»ΠΎ запроса ΠΈ Ρ‚Π΅Π»ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°.

ПослСдниС Π΄Π²Π° уровня (Request ΠΈ RequestResponse) Π½Π΅ Π»ΠΎΠ³ΠΈΡ€ΡƒΡŽΡ‚ запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ ΠΊ рСсурсам (обращСния ΠΊ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ non-resources urls).

Π’Π°ΠΊΠΆΠ΅ всС запросы проходят Ρ‡Π΅Ρ€Π΅Π· нСсколько стадий:

  • RequestReceived β€” этап, ΠΊΠΎΠ³Π΄Π° запрос ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ дальшС ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²;
  • ResponseStarted β€” Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Ρ‚Π΅Π»Π° ΠΎΡ‚Π²Π΅Ρ‚Π°. ГСнСрируСтся для Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… запросов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, watch);
  • ResponseComplete β€” Ρ‚Π΅Π»ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ, большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚;
  • Panic β€” события Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Π°Ρ ситуация.

Для пропуска ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ стадий ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ omitStages.

Π’ Ρ„Π°ΠΉΠ»Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько сСкций с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ уровнями логирования. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ подходящСС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ Π² описании policy.

Π”Π΅ΠΌΠΎΠ½ kubelet отслСТиваСт ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ манифСста с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ api-server ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ²Ρ‹Ρ… пСрСзапускаСт ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с api-server. Но Π΅ΡΡ‚ΡŒ ваТная Π΄Π΅Ρ‚Π°Π»ΡŒ: измСнСния Π² Ρ„Π°ΠΉΠ»Π΅ policy Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. ПослС внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ„Π°ΠΉΠ» policy потрСбуСтся ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ api-server Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ api-server Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΊΠ°ΠΊ static pod, ΠΊΠΎΠΌΠ°Π½Π΄Π° kubectl delete Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π΅Π³ΠΎ пСрСзапуску. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ docker stop Π½Π° kube-master’ах, Π³Π΄Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π°ΡƒΠ΄ΠΈΡ‚Π°:

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

ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π°ΡƒΠ΄ΠΈΡ‚Π° Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° kube-apiserver ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°. Π’ частности, увСличиваСтся ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти для хранСния контСкста запросов. Π—Π°ΠΏΠΈΡΡŒ Π² Π»ΠΎΠ³ начинаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΡ‚Π²Π΅Ρ‚Π°. Π’Π°ΠΊΠΆΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° зависит ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π°ΡƒΠ΄ΠΈΡ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ структуру Ρ„Π°ΠΉΠ»ΠΎΠ² policy Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….

Π’ΠΎΡ‚ простой Ρ„Π°ΠΉΠ» policy, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всё Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Metadata:

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

Π’ policy ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (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);
  • Π³Π»Π°Π³ΠΎΠ»Ρ‹ (verbs: get, update, delete ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅);
  • рСсурсы (resources, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: pod, configmaps ΠΈ Ρ‚.ΠΏ.) ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ рСсурсов (apiGroups).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! РСсурсы ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ рСсурсов (Π³Ρ€ΡƒΠΏΠΏΡ‹ API, Ρ‚.Π΅. apiGroups), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… вСрсии, установлСнныС Π² кластСрС, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄:

kubectl api-resources
kubectl api-versions

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ audit policy ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Π² качСствС дСмонстрации Π»ΡƒΡ‡ΡˆΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Alibaba Cloud:

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

Π”Ρ€ΡƒΠ³ΠΎΠΉ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ audit policy β€” ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² GCE.

Для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ рСагирования Π½Π° события Π°ΡƒΠ΄ΠΈΡ‚Π° Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ webhook. Π­Ρ‚ΠΎΡ‚ вопрос раскрыт Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΎΡΡ‚Π°Π²Π»ΡŽ Π΅Π³ΠΎ Π·Π° Ρ€Π°ΠΌΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Π˜Ρ‚ΠΎΠ³ΠΈ

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π΄Π°Π½ ΠΎΠ±Π·ΠΎΡ€ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ обСспСчСния бСзопасности Π² кластСрах Kubernetes, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ пСрсонифицированныС ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ записи ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΏΡ€Π°Π²Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… дСйствия. НадСюсь, ΠΎΠ½ пригодится Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ столкнулся с Ρ‚Π°ΠΊΠΈΠΌΠΈ вопросами Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΈΠ»ΠΈ ΡƒΠΆΠ΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со списком Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ бСзопасности Π² Kubernetes, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² Β«P.S.Β», β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, срСди Π½ΠΈΡ… Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ подробности ΠΏΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ для вас ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.

P.S.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com