규칙 기반 접근 제어(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;
}
}
|
주요 특징#
- 규칙 기반 결정: 사용자의 속성, 리소스의 특성, 환경 조건 등을 고려한 규칙을 설정하여 접근 권한을 결정한다.
- 유연성: 다양한 조건과 규칙을 조합하여 세밀한 접근 제어가 가능하다.
- 동적 평가: 접근 요청 시 실시간으로 규칙을 평가하여 결정을 내린다.
- 중앙 집중식 관리: 규칙을 중앙에서 관리하여 일관성을 유지하고 관리를 용이하게 한다.
- 세밀한 접근 제어: 복잡한 비즈니스 규칙과 요구사항을 정책에 반영할 수 있다.
- 변화에 대한 빠른 대응: 규칙 변경만으로 접근 제어 로직을 신속하게 수정할 수 있다.
- 투명성: 규칙이 명시적으로 정의되어 있어 접근 제어 결정의 이유를 쉽게 이해할 수 있다.
- 복잡성: 규칙이 많아지면 관리가 복잡해질 수 있다.
- 성능 영향: 많은 규칙을 평가해야 할 경우 처리 시간이 길어질 수 있다.
참고 및 출처#