코딩마을방범대
[ELK] ELK 역할 부여 및 권한 관리하는 방법 본문
이전 포스트에선 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 |