규칙 기반 접근 제어(Rule-Based Access Control, RBAC)

RBAC는 “만약 ~라면 ~할 수 있다"와 같은 형태의 규칙들을 사용하여 접근 권한을 제어한다.
각 규칙은 조건부와 결과부로 구성되며, 시스템은 이러한 규칙들을 순차적으로 평가하여 접근 허용 여부를 결정한다.

클라우드 환경, 마이크로서비스 아키텍처, IoT 시스템 등 동적이고 복잡한 환경에서 특히 유용하며, 보안 요구사항이 높고 빠르게 변화하는 조직에 적합하다.

기본 구조:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Rule {
    constructor(condition, consequence) {
        // 규칙의 조건부(if)와 결과부(then)를 정의합니다
        this.condition = condition;
        this.consequence = consequence;
    }

    evaluate(context) {
        // 주어진 컨텍스트에 대해 규칙을 평가합니다
        if (this.condition(context)) {
            return this.consequence;
        }
        return null;
    }
}

class RuleEngine {
    constructor() {
        this.rules = [];
    }

    addRule(rule) {
        // 새로운 규칙을 규칙 엔진에 추가합니다
        this.rules.push(rule);
    }

    evaluateAccess(context) {
        // 모든 규칙을 순차적으로 평가합니다
        for (const rule of this.rules) {
            const result = rule.evaluate(context);
            if (result !== null) {
                return result;
            }
        }
        // 기본적으로는 접근을 거부합니다
        return false;
    }
}

주요 특징

  1. 규칙 기반 결정: 사용자의 속성, 리소스의 특성, 환경 조건 등을 고려한 규칙을 설정하여 접근 권한을 결정한다.
  2. 유연성: 다양한 조건과 규칙을 조합하여 세밀한 접근 제어가 가능하다.
  3. 동적 평가: 접근 요청 시 실시간으로 규칙을 평가하여 결정을 내린다.
  4. 중앙 집중식 관리: 규칙을 중앙에서 관리하여 일관성을 유지하고 관리를 용이하게 한다.

장점

  1. 세밀한 접근 제어: 복잡한 비즈니스 규칙과 요구사항을 정책에 반영할 수 있다.
  2. 변화에 대한 빠른 대응: 규칙 변경만으로 접근 제어 로직을 신속하게 수정할 수 있다.
  3. 투명성: 규칙이 명시적으로 정의되어 있어 접근 제어 결정의 이유를 쉽게 이해할 수 있다.

단점

  1. 복잡성: 규칙이 많아지면 관리가 복잡해질 수 있다.
  2. 성능 영향: 많은 규칙을 평가해야 할 경우 처리 시간이 길어질 수 있다.

참고 및 출처