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:
Сгенерируйте сертификаты и ключи для каждого пользователя с помощью OpenSSL. Запустите приведенный ниже скрипт:
./gen_cert.sh
Соберите Docker-образ из Dockerfile вручную, выполнив следующую команду. Не забудьте изменить версию сборки в команде и в файле развертывания соответственно.
docker build -t casbin/k8s_authz:0.1 .
Определите политики Casbin в файлах model.conf и policy.csv. Для получения дополнительной информации о том, как работают эти политики, обратитесь к документации.
Перед развертыванием вы можете изменить порты в файле main.go, а также в конфигурации веб-хука проверки файле, в зависимости от ваших конкретных требований.
Разверните контроллер проверки и веб-хук на кластере Kubernetes, выполнив следующую команду:
kubectl apply -f deployment.yaml
Для сервера в рабочей среде рекомендуется создать
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После выполнения вышеуказанных шагов вам нужно обновить директорию сертификата в main.go и манифестах с директорией созданного
secret
.
Теперь сервер должен быть запущен и готов к проверке запросов, сделанных к ресурсам K8s, и принудительному выполнению политик в соответствии с этим.