본문 바로가기
Back Side

사용자 권한 설정(=접근 제어)에도 전략이 있다 - ACL vs RBAC vs ABAC

by developerBeluga 2023. 10. 4.
728x90
반응형

 

 

 

 

 

권한 설정 그거 어떻게 하는건데

 

권한 설정 얼마면 됨? ㅇㅅㅇ

 

드디어 회사 서비스에 사용자들을 받을 준비를 하게 되었다.

입사하고 1년 6개월은 이미 지났는데 인제서야 유저 관리를 하다니 🙃

그만큼 큰 서비스를 개발하고 있다고 생각한다.

 

유저가 서비스에 추가되다 보니 새롭게 떠오른 이슈가 있었다.

그건 바로 사용자 권한 설정!

개발자들에게 가장 익숙한 Github로 예시를 들자면 프로젝트를 같이 할 멤버를 추가해 권한을 주는것이다.

위 캡쳐를 보면 알겠지만 프로젝트를 먼저 생성한 사람은 Owner로 되어 있다.

Owner의 경우 아래와 같은 권한이 생긴다.

1. 프로젝트 설정 변경

2. 프로젝트 접근 권한 관리

3. 코드 관리(푸시, 머지 등)

4. 이슈 및 프로젝트 관리

.

.

.

 

이처럼 Github에서는 Owner는 최상위 권한을 가진다.

그 외의 사용자 혹은 팀원들에게도 권한 설정을 해줘야 한다.

 

여기에서 서비스의 가장 큰 단위의 dev, ops 권한을 주기로 했다.

그래서 아래와 같이 인터페이스를 작성 해줬다.

enum Level {
	VIEWER = "viewer",
	EDITOR = "editor",
	ADMIN = "admin"
}

members: {
	[userId: String]: {
		devPermision: Level
		opsPermission: Level
	}
}

정말 간단하게 하나의 프로젝트에 members라는 필드를 추가해 userId 마다 dev, ops 권한에 대한 레벨을 저장할 생각이었다.

근데 정말 이렇게 간단하게 저장해도 되는걸까?

혹시 몰라서 사용자 권한 설정에 대한 전략을 찾아봤다.

 

 

 

 

전략 소개

정말 전략이 있을 줄 몰랐다 😅

역시 개발자들 생각은 다 똑같구나를 느끼며 하나하나 정리해 봤다.

예시도 들었는데 이해를 돕기 위해 병원에서 환자의 의료 기록과 관련해서 서술했다.

 

1) ACL: 특정 사용자의 시스템 액세스 권한 여부를 결정

ACL은 핵심은 개별 혹은 특정이라는데 있다.

환자 A의 의료 기록에 대해 의사 중에 김xx 선생님이 읽기, 쓰기가 가능하고 간호사 중엔 이xx 선생님이 읽기만 가능하다는 말이다.

환자 B의 의료 기록에 대해서도 의사 누가, 간호사 누가 가능하다고 명시한다.

의료 기록 권한에 들어가 있지 않는 누군가가 조회하려고 하면 당연히 거부된다.

 

2) RBAC: 사용자의 역할에 따라 액세스 권한을 부여

ACL에 반해 RBAC는 역할에 해당하는 사용자라면 누군가 가능하다.

의사라면 모든 환자의 기록 읽기와 쓰기가 가능하고 처방전 작성도 할 수 있다.

간호사라면 본인이 담당하는 환자의 기록 읽기, 약 주기를 기록할 수 있다.

행정직원일 경우 환자의 청구 내역 읽기와 쓰기, 의료 기록에는 접근 불가하게 권한을 부여한다.

 

즉, 역할에 따라 광범위하게 권한을 사용할 수 있다는 말이다.

이럴 경우 역할(=그룹)을 잘 정해야하고 그 역할이 가지는 권한에 대해서 잘 생각해봐야 한다.

 

3) ABAC: 다양한 속성을 이용하여 더 세밀하게 권한 부여

정보에 예민한 은행해서 자주 쓸 것 같은 ABAC 전략은 조건이 많다.

환자가 '긴급 상황'으로 표시되어 있고, 접근하는 사용자가 'ER 의사'라면 읽기 가능

접근하는 사용자가 '행정 직원'이며 현재 시간이 청구 처리 시간(09:00~16:00)라면 청구 관련 정보만 읽기 가능

 

상당히 복잡한 접근제어 요구 사항을 다루기 위해 설계 되었다.

 

 

 

 

 

마무리

이 포스팅을 쓰는 이유는 권한 제어와 관련된 전략이 있다는게 신기해서다.

검색 조금만 해봐도 다양한 전략과 방식이 있어 서비스에 어떤 전략을 쓸지 연구하는데 도움이 됐다.

앞으로도 소소한거라도 전략이 있나 한 번 알아보는 습관을 가지는게 좋을 것 같다 👍

 

 

 

 

 

 

 

 

728x90
반응형

댓글