Elasticsearch 보안 및 인증 설정
📌 Elasticsearch는 기본적으로 X-Pack Security 기능을 제공하며,
- 사용자 인증, 역할 기반 액세스 제어(RBAC), TLS/SSL 암호화, API 키 인증 등의 보안 기능을 설정할 수 있습니다.
Role-based Access Control (RBAC) - 역할 기반 접근 제어
RBAC(Role-Based Access Control)은 사용자별 역할(Role)을 정의하여 접근 권한을 제한하는 기능입니다.
이를 통해 읽기(Read), 쓰기(Write), 관리(Admin) 등의 권한을 유연하게 설정할 수 있습니다.
✅ (1) 사용자 생성
bin/elasticsearch-users useradd john_doe -p mypassword -r read_role
✅ 사용자 john_doe를 생성하고 read_role 역할 부여.
✅ (2) 역할(Role) 생성
PUT _security/role/read_role
{
"indices": [
{
"names": ["logs-*"],
"privileges": ["read"]
}
]
}
✅ read_role 역할을 생성하여 logs-* 인덱스에 대한 읽기 권한만 부여.
✅ (3) 역할(Role)을 사용자에게 할당
PUT _security/user/john_doe
{
"password": "mypassword",
"roles": ["read_role"],
"full_name": "John Doe",
"email": "john@example.com"
}
✅ 사용자 john_doe에게 read_role 역할을 할당.
✅ (4) 사용자 인증 테스트
curl -u john_doe:mypassword -X GET "http://localhost:9200/logs-2024/_search"
✅ john_doe는 logs-* 인덱스에 대해 읽기(read)는 가능하지만 쓰기(write)는 불가능.
TLS/SSL 설정 (X-Pack Security)
TLS/SSL을 설정하면 Elasticsearch와 Kibana 간의 통신을 암호화하여 데이터 보호할 수 있습니다.
✅ (1) 인증서 및 키 생성
bin/elasticsearch-certutil cert --pem --keep-ca-key
✅ Elasticsearch 인증서를 생성 (config/certs 디렉토리에 저장됨).
✅ (2) Elasticsearch TLS 설정 (elasticsearch.yml)
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
✅ Elasticsearch 노드 간 통신 및 HTTP API 요청을 SSL로 보호.
✅ (3) Kibana TLS 설정 (kibana.yml)
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/certs/ca.pem"]
server.ssl.enabled: true
server.ssl.certificate: "/etc/kibana/certs/kibana.pem"
server.ssl.key: "/etc/kibana/certs/kibana-key.pem"
✅ Kibana가 TLS를 통해 Elasticsearch에 연결하도록 설정.
✅ (4) Elasticsearch 보안 설정 적용
bin/elasticsearch-setup-passwords interactive
✅ 내장 사용자(elastic, kibana_system, logstash_system 등)의 비밀번호 설정.
API Key 및 User Authentication
API Key 인증을 사용하면 사용자 비밀번호 없이 Elasticsearch API에 안전하게 접근할 수 있습니다.
✅ (1) API Key 생성
POST _security/api_key
{
"name": "my_api_key",
"role_descriptors": {
"limited_access": {
"indices": [
{
"names": ["logs-*"],
"privileges": ["read"]
}
]
}
}
}
✅ logs-* 인덱스에 대해 읽기 권한을 가진 API Key 생성.
✅ (2) API Key를 사용하여 Elasticsearch 요청
curl -H "Authorization: ApiKey <your_api_key>" -X GET "https://localhost:9200/logs-2024/_search"
✅ API Key를 사용하여 Elasticsearch에 안전하게 접근.
✅ (3) API Key 확인 및 삭제
GET _security/api_key
DELETE _security/api_key/<api_key_id>
✅ API Key의 목록을 조회하거나 특정 API Key 삭제 가능.
보안 및 인증 설정 정리
기능 | 설명 |
RBAC (Role-based Access Control) | 사용자별 역할(Role) 설정 및 접근 제어 |
TLS/SSL 설정 | Elasticsearch-Kibana 간 통신 암호화 |
API Key 인증 | 비밀번호 없이 안전하게 API 접근 가능 |
'Elastic Search' 카테고리의 다른 글
[LV 6] Elasticsearch 운영 및 모니터링 (0) | 2025.02.02 |
---|---|
[LV 5] Logstash 및 Beats 활용 (ELK Stack 구성) (1) | 2025.02.02 |
[LV 5] Kibana 연동 및 데이터 시각화 (0) | 2025.02.02 |
[LV 4] Elasticsearch Scaling (확장 전략) (0) | 2025.02.02 |
[LV 3] Ingest Pipeline & Reindex API (0) | 2025.02.02 |