Kubernetes - OPA Gatekeeper
Reading time: 3 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Оригінальний автор цієї сторінки Guillaume
Визначення
Open Policy Agent (OPA) Gatekeeper - це інструмент, що використовується для забезпечення політик прийому в Kubernetes. Ці політики визначаються за допомогою Rego, мови політик, наданої OPA. Нижче наведено базовий приклад визначення політики за допомогою OPA Gatekeeper:
package k8srequiredlabels
violation[{"msg": msg}] {
provided := {label | input.review.object.metadata.labels[label]}
required := {label | label := input.parameters.labels[label]}
missing := required - provided
count(missing) > 0
msg := sprintf("Required labels missing: %v", [missing])
}
default allow = false
Ця політика Rego перевіряє, чи присутні певні мітки на ресурсах Kubernetes. Якщо необхідні мітки відсутні, вона повертає повідомлення про порушення. Цю політику можна використовувати для забезпечення того, щоб усі ресурси, розгорнуті в кластері, мали специфічні мітки.
Застосувати обмеження
Щоб використовувати цю політику з OPA Gatekeeper, вам потрібно визначити ConstraintTemplate та Constraint в Kubernetes:
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8srequiredlabels
spec:
crd:
spec:
names:
kind: K8sRequiredLabels
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8srequiredlabels
violation[{"msg": msg}] {
provided := {label | input.review.object.metadata.labels[label]}
required := {label | label := input.parameters.labels[label]}
missing := required - provided
count(missing) > 0
msg := sprintf("Required labels missing: %v", [missing])
}
default allow = false
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
name: ensure-pod-has-label
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
labels:
requiredLabel1: "true"
requiredLabel2: "true"
У цьому прикладі YAML ми визначаємо ConstraintTemplate, щоб вимагати мітки. Потім ми називаємо це обмеження ensure-pod-has-label
, яке посилається на ConstraintTemplate k8srequiredlabels
і вказує необхідні мітки.
Коли Gatekeeper буде розгорнуто в кластері Kubernetes, він буде забезпечувати виконання цієї політики, запобігаючи створенню подів, які не мають вказаних міток.
Посилання
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.