반응형

RBAC(역할 기반 접근 제어)이란?
사용자에게 직접 권한을 부여하는 대신, 역할(Role)을 정의하고 그 역할에 권한(Permission)을 설정한 뒤, 사용자에게 역할을 할당하는 방식입니다.
- 장점: 사용자가 수천 명으로 늘어나도 설정 파일로 'Role'만 관리하면 되므로 유지보수가 매우 쉽습니다. (.json, .xml)
- 실제 구현: 사용자.json에서 사용자의 역할을 정의하고, 권한.json에서 각 역할의 세부 권한을 정의하여 Model로 연결합니다.
정책 설계: JSON 기반의 선언적 권한 관리
코드 내에 권한을 하드코딩하지 않고 외부에 설정파일로 분리합니다. 이는 서버 재시작 없이도 정책을 변경할 수 있는 확장성을 제공합니다.
아래는 Behind 역할(외부 기기)은 C드라이브는 절대 불가(Deny), D드라이브는 허용(Allow)한다는 정책을 수립했습니다.
- 사용자.json
{
"out_program_company1": {
"Description": " Out Application System1",
"Roles": [ "Behind" ]
},
"out_program_company2": {
"Description": "Out Application System2",
"Roles": [ "Behind" ]
},
"Administrator": {
"Description": "Developer Manager Device",
"Roles": [ "Admin" ]
}
}
- 권한.json
{
"Admin": {
"Description": "관리자: 모든 권한을 가집니다.",
"Permissions": [
{
"Effect": "Allow",
"Action": [ "*" ],
"Resource": "*"
}
]
},
"Behind": {
"Description": "외부 접근자: 명시적으로 허용된 작업을 제외한 모든 파일 시스템 접근이 금지됩니다.",
"Permissions": [
{
"Effect": "Deny",
"Action": [ "file:*" ],
"Resource": "C:\\*"
},
{
"Effect": "Allow",
"Action": [ "file:*" ],
"Resource": "D:\\*"
}
]
},
"Guest": {
"Description": "미인증 사용자: 모든 권한이 거부됩니다.",
"Permissions": [
{
"Effect": "Deny",
"Action": [ "*" ],
"Resource": "*"
}
]
}
}
- Model
using Newtonsoft.Json;
using System.Collections.Generic;
namespace SecurityDemoProject.AccessControl.Models
{
public class RolePolicy
{
[JsonProperty("Description")]
public string Description { get; set; }
[JsonProperty("Permissions")]
public List<PermissionRule> Permissions { get; set; }
}
public class PermissionRule
{
[JsonProperty("Effect")]
public string Effect { get; set; }
[JsonProperty("Action")]
public List<string> Action { get; set; }
[JsonProperty("Resource")]
public string Resource { get; set; }
}
public class UserPolicy
{
[JsonProperty("Description")]
public string Description { get; set; }
[JsonProperty("Roles")]
public List<string> Roles { get; set; }
}
}
기술적 핵심: 와일드카드와 정규표현식(Regex)
권한 검사 시 C:\Data\*와 같이 광범위한 경로를 처리하기 위해 와일드카드를 정규표현식으로 변환하는 로직을 추가 구현했습니다.
C:\\a.txt, C:\\system\b.txt.... 이렇게 모든 파일접근을 설정파일에 다 선언하는 것은 비효율적이기 때문에, 와일드카드를 이용해서 하위 접근경로는 모두 제한할 수 있도록 작성했습니다.
private Regex WildcardToRegex(string pattern)
{
// '*'를 '.*'로 바꾸어 정규표현식 패턴을 생성 (예: D:\* -> ^D:\\.*$)
string regexPattern = Regex.Escape(pattern).Replace("\\*", ".*");
return new Regex($"^{regexPattern}$", RegexOptions.IgnoreCase);
}
권한 결정 알고리즘: Deny-First Strategy
보안 시스템에서 가장 중요한 원칙은 명시적 거부(Deny)는 허용(Allow)보다 우선한다는 것입니다.
- 사용자의 모든 역할에 대한 권한 리스트를 수집합니다.
- 그중 하나라도 Deny에 매칭되면 즉시 차단합니다.
- Deny가 없고 하나라도 Allow에 매칭되면 통과시킵니다.
- 둘 다 없으면 기본적으로 차단(Default Deny)합니다.
RBAC의 특징 및 장점
- 역할 기반 관리
- 최소 권한 원칙
- 업무 분리
- 유연한 권한 변경
- 규정 준수 지원
RBAC의 핵심 요소
역할(Role): 시스템, 직무, 부서 단위 등의 역할 이름을 지어줍니다.
권한(Permission): 역할 별로 가능한 접근 권한 설정입니다. 보통 쓰기/읽기 기준으로 설정합니다.
사용자(User): 역할-권한을 사진 사용자 단위입니다.
범위(Scope): 리소스 범위입니다. 권한이 주어지는 데이터 범위를 말해요
반응형
'IT > Architecture' 카테고리의 다른 글
| C++ 비동기 std::async만 쓰시나요? :: Taskflow와 TBB 라이브러리로 쉽게 비동기 흐름 컨트롤하기 (0) | 2026.02.25 |
|---|---|
| OS 상태 체크 | WMI를 이용한 실시간 프로세스 모니터링 (0) | 2026.01.25 |
| Windows API로 구현하는 Sandbox : 낮은 무결성(Low Integrity) 프로세스 격리 기술 (0) | 2026.01.25 |
| TDD 도입 및 안착 가이드 (1) | 2026.01.17 |
| 🧪테스트주도개발(TDD) 하기 | 핵심 용어 (0) | 2025.12.26 |