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 접근 가능

 

+ Recent posts