코딩마을방범대

[ELK] ELK 역할 부여 및 권한 관리하는 방법 본문

💡 백엔드/ELK

[ELK] ELK 역할 부여 및 권한 관리하는 방법

신짱구 5세 2024. 10. 31. 15:09
728x90

 

 

 

 

 

도커를 통해 ELK 구축하기

ELK란 아래 포스트를 통해 개념을 확인할 수 있다. ELK 스택(Elasticsearch, Kibana, Beats, Logstash) 개념 정리ELK 스택Elasticsearch, Logstash, Kibana의 세 가지 인기 있는 프로젝트로 구성된 스택을 의미

sweet-rain-kim.tistory.com

 

이전 포스트에선 ELK 구축하는 방법을 알아봤다.

 

이후 역할을 커스텀 하는 방법에 대해 알아볼 것이다.

아래의 모든 과정은 kibana 사이트의 Dev Tools에 접속이 가능하다는 가정 하에 진행한다.

Kibana 사이트에 접속한 후 메뉴 중 하단에 있는 Dev tools - console에 명령어를 입력하면 된다.

 

 

 

 


 

 

 

 

 

역할과 관련된 API

 

1. 역할 생성 or 수정하기 ★★★

만약 기존 역할을 수정했다면, Kibana를 재부팅해주거나 사용자에게서 역할을 제거했다가 재할당해줘야 한다.

PUT /_security/role/역할명
{
    "cluster": ["클러스터 권한"],
    "indices": [
        {
            "names": ["인덱스명"],
            "privileges": ["설정할 권한"]
        }
    ],  "applications": [
        {
            "application": ["애플리케이션 이름"],
            "privileges": ["설정할 권한"],
            "resources": ["리소스 이름"]
        }
    ]
}

 

 


 

클러스터(Cluster)

여러 개의 노드(Node)들이 함께 작업하여 데이터를 저장하고 검색하는 시스템을 의미.


 

클러스터의 주요 개념

단어 설명
노드(Node) 클러스터를 구성하는 개별 서버. 
노드는 클러스터의 일부로서 서로 통신하며, 데이터를 분산 저장.
샤드(Shard) Elasticsearch에서는 데이터를 샤드라는 작은 단위로 나누어 저장. 
각 샤드는 인덱스의 일부로, 데이터의 일부를 포함하고 있음. 
기본 샤드: 데이터의 원본을 저장 
복제 샤드: 기본 샤드의 복사본으로, 고가용성을 위해 사용됨
인덱스(Index) 데이터를 저장하는 구조. 
각 인덱스는 샤드로 분할되어 저장됨.

 


 

클러스터 권한

권한명 설명
all 클러스터의 모든 작업을 수행할 수 있는 권한
(인덱스 생성, 삭제, 매핑 관리, 클러스터 설정 조정 등)
monitor 클러스터의 상태를 모니터링할 수 있는 권한
(클러스터의 메트릭, 상태, 인덱스 상태 등 조회 가능)
manage 클러스터의 설정을 관리할 수 있는 권한
(인덱스 템플릿, 파라미터, 클러스터의 다양한 설정 수정 가능)
create_index 새로운 인덱스를 생성할 수 있는 권한
(인덱스 추가 가능)
manage_security 보안 관련 작업을 수행할 수 있는 권한
(사용자, 역할, 권한 관리를 포함하여 보안 설정 변경 가능)
read 클러스터의 메타데이터와 노드 정보를 읽을 수 있는 권한
(인덱스에 대한 권한은 아님, 클러스터 정보를 조회해야하는 사용자에게 부합함)

 

 


 

 

indices

특정 인덱스에 대한 권한을 설정하는 데 사용


 

indices 옵션

옵션명 설명
names 권한을 부여할 인덱스의 이름을 지정
privileges 인덱스에 대해 부여할 특정 작업 권한을 지정

 

인덱스 내의 권한 (privileges 옵션)

권한명 설명
read 인덱스의 문서를 검색하고 조회할 수 있는 권한
write 인덱스에 문서를 추가하거나 수정할 수 있는 권한
create 새로운 인덱스를 생성할 수 있는 권한
delete 인덱스의 문서를 삭제할 수 있는 권한
manage 인덱스의 매핑 및 설정을 관리할 수 있는 권한
index 인덱스에 문서를 추가할 수 있는 권한
all 인덱스에 대한 모든 권한을 부여
view_index_metadata 인덱스의 메타데이터를 조회할 수 있는 권한

 

 


 

 

③ applications

특정 인덱스에 대한 권한을 설정하는 데 사용.

kibana 사이트에 로그인하려는데 권한이 부족하다고 나올 경우 "kibana-.kibana"에 대한 권한이 설정되어 있지 않기 때문이다.

2번을 통해 GET으로 역할 조회 시 applications가 비어있음을 확인


 

applications 옵션

(주황색 글씨 부분은 본인이 제작한 인덱스 패턴과 대시보드명을 입력해주면 됨)

옵션명 설명 예시
application 권한을 부여할 애플리케이션의 이름을 지정
  • "logstash-*"
  • "apm-*"
  • "kibana-.kibana"
privileges 애플리케이션에 대해 부여할 작업 권한을 지정
  • ["read", "write"]
resource 권한을 적용할 리소스를 지정
  • ["dashboard:my_dashboard_id"]
  • ["index-pattern:my_index_pattern"]
  • ["*"]

 


 

애플리케이션 내의 권한

옵션명 설명
all 애플리케이션의 모든 기능에 대한 접근 권한
read 애플리케이션에서 데이터를 읽을 수 있는 권한
write 애플리케이션에서 데이터를 쓸 수 있는 권한

 


 

 

예를 들어 my_custom_role이라는 역할을 생성하고,

모든 인덱스에 대한 읽기와 쓰기 권한을 부여,

키바나에 대해 모든 권한을 주고 싶은 경우 아래와 같이 입력해주면 된다. 

PUT /_security/role/my_custom_role
{
    "cluster": ["all"],
    "indices": [
        {
            "names": ["*"],
            "privileges": ["read", "write"]
        }
    ], "applications": [
        {
            "application": "kibana-.kibana",
            "privileges": ["all"],
            "resources": ["*"]
        }
    ]
}

 

 


 

 

2. 특정 역할 정보 확인하기

GET /_security/role/역할명

 

 


 

 

3. 모든 역할 정보 확인하기

GET /_security/role

 

Elasticsearch에 기본적으로 제공되는 역할들은 아래와 같다.

역할명 설명
superuser 모든 권한을 가진 역할
(Elasticsearch의 모든 기능에 접근할 수 있음)
kibana_system Kibana 애플리케이션이 Elasticsearch와 통신할 수 있도록 필요한 권한을 부여
logstash_system Logstash가 Elasticsearch에 데이터를 전송할 수 있도록 필요한 권한을 부여
beats_system Beats(예: Filebeat, Metricbeat 등)와 관련된 권한을 가진 역할
(Beats가 Elasticsearch에 데이터를 전송할 수 있도록 필요한 권한을 부여)
data_reader Elasticsearch 인덱스의 데이터를 읽을 수 있는 권한을 가진 역할
(일반 사용자나 애플리케이션이 데이터를 조회할 때 사용)
data_writer Elasticsearch 인덱스에 데이터를 쓸 수 있는 권한을 가진 역할
(데이터 수집 애플리케이션이나 사용자에게 부여)
data_admin 데이터 관련 작업(예: 인덱스 생성 및 삭제 등)에 대한 관리 권한을 가진 역할
monitoring_user 클러스터의 모니터링과 관련된 권한을 가진 역할
(클러스터 상태, 성능 메트릭스 등을 조회할 수 있음)

 

 


 

 

4. 역할 삭제하기

DELETE /_security/role/역할명

 

 

 

 

 

 


 

 

 

 

유저와 관련된 API

 

1. 유저 정보 확인하기

GET /_security/user/유저명

 

 


 

2. 사용자 생성하기

POST /_security/user/유저명
{
    "password": "비밀번호",
    "roles": ["역할명"],
    "full_name": "이름",
    "email": "메일주소"
}

 

예를 들어, my_user라는 사용자를 만들고 my_custom_role 역할을 부여해야할 경우 아래와 같이 설정하면 된다.

POST /_security/user/my_user
{
    "password": "my_password",
    "roles": ["my_custom_role"],
    "full_name": "My User",
    "email": "myuser@example.com"
}

 

 


 

3. 유저 삭제하기

DELETE /_security/user/유저명

 

 


 

4. 사용자 수정하기

PUT /_security/user/유저명
{
    "password": "비밀번호",
    "roles": ["역할명"],
    "full_name": "이름",
    "email": "메일주소"
}

 

예를 들어, my_user라는 사용자에 my_custom_role 역할을 부여해야할 경우 아래와 같이 설정하면 된다.

PUT /_security/user/my_user
{
    "password": "my_password",
    "roles": ["my_custom_role"],
    "full_name": "My User",
    "email": "myuser@example.com"
}

 



 

 

 


 

 

 

 

유저&역할과 관련된 API

 

1. 기존 사용자에게 역할 부여하기

POST /_security/user/유저명
{
    "roles": ["역할명"]
}

 



2. 유저에게 부여된 모든 역할 확인하기

GET /_security/user/유저명

 


 

 

3. 사용자 역할 제거하기

POST /_security/user/유저명
{
    "roles": []
}

 



 

 

 


 

 

 

 

You do not have permission to access the requested page

 

만약 위와 같은 오류가 발생했다면, 적절한 역할은 부여했으나, 그 역할에 대한 권한을 제대로 설정해주지 않았을 경우일 확률이 높다.

elastic 계정으로 접속 후 아래 console에 아래 명령어를 입력하여 실행해보았을 때, 내가 원하는 권한이 없거나 비어있을 것이다.

GET /_security/role/역할명

 

이럴 경우 해당 역할에 권한을 부여 해주면 된다.

아래는 역할과 적절한 권한을 추가하는 명령어이다.

PUT /_security/role/역할명
{
    "cluster": ["클러스터 권한"],
    "indices": [
        {
            "names": [ "인덱스명" ],
            "privileges": ["인덱스 권한"]
        }
    ],
    "applications": [
        {
            "application": "kibana-.kibana",
            "privileges": ["all"],
            "resources": ["*"]
        }
    ]
}

 

 

아래 예제는 data_reader 역할에게 모든 인덱스에 대해 read 권한을 부여해주는 것을 말한다.

PUT /_security/role/data_reader
{
    "cluster": ["all"],
    "indices": [
        {
            "names": [ "*" ],
            "privileges": ["read"]
        }
    ]
}

 

 

 

728x90