Как запретить просмотр / получение операции в 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это не то же самое, что вы видите на веб-перехватчике контроля доступа. Бегло взглянув на его запись, кажется, что вам нужно следовать его инструкциям, чтобы включить авторизацию.

Другие вопросы по тегам