역할 기반 액세스 제어를 설계하는 방법은 무엇입니까?


15

사용자가 내 시스템에서 할 수 있거나 할 수없는 것을 제한하기 위해 역할 기반 액세스 제어 모델을 따르려고합니다.

지금까지 다음 엔티티가 있습니다.

users- 시스템을 사용할 사람들. 여기에 사용자 이름과 비밀번호가 있습니다. 역할 -사용자가 가질 수있는 역할 모음. 관리자, 관리자 등의 리소스 -사용자가 조작 할 수있는 것. 계약, 사용자, 계약 초안 등과 같은 작업 -사용자가 리소스를 사용하여 수행 할 수있는 작업. 작성, 읽기, 업데이트 또는 삭제와 같이

자, 내 의심은 여기에 내가 다음과 같은 관계가있는 다이어그램에서 떠 오릅니다.

작업 (0 .. *) 권한 ( I)이라는 테이블을 생성 하고 작업리소스를 저장하는 리소스 (0 .. *)에 대해 실행됩니다 .

권한 테이블은 다음과 같습니다 (한 행) : ID : 1, 조작 : 작성, 자원 : 계약.

어떤 수단 허락 하는 생성 계약을 .

일부 리소스에는 모든 종류의 작업이 없을 수 있으므로이 방법으로 수행했습니다. 예를 들어, 계약 을 등록하기 위해 사용자는 파일업로드 할 수 있지만이 오퍼레이션제공자 를 등록 할 수 없습니다 .

따라서 관리자역할에 대한 권한 을 부여 때 시스템에 등록 된 모든 단일 조작에 대한 자원 목록이 없습니다.

리소스 에는 자신 에게 실행될 수있는 자체 작업 모음이 있다고 생각합니다 .

이해할 수없는 것이 있는지 명확히 할 수 있습니다.

이것이 rbac를 구현하는 올바른 방법입니까?

편집하다

내 말은 오퍼레이션자원 이 있는 권한 테이블을 가짐으로써 자원오퍼레이션 과 연관 시키려고하기 때문에 두 개의 추가 테이블이 있다는 것 입니다. 또한 단지 할 수 있었던 자원권한 권한 테이블이 권한을 저장하는 것입니다.

그러나 어떤 일이 일어 났는지는 관리자가 할당 할 때 일부 리소스에는 존재하지 않는 일부 권한이 나타 났을 것입니다.

따라서 하나의 열 작업과 다른 리소스가있는이 테이블 권한이 올바른지 데이터베이스 디자인 관점에서 알고 싶습니다. 이 상태로 유지되면 문제가 발생합니까?


2
"정확하다"는 무슨 뜻입니까? 참고 : "모범 사례"와 같은 긴장을 풀지 마십시오. 특정 요구 사항을 명시하십시오.
Robert Harvey

1
"정확한"에 대한 나의 정의는 일반적으로 "소프트웨어의 기능적 및 비 기능적 요구 사항을 가장 효과적으로 충족시키는 것"입니다. NIST는 역할 기반 보안에 대한 자세한 지침과 모범 사례를 제공합니다. csrc.nist.gov/groups/SNS/rbac
Robert Harvey

Pundit 프로젝트 에서 어떻게 수행되는지 살펴보고 싶을 것 입니다.
Antarr Byrd

1
이를 위해 라이브러리 사용을 고려해야합니다.
RibaldEddie

RBAC 또는 ABAC를 수행 할 라이브러리가 많이 있습니다
David Brossard

답변:


11

당신의 디자인은 나에게 아주 가까운 것 같습니다. 몇 가지 제안 만 있습니다.

users-시스템을 사용할 사람들. 여기에 사용자 이름과 비밀번호가 있습니다.

좋아

역할-사용자가 가질 수있는 역할 모음. 관리자, 관리자 등과 같은 것들

미세 너무. 그러나 어떤 사용자에게 어떤 역할이 있는지 알려주는 "UserRoles"엔티티 / 테이블도 필요합니다. 특정 사용자가 둘 이상의 역할을 가질 수 있습니다.

자원-사용자가 조작 할 수있는 것. 계약서, 사용자, 계약서 등

의미론의 문제 일 수 있습니다. 사용자가 리소스를 직접 조작한다고 생각하지 않습니다. 역할. 따라서 사용자-> 사용자 역할-> 역할-> 작업-> 리소스로 이동합니다.

작업-사용자가 리소스를 사용하여 수행 할 수있는 작업. 작성, 읽기, 업데이트 또는 삭제와 같이

"사용자"대신 "역할"을 제외하고

권한 테이블은 다음과 같습니다 (한 행) : ID : 1, 조작 : 작성, 자원 : 계약. 계약 작성 권한을 의미합니다.

흠. 이 작업에는 두 가지 방법이 있습니다. 설명하는 권한 테이블을 가질 수 있지만 RolePermissions어떤 역할이 어떤 권한을 가지고 있는지 알려주 는 추가 테이블 / 엔티티 도 필요합니다 . 그러나 나는 그것이 확실하지 않다.

이를 수행하는 가장 간단한 방법은 역할 ID, 작업 ID, ResourceID와 같은 열 / 속성을 갖는 권한 테이블 / 엔터티입니다. 이렇게하면 작업 x 리소스 조합이 역할에 할당 된 권한에로드되지 않고 역할에 직접 할당됩니다. 하나의 엔티티를 제거합니다. 허용되는 권한 조합과 허용되지 않는 권한 조합을 미리 정의하려는 경우가 아니라면 별도의 역할 독립적 권한 테이블이 필요하지 않습니다.


우선, "사용자"수정 대신 "역할"에 전적으로 동의합니다. 그것이 제가 의미 한 바이기도합니다. 이제 리소스를 작업과 연결하고 싶습니다. 예를 들어, 계약 리소스에는 upload_file과 같은 작업이 있습니다. 따라서 관리자가 역할에 권한을 할당 할 때 upload_file 작업이 provider (다른 리소스)와 같은 upload_file 작업이없는 다른 리소스에도 표시되는 것을 원하지 않습니다.
imran.razak

13

RBAC를 사용하거나 구현하지 않습니다. 대신 ABAC를 사용합니다. 설명하겠습니다 ...

  • RBAC 또는 역할 기반 액세스 제어는 사용자 관리 및 역할 할당에 관한 것입니다. RBAC에서는 Alice가 관리자라고 말합니다. 이와 함께 정적 권한을 정의 할 수 있습니다. 예를 들어, 관리자는 대출을 승인 할 수 있습니다. 따라서 Alice와 Manager 사이의 연결을 허용하여 Loan을 권한으로 승인합니다. 그렇게 할 수있는 시스템이 많이 있으므로 자신의 테이블을 구현할 필요가 없습니다. LDAP조차도 제한된 RBAC 세트를 지원합니다. 역할과 권한이 비교적 작은 한 괜찮습니다. 그러나 귀하의 경우와 같이 특정 권한을 고려하려면 어떻게해야합니까? 보기, 삭제, 삽입? 관계를 고려하려면 어떻게해야합니까?
  • ABAC 또는 특성 기반 액세스 제어는 정책 중심의 세분화 된 권한 부여에 관한 것입니다. ABAC를 사용하면 RBAC에 정의 된 역할을 사용하고 정책을 작성할 수 있습니다.
    • 관리자는 부서에서 문서를 볼 수 있습니다
    • 직원은 자신이 소유 한 문서를 편집 할 수 있습니다

귀하의 질문에, 당신은 본질적으로 정보 모델을 정의했습니다. 객체 및 속성 (예 : 사용자 (이름, 비밀번호, 부서 ...)) 객체 (예 : 계약) 등.

정보 모델

따라서 ABAC에서는 승인 코드에서 앱 코드 / 논리를 완전히 분리 한 다음 속성을 사용하여 정책으로 저장합니다. 권한 자체는 정책에 바로 저장됩니다 (위 예 참조). ABAC 배포 아키텍처는 다음과 같습니다.

속성 기반 액세스 제어 아키텍처

요점은 ABAC 접근 방식을 사용하는 경우 ABAC에 대한 정책을 작성하고 (XACML 또는 ALFA에서이를위한 많은 도구가 있음) RBAC를 사용자 지정 코드 또는 사용자 지정 구현하거나 다시 액세스 할 필요가 없다는 것입니다.


1
정책의 예에서 관리자는 부서의 문서를 볼 수 있다고 말합니다. 시스템에 이미 사전 정의 된 권한, 역할 및 자원 유형이 있음을 의미합니까?
imran.razak

아니요. 사용자 (앨리스)를 자신의 역할 (관리자 ...)에 연결하는 무언가 (LDAP? 테이블)가있을 것입니다. 그런 다음 문서 메타 데이터 (일반적으로 보호중인 앱 내의 테이블)를 포함하는 테이블을 갖게됩니다. 권한 자체 (보기, 편집, 삭제)가 정책에 저장됩니다.
David Brossard 17 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.