User Tools

Site Tools


безопасность_в_kubernetes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
безопасность_в_kubernetes [2025/10/31 14:10]
val [Шаг 2. Создание учетной записи]
— (current)
Line 1: Line 1:
-====== Безопасность в Kubernetes ====== 
  
-  * [[https://​kubernetes.io/​docs/​reference/​access-authn-authz/​authentication/​|Kubernetes Documentation -> Reference -> API Access Control -> Authenticating]] 
- 
-  * [[https://​habr.com/​ru/​articles/​779190/​|Как работает аутентификация в Kubernetes: ServiceAccount и RBAC]] 
-  * [[https://​medium.com/​@muppedaanvesh/​a-hand-on-guide-to-kubernetes-rbac-with-a-user-creation-%EF%B8%8F-1ad9aa3cafb1|A Hands-On Guide to Kubernetes RBAC With a User Creation]] 
- 
-  * [[https://​medium.com/​@ManagedKube/​kubernetes-rbac-port-forward-4c7eb3951e28|Kubernetes RBAC Port Forward]] 
- 
-===== Реклама ===== 
- 
-  * Kubernetes — это решение,​ превращающее Linux сервера в кластер,​ и, как Linux является многопользовательской,​ многозадачной операционной системой,​ так и Kubernetes позволяет множеству пользователей и приложений работать в одном кластере безопасно разделяя его ресурсы 
-  * На нашем вебинаре Вы узнаете как настраивать права доступа в Kubernetes на примерах практических,​ полезных задач 
- 
- 
-===== Техническое задание ===== 
- 
-  * Создать учетную запись пользователя с необходимыми правами и файл конфигурации для подключения младшего системного администратора к Web ресурсам Kubernetes 
-  * Создать учтённую запись для сервиса с необходимыми правами для запуска приложений в Kubernetes 
- 
-===== Запись вебинара ===== 
- 
-  * Тэги: ​ 
- 
-===== Шаг 1. Что у нас есть для начала ===== 
- 
-  * [[Система Kubernetes]] 
-  * [[Сервис Keycloak#​rancher local-path-provisioner]] и [[Сервис PostgreSQL#​CloudNativePG]] кластер PostgreSQL 
-  * Сервис Keycloak в [[Сервис Keycloak#​Kubernetes]] 
-  * Cloud native distributed block storage for Kubernetes [[Сервис Keycloak#​longhorn]] 
- 
-  * Linux [[Инсталяция системы в конфигурации Desktop]] 
-===== Шаг 2. Создание учетной записи ===== 
- 
-  * [[Управление учетными записями в Linux#​Создание тестового набора учетных записей]] 
- 
-==== Вариант 2.1 Использование сертификатов ==== 
- 
-  * [[Пакет OpenSSL#​Создание пользовательского сертификата,​ подписанного CA]] 
- 
-<​code>​ 
-user2@server:​~$ cat user2.req | base64 -w0 
-</​code>​ 
-  * [[https://​stackoverflow.com/​questions/​75735249/​what-do-the-values-in-certificatesigningrequest-spec-usages-mean|What do the values in CertificateSigningRequest.spec.usages mean?]] 
-<​code>​ 
-kube1:​~/​users#​ kubectl explain csr.spec.usages 
- 
-kube1:​~/​users#​ cat user2.req.yaml 
-apiVersion: certificates.k8s.io/​v1 
-kind: CertificateSigningRequest 
-metadata: 
-  name: user2 
-spec: 
-  request: LS0t...S0tCg== 
-  signerName: kubernetes.io/​kube-apiserver-client 
-  expirationSeconds:​ 8640000 ​ # 100 * one day 
-  usages: 
-#  - digital signature 
-#  - key encipherment 
-  - client auth 
- 
-kube1:​~/​users#​ kubectl apply -f user2.req.yaml 
- 
-kube1:​~/​users#​ kubectl describe csr/user2 
- 
-kube1:​~/​users#​ kubectl certificate approve user2 
- 
-kube1:​~/​users#​ kubectl get csr 
- 
-kube1:​~/​users#​ kubectl get csr/user2 -o yaml 
- 
-kube1:​~/​users#​ kubectl get csr/user2 -o jsonpath="​{.status.certificate}"​ | base64 -d | tee user2.crt 
- 
- 
-user2@server:​~$ scp root@kube1:​users/​user2.crt . 
-</​code>​ 
- 
-==== Вариант 2.2 Использование ServiceAccount ==== 
- 
-  * [[Система Kubernetes#​Kubernetes Dashboard]] можно в ns default 
- 
-==== Шаг 2.3 Создание файла конфигурации для kubectl ====  
- 
-  * [[Система Kubernetes#​Инструмент командной строки kubectl]] 
-<​code>​ 
-user2@server:​~$ kubectl config set-cluster cluster.local --insecure-skip-tls-verify=true --server=https://​192.168.13.221:​6443 
- 
-user2@server:​~$ cat .kube/​config 
- 
-user2@server:​~$ kubectl config set-credentials user2 --client-certificate=user2.crt --client-key=user2.key --embed-certs=true 
-  ИЛИ 
-student@client1:​~$ kubectl config set-credentials user2 --token=................................... 
- 
-user2@server:​~$ kubectl config set-context default-context --cluster=cluster.local --user=user2 
- 
-user2@server:​~$ kubectl config use-context default-context 
- 
-user2@server:​~$ kubectl auth whoami 
- 
-user2@server:​~$ kubectl get pods 
-Error from server (Forbidden) 
-</​code>​ 
- 
-===== Шаг 3. Предоставление доступа к services/​proxy в Namespace ===== 
-<​code>​ 
-kube1:​~/​users#​ cat lh-svc-proxy-role.yaml 
-</​code><​code>​ 
-apiVersion: rbac.authorization.k8s.io/​v1 
-kind: Role 
-metadata: 
-  namespace: longhorn-system 
-  name: lh-svc-proxy-role 
-rules: 
-- apiGroups: [""​] 
-  resources: ["​services/​proxy"​] 
-  verbs: ["​get"​] 
-</​code><​code>​ 
-kube1:​~/​users#​ cat user2-lh-svc-proxy-rolebinding.yaml 
-</​code><​code>​ 
-apiVersion: rbac.authorization.k8s.io/​v1 
-kind: RoleBinding 
-metadata: 
-  name: user2-lh-svc-proxy-rolebinding 
-  namespace: longhorn-system 
-subjects: 
-- kind: User 
-  name: user2 
-  apiGroup: rbac.authorization.k8s.io 
-roleRef: 
-  kind: Role 
-  name: lh-svc-proxy-role 
-  apiGroup: rbac.authorization.k8s.io 
-</​code><​code>​ 
-kube1:​~/​users#​ kubectl apply -f lh-svc-proxy-role.yaml,​user2-lh-svc-proxy-rolebinding.yaml 
- 
-student@client1:​~$ kubectl proxy 
- 
-student@client1:​~$ curl http://​localhost:​8001/​api/​v1/​namespaces/​longhorn-system/​services/​longhorn-frontend:​80/​proxy/​ 
- 
-kube1:​~/​users#​ kubectl get rolebindings --all-namespaces -o=json | jq '​.items[] | select(.subjects[]?​.name == "​user2"​)'​ 
-</​code>​ 
-===== Шаг 4. Предоставление доступа к services/​port-forward в Cluster ===== 
- 
-<​code>​ 
-kube1:​~/​users#​ kubectl get clusterroles |less 
- 
-kube1:​~/​users#​ kubectl get clusterrolebindings cluster-admin -o yaml 
- 
-kube1:​~/​users#​ kubectl get clusterrole view -o yaml 
- 
-kube1:​~/​users#​ cat user2-view-clusterrolebinding.yaml 
-</​code><​code>​ 
-apiVersion: rbac.authorization.k8s.io/​v1 
-kind: ClusterRoleBinding 
-metadata: 
-  name: user2-view-clusterrolebinding 
-subjects: 
-- kind: User 
-  name: user2 
-  apiGroup: rbac.authorization.k8s.io 
-roleRef: 
-  kind: ClusterRole 
-  name: view 
-  apiGroup: rbac.authorization.k8s.io 
-</​code><​code>​ 
-kube1:​~/​users#​ kubectl apply -f user2-view-clusterrolebinding.yaml 
- 
-student@client1:​~$ kubectl get pods -A 
- 
-student@client1:​~$ kubectl port-forward -n my-pgcluster-ns services/​my-pgcluster-rw 5432:5432 
-error: error upgrading connection: pods "​my-pgcluster-3"​ is forbidden: User "​user2"​ cannot create resource "​pods/​portforward"​ in API group ""​ in the namespace "​my-pgcluster-ns"​ 
- 
- 
-kube1:​~/​users#​ cat svc-pfw-role.yaml 
-</​code><​code>​ 
-apiVersion: rbac.authorization.k8s.io/​v1 
-kind: ClusterRole 
-#kind: Role 
-metadata: 
-  name: svc-pfw-role 
-#  namespace: my-pgcluster-ns 
-rules: 
-- apiGroups: [""​] 
-  resources: ["​services"​] 
-  verbs: ["​get"​] 
-- apiGroups: [""​] 
-  resources: ["​pods"​] 
-  verbs: ["​get",​ "​list"​] 
-- apiGroups: [""​] 
-  resources: ["​pods/​portforward"​] 
-  verbs: ["​create"​] 
-</​code><​code>​ 
-kube1:​~/​users#​ cat user2-svc-pfw-rolebinding.yaml 
-</​code><​code>​ 
-apiVersion: rbac.authorization.k8s.io/​v1 
-kind: ClusterRoleBinding 
-#kind: RoleBinding 
-metadata: 
-  name: user2-svc-pfw-rolebinding 
-#  namespace: my-pgcluster-ns 
-subjects: 
-- kind: User 
-  name: user2 
-  apiGroup: rbac.authorization.k8s.io 
-roleRef: 
-  kind: ClusterRole 
-#  kind: Role 
-  name: svc-pfw-role 
-  apiGroup: rbac.authorization.k8s.io 
-kube1:​~/​users#​ kubectl apply -f svc-pfw-role.yaml,​user2-svc-pfw-rolebinding.yaml 
- 
-student@client1:​~$ kubectl port-forward -n my-pgcluster-ns services/​my-pgcluster-rw 5432:5432 
- 
-student@client1:​~$ psql postgres://​keycloak:​strongpassword@127.0.0.1:​5432/​postgres 
- 
-kube1:​~/​users#​ kubectl get clusterrolebindings -o=json | jq '​.items[] | select(.subjects[]?​.name == "​user2"​)'​ 
-</​code>​ 
- 
-===== Черновик ===== 
- 
-  * https://​www.container-security.site/​security_research/​node_proxy.html 
безопасность_в_kubernetes.1761909034.txt.gz · Last modified: 2025/10/31 14:10 by val