ElasticSearch에서 사용자 생성 및 롤 기반 인덱스 접근 설정

서아로·2023년 12월 14일
0

검색엔진 관리자 페이지 개발 중, 사용자 별로 지정된 롤을 통해 접근 가능한 인덱스를 제한하는 기능을 테스트 해보려고 한다. 이번 블로그 포스트에는 Elasticsearch에서의 롤 기반의 보안 설정과 사용자 생성에 대해 알아보도록 하겠다.

1. 사용자 생성

kibana접근 > Stack management > Security>Users

1.1 Create User클릭

1.2 test 유저 생성하기

(Role은 바로 뒤에서 만들어 줄거라 test 유저에게 Role은 부여하지 않았음)

2. 롤(Role)기반 보안 설정

2.1 롤 생성

먼저 Elasticsearch에서는 롤을 통해 특정 인덱스에 대한 권한을 설정해줄 수 있다.
aro_test_read_role이라는 롤을 생성하여(테스트이기 때문에 ...그냥 대충 이름 지었다 ^^..)
aro_test* 인덱스 패턴을 가진 인덱스들에 대한 읽기 권한을 부여해보자.

PUT /_security/role/aro_test_read_role
{
  "indices": [
    {
      "names": ["aro_test*"],
      "privileges": ["read"]
    }
  ]
}

2.2 롤 할당

롤을 생성한 후 해당 롤을 아까 만든 사용자에게 할당해주자.
이를 통해 해당 사용자는 자신에게 할당된 롤에 정의된 권한만큼의 엑세스만 얻을 수 있다.

POST /_security/user/test
{
  "password": "password",
  "roles": ["aro_test_read_role"]
}

3. 테스트 진행

아래 코드를 이용하여 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를 보다 안전하게 운영할 수 있으니 다들 참고해보길 바란다.

0개의 댓글