코딩마을방범대
[ELK] ELK 역할 부여 및 권한 관리하는 방법 본문
도커를 통해 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"에 대한 권한이 설정되어 있지 않기 때문이다.
applications 옵션
(주황색 글씨 부분은 본인이 제작한 인덱스 패턴과 대시보드명을 입력해주면 됨)
옵션명 | 설명 | 예시 |
application | 권한을 부여할 애플리케이션의 이름을 지정 |
|
privileges | 애플리케이션에 대해 부여할 작업 권한을 지정 |
|
resource | 권한을 적용할 리소스를 지정 |
|
애플리케이션 내의 권한
옵션명 | 설명 |
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"]
}
]
}
'💡 백엔드 > ELK' 카테고리의 다른 글
[ELK] Docker로 ELK 스택 구축 시 실행 때마다 자동으로 사용자 설정하기 (0) | 2024.11.04 |
---|---|
[ELK] ELK에서 Logstash.conf 파일의 filter, input, output 블록 (0) | 2024.11.04 |
[ELK] ELK를 이용한 MySQL 로그 연동 방법 (0) | 2024.10.21 |
[ELK] 도커를 통해 ELK 구축한 후 Spring boot 로그와 연결하기 (0) | 2024.10.14 |
[ELK] ELK 스택(Elasticsearch, Kibana, Beats, Logstash) 개념 정리 (0) | 2024.08.29 |