Код-ревью Senior RBAC и Helm обновлено
Ревью: RBAC для CI
Вопрос
Эти права выданы CI-пайплайну, который деплоит одно приложение в namespace shop. Найди проблемы.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ci-deployer
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ci-deployer
subjects:
- kind: ServiceAccount
name: default
namespace: shop
roleRef:
kind: ClusterRole
name: ci-deployer
apiGroup: rbac.authorization.k8s.io
Коротко
Минимальные права: Ещё лучше GitOps: CI только обновляет git, а изменения в кластер вносит Argo CD или Flux со своими правами, и учётные данные кластера не покидают его.
Что должен найти ревьюер
- Безопасностьстрока 6Wildcard по группам, ресурсам и глаголам: это права
cluster-admin. Перечислить только нужное: deployments, services, configmaps, ingresses и глаголы get, list, create, patch, update. - Безопасностьстрока 11ClusterRoleBinding распространяет права на весь кластер, а CI работает в одном namespace. Нужен RoleBinding в
shop. - Безопасностьстрока 16Права выданы ServiceAccount
default: его получают все поды namespace, то есть любое приложение вshopстанет администратором кластера. Нужен отдельный ServiceAccount для CI. - БезопасностьПрава на чтение секретов и
pods/execCI для деплоя не нужны; если деплой идёт через Helm, учесть, что Helm хранит релизы в Secret (нужны права на secrets только в своём namespace).
Разбор
Минимальные права:
apiVersion: v1
kind: ServiceAccount
metadata:
name: ci-deployer
namespace: shop
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: ci-deployer
namespace: shop
rules:
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
- apiGroups: [""]
resources: ["services", "configmaps"]
verbs: ["get", "list", "create", "update", "patch"]
- apiGroups: ["networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get", "list", "create", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: ci-deployer
namespace: shop
subjects:
- kind: ServiceAccount
name: ci-deployer
namespace: shop
roleRef:
kind: Role
name: ci-deployer
apiGroup: rbac.authorization.k8s.io
Ещё лучше GitOps: CI только обновляет git, а изменения в кластер вносит Argo CD или Flux со своими правами, и учётные данные кластера не покидают его.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.