Перейти к основному контенту

Authorization of Kubernetes

K8s-authz - это промежуточное программное обеспечение для авторизации Kubernetes (k8s) на основе Casbin, которое использует RBAC (Role-Based Access Control) и ABAC (Attribute-Based Access Control) для принудительного выполнения политики. Это промежуточное программное обеспечение интегрируется с проверочным веб-хуком K8s для проверки политик, определенных Casbin для каждого запроса, сделанного к ресурсам K8s. Пользовательские контроллеры приема регистрируются в Kubernetes с использованием ValidatingAdmissionWebhook для выполнения проверок объектов запросов, перенаправленных сервером API, и предоставления ответа, указывающего, следует ли разрешить или отклонить запрос.

Для определения, когда отправлять входящие запросы на контроллер приема, был реализован веб-хук проверки. Этот веб-хук проксирует запросы к любому типу ресурсов или подресурсов K8s и выполняет проверку политики. Пользователям разрешается выполнять операции с этими ресурсами только в том случае, если они авторизованы исполнителем Casbin. Исполнитель проверяет роли пользователя, определенные в политиках. Целью развертывания для этого промежуточного программного обеспечения является кластер K8s.

Требования

Прежде чем продолжить, убедитесь, что у вас есть следующее:

  • Работающий кластер Kubernetes. Вы можете настроить локальный кластер с использованием Docker или настроить полный экосистему Kubernetes на вашем сервере. Для подробных инструкций обратитесь к этому руководству по настройке локального кластера Kubernetes на Windows или этому руководству по настройке кластера на Linux.
  • Kubectl CLI. Инструкции по установке Kubectl на Windows можно найти здесь, а для Linux - здесь.
  • OpenSSL

Использование

Следуйте этим шагам для использования K8s-authz:

  1. Сгенерируйте сертификаты и ключи для каждого пользователя с помощью OpenSSL. Запустите приведенный ниже скрипт:

    ./gen_cert.sh
  2. Соберите Docker-образ из Dockerfile вручную, выполнив следующую команду. Не забудьте изменить версию сборки в команде и в файле развертывания соответственно.

    docker build -t casbin/k8s_authz:0.1 .
  3. Определите политики Casbin в файлах model.conf и policy.csv. Для получения дополнительной информации о том, как работают эти политики, обратитесь к документации.

  4. Перед развертыванием вы можете изменить порты в файле main.go, а также в конфигурации веб-хука проверки файле, в зависимости от ваших конкретных требований.

  5. Разверните контроллер проверки и веб-хук на кластере Kubernetes, выполнив следующую команду:

    kubectl apply -f deployment.yaml
  6. Для сервера в рабочей среде рекомендуется создать secret Kubernetes для защиты сертификатов:

    kubectl create secret generic casbin -n default \
    --from-file=key.pem=certs/casbin-key.pem \
    --from-file=cert.pem=certs/casbin-crt.pem
  7. После выполнения вышеуказанных шагов вам нужно обновить директорию сертификата в main.go и манифестах с директорией созданного secret.

Теперь сервер должен быть запущен и готов к проверке запросов, сделанных к ресурсам K8s, и принудительному выполнению политик в соответствии с этим.