Что такое Usage Control (UCON)? Непрерывная авторизация
Что такое UCON?
UCON (Usage Control) расширяет контроль доступа с помощью авторизаций (A), обязательств (B) и условий (C). Он поддерживает непрерывное применение во время использования (а не только при доступе) и изменяемые атрибуты. Casbin не реализует UCON в ядре; используйте расширение casbin-ucon для контроля использования на основе сессий.
Model & Policy
Note: Casbin не поддерживает UCON непосредственно в своей основной библиотеке. Вместо этого функциональность UCON предоставляется через расширенную библиотеку casbin-ucon, которая добавляет контроль доступа на основе сессий с условиями, обязательствами и возможностями непрерывного мониторинга. Расширение может использовать те же модели и политики, которые поддерживаются ядром Casbin.
model
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
policy
p, alice, document1, read
Note: В UCON условия и обязательства не записываются в policy.csv; они добавляются и управляются в коде через API casbin-ucon.
Основные компоненты
- Авторизации (A) — правила доступа на основе атрибутов субъекта/объекта (как в стандартном Casbin).
- Обязательства (B) — действия, которые субъект должен выполнить до или во время использования (например, вести журнал, подтверждать).
- Условия (C) — состояние окружения или системы (например, время, местоположение), которое должно быть истинным.
Функции
- Непрерывное применение — проверки на протяжении всей сессии использования, а не только при входе.
- Изменяемость — атрибуты могут изменяться в результате использования.
- До / во время / после — решения и обязательства при доступе, во время использования и после него.
Варианты использования
Модель UCON особенно ценна в:
- Системах управления цифровыми правами (DRM)
- Информационных системах здравоохранения
- Средах облачных вычислений
- Контроль доступа IoT-устройств
- Совместный обмен данными в коллаборативных средах
- Финансовые системы со сложными требованиями к соответствию нормативам
Реализация с помощью casbin-ucon
Чтобы реализовать UCON в вашем приложении на базе Casbin, используйте расширенную библиотеку casbin-ucon:
go get github.com/casbin/casbin-ucon
// Import the required packages
import (
"github.com/casbin/casbin/v3"
"github.com/casbin/casbin-ucon"
"fmt"
"time"
)
func main() {
// Create standard Casbin enforcer
e, _ := casbin.NewEnforcer("model.conf", "policy.csv")
// Wrap with UCON functionality
uconE := ucon.NewUconEnforcer(e)
// Add conditions
condition := &ucon.Condition{
ID: "location_condition",
Name: "location",
Kind: "always",
Expr: "office",
}
uconE.AddCondition(condition)
// Add obligations
obligation := &ucon.Obligation{
ID: "post_log",
Name: "access_logging",
Kind: "post",
Expr: "log_level:detailed",
}
uconE.AddObligation(obligation)
// Create a session
sessionID, _ := uconE.CreateSession("alice", "read", "document1", map[string]interface{}{
"location": "office",
"log_level": "detailed",
})
// UCON session-based enforcement
session, err := uconE.EnforceWithSession(sessionID)
if session == nil {
// refused
fmt.Println("session refused because: ", err)
}
// Monitor session status
go func() {
for {
if !session.IfActive() {
if session.GetStopReason() == ucon.NormalStopReason {
break
}
//TODO
//decide how to handle session termination yourself
// For example, clean up resources, close connections, write logs, notify the frontend, etc.
fmt.Printf("%s %s %s is stopped because: %s\n",
session.GetSubject(), session.GetAction(),
session.GetObject(), session.GetStopReason())
break
}
time.Sleep(200 * time.Millisecond)
}
}()
// You can update attributes during the session
// session.UpdateAttribute("location", "home")
// Stop the session when done
_ = uconE.StopMonitoring(sessionID)
}
Примечания по реализации
- UCON включает традиционные модели контроля доступа, такие как MAC, DAC и RBAC
- Для реализации требуется монитор эталонной политики (reference monitor), способный осуществлять непрерывный мониторинг
- Обновления атрибутов (изменяемость) должны обрабатываться атомарно для поддержания согласованности
- Обязательства могут потребовать интеграции с внешними системами мониторинга
- Оценка условий может зависеть от факторов окружающей среды, находящихся вне системы контроля доступа
- При использовании casbin-ucon необходимо правильно управлять жизненным циклом сессий и мониторингом
Сравнение с традиционными моделями
| Аспект | Традиционный контроль доступа | UCON |
|---|---|---|
| Время принятия решения | Только до доступа | До, во время и после доступа |
| Изменяемость атрибутов | Статические | Динамические (могут изменяться во время использования) |
| Факторы принятия решения | Только авторизации | Авторизации, обязательства и условия |
| Принудительное исполнение | Однократная проверка | Непрерывный мониторинг |
| Отзыв прав | Явный | Может быть автоматическим на основе изменений атрибутов |
Ссылки
Полную документацию API, подробное описание использования и последние обновления о casbin-ucon см. в репозитории casbin-ucon.
FAQ
Поддерживает ли Casbin UCON в ядре? Нет. Базовая библиотека принимает решение при вызове Enforce(). Для UCON необходимы непрерывные проверки и изменяемые атрибуты, поэтому он предоставляется расширением casbin-ucon, которое оборачивает энфорсер сессиями, условиями и обязательствами.
Чем UCON отличается от RBAC? RBAC принимает решение один раз, до доступа, на основе ролей. UCON также может принимать решения во время использования и после доступа, а его атрибуты могут изменяться, пока сессия активна, поэтому разрешение может быть отозвано без ожидания следующего входа в систему.
Когда следует использовать UCON? Когда доступ зависит от времени, количества использований, местоположения или другого изменяющегося контекста, либо когда политика должна реагировать, пока сессия еще выполняется. Если проверки роли при запросе достаточно, используйте RBAC.
Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.