kubernetes:безопасность_в_кластере
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| kubernetes:безопасность_в_кластере [2022/02/14 22:35] – создано root | kubernetes:безопасность_в_кластере [2024/12/21 19:00] (текущий) – внешнее изменение 127.0.0.1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== Безопасность в кластере ====== | + | ====== |
| + | ====== Аутентификация====== | ||
| + | В разрезе аутентификации Kubernetes оперирует не пользовательскими аккаунтами, | ||
| + | <code bash> | ||
| + | <code bash> | ||
| + | В качестве аутентификаторов могут выступать: | ||
| + | * имя пользователя и статический пароль; | ||
| + | * имя пользователя и токен; | ||
| + | * сертификат; | ||
| + | * сторонний сервис аутентификации (ldap, kerberos, etc). | ||
| + | ===== Парольная аутентификация===== | ||
| + | Что бы указать kube-apiserver.service на необходимость использования статических паролей, | ||
| + | <code csv user-details.csv> | ||
| + | P@ssw0rd1, | ||
| + | P@ssw0rd2, | ||
| + | P@ssw0rd3, | ||
| + | </ | ||
| + | Для аутентификации: | ||
| + | |||
| + | ===== Аутентификация по токену ===== | ||
| + | Аналогично для файла с токенами <color # | ||
| + | <code csv user-token-details.csv> | ||
| + | 9OSR4OYO6QwM7cfg6sKcerCyiVC6xnFZ, | ||
| + | yDLmsJptxat04MUvuFdBw2CFWwv2ogcr, | ||
| + | IonP8eYFUEfsZJDflyiRVSoMeDJSpBcq, | ||
| + | </ | ||
| + | Для аутентификации: | ||
| + | |||
| + | ===== Аутентификация по сертификату ===== | ||
| + | Для аутентификации по сертификату, | ||
| + | <code bash> | ||
| + | openssl genrsa -out admin.key 2048 | ||
| + | openssl req -new -key admin.key -subj "/ | ||
| + | openssl x509 -req -in admin.csr -CA ca.crt -CAkey ca.key -out admin.crt | ||
| + | </ | ||
| + | Для аутентификации: | ||
| + | |||
| + | ===== Создание сертификата пользователя при помощи Certificate API ===== | ||
| + | <code bash> | ||
| + | openssl genrsa -out new_admin.key 2048 | ||
| + | openssl req -new -key new_admin.key -subj "/ | ||
| + | cat new_admin.csr | base64 | ||
| + | </ | ||
| + | <code yaml new_admin_csr.yaml> | ||
| + | apiVersion: certificates.k8s.io/ | ||
| + | kind: CertificateSigningRequest | ||
| + | metadata: | ||
| + | name: New Admin | ||
| + | spec: | ||
| + | groups: | ||
| + | - system: | ||
| + | - system: | ||
| + | usages: | ||
| + | - digital signature | ||
| + | - key encipherment | ||
| + | - client auth | ||
| + | request: | ||
| + | LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1dUQ0NBVUVDQVFBd0ZERVNN | ||
| + | QkFHQTFVRUF3d0pUbVYzSUVGa2JXbHVNSUlCSWpBTkJna3Foa2lHOXcwQgpBUUVGQUFPQ0FROEFN | ||
| + | SUlCQ2dLQ0FRRUF3bS94SWphM3JGNjk4aU4xUlpFWEkvYTVteG93V0ZLWW83STBvMFc0ClBueW1K | ||
| + | cVFqZEVIN21VM1d0ZnBPMm9PQWRMSUdTQXVockFpeExmNklNaHU3QzVCMWRuaTBDSFd5dUdBQ1FI | ||
| + | eXoKNEdjdjRZREVQajVoYkt3Z3ozWkFteG94OHE2VjZCNVNnZ0RvaXo4RytVeDJLSGFFZ3RjN1NK | ||
| + | ZXVTbStCZ2RuNwpWMldDbVFHaWcrUXRPS0w2L1NBdTJCdG1ML201V05CVm9IdWVmTmZNZEJOVWFC | ||
| + | K0dYYURtaWRoZmhnVXl6UVNHCnp4RGgvbTJmZUs1RjNrUXN5T3NCVGdVbElDVG9ydnlZOURFTDdF | ||
| + | bXUra0NFT0kzcXhmU1Q0WHNGZDI4aW9LS0cKSEt3c2R1MWE5OUMwVXR6QXRvRzVVbEZBS28zK2pO | ||
| + | ODBEbWxBS2JReEtlQ3lId0lEQVFBQm9BQXdEUVlKS29aSQpodmNOQVFFTEJRQURnZ0VCQUJjUGR6 | ||
| + | UjhlRnNqZzlUT3Fsd2I4WkZsd3MwbDNhdG1QdFRSaUZqQnpudjRoem95Ck1BNG9TWkNhdVN2akdY | ||
| + | Z2VSclpDdG9iZkpPemxRMGI1bTlic2tPNWl3Wnk0WGg5Q3lMTStnTUFkWlhkSk9uaWYKOHNBYzVq | ||
| + | b1hOY0ZmMDRJOEZtZTZDV0RPVnBEbW1peVM2bFNiVHpwU1NIbEluU3BuV1RRSzFDVGVYeXNIaXds | ||
| + | SgplVDFKMy9yM0dOQTk0eE1TN3VFTVM2VTR2dW1RcEx2UG9KSW5rL3NMeGRUa1BuTEJmQXl3N1ZX | ||
| + | V04wNmRGZHJXClllTkhTcVVBRFBQYWR1TWlsc3lnZmdjR3RMZGZnc2tpNlBjTENrbTBKY2RINXVq | ||
| + | MytCcWlDaEdlQjZtbTgwQVgKTnJMTHZDOVRkVTBlN0Uvek1KQ1Z0V2lVbGlIOFNET3dyVVlzaWtJ | ||
| + | PQotLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0K | ||
| + | </ | ||
| + | <code bash> | ||
| + | kubectl get csr | ||
| + | kubectl certificate approve new_admin | ||
| + | kubectl get csr new_admin -o yaml | ||
| + | echo "coded certificate" | ||
| + | </ | ||
| + | |||
| + | ===== RBAC ===== | ||
| + | ==== Создание роли ==== | ||
| + | <code yaml pod-reader-role.yaml> | ||
| + | apiVersion: rbac.authorization.k8s.io/ | ||
| + | kind: Role | ||
| + | metadata: | ||
| + | namespace: default | ||
| + | name: pod-reader | ||
| + | rules: | ||
| + | - apiGroups: ["" | ||
| + | resources: [" | ||
| + | verbs: [" | ||
| + | - apiGroups: ["" | ||
| + | resources: [" | ||
| + | verbs: [" | ||
| + | </ | ||
| + | ==== Биндинг роли к конкретному пользователю ==== | ||
| + | |||
| + | <code yaml pod-reader-role.yaml> | ||
| + | apiVersion: rbac.authorization.k8s.io/ | ||
| + | kind: RoleBinding | ||
| + | metadata: | ||
| + | name: pod-reader-binding | ||
| + | namespace: default | ||
| + | subjects: | ||
| + | # You can specify more than one " | ||
| + | - kind: User | ||
| + | name: jane # " | ||
| + | apiGroup: rbac.authorization.k8s.io | ||
| + | roleRef: | ||
| + | # " | ||
| + | kind: Role #this must be Role or ClusterRole | ||
| + | name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to | ||
| + | apiGroup: rbac.authorization.k8s.io | ||
| + | </ | ||
| + | ==== Просмотр сведений RBAC ==== | ||
| + | <code bash> | ||
| + | kubectl get roles | ||
| + | kubectl get rolebindings | ||
| + | kubectl describe role developer | ||
| + | kubectl describe rolebinding dev-users-rolebinding | ||
| + | </ | ||
| + | ==== Проверка доступа ==== | ||
| + | <code bash> | ||
| + | kubectl auth can-i create deployments | ||
| + | kubectl auth can-i delete nodes | ||
| + | kubectl auth can-i create pods --as sample-user | ||
| + | </ | ||
| + | ===== Кластерные роли ===== | ||
| + | Кластерные роли, в отличие от обычных, | ||
| + | ==== Кластерная роль ==== | ||
| + | <code yaml cluster-role.yaml> | ||
| + | apiVersion: rbac.authorization.k8s.io/ | ||
| + | kind: ClusterRole | ||
| + | metadata: | ||
| + | name: cluster-administrator | ||
| + | rules: | ||
| + | - apiGroups: ["" | ||
| + | resources: [" | ||
| + | verbs: [" | ||
| + | </ | ||
| + | ==== Привязка кластерной роли к пользователю ==== | ||
| + | <code yaml cluster-role-binding.yaml> | ||
| + | apiVersion: rbac.authorization.k8s.io/ | ||
| + | # This cluster role binding allows anyone in the " | ||
| + | kind: ClusterRoleBinding | ||
| + | metadata: | ||
| + | name: cluster-admin-role-binding | ||
| + | subjects: | ||
| + | - kind: User | ||
| + | name: cluster-administrator # Name is case sensitive | ||
| + | apiGroup: rbac.authorization.k8s.io | ||
| + | - kind: Group | ||
| + | name: cluster-admins # Name is case sensitive | ||
| + | apiGroup: rbac.authorization.k8s.io | ||
| + | roleRef: | ||
| + | kind: ClusterRole | ||
| + | name: cluster-administrator | ||
| + | apiGroup: rbac.authorization.k8s.io | ||
| + | </ | ||
| + | |||
| + | ===== Service Accounts ===== | ||
| + | По умолчанию в каждом namespace уже существует ServiceAccount с именем <color # | ||
| + | |||
| + | Создать ServiceAccount | ||
| + | <code bash> | ||
| + | Получить список ServiceAccount' | ||
| + | <code bash> | ||
| + | Вывести полную информацию о ServiceAccount' | ||
| + | <code bash> | ||
| + | Получить токен безопасности определенного ServiceAccount' | ||
| + | <code bash> | ||
| + | |||
| + | Применить ServiceAccount к поду: | ||
| + | <code yaml pod.yaml> | ||
| + | apiVersion: v1 | ||
| + | kind: Pod | ||
| + | metadata: | ||
| + | name: simplePod | ||
| + | spec: | ||
| + | containers: | ||
| + | - name: simplePod | ||
| + | image: simplePod | ||
| + | serviceAccountName: | ||
| + | </ | ||
kubernetes/безопасность_в_кластере.1644867327.txt.gz · Последнее изменение: 2024/12/21 19:00 (внешнее изменение)
