Field-level security
출처: 문서
본문
필드 수준 보안
필드 수준 보안(FLS)은 역할이 인덱스에서 읽을 수 있는 문서 필드를 제어해요. 검색 및 가져오기와 같은 읽기 작업에만 적용되고, 쓰기 또는 삭제 권한이 있는 사용자가 해당 필드의 데이터를 인덱싱, 업데이트 또는 삭제하는 것을 막지 않아요. 문서 수준 보안과 유사하게, 역할 내에서 인덱스별로 FLS를 구성해요.
FLS를 시작하는 가장 쉬운 방법은 OpenSearch Dashboards를 열고 보안을 선택하는 거예요. 그런 다음 역할을 선택하고 새 역할을 만든 다음 인덱스 권한 섹션을 검토하세요.
Table of contents
- TOC {:toc}
필드 포함 또는 제외
필드 수준 보안을 구성할 때 두 가지 옵션이 있어요: 필드 포함 또는 제외. 필드를 포함하면 사용자가 문서를 검색할 때 해당 필드만 볼 수 있어요. 예를 들어, actors, title, year 필드를 포함하면 검색 결과는 다음과 같을 수 있어요:
{
"_index": "movies",
"_source": {
"year": 2013,
"title": "Rush",
"actors": [
"Daniel Brühl",
"Chris Hemsworth",
"Olivia Wilde"
]
}
}
필드를 제외하면 사용자가 문서를 검색할 때 해당 필드를 제외한 모든 것을 볼 수 있어요. 예를 들어, 동일한 필드를 제외하면 동일한 검색 결과는 다음과 같을 수 있어요:
{
"_index": "movies",
"_source": {
"directors": [
"Ron Howard"
],
"plot": "A re-creation of the merciless 1970s rivalry between Formula One rivals James Hunt and Niki Lauda.",
"genres": [
"Action",
"Biography",
"Drama",
"Sport"
]
}
}
포함 또는 제외를 사용하여 동일한 결과를 얻을 수 있으므로 사용 사례에 맞는 방법을 선택하세요. 두 가지를 혼합하는 것은 의미가 없으며 지원되지 않아요.
OpenSearch Dashboards, roles.yml 및 REST API를 사용하여 필드 수준 보안 설정을 지정할 수 있어요.
-
roles.yml또는 REST API에서 필드를 제외하려면 필드 이름 앞에~를 추가하세요. -
필드 이름은 와일드카드(
*)를 지원해요.와일드카드는 하위 필드를 제외하는 데 특히 유용해요. 예를 들어, 문자열이 있는 문서(예:
{"title": "Thor"})를 인덱싱하면 OpenSearch는text유형의title필드를 생성하지만keyword유형의title.keyword하위 필드도 생성해요. 이 예에서title필드의 데이터에 대한 무단 액세스를 방지하려면title.keyword하위 필드도 제외해야 해요.title*을 사용하여title로 시작하는 모든 필드를 일치시키세요.
OpenSearch Dashboards
- 역할을 선택하고 인덱스 권한 추가를 선택하세요.
- 인덱스 패턴을 선택하세요.
- 필드 수준 보안에서 드롭다운을 사용하여 원하는 옵션을 선택하세요. 그런 다음 하나 이상의 필드를 지정하고 Enter를 누르세요.
roles.yml
someonerole:
cluster: []
indices:
movies:
'*':
- "READ"
_fls_:
- "~actors"
- "~title"
- "~year"
REST API
역할 생성을 참조하세요.
여러 역할과의 상호작용
사용자를 여러 역할에 매핑하는 경우, 해당 역할이 각 인덱스에 대해 include 또는 exclude 문을 사용하는 것이 좋아요. Security 플러그인은 AND 연산자를 사용하여 필드 수준 보안 설정을 평가하므로 include와 exclude 문을 결합하면 두 동작 모두 제대로 작동하지 않을 수 있어요.
예를 들어, movies 인덱스에서 한 역할에 actors, title, year를 포함하고 다른 역할에 actors, title, genres를 제외한 다음 두 역할을 동일한 사용자에게 매핑하면 검색 결과는 다음과 같을 수 있어요:
{
"_index": "movies",
"_source": {
"year": 2013,
"directors": [
"Ron Howard"
],
"plot": "A re-creation of the merciless 1970s rivalry between Formula One rivals James Hunt and Niki Lauda."
}
}
문서 수준 보안과의 상호작용
문서 수준 보안은 OpenSearch 쿼리에 의존하므로, 쿼리의 모든 필드가 보여야 제대로 작동해요. 필드 수준 보안을 문서 수준 보안과 함께 사용하는 경우, 문서 수준 보안이 사용하는 필드에 대한 액세스를 제한하지 않도록 하세요.
스크립트를 사용한 문서 업데이트
Security 플러그인은 필드 수준 보안, 문서 수준 보안 또는 필드 마스킹이 활성화된 경우 스크립트 업데이트 작업(POST <index>/_update/<id>)을 차단해요. 문서를 업데이트하려면 인덱스 작업(PUT <index>/_doc/<id>)을 사용하세요.