Как запретить просмотр / получение операции в openshift с помощью открытой политики?
Мы хотим отключить oc get/describe
за secrets
чтобы предотвратить вход по токену
Текущая политика запрещает создание, обновление, удаление, но не просмотр секретов
package admission
import data.k8s.matches
# Deny all user for doing secret ops except policyadmin
deny[query] {
matches[[resource]]
not "policyadmin" == resource.userInfo.username
"Secret" == resource.kind.kind
msg := sprintf("Custom Unauthorized user: %v", [resource.userInfo.username])
query = {
"id": "policy-admin-for-secret-only",
"resource": {
"kind": kind,
"namespace": namespace,
"name": name
},
"resolution": {
"message": msg
},
}
}
Данные в объекте ресурса просто:
{\"kind\": {\"group \": \ "\", \ "kind \": \ "Secret \", \ "version \": \ "v1\"}, \ "name \": \ "s5-token-n6v6q \", \ "пространство имен \": \ "демонстрация \", \ "операция \": \ "УДАЛИТЬ \", \ "ресурс \": {\"группа \": \ "\ ", \" ресурс \ ": \" секреты \ ", \" версия \": \"v1\"}, \"uid\": \"748cdab2-1c1d-11ea-8b11-080027f8814d\", \"userInfo\": {\" группы \": [\" система: администраторы кластера \ ", \" система: мастера \ ", \" система: аутентифицирована \"], \" имя пользователя \ ": \" система: админ \ "}
Пример в https://github.com/raffaelespazzoli/openshift-opa/blob/master/examples/authorization-webhooks/unreadable_secrets.rego использует объект resource.spec, но я не думаю, что он доступен в моемinput/AdmissionReview
объект?
Я использую
- минишифт 1.24
- openshift v3.9.0+2e78773-56
- Kubernetes v1.9.1+a0ce1bc657
- etcd 3.2.16
1 ответ
Контроль доступа в Kubernetes НЕ позволяет вам контролировать get
. Это только позволяет вам контролироватьcreate
, update
, delete
, а также connect
. Документы API для проверяющего веб-перехватчика и его потомка RuleWithOperations (без удобной ссылки) не разъясняют это, но документы, представляющие доступ к API, указывают это явно.
Контролировать get
, вам необходимо использовать авторизацию. Вы можете использовать RBAC для ограничения того, кто можетget
любой из Secret
с. Чтобы использовать OPA для авторизации, вам понадобится режим авторизации через веб-перехватчик.
В коде Эндрю, на который вы ссылаетесь, он использует веб-перехватчик авторизации, а не веб-перехватчик контроля доступа. Вот почему некоторые данные, которые он использует,input
это не то же самое, что вы видите на веб-перехватчике контроля доступа. Бегло взглянув на его запись, кажется, что вам нужно следовать его инструкциям, чтобы включить авторизацию.