← 학습 카테고리

Learn

Elasticsearch

50개 모듈 · 현재 32번째

Elasticsearch 모듈 32/50 elasticsearch-learn-32

Document/Field Level Security — role 하나로 '어떤 문서·필드까지' 보여줄지 통제하기

Elasticsearch Reindex Slicing 및 Document/Field Level Security 공식 문서 종합 (웹 리서치, 2026) — Elastic 공식 문서(docs-reindex, controlling-access-at-document-field-level) Elastic 공식문서 Controlling access at the document and field level

이 모듈을 다 읽으면

  • elasticsearch-learn-18에서 다룬 API 키(누가 인증하는가)와 DLS/FLS(인증된 사용자가 무엇을 보는가)의 역할 차이를 설명할 수 있다
  • DLS 쿼리와 FLS 필드 목록이 role 정의 안에서 각각 무엇을 제한하는지 설명할 수 있다
  • 여러 role을 동시에 가진 사용자의 필드 권한이 어떻게 합산되는지 설명할 수 있다

elasticsearch-learn-18의 API 키가 '누가 클러스터에 요청할 수 있는가'를 다뤘다면, 이 모듈은 그 인증된 사용자가 실제로 '어떤 문서와 필드까지' 볼 수 있는지를 role 정의 안의 두 메커니즘(DLS/FLS)으로 세밀하게 통제하는 방법을 정리한다.

DLS — role에 쿼리를 심어 '보이는 문서'를 제한한다

Document Level Security(DLS)는 사용자가 읽기 접근할 수 있는 문서를 제한한다. 방법은 role 정의 안에 쿼리를 넣는 것이다 — 이 쿼리는 특정 데이터스트림·인덱스·와일드카드 패턴에 결부되고, 인덱스 전체 검색 결과 중 이 쿼리에 매칭되는 문서만 그 role을 가진 사용자에게 보인다. 쿼리는 일반 Query DSL 전체를 지원하고, 사용자 속성(예: LDAP/Active Directory에 저장된 부서 정보)을 동적으로 넣어 사용자마다 다른 문서 집합을 보게 만드는 것도 가능하다.

핵심 포인트

  • DLS는 role 정의 안의 쿼리로 구현 — 해당 인덱스/데이터스트림 안에서 쿼리에 매칭되는 문서만 그 role 사용자에게 보임
  • 일반 Query DSL 전체 지원 + 사용자 속성(부서 등)을 동적으로 반영해 사용자별로 다른 문서 집합을 보여줄 수 있음

FLS — grant/except로 '보이는 필드'를 제한한다

Field Level Security(FLS)는 사용자가 읽기 접근할 수 있는 필드를 제한한다. role 정의에서 grant(허용 필드 목록)와, 필요하면 except(그 grant 안에서 다시 제외할 필드)로 지정한다 — 예를 들어 '모든 필드를 허용하되 salary 필드만 제외' 같은 조합이 가능하다. 여러 role을 가진 사용자의 최종 필드 권한은 각 role이 허용한 필드 권한의 합집합(union)으로 결정된다 — 즉 role A가 필드를 막아도 role B가 그 필드를 허용하면 최종적으로는 보인다는 뜻이라, role을 여러 개 조합할 때 의도치 않게 접근 범위가 넓어질 수 있다는 점을 주의해야 한다.

핵심 포인트

  • FLS는 role의 grant(허용 필드)/except(그 안에서 재제외) 목록으로 구현
  • 여러 role을 가진 사용자의 최종 필드 권한은 각 role 권한의 합집합(union) — role 조합 시 의도치 않게 접근 범위가 넓어질 수 있음에 주의

DLS+FLS 동시 사용의 함정, 그리고 대안

DLS와 FLS를 같은 role에 함께 쓸 때 흔한 함정이 있다 — DLS 쿼리가 참조하는 필드를 FLS가 가려버리면(그 필드가 grant 목록에 없으면) DLS 쿼리가 제대로 동작하지 않는다. 즉 '이 문서를 걸러낼 기준이 되는 필드'는 FLS로 숨기면 안 된다. 공식 문서는 문서와 필드 접근을 동시에 세밀하게 제한해야 하는 복잡한 요구사항이라면, DLS/FLS를 정교하게 조합하는 대신 아예 인덱스를 분리하는 편을 고려하라고 권고한다 — 권한 모델을 role 쿼리 로직에 의존하기보다 데이터 자체를 물리적으로 나누는 것이 더 단순하고 안전할 수 있기 때문이다.

핵심 포인트

  • DLS 쿼리가 참조하는 필드를 FLS로 가리면 DLS 쿼리 자체가 깨짐 — 판별 기준 필드는 FLS에서 숨기면 안 됨
  • 문서+필드를 동시에 세밀히 제한해야 하면 공식 문서는 DLS/FLS 조합 대신 인덱스 자체를 분리하는 방식을 권고