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

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


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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
kubernetes:безопасность_в_кластере [2022/02/14 22:48] 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>:
 +<code csv user-details.csv>
 +P@ssw0rd1,user1,u0001,group1
 +P@ssw0rd2,user2,u0002,group2
 +P@ssw0rd3,user3,u0003,group3
 +</code>
 +Для аутентификации: <code bash>curl -v -k https://master-node-ip:6443/api/v1/pods -u "user1:P@ssw0rd1"</code>
  
-Что бы указать kube-apiserver на необходимость использования статических паролей, необходимо передать в параметрах запуска ключ <color #ffc90e>--basic-auth-file=user-details.csv</colorс файлом, содержащим список вида <color #ffc90e>password, username, userid</color>.+===== Аутентификация по токену ===== 
 +Аналогично для файла с токенами <color #ffc90e>--token-auth-file=user-details.csv</color>: 
 +<code csv user-token-details.csv> 
 +9OSR4OYO6QwM7cfg6sKcerCyiVC6xnFZ,user1,u0001,group1 
 +yDLmsJptxat04MUvuFdBw2CFWwv2ogcr,user2,u0002,group2 
 +IonP8eYFUEfsZJDflyiRVSoMeDJSpBcq,user3,u0003,group3 
 +</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> 
 +<code bash> 
 +openssl genrsa -out admin.key 2048 
 +openssl req -new -key admin.key -subj "/CN=kube-admin/O=system:masters" -out admin.csr 
 +openssl x509 -req -in admin.csr -CA ca.crt -CAkey ca.key -out admin.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/безопасность_в_кластере.1644868094.txt.gz · Последнее изменение: 2024/12/21 19:00 (внешнее изменение)