Coarse와 Fine
Coarse-grained와 Fine-grained의 사전적 뜻은 각각 `<석재.목재 등이>결이 거친`, `결이 고운` 이란 뜻이라고 한다. 감이 잡히지 않는다.
Coarse, Fine 단어로만 찾아보면 아래와 같다.
Coarse
Fine
즉 하나의 물질이 있다면 이것을 큰 입자들로 나누냐, 작은 입자들로 나누냐의 차이다.
사실 Coarse-grained와 Fine-grained는 프로그래밍에서 전반적으로 사용하는 용어다.
예를 들어 구글 시트 API를 호출하려면, 발급받은 ClientId와 SecretKey로 인증을 한 후에 구글 시트를 불러올 수 있다.
이때 Coarse-grained는 `getGoogleSheet` 함수 안에 인증 + 구글 시트 조회 + Rows 값 조회를 전부 넣는 것을 뜻한다.
반면 Fine-grained는 `authGoogleSheet`, `getGoogleSheet`, `getGoogleSheetRows` 각각 함수를 만들어서 호출하는 것을 뜻한다.
비교해 보면 Fine-grained가 좀 더 유연하게(authGoogleSheet를 다른 곳에서 호출하는 등) 사용할 수 있다. 하지만 작업시간이 Coarse-grained보다 오래 걸린다.
이제 Access Control 관점에서 살펴보자.
Access Control에서의 Coarse-grained와 Fine-grained
Coarse: 크루들은 사무실 문을 열 수 있다.
Fine: 판교에서 근무하는 크루들은 근무시간 동안 사무실 문을 열고 닫을 수 있다.
Finer: 판교에서 근무하고 클라우드 파트 소속인 크루들은 A 프로젝트에 배정이 되어있다면, 근무시간 동안 사무실 문을 열고 닫을 수 있다.
Coarse -> Fine으로 갈수록 점점 세분화(granularity)되어 보안이 강화되는 것을 확인할 수 있다.
Access Control의 종류
Access Control의 종류는 크게 3가지로 나눌 수 있다.
Access Control List (ACL)
사용자가 인증된 후에, 해당 사용자의 IP가 인증된 사용자 리스트(White List) 또는 차단된 사용자 리스트(Black 리스트)에 있는지에 따라 Access를 허용하거나 차단한다. 사용자 IP가 White List에 없을 경우에도 차단된다.
즉, ACL은 특정 사용자의 시스템 액세스 권한 여부를 결정하는 데 사용된다.
Role-based access control(RBAC)
사용자의 역할에 따라 액세스 권한을 부여하는 방식이다.
RBAC에서 사용자는 다른 권한을 부여받을 수 있는 여러 역할을 가질 수 있다. 예를 들어 IT회사에서의 RBAC을 다음과 같이 나눠볼 수 있다.
- 시스템 관리자 역할: 서버 관리, 시스템 관리
- 데이터베이스 관리자 역할: 데이터 베이스 관리, 복구
- 네트워크 관리자 역할: 네트워크 관리, 보안 설정
총 관리자는 각 권한을 부여/회수하는 것이 간단하고, 역할에 따라 어떤 권한을 갖고 있는지 쉽게 파악할 수 있다.
하지만 한계가 있다. 다음과 같은 경우를 살펴보자.
시스템 관리자가 데이터베이스의 역할도 부여받고 싶은데, 시스템 관리자의 역할이 주 업무이므로 데이터 베이스 관리 중 삭제, 복구는 불가능하도록 하고 싶다. 이럴 경우 어떻게 해야 할까?
다른 역할을 또 만들어야 한다.
- 시스템 & 데이터 관리자 역할: 서버 관리, 시스템 관리, 삭제 기능을 제거한 데이터 베이스관리
이때 또 네트워크 관리자 역할도 부여받는다면... 점점 역할이 많아지고 복잡해진다.
Attribute-based access control(ABAC)
역할 대신 속성을 이용하여 더 세밀하게 권한을 부여할 수 있다. 위의 RBAC의 한계를 개선할 수 있다.
속성은 사용자, 리소스, 작업, 개체, 환경 등을 설명하는 데이터다.
예를 들어, 특정 부서의 크루가 파일에 접근하려면 아래의 속성을 전부 갖고 있어야 한다.
- 사용자: 해당 부서 직원
- 리소스: 파일
- 동작: 읽기/쓰기
- 환경: 해당 부서의 컴퓨터
이처럼 여러 속성을 활용하여 권한에 대해 좀 더 세밀한 작업을 할 수 있다.
만약 읽기만 가능하도록 하고 싶으면 `쓰기` 속성을 제거하고, 재택에서도 되도록 하려면 `재택` 속성만 추가하면 된다.
ACL -> RBAC -> ABAC 순으로 점점 Coarse -> Fine으로 되는 것을 확인할 수 있다.
Fine일수록 유연해지고 세밀한 접근제어를 할 수 있지만, 그만큼 구현이 어렵고 관리포인트가 많아진다는 단점이 있다.
REFERENCES
dontcryme님 블로그 - https://blog.naver.com/dontcryme/30124306779
What is Fine-Grained Access Control? - https://www.immuta.com/blog/what-is-fine-grained-access-control-and-why-its-so-important/
What Is Fine-Grained Access Control? - https://www.styra.com/blog/what-is-fine-grained-access-control/
Coarse-grained vs. fine-grained access control - https://www.webfarmr.eu/2011/05/coarse-grained-vs-fine-grained-access-control-part-i/