들어가며
지난 회에서는 여러 데이터 소스를 통합하여 횡단 검색하는 방법을 소개했습니다. 그러나 횡단 검색이 가능해지면 새로운 과제가 부상합니다. 바로 “보여도 되는 정보”와 “보여서는 안 되는 정보”의 제어입니다.
인사부의 기밀 자료가 전 직원의 검색 결과에 표시되면 곤란합니다. 본 기사에서는 Fess의 롤 기반 검색을 활용하여 이용자의 소속이나 권한에 따른 검색 결과 제어를 설계·구축합니다.
대상 독자
검색 결과의 접근 제어가 필요한 분
사내 정보 보안을 고려한 검색 기반을 구축하고 싶은 분
Active Directory나 LDAP의 기본적인 지식이 있는 분
시나리오
어느 기업에 3개의 부서가 있습니다.
영업부: 고객 정보, 견적서, 제안서를 관리
개발부: 설계서, 소스 코드 사양서, 회의록을 관리
인사부: 인사 평가, 급여 정보, 취업 규칙을 관리
모든 부서가 공통으로 참조할 수 있는 문서(사내 규정, 복리후생 안내 등)도 있습니다.
실현하고 싶은 검색 경험은 다음과 같습니다.
영업부 직원은 영업부와 공통 문서만 검색할 수 있다
개발부 직원은 개발부와 공통 문서만 검색할 수 있다
인사부 직원은 인사부와 공통 문서만 검색할 수 있다
경영층은 모든 문서를 검색할 수 있다
롤 기반 검색의 구조
Fess의 롤 기반 검색은 다음과 같은 흐름으로 동작합니다.
크롤 시: 문서에 롤 정보(어떤 롤이 접근할 수 있는지)를 부여
로그인 시: 이용자의 롤 정보를 취득(Fess 내부 인증 또는 외부 인증 연계)
검색 시: 이용자의 롤에 일치하는 문서만 검색 결과에 표시
이 구조를 통해 검색 엔진 수준에서 접근 제어가 이루어집니다.
롤 설계
사용자와 그룹의 설계
먼저 Fess에서의 사용자·그룹·롤의 관계를 정리합니다.
| 그룹 | 롤 | 접근 가능한 문서 |
|---|---|---|
| sales(영업부) | sales_role | 영업부 문서 + 공통 문서 |
| engineering(개발부) | engineering_role | 개발부 문서 + 공통 문서 |
| hr(인사부) | hr_role | 인사부 문서 + 공통 문서 |
| management(경영층) | management_role | 모든 문서 |
Fess에서의 그룹·롤 설정
롤의 생성
관리 화면의 [사용자] > [롤]을 선택
다음 롤을 생성
sales_roleengineering_rolehr_rolemanagement_role
그룹의 생성
[사용자] > [그룹]을 선택
다음 그룹을 생성
salesengineeringhrmanagement
사용자의 생성과 롤 할당
[사용자] > [사용자]를 선택
각 사용자에게 그룹과 롤을 할당
크롤 설정에서 퍼미션을 할당하기
문서에 접근 제어 정보를 부여하려면 크롤 설정에서 퍼미션을 지정합니다. 퍼미션은 {role}롤명, {group}그룹명, {user}사용자명 형식으로 줄바꿈 구분으로 입력합니다.
부서별 크롤 설정
영업부의 파일 서버
[크롤러] > [파일 시스템] > [새로 만들기]
아래를 설정
패스:
smb://fileserver/sales/퍼미션:
{role}sales_role과{role}management_role을 줄바꿈 구분으로 입력
이 설정을 통해 영업부의 파일 서버에서 크롤된 문서는 sales_role 과 management_role 을 가진 사용자만 검색 결과에서 열람할 수 있습니다.
개발부의 파일 서버
[크롤러] > [파일 시스템] > [새로 만들기]
아래를 설정
패스:
smb://fileserver/engineering/퍼미션:
{role}engineering_role과{role}management_role을 줄바꿈 구분으로 입력
인사부의 파일 서버
[크롤러] > [파일 시스템] > [새로 만들기]
아래를 설정
패스:
smb://fileserver/hr/퍼미션:
{role}hr_role과{role}management_role을 줄바꿈 구분으로 입력
공통 문서
[크롤러] > [웹] 또는 [파일 시스템] > [새로 만들기]
퍼미션: 기본값인
{role}guest그대로 유지
기본적으로 {role}guest 가 자동 입력됩니다. 게스트 사용자를 포함한 모든 사용자가 guest 롤을 가지므로 모든 사용자가 검색 결과를 열람할 수 있습니다.
외부 인증과의 연계
실제 기업 환경에서는 Fess 자체의 사용자 관리가 아니라 기존의 디렉터리 서비스와 연계하고 싶은 경우가 대부분입니다.
Active Directory / LDAP 연계
Fess는 LDAP 연계를 지원하며, Active Directory의 사용자 정보를 사용하여 인증과 롤 할당을 수행할 수 있습니다.
LDAP 연계를 활성화하려면 Fess의 설정 파일에서 LDAP 접속 정보를 설정합니다.
주요 설정 항목은 다음과 같습니다.
LDAP 서버의 URL
바인드 DN(접속용 계정)
사용자의 검색 베이스 DN
그룹의 검색 베이스 DN
사용자 속성의 매핑
LDAP 연계가 활성화된 경우 이용자는 Active Directory 계정으로 Fess에 로그인할 수 있습니다. 소속 그룹의 정보가 자동으로 롤에 반영되므로 Fess에서 사용자별로 롤을 수동 설정할 필요가 없습니다.
SSO 연계
더 나아간 구성으로 싱글 사인온(SSO)과의 연계도 가능합니다. Fess는 다음 SSO 프로토콜을 지원합니다.
OpenID Connect (OIDC): Entra ID (Azure AD), Keycloak 등
SAML: 각종 IdP와의 연계
SPNEGO/Kerberos: Windows 통합 인증
SSO 연계를 통해 이용자는 평소의 로그인 정보로 자동으로 Fess에도 접근할 수 있으며 롤 정보도 자동으로 반영됩니다. SSO 연계의 상세한 내용은 제15회 “안전한 검색 기반”에서 자세히 다룹니다.
동작 확인
롤 기반 검색의 설정이 완료되면 동작을 확인합시다.
확인 절차
영업부 사용자로 로그인하고 “견적서”로 검색 → 영업부와 공통 문서만 표시되는지 확인
개발부 사용자로 로그인하고 동일한 키워드로 검색 → 영업부 문서가 표시되지 않는지 확인
경영층 사용자로 로그인하고 동일한 키워드로 검색 → 모든 부서의 문서가 표시되는지 확인
확인 포인트
권한이 없는 문서가 검색 결과에 일절 표시되지 않을 것
공통 문서는 모든 사용자에게 표시될 것
로그인하지 않은 상태에서의 검색 동작(게스트 표시 범위)
설계상의 고려 사항
롤의 세분화 수준
롤의 세분화 수준은 조직 구조와 보안 요건에 따라 결정합니다.
거친 세분화: 부서 단위로 롤을 설정(본 기사의 시나리오)
장점: 설정이 단순하고 관리가 용이
단점: 부서 내 세밀한 접근 제어가 불가능
세밀한 세분화: 프로젝트나 팀 단위로 롤을 설정
장점: 세밀한 접근 제어가 가능
단점: 롤 수가 증가하여 관리가 복잡해짐
우선 거친 세분화부터 시작하고 필요에 따라 세밀하게 해 나가는 접근 방식이 권장됩니다.
파일 서버의 ACL과의 연계
파일 서버를 크롤하는 경우 파일의 ACL(접근 제어 목록) 정보를 이용한 권한 제어도 가능합니다. 이 경우 파일 시스템상의 권한 설정이 그대로 검색 결과의 표시 제어에 반영됩니다.
파일 서버의 ACL을 활용하는 경우에는 크롤 설정의 권한 관련 설정 항목을 확인하십시오.
정리
본 기사에서는 Fess의 롤 기반 검색을 사용하여 부서별 검색 결과 제어를 설계·구축했습니다.
롤·그룹·사용자의 설계와 등록
크롤 설정에의 롤 할당
Active Directory / LDAP 연계에 의한 자동 롤 반영
SSO 연계의 선택지(OIDC, SAML, SPNEGO)
롤 기반 검색을 통해 정보 보안을 확보하면서 횡단 검색의 편리성을 제공할 수 있습니다. 기초편은 여기까지입니다. 다음 회부터는 실전 솔루션편으로 개발팀의 지식 허브 구축을 다룹니다.