Инструменты пользователя

Инструменты сайта


kubernetes:безопасность_в_кластере

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
kubernetes:безопасность_в_кластере [2022/02/15 14:36] rootkubernetes:безопасность_в_кластере [2024/12/21 19:00] (текущий) – внешнее изменение 127.0.0.1
Строка 10: Строка 10:
   * сертификат;   * сертификат;
   * сторонний сервис аутентификации (ldap, kerberos, etc).   * сторонний сервис аутентификации (ldap, kerberos, etc).
-===== Парольная аутентфиикация=====+===== Парольная аутентификация=====
 Что бы указать kube-apiserver.service на необходимость использования статических паролей, необходимо передать в параметрах запуска ключ <color #ffc90e>--basic-auth-file=user-details.csv</color> с файлом, содержащим список вида <color #ffc90e>password, username, userid, group*</color>: Что бы указать kube-apiserver.service на необходимость использования статических паролей, необходимо передать в параметрах запуска ключ <color #ffc90e>--basic-auth-file=user-details.csv</color> с файлом, содержащим список вида <color #ffc90e>password, username, userid, group*</color>:
 <code csv user-details.csv> <code csv user-details.csv>
Строка 28: Строка 28:
 Для аутентификации: <code bash>curl -v -k https://master-node-ip:6443/api/v1/pods --header "Authorization: Bearer 9OSR4OYO6QwM7cfg6sKcerCyiVC6xnFZ"</code> Для аутентификации: <code bash>curl -v -k https://master-node-ip:6443/api/v1/pods --header "Authorization: Bearer 9OSR4OYO6QwM7cfg6sKcerCyiVC6xnFZ"</code>
  
-===== Аутентификаиця по сертификату =====+===== Аутентификация по сертификату =====
 Для аутентификации по сертификату, необходимо наличие сертификата подписанного доверенным CA, а так же, что бы в Subject Name был указан аттрибут <color #ed1c24>system:masters</color> Для аутентификации по сертификату, необходимо наличие сертификата подписанного доверенным CA, а так же, что бы в Subject Name был указан аттрибут <color #ed1c24>system:masters</color>
 <code bash> <code bash>
Строка 37: Строка 37:
 Для аутентификации: <code bash>curl https://master-node-ip:6443/api/v1/pods --key admin.key --cert admin.crt --cacert ca.crt</code> Для аутентификации: <code bash>curl https://master-node-ip:6443/api/v1/pods --key admin.key --cert admin.crt --cacert ca.crt</code>
  
 +===== Создание сертификата пользователя при помощи Certificate API =====
 +<code bash>
 +openssl genrsa -out new_admin.key 2048
 +openssl req -new -key new_admin.key -subj "/CN=New Admin,O=system:masters" -out new_admin.csr
 +cat new_admin.csr | base64
 +</code>
 +<code yaml new_admin_csr.yaml>
 +apiVersion: certificates.k8s.io/v1beta1
 +kind: CertificateSigningRequest
 +metadata:
 +  name: New Admin
 +spec:
 +  groups:
 +  - system:masters
 +  - system:authenticated
 +  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>
 +<code bash>
 +kubectl get csr
 +kubectl certificate approve new_admin
 +kubectl get csr new_admin -o yaml
 +echo "coded certificate" | base64 --decode > new_admin.crt
 +</code>
 +
 +===== RBAC =====
 +==== Создание роли ====
 +<code yaml pod-reader-role.yaml>
 +apiVersion: rbac.authorization.k8s.io/v1
 +kind: Role
 +metadata:
 +  namespace: default
 +  name: pod-reader
 +rules:
 +- apiGroups: [""] #
 +  resources: ["pods"]
 +  verbs: ["get", "watch", "list"]
 +- apiGroups: [""] #
 +  resources: ["ConfigMap"]
 +  verbs: ["get", "create"]
 +</code>
 +==== Биндинг роли к конкретному пользователю ====
 +
 +<code yaml pod-reader-role.yaml>
 +apiVersion: rbac.authorization.k8s.io/v1
 +kind: RoleBinding
 +metadata:
 +  name: pod-reader-binding
 +  namespace: default
 +subjects:
 +# You can specify more than one "subject"
 +- kind: User
 +  name: jane # "name" is case sensitive
 +  apiGroup: rbac.authorization.k8s.io
 +roleRef:
 +  # "roleRef" specifies the binding to a Role / ClusterRole
 +  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
 +</code>
 +==== Просмотр сведений RBAC  ====
 +<code bash>
 +kubectl get roles
 +kubectl get rolebindings
 +kubectl describe role developer
 +kubectl describe rolebinding dev-users-rolebinding
 +</code>
 +==== Проверка доступа ====
 +<code bash>
 +kubectl auth can-i create deployments
 +kubectl auth can-i delete nodes
 +kubectl auth can-i create pods --as sample-user
 +</code>
 +===== Кластерные роли =====
 +Кластерные роли, в отличие от обычных, не привязаны к ресурсам в определенном namespace.
 +==== Кластерная роль ====
 +<code yaml cluster-role.yaml>
 +apiVersion: rbac.authorization.k8s.io/v1
 +kind: ClusterRole
 +metadata:
 +  name: cluster-administrator
 +rules:
 +- apiGroups: [""]
 +  resources: ["nodes"]
 +  verbs: ["list","get","create","delete"]
 +</code>
 +==== Привязка кластерной роли к пользователю ====
 +<code yaml cluster-role-binding.yaml>
 +apiVersion: rbac.authorization.k8s.io/v1
 +# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
 +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
 +</code>
 +
 +===== Service Accounts =====
 +По умолчанию в каждом namespace уже существует ServiceAccount с именем <color #ed1c24>default</color>, который автоматически цепляется каждым создаваемым Pod'ом. При этом, default аккаунт сильно порезан в правах.
 +
 +Создать ServiceAccount
 +<code bash>kubectl create serviceaccount test-sa</code>
 +Получить список ServiceAccount'ов
 +<code bash>kubectl get serviceaccount</code>
 +Вывести полную информацию о ServiceAccount'е
 +<code bash>kubectl describe serviceaccount test-sa</code>
 +Получить токен безопасности определенного ServiceAccount'а
 +<code bash>kubectl describe secret test-sa-token-kbbdm</code>
 +
 +Применить ServiceAccount к поду:
 +<code yaml pod.yaml>
 +apiVersion: v1
 +kind: Pod
 +metadata:
 +  name: simplePod
 +spec:
 +  containers:
 +  - name: simplePod
 +    image: simplePod
 +  serviceAccountName: simplePod-sa 
 +</code>
kubernetes/безопасность_в_кластере.1644924966.txt.gz · Последнее изменение: 2024/12/21 19:00 (внешнее изменение)