Authorization Models

API 권한 부여(Authorization)는 인증(Authentication)이 완료된 후, 사용자가 어떤 리소스에 접근할 수 있는지를 결정하는 중요한 보안 메커니즘이다. 권한 부여는 사용자의 신원이 확인된 후(인증), 해당 사용자가 특정 API 리소스나 작업에 접근할 수 있는 권한이 있는지를 확인하는 과정이다.

인증(Authentication)과 권한 부여(Authorization)의 차이

API 보안 맥락에서 이 두 개념의 차이를 명확히 이해하는 것이 중요하다:

인증(Authentication):

권한 부여(Authorization):

주요 API 권한 부여 방법

모델설명주요 특징장점단점적용 사례보안 수준
ABAC (Attribute Based Access Control)사용자, 리소스, 환경의 속성을 기반으로 접근을 제어하는 모델• 다양한 속성 기반 결정
• 동적 정책 적용
• 상황 인식 가능
• 세밀한 접근 제어
• 유연한 정책 설정
• 상황에 따른 동적 제어
• 구현 복잡도 높음
• 성능 오버헤드
• 정책 관리 어려움
• 클라우드 서비스
• IoT 시스템
• 의료 정보 시스템
높음
DAC (Discretionary Access Control)리소스 소유자가 직접 접근 권한을 제어하는 모델• 소유자 중심 제어
• 권한 위임 가능
• 유연한 권한 관리
• 사용자 자율성 높음
• 구현 용이
• 유연한 관리
• 보안 일관성 부족
• 권한 남용 위험
• 중앙 통제 어려움
• 파일 시스템
• 개인용 컴퓨터
• 소규모 조직
낮음
MAC (Mandatory Access Control)중앙에서 정의한 보안 정책에 따라 엄격히 접근을 제어하는 모델• 중앙 집중식 제어
• 엄격한 보안 레벨
• 정책 강제 적용
• 높은 보안성
• 일관된 정책 적용
• 중앙 통제 용이
• 유연성 부족
• 관리 부담 큼
• 사용자 불편
• 군사 시스템
• 정부 기관
• 높은 보안 요구 환경
매우 높음
PBAC (Purpose Based Access Control)데이터 사용 목적을 기반으로 접근을 제어하는 모델• 목적 기반 결정
• 데이터 사용 추적
• 규정 준수 강조
• 개인정보 보호
• 규정 준수 용이
• 투명한 관리
• 목적 정의 어려움
• 검증 복잡
• 오버헤드 발생
• 의료 서비스
• 금융 시스템
• 개인정보 처리
높음
RBAC (Role Based Access Control)사용자의 역할을 기반으로 접근을 제어하는 모델• 역할 기반 권한
• 계층적 구조
• 권한 그룹화
• 관리 효율성
• 구현 용이
• 확장성 좋음
• 복잡한 정책 구현 어려움
• 동적 변경 제한
• 역할 폭발 현상
• 기업 시스템
• 웹 애플리케이션
• 대규모 조직
중간

역할 기반 접근 제어 (Role-Based Access Control, RBAC)

사용자에게 역할을 할당하고, 각 역할에 특정 권한을 부여하는 방식이다.

작동 방식:

  1. 사용자는 하나 이상의 역할(role)에 할당된다.
  2. 각 역할은 특정 API 리소스나 작업에 대한 권한 집합을 가진다.
  3. 사용자의 API 요청이 들어오면, 시스템은 사용자의 역할을 확인하고 해당 역할에 필요한 권한이 있는지 검증한다.

예시 역할:

장점:

단점:

적합한 사용 사례:

속성 기반 접근 제어 (Attribute-Based Access Control, ABAC)

사용자, 리소스, 환경의 속성을 기반으로 접근 권한을 결정하는 더 유연한 모델.

속성의 종류:

작동 방식:

  1. 정책(policy)으로 접근 규칙을 정의한다: “부서가 X이고 직급이 Y 이상인 사용자는 민감도 등급 Z 이하의 리소스에 접근 가능”
  2. 사용자가 요청할 때 관련된 모든 속성을 평가하여 정책 준수 여부를 확인한다.

장점:

단점:

적합한 사용 사례:

OAuth 2.0 범위 (Scopes)

OAuth 2.0 프레임워크에서 제공하는 권한 부여 메커니즘으로, 클라이언트 애플리케이션이 사용자 리소스에 접근할 수 있는 범위를 제한한다.

작동 방식:

  1. 클라이언트 애플리케이션이 특정 범위(scope)에 대한 접근을 요청한다.
  2. 사용자는 이러한 권한 부여에 동의한다.
  3. 서버는 요청된 범위로 제한된 액세스 토큰을 발급한다.
  4. 클라이언트는 해당 토큰으로 범위 내의 API 엔드포인트에만 접근할 수 있다.

예시 범위:

장점:

단점:

적합한 사용 사례:

권한 기반 접근 제어 (Permission-Based Access Control)

세분화된 개별 권한을 직접 사용자나 그룹에 할당하는 방식이다. RBAC의 변형으로 볼 수 있다.

작동 방식:

  1. 시스템에서 가능한 모든 작업에 대해 개별 권한을 정의한다.
  2. 사용자나 그룹에 직접 이러한 권한을 할당한다.
  3. API 요청 시 사용자가 필요한 특정 권한을 가지고 있는지 확인한다.

장점:

단점:

적합한 사용 사례:

JWT 클레임 기반 권한 부여 (JWT Claims-Based Authorization)

JWT(JSON Web Token)의 클레임을 활용하여 권한 정보를 토큰에 직접 포함시키는 방식.

작동 방식:

  1. 인증 서버는 사용자 권한 정보(역할, 권한 등)를 JWT 클레임에 포함시켜 토큰 발급
  2. 클라이언트는 API 요청 시 이 토큰을 전송
  3. API 서버는 토큰을 검증하고 포함된 클레임을 확인하여 접근 권한 결정

예시 JWT 클레임:

1
2
3
4
5
6
7
{
  "sub": "1234567890",
  "name": "John Doe",
  "roles": ["editor", "moderator"],
  "permissions": ["read:users", "write:posts"],
  "exp": 1516239022
}

장점:

단점:

적합한 사용 사례:

정책 기반 접근 제어 (Policy-Based Access Control)

중앙 집중식 정책 엔진을 사용하여 동적인 권한 부여 결정을 내리는 방식이다. 종종 ABAC와 함께 사용된다.

작동 방식:

  1. 접근 정책을 특정 언어나 형식으로 정의한다(예: XACML, OPA Rego 등).
  2. 중앙화된 정책 의사 결정 지점(Policy Decision Point, PDP)이 요청을 평가한다.
  3. 정책 집행 지점(Policy Enforcement Point, PEP)이 결정을 적용한다.

장점:

단점:

적합한 사용 사례:

맥락 기반 접근 제어 (Contextual Access Control)

사용자의 행동 패턴, 위치, 시간 등 맥락 정보를 기반으로 접근 권한을 동적으로 결정하는 방식이다.

고려되는 맥락 요소:

작동 방식:

  1. 사용자 인증 시 다양한 맥락 정보를 수집한다.
  2. 이 정보를 정상적인 사용 패턴과 비교한다.
  3. 위험도를 평가하여 접근 수준을 동적으로 조정한다.

장점:

단점:

적합한 사용 사례:

API 권한 부여 구현 패턴

API 게이트웨이를 통한 중앙 집중식 권한 부여

작동 방식:

  1. 모든 API 요청이 게이트웨이를 통과한다.
  2. 게이트웨이는 인증 및 권한 부여 검사를 수행한다.
  3. 권한이 있는 요청만 해당 백엔드 서비스로 전달된다.

장점:

단점:

마이크로서비스 아키텍처의 분산 권한 부여

작동 방식:

  1. 각 마이크로서비스가 자체 권한 부여 로직을 구현한다.
  2. 서비스 간 통신 시 권한 정보가 전파된다(토큰, 컨텍스트 등).
  3. 각 서비스는 자신의 도메인 내에서 접근 결정을 내린다.

장점:

단점:

외부 권한 부여 서비스 (External Authorization Service)

작동 방식:

  1. 전용 권한 부여 서비스(예: OPA, ORY Keto)를 구축한다.
  2. 모든 서비스가 접근 결정을 위해 이 서비스에 쿼리한다.
  3. 권한 부여 서비스는 중앙 정책 저장소를 유지하고 결정을 내린다.

장점:

단점:

API 권한 부여 모범 사례

  1. 최소 권한 원칙 적용

    • 사용자와 애플리케이션에 필요한 최소한의 권한만 부여한다.
    • 기본적으로 모든 접근을 거부하고, 명시적으로 허용된 접근만 허용한다.
    • 권한을 정기적으로 검토하고 불필요한 권한을 제거한다.
  2. 권한 부여 로직의 세분화

    • 리소스 수준에서 권한을 제어한다(전체 API가 아닌 특정 엔드포인트나 데이터).
    • 작업 유형(읽기, 쓰기, 삭제 등)에 따라 권한을 분리한다.
    • 필요한 경우 데이터 필드 수준의 접근 제어를 구현한다.
  3. 권한 부여 결정 캐싱

    • 권한 부여 결정을 적절히 캐싱하여 성능을 향상시킨다.
    • 캐시 무효화 전략을 구현하여 변경된 권한이 적시에 적용되도록 한다.
    • 분산 시스템에서는 일관된 캐싱 메커니즘을 사용한다.
  4. 보안 로깅 및 감사

    • 모든 권한 부여 결정과 접근 시도를 로깅한다.
    • 감사 추적을 위해 누가, 무엇을, 언제, 어디서 접근했는지 기록한다.
    • 권한 변경 이력을 추적하고 변경 사유를 문서화한다.
  5. 권한 상승 경로 제공

    • 특수한 상황을 위한 임시 권한 상승 메커니즘을 구현한다.
    • 권한 상승 요청에 대한 승인 프로세스를 구축한다.
    • 상승된 권한의 사용을 면밀히 모니터링하고 감사한다.

산업별 API 권한 부여 요구사항

금융 서비스

의료

소매 및 전자상거래

정부 시스템

권한 부여 표준 및 프레임워크

XACML (eXtensible Access Control Markup Language)

XML 기반의 정책 언어와 처리 모델을 제공하는 표준으로, 속성 기반 접근 제어(ABAC)를 구현하는 데 사용된다.

구성 요소:

장점:

단점:

OPA (Open Policy Agent)

클라우드 네이티브 애플리케이션을 위한 오픈소스 정책 엔진으로, Rego라는 선언적 정책 언어를 사용한다.

특징:

장점:

단점:

OAuth 2.0 + UMA (User-Managed Access)

OAuth 2.0의 확장으로, 사용자가 여러 애플리케이션과 서비스에 걸쳐 자신의 리소스에 대한 접근을 관리할 수 있게 한다.

특징:

장점:

단점:

권한 부여의 미래 동향

제로 트러스트 권한 부여 (Zero Trust Authorization)

네트워크 위치나 사용자 신원만으로 접근 권한을 부여하지 않고, 매 요청마다 다양한 요소를 고려하여 지속적으로 접근 권한을 검증하는 모델이다.

핵심 원칙:

발전 방향:


용어 정리

용어설명

참고 및 출처