본문으로 건너뛰기

Usage Control(UCON)이란? 지속적 권한 관리

UCON이란 무엇인가?​

**UCON (Usage Control)**은 권한(A), 의무(B), **조건(C)**을 포함하도록 접근 제어를 확장합니다. 사용 시점뿐만 아니라 사용 중 지속적인 강제 적용과 가변 속성을 지원합니다. Casbin은 핵심 라이브러리에서 UCON을 구현하지 않으며, 세션 기반 사용 제어에는 casbin-ucon 확장 프로그램을 사용하세요.

모델 & 정책​

참고: Casbin은 핵심 라이브러리에서 UCON을 직접 지원하지 않습니다. 대신, 조건, 의무 및 지속적 모니터링 기능을 갖춘 세션 기반 접근 제어를 제공하는 확장 라이브러리 casbin-ucon을 통해 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

참고: UCON에서는 조건(Conditions)과 의무(Obligations)가 policy.csv에 기록되지 않으며, casbin-ucon API를 통해 코드에서 추가하고 관리됩니다.

핵심 구성 요소​

  • 권한(A) — 주체/대상 속성에 기반한 접근 규칙(표준 Casbin과 유사).
  • 의무(B) — 사용 전이나 사용 중에 주체가 수행해야 하는 작업(예: 로그 기록, 확인).
  • 조건(C) — 충족되어야 하는 환경 또는 시스템 상태(예: 시간, 위치).

기능​

  • 지속적 강제 적용 — 진입 시점뿐만 아니라 전체 사용 세션 동안 검사.
  • 가변성 — 사용 결과에 따라 속성이 변경될 수 있음.
  • 사전 / 진행 중 / 사후 — 접근 시점, 사용 중, 사용 후의 결정 및 의무.

사용 사례​

UCON 모델은 특히 다음 분야에서 가치가 있습니다:

  • 디지털 저작권 관리(DRM) 시스템
  • 의료 정보 시스템
  • 클라우드 컴퓨팅 환경
  • IoT 디바이스 접근 제어
  • 협업 환경에서의 데이터 공유
  • 복잡한 컴플라이언스 요구 사항이 있는 금융 시스템

casbin-ucon을 통한 구현​

Casbin 기반 애플리케이션에서 UCON을 구현하려면 확장 라이브러리인 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)가 필요합니다.
  • 속성 업데이트(변경 가능성)는 일관성을 유지하기 위해 원자적으로 처리되어야 합니다.
  • 의무(Obligations)는 외부 모니터링 시스템과의 통합이 필요할 수 있습니다.
  • 조건 평가는 접근 제어 시스템 외부의 환경 요인에 의존할 수 있습니다.
  • casbin-ucon을 사용할 때는 세션 라이프사이클과 모니터링을 적절하게 관리해야 합니다.

전통적 모델과의 비교​

측면전통적 접근 제어UCON
결정 시점접근 전만 가능접근 전, 중, 후 모두 가능
속성 변경 가능성정적동적 (사용 중 변경 가능)
결정 요소권한 부여만권한 부여, 의무, 조건
강제 적용일회성 검사지속적 모니터링
취소명시적속성 변경에 따라 자동 가능

참고 자료​

casbin-ucon의 전체 API 문서, 상세 사용법 및 최신 업데이트는 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.