ááĽáá ááá ááááś á ááááá áľáááľ á á áŤá ááľáĽ á¨á°á
áááľ ááłá áááłá-áá¨áá፠áá¨áááĽ, á¨ááĽáśá˝ áááŤá¨áľ, áŚá˛áľ áĽá ááá˝ á°ááŁáŤáľ. á Kubernetes á áľááľá á°ááĽáŻáá˘
áá¨áááŤ
á Kubernetes ááľáĽ áááľ á áááľ á°á áááá˝ á ááĄ-
- á¨á áááááľ áááŤáá˝ - á Kubernetes API á¨áá°áłá°áŠ áááŤáá˝;
- á°á áááá˝ - á ááŤá áĽá áááá°á á áááááśá˝ á¨áá°áłá°áŠ âáá°á áâ á°á áááá˝á˘
á áĽááá
ááááśá˝ ááŤá¨á áŤáá áááá ááŠááľ áá áááááľ áááŤáá˝ á Kubernetes API ááľáĽ áአáááá˝ á á (áĽááąá ááŁáá - ServiceAccounts
) á áľá áŚáł áĽá á áááľá°á ááľáĽ á¨á°á¨áḠá¨ááľá˘á á áááľ áááŽá˝ á¨áááł ááἠáľáĽáľáĽ áá á¨á°áłá°áŠá˘ áĽáá°ááá
áŤá á°á áááá˝ (á¨á áááááľ áááŤáá˝) á ááááľ á Kubernetes áááľá°á ááľáĽ á¨áá°áŠ áá°áśá˝á áá° Kubernetes API á¨ááłá¨áť ááĽáśá˝á áááľá°áłá°á á¨áłáá áá¸áá˘
á°áŤ á°á áááá˝ á Kubernetes API ááľáĽ áá¤áśá˝ á¨áá¸ááᥠá ááŤá áľááśá˝ áá°áłá°á á ááŁá¸áᢠáĽááą á¨áłá°áĄáľ á¨áĽá á áá áááአá°áá˝ ááá áá°áśá˝ ááá˘
áĽáŤááłááą á¨á¤áá á áĽáŤá á¨á áááááľ áááŤáŁ á¨á°á áá ááá á¨áľá-á áᣠá°á°áá ááá áŤáá˘
á¨á°á áá áá¨áá፠ááἠá¨áá¨á°ááľá áŤá áááá
- á¨á°á áá áľá - á¨á°á áá áľá (ááłá ááľáĽáŤáááľ áŤáá!);
- UID - á áá˝á ááá ἠá¨áá˝á á¨á°á áá áá፠ááĽá¨ááá "á¨á°á áá áľá á¨á áá áἠáĽá ááŠ";
- áĄáľáá˝ - á°á ááá á¨ááááŁá¸á áĄáľáá˝ áááá;
- á°á¨á᪠- á áááłá áá´ áá áááŁá¸á á¨áá˝á á°á¨á᪠ááľáŽá˝á˘
áŠá áááľáľ áĽá ááĽá áŤáá¸á á¨áá¨áá፠áá´áá˝á áá áá áá˝áááĄ- X509 á¨ááľáá áá¨ááśá˝áŁ á°á¸áŤá áśá¨áá˝áŁ á á¨ááá ááŽáá˛áŁ HTTP Basic AuthᢠáĽááá á áľááśá˝ á áá áá áĽá ááĽá áŤáá¸áá á¨áááľ áá áśá˝ áá°áá á áá˝ááᥠá¨áááááłááľ ááá á¨ááá ááá˝ áĽáľá¨ OpenID OAuth2á˘
á¨áá á á áá áĽá á¨áááľ áĽá áśá˝á á á ááľ áá áá áá ááťáá. á ááŁáŞáŁ áááľá°á á¨áá¨á°ááľá áá áááá˘
- á¨á áááááľ áá፠ááááśá˝ - áá áááááľ áááŤáá˝;
- 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
- á¨áááľá°á ááá፠(áá°áá°á á¨áááľá°á áááľ á¨CA á°áá˛ááŹáľ ááá á áľáŤáť áĽá áŚáł ááááš)
á¨áá á¨á°á ááąáľ ááá áá áŽá˝ á áá, á ááá ááľáĽ .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 áá á¨ááľáá áá¨ááśá˝
á¨áááá áá
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
.
á áĽáááľ áááŠ
á¨á°ááášáľá ááłáŽá˝ á áĽáááľ ááá¨áłáľ ááááááĄ-
-
á¨á°áᨠááŁáĽá á áááá á¨áŠá áááľáľ á°ááśá˝ ááľáĽ á¨ááľáá áá¨ááśá˝ áá á ááľáŤáľ áá; -
áĽáŠ á˝áá ᨠBitnami á¨ááľáá áá¨ááśá˝ áĽáľá á¨á°ááŁáŤá áĽááł á ááťá á¨ááłá°áľá áľ. -
á á ááá á°ááśá˝ á áŠá áááľáľ ááľáĽ á áá¨ááἠáá.
áááľ
ááŁáŞá á¨á°ááá°ááľ áá፠á áááľá°á áá á¨ááľáŤáľ ááĽáľ á¨áááᢠáááśá˝á áááľá áľ áŠá áááľáľ á¨áááľ á á°áŁáĽ áá´á á°ááŁáŤá áŤá°áááá˘
á¨áľáŞáľ 1.6 á ááľ áŠá áááľáľ á¨ááŁá á¨áááľ á áááľ á°á á
áá á á˘á (á áŁá
᪠áá á¨á°áá°á¨á° á¨ááłá¨áť áááŁá áŞáŤ). áľá áĽáą ááááŽá˝ á ááľáĽ áááá
á¨á áá (áĽá á¨á áá á°áááá) á¨ááłá¨áť ááĽáśá˝á ááááľá°á á¨áá¨áááá áľ ááááľ ááŁáá á á.á˘.Რ(
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 á áŠá ááłá¨áťá ááááŁá á áŤááááááĄ-
-
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
á¨ááľá°áľ áŚá˛áľ
á áľááá°-ááł á¨áŠá áááľáľ á ááá´áá¸á á áá¨á°áá ááአááá¨á áá˝ááá˘
áĽáŤááá˝á áááľáŹáľ áááááľ áŤáá á¨áŠá áááľáľ ááá á áŤá ááᢠapi-á áááá. á áááľá°á áá áŤá ááá ááááá˝ áŤáááᢠáľá áĽááá
ááľáŁá áá´áá˝ á á˝áá ááľáĽ á¨á áá ááá ἠáá˝áá
á¨áľáááľ áŚá˛áľ á ááŁáŞááľ á¨á°á°áá¨áá Kubernetes ááľáĽ á áľá°áłá˝ áŁá
᪠ááᢠáááá áĽáŞáá˝ áá° Kubernetes API áĽáá˛áᥠááá
áľáááłáᢠáĽááľá áĽáá°ááááąáľáŁ á¨áááľá°áá áááł á¨áááŁá á áĽá á¨ááá¨á áá á¨á°áŤáŤá ááá áľáááśá˝ á¨áá¨ááááľ á áá
á¤áá á ááᢠáľá á˝ááłááš áĽáŠ ááá፠(áĽáá°á°ááá°á) á ááľáĽ ááááá˘
áĽá áľááá , áŚá˛áľ ááľá¨áá áááááľ, á¨áá á áłá˝ á á áá áááá ááľáĽ á á°ááášáľ á 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
áá á áĽááą áá á¨á áá á áááá á ááááĽá - áááá ááááŽá˝ á ááľáĽ ááááľ áá˝ááá˘
áá°á á˛á áĽáá°á°áááá ááá áááááá˝ á á á-á áááá áá
á (á ááŁáŞ) á ááááŁá¨ááŤá ááľáĽ á°ááá áá /etc/kubernetes/manifests/kube-apiserver.yaml
), á ááá ááľáĽ command
. áá° 3áą á áľááá áááŞáŤáá˝ áĽááááľ áĽá áĽááąá áĽáááááá˘
-
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
-
audit-log-path
- áá° áááἠáááἠá¨áááľá°á ááááľ. ááááą áĽáá˛áá áá¤á-á áááá áá°áľ á°á°áŤá˝ ááá á áá áľáŁ áľááá ááŤáá á á°ááłáłá ááááľ áĽááááááá˘volumeMounts: - mountPath: /var/log/kube-audit name: logs readOnly: false volumes: - hostPath: path: /var/log/kube-audit type: DirectoryOrCreate name: logs
-
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
ááá á¨áŚá˛áľ ááᲠáĽáŠ ááłá ááá˘
ááŚá˛áľ ááá
áśá˝ á ááĽááľ ááá˝ áááľá áľ, ááťáá á¨áľá ááá áá ááááš. áá
ááłá á ááľáĽ á¨á°á¸áá áá
áá¤áśá˝
á˝áá ááá á¨á°á á á¨á°á áá áááŤáá˝á áááá á ᣠááĽáśáťá¸áá áĽáá˛áአáĽá áľáááśáťá¸áá áĽáá˛áááᥠá¨ááŤáľá˝áá á Kubernetes áľáĽáľáŚá˝ ááľáĽ áŤááľá áá°á¨áłá á¨á°á áááľ áá´áá˝ á á ááá áĽááł áá°áŁá ᢠá ááľá ááłáĽá áá á á°ááŁá áĽáá°áá á áááľ ááłáŽá˝ ááá áá¸á á áá áĽáá°ááá á°áľá á á°ááááᢠáĽáá˛áá á "PS" ááľáĽ á á°á°á á Kubernetes ááľáĽ á¨á°á áááľ ááá° ááłá áá áŤááľá ááá˝ ááłááśá˝á áááá áĽáá˛áŤáᥠáĽáááŤáá - ááááŁáľá á¨ááą ááŤá¨á ááĽááľá á áľááá á áá á˝ááŽá˝ áá á áľááá ááááŽá˝á áŤááá.
PS
á áĽááá˝á áá áŤááĽáĄáĄ-
- ÂŤ
33+ Kubernetes á¨á°á áááľ ááłáŞáŤáá˝ "; - ÂŤ
áá°á áááľ áŁáááŤáá˝ á¨áŠá áááľáľ á ááłá¨ áá¨áĽ ááá˛áá˝ ááá˘áŤ "; - ÂŤ
Kubernetes ááľáĽ RBAC áá¨áłáľ "; - ÂŤ
9 Kubernetes á°á áááľ ááἠáááśá˝ "; - ÂŤ
á áŠá áááľáľ ááľáĽ áááĽáá (á áá°áá) 11 ááááśá˝ Âť.
ááá: hab.com