검색엔진 관리자 페이지 개발 중, 사용자 별로 지정된 롤을 통해 접근 가능한 인덱스를 제한하는 기능을 테스트 해보려고 한다. 이번 블로그 포스트에는 Elasticsearch에서의 롤 기반의 보안 설정과 사용자 생성에 대해 알아보도록 하겠다.
kibana접근 > Stack management > Security>Users
(Role은 바로 뒤에서 만들어 줄거라 test 유저에게 Role은 부여하지 않았음)
먼저 Elasticsearch에서는 롤을 통해 특정 인덱스에 대한 권한을 설정해줄 수 있다.
aro_test_read_role이라는 롤을 생성하여(테스트이기 때문에 ...그냥 대충 이름 지었다 ^^..)
aro_test* 인덱스 패턴을 가진 인덱스들에 대한 읽기 권한을 부여해보자.
PUT /_security/role/aro_test_read_role
{
"indices": [
{
"names": ["aro_test*"],
"privileges": ["read"]
}
]
}
롤을 생성한 후 해당 롤을 아까 만든 사용자에게 할당해주자.
이를 통해 해당 사용자는 자신에게 할당된 롤에 정의된 권한만큼의 엑세스만 얻을 수 있다.
POST /_security/user/test
{
"password": "password",
"roles": ["aro_test_read_role"]
}
아래 코드를 이용하여 Elasticseach 에 연결하고 해당하는 인덱스 패턴에 접근하는 테스트를 진행해보자.
from elasticsearch import Elasticsearch
# Elasticsearch 서버에 연결
es = Elasticsearch(['your_elasticsearch_host'], port=9200)
# 검색할 index pattern
index_pattern = 'aro_test*'
# 검색할 쿼리 설정
search_query = {
'query': {
'match_all': {} # 모든 문서를 반환하는 간단한 쿼리
}
}
# index pattern을 가진 모든 인덱스에서 검색 실행
search_result = es.search(index=index_pattern, body=search_query)
# 검색 결과 출력
for hit in search_result['hits']['hits']:
print(hit['_source'])
그럼 아래와 같이 해당하는 인덱스에 접근할 수 있는것을 확인해볼 수 있다.
(다른 인덱스를 넣었을 때는 접근 불가가 뜬다.)
Role 기반의 보안 설정을 통해 Elasticsearch는 민감한 데이터에 대한 접근을 사용자 별로 제한할 수 있다. 특히, 특정 인덱스에 대한 읽기 권한만을 허용한 경우, 불필요한 데이터 노출을 방지할 수 있고 더 나아가 사용자 관리 및 권한 부여를 통해 데이터에 대한 안전한 엑세스를 제공한다.
이러한 기능을 통해 Elasticsearch를 보다 안전하게 운영할 수 있으니 다들 참고해보길 바란다.