Helm - пакетны менеджэр для Kubernetes, нешта накшталт apt-get
для Ubuntu. У гэтай нататцы мы ўбачым папярэднюю версію helm (v2) з сэрвісам tiller, усталяваным па змаўчанні, праз які атрымаем доступ да кластара.
Падрыхтуем кластар, для гэтага запусцім каманду:
kubectl run --rm --restart=Never -it --image=madhuakula/k8s-goat-helm-tiller -- bash
дэманстрацыя
- Калі нічога дадаткова не наладжваць, helm v2 запускае сэрвіс tiller, які мае RBAC c поўнымі правамі адміністратара кластара.
- Пасля ўстаноўкі ў namespace
kube-system
з'яўляеццаtiller-deploy
, а таксама адчыняецца порт 44134, прывязаны да 0.0.0.0. Гэта можна праверыць з дапамогай telnet.
$ telnet tiller-deploy.kube-system 44134
- Цяпер можна падлучыцца да сэрвісу tiller. Будзем выкарыстоўваць бінарнік helm для правядзення аперацый пры зносінах з сэрвісам tiller:
$ helm --host tiller-deploy.kube-system:44134 version
- Паспрабуем атрымаць сакрэты кластара Kubernetes з namespace
kube-system
:
$ kubectl get secrets -n kube-system
- Цяпер мы можам стварыць свой уласны чарт, у якім створым ролю з правамі адміністратара і прызначым гэтую ролю дэфолтнага сэрвіс акаўнту. Выкарыстоўваючы токен ад гэтага сэрвіс акаўнта, мы атрымалі поўны доступ у наш кластар.
$ helm --host tiller-deploy.kube-system:44134 install /pwnchart
- Цяпер, калі
pwnchart
разгорнуты, сэрвісны ўліковы запіс па змаўчанні мае поўны адміністрацыйны доступ. Праверым яшчэ раз атрыманне сакрэтаў зkube-system
kubectl get secrets -n kube-system
Паспяховае выкананне гэтага сцэнара залежыць ад таго, як быў разгорнуты tiller, часам адміністратары разгортваюць яго ў асобным namespace з іншымі прывілеямі. Helm 3 не схільны такім уразлівасцям, т.я. у ім няма tiller.
Заўвага перакладчыка: выкарыстанне сеткавых палітык для фільтравання трафіку ў кластары дапамагае абароніцца ад уразлівасцяў падобнага тыпу.
Крыніца: habr.com