역할 엔진
1) 승인 모델
RBAC (Role-Based Access Control): 대상은 역할을 수신하고 역할은 권한과 관련이 있습니다. 일반적인 업무에 적합합니다.
ABAC (속성 기반 액세스 제어) -솔루션은 주제의 속성, 리소스, 동작 및 환경 (시간, IP, 지역, 위험) 에 따라 다릅니다. 복잡한 규칙으로 유연하고 확장 가능합니다.
RBAC + ABAC 하이브리드: 역할은 "기본" 기능을 제공하며 속성은 좁아집니다 (조건).
(옵션) ReBAC/관계 기반: 관계 그래프 (소유자, 팀원, 대리인), 문서 및 조직에 유용합니다.
2) 아키텍처: PDP/PEP 및 흐름
PEP (Policy Enforcement Point): 솔루션이 적용되는 곳 (API 게이트웨이, 백엔드 방법, SQL 계층, UI).
PDP (Policy Decision Point): 정책 및 속성별로 'ALLOW/DENY' 를 계산하는 서비스/라이브러리.
PIP (정책 정보 포인트): 속성 소스 (IdP/프로파일, 리스크 메타 데이터, 위험률, 지리).
PAP (Policy Administration Point) - 관리 인터페이스/정책 저장소 (버전, 초안, 출판).
흐름: PEP → 요청은 컨텍스트를 형성합니다 → PDP가 누락 된 속성을 (PIP를 통해) 가져옵니다. → PEP가 적용되는 결정 (필드 활성화/비활성화/차단) → 감사.
3) 데이터 모델
엔터티 (최소):- '타이틀' (사용자/서비스) ★ атри차수, '테넌트 _ id', '역할', '부서', '위험 _ 레벨', 'mfa _ 확인', '스코프', '클레임'.
- 유형 및 속성이있는 '자원': '유형', '소유자 _ id', '테넌트 _ id', '분류' (공개/기밀), '지역', '태그'.
- '행동': '읽기', '쓰기', '삭제', '내보내기', '승인', '가장 한 사람'! п.
- '환경': '시간', 'ip', '장치', '지오', '을 사용하십시오.
- '역할 (id, 세입자 _ id, 이름, 상속 [])' -계층 구조 및 패턴을 지원합니다.
- '권한 (id, 자원 _ 유형, 동작, 제약?)'.
- (PHP 3 = 3.0.6, PHP 4)
- '할당 (주제 _ id, 역할 _ id, 범위)' - 범위: 글로벌/프로젝트 별/객체 별.
- '정책 (id, 효과 = 허용' 거부, 대상: {주제, 자원, 행동}, 조건: 설명, 우선 순위, 버전, 상태) '.
4) 의사 결정 원칙
거부 오버 라이드: 명시 적 금지는 권한의 우선 순위를 정합니다.
최소 특권 (PoLP): 최소 액세스 권한을 발행하고 조건을 통해 확장하십시오.
의무의 분리 (SoD): 역할/행동의 조합 금지 (예: "지불" ", 체포 됨").
상황 인식: 더 높은 위험에서 요구 사항 강화 (MFA 없음, 의심스러운 IP).
결정론: 같은 맥락 → 동일한 반응; 정책 버전을 기록하십시오.
5) 구현 패턴
5. 1 하이브리드 RBAC → ABAC (컨디셔닝)
역할은 "기본 권리" 를 제공하며 ABAC 조건은 다음을 제한합니다
yaml
Declarative Policy Example
- id: doc_read_own effect: allow target: { action: read, resource. type: document, subject. roles: ["editor","owner"] }
condition: resource. owner_id == subject. id
- id: doc_read_team effect: allow target: { action: read, resource. type: document, subject. roles: ["editor","viewer"] }
condition: subject. team_id in resource. shared_team_ids
- id: doc_read_confidential_external effect: deny target: { action: read, resource. type: document }
condition: resource. classification == "confidential" and subject. tenant_id!= resource. tenant_id priority: 100 # deny high priority
5. 2 행/필드 레벨 보안
데이터베이스 수준: RLS 정책 ('테넌트 _ id', 'owner _ id').
(PHP 3 = 3.0.6, PHP 4)
5. 3 단계 강화 솔루션
인증 강도 종속성:
allow if action == "export" and subject. mfa_verified == true else deny
5. 4 임시 공차
TTL을 가진 보조금: '할당. (PHP 3 = 3.0.6, PHP 4)
6) 성능과 캐싱
짧은 TTL로 키 '(주제 _ 해시, 자원 _ 키, 동작, 정책 _ 버전)' 에 의한 결정 캐시.
주제 속성의 에지 캐시 (토큰의 주장) + 게으른 가져오기 리소스 속성.
증분 무효: 사건에 의한 장애 (역할 변경, 정책 변경, "기밀" 로의 자원 이전).
배치 점검: 목록의 경우-PDP 라인을 한 줄씩 당기지 않도록 "필터" (정책 예측 푸시 다운) 로 평가하십시오.
7) 멀티 테넌트
각 테이블에서 - '테넌트 _ id'; 기본 정책은 임대 내에서의 액세스를 제한합
임대 관리자는 임대의 역할/권리 만 관리합니다.
임대 거부 액세스-명시 적 거부 재정의를 통한 명시 적 초대/공유를 통해서만 독점적으
8) 정책 관리 및 수명주기
검증: '정책. PDP 응답의 버전 '을 감사에 저장하십시오.
환경: 초안 → 카나리아 (교통/그림자 모드의 일부) → prod.
테스트 매트릭스: 주요 역할/속성 별 진실표 (계약 테스트).
관리 변경: 보안/규정 준수 검토를 통해 정책 요청을 병합합니다.
9) 감사 및 관찰
"decision _ id ',' 주제 ',' 동작 ',' resource _ ref ',' 결과 ',' matched _ policies ',' policy _ version ',' policy _ digest '.
지표: QPS PDP, p95 대기 시간, 적중률 캐시, 점유율 거부, 스텝 업 속도, SoD 사건.
추적: PDP 호출 당 스팬; API 요청과의 상관 관계.
재생: 새 버전의 정책에 대한 과거 결정을 "재생" 할 수있는 기능 (안전 점검).
10) 인증 및 토큰과의 통합
신원-IdP (OIDC/SAML). 토큰에는 최소한의 속성 인 'sub', 'tenit', 'alces', '자기 _ time', 'amr', 'scopes' 가 있습니다.
ABAC의 경우 토큰을 팽창시키지 않도록 서버 측 (PIP) 에서 "무거운" 표시를 가져옵니다.
엄격하게 제한된 대표단을 위해 서명 된 리소스 토큰 (기능/초대).
11) PDP 의사 코드 (단순화)
python def decide(subject, resource, action, env, policies):
matched = []
effect = "deny"
Explicit DENYs with priority for p in sorted (policies, key = lambda x: x.priority, reverse = True):
if target_matches(p. target, subject, resource, action):
if eval_condition(p. condition, subject, resource, env):
matched. append(p. id)
if p. effect == "deny":
return Decision("deny", matched, p. version)
Looking for ALLOW for p in policies:
if target_matches(p. target, subject, resource, action):
if eval_condition(p. condition, subject, resource, env):
matched. append(p. id)
effect = "allow"
break return Decision(effect, matched, max_version(matched, policies))
12) 반 패턴
"역할 = 페이지" (도메인 모델이없는 수백 개의 작은 역할).
버전/감사없이 코드로만 정책을 저장합니다.
거부 재정의 부족과 SoD → 사기 위험이 증가했습니다.
속성/관계 대신 'user _ id' in 규칙을 나열합니다.
UI 필터 만 사용하는 데이터 계층 필터링 (RLS) 이 없습니다.
이벤트 및 캐시 장애가없는 수동 스크립트를 통한 역할 동기화.
13) 사례와 요리법
13. 1 필드 레벨 마스킹:
allow read invoice when subject. roles includes "support"
mask fields ["card_last4", "billing_email"] unless subject. role == "finance"
13. 2 MFA 만 데이터 내보내기:
allow export if subject. mfa_verified and env. ip in cidr("203. 0. 113. 0/24")
13. 3 SoD:
deny approve_payment if subject. performed_actions includes ("create_payment" within last 24h)
13. 4 대표단 (제한된 토큰):
기능 토큰에는 '자원 _ id', '행동 = ["읽기"]', '만료', 'aud' 가 포함됩니다. PEP는 서명 및 마감일을 확인합니다.
14) 테스트
정책의 단위 테스트: 주요 조합별로 진실 테이블.
속성 기반: "구멍" 을 찾기위한 임의의 속성 생성.
골든 테스트: 중요한 종점에 대한 일련의 솔루션을 수정합니다.
카나리아/그림자: 불일치 로깅이있는 기존 및 새로운 버전의 정책에 대한 병렬 평가.
15) "아키텍처 및 프로토콜" 섹션의 관련 기능
인증 및 인증 (OIDC/OAuth2)
동의 관리
토큰 화 및 키 관리
관찰 가능성: 로그, 메트릭, 추적
지리 라우팅 및 현지화
휴식/대중 교통 암호화
16) 건축가 점검표
1. 주제 역할과 계층 구조가 정의되어 있습니까?
2. 속성에 대한 역할 + 조건이라는 하이브리드 모델이 있습니까?
3. 거부 오버 라이드, SoD 및 스텝 업으로 PDP 구현?
4. PEP는 어디에 있습니까? (게이트웨이, 백엔드, 데이터베이스, UI) -모든 곳에서 균일합니까?
5. 솔루션 캐시와 이벤트 장애가 구성되어 있습니까?
6. 정책은 프로세스별로 다양하고 테스트되며 배포됩니까?
7. 감사 결정, 지표 및 추적이 활성화되어 있습니까?
8. 멀티리스 및 RLS/필드 마스킹 지원?
9. 사건과 정책 회귀에 관한 런북이 있습니까?
결론
RBAC는 제어 성을 제공하고 ABAC는 컨텍스트와 정확성을 제공합니다. 역할을 속성 조건, PDP/PEP 공유, 캐싱, 감사 및 정책 테스트와 결합하여 제품 및 규제 요구 사항에 대해 예측 가능하고 검증 가능하며 확장 가능한 플랫폼 기능으로 권한을 구축합니다.