์ž ๊ธˆ ๋ฐ ํ‚ค ๊ธฐ๋ฐ˜์˜ Elastic: ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ๋ณด์•ˆ ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ž ๊ธˆ ๋ฐ ํ‚ค ๊ธฐ๋ฐ˜์˜ Elastic: ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ๋ณด์•ˆ ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

Elastic Stack์€ SIEM ์‹œ์Šคํ…œ ์‹œ์žฅ(์‹ค์ œ๋กœ๋Š” SIEM ์‹œ์Šคํ…œ ์‹œ์žฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ)์—์„œ ์ž˜ ์•Œ๋ ค์ง„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋ฏผ๊ฐํ•˜๊ฑฐ๋‚˜ ๋ณ„๋กœ ๋ฏผ๊ฐํ•˜์ง€ ์•Š์€ ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Elastic Stack ์š”์†Œ ์ž์ฒด์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ๋ณดํ˜ธ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด๋Š” ์™„์ „ํžˆ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๊ธฐ๋ณธ ์ œ๊ณต Elastic ์š”์†Œ(Elasticsearch, Logstash, Kibana ๋ฐ Beats ์ˆ˜์ง‘๊ธฐ)๋Š” ๊ฐœ๋ฐฉํ˜• ํ”„๋กœํ† ์ฝœ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Kibana ์ž์ฒด์—์„œ๋Š” ์ธ์ฆ์ด ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ƒํ˜ธ ์ž‘์šฉ์€ ๋ณดํ˜ธ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๋ฌธ์„œ์—์„œ๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ํŽธ์˜์ƒ ๋‚ด๋Ÿฌํ‹ฐ๋ธŒ๋ฅผ 3๊ฐœ์˜ ์˜๋ฏธ ๋ธ”๋ก์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์—ญํ•  ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ชจ๋ธ
  • Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ๋ฐ์ดํ„ฐ ๋ณด์•ˆ
  • Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์˜ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ

์ปท ์•„๋ž˜์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ.

์—ญํ•  ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ชจ๋ธ

Elasticsearch๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์กฐ์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ชจ๋“  ์ธ๋ฑ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ€์Ž„, ๋˜๋Š” ์ปฌ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Elasticsearch์—๋Š” ๊ธฐ๋ณธ ๊ตฌ๋…(๋ฌด๋ฃŒ)๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ญํ•  ๋ชจ๋ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋žต์ ์œผ๋กœ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž ๊ธˆ ๋ฐ ํ‚ค ๊ธฐ๋ฐ˜์˜ Elastic: ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ๋ณด์•ˆ ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ง„์—๋Š” โ€‹โ€‹๋ฌด์—‡์ด ์žˆ๋‚˜์š”?

  • ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค.
  • ์—ญํ• ์€ ๊ถŒํ•œ์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
  • ๊ถŒ๋ฆฌ๋Š” ํŠน๊ถŒ์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
  • ๊ถŒํ•œ์€ ์“ฐ๊ธฐ, ์ฝ๊ธฐ, ์‚ญ์ œ ๋“ฑ์˜ ๊ถŒํ•œ์ž…๋‹ˆ๋‹ค. (์ „์ฒด ๊ถŒํ•œ ๋ชฉ๋ก)
  • ๋ฆฌ์†Œ์Šค๋Š” ์ธ๋ฑ์Šค, ๋ฌธ์„œ, ํ•„๋“œ, ์‚ฌ์šฉ์ž ๋ฐ ๊ธฐํƒ€ ์ €์žฅ์†Œ ์—”ํ„ฐํ‹ฐ์ž…๋‹ˆ๋‹ค(์ผ๋ถ€ ๋ฆฌ์†Œ์Šค์˜ ์—ญํ•  ๋ชจ๋ธ์€ ์œ ๋ฃŒ ๊ตฌ๋…์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ).

๊ธฐ๋ณธ์ ์œผ๋กœ Elasticsearch์—๋Š” ๋ฐ•์Šค ์‚ฌ์šฉ์ž, ์—ฌ๊ธฐ์— ์ฒจ๋ถ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์ž ์—ญํ• . ๋ณด์•ˆ ์„ค์ •์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Elasticsearch ์„ค์ •์—์„œ ๋ณด์•ˆ์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ์ด๋ฅผ ๊ตฌ์„ฑ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋Š” ํƒ„๋ ฅ์  ๊ฒ€์ƒ‰/config/elasticsearch.yml) ์ƒˆ ์ค„:

xpack.security.enabled: true

๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•œ ํ›„ Elasticsearch๋ฅผ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜์„ธ์š”. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” Box ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€ํ™”ํ˜•์œผ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1

์•ˆ์‹ฌํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. Elasticsearch ์ธก์˜ ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ Kibana๋ฅผ ๊ตฌ์„ฑํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ ์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ํ‚ค์Šคํ† ์–ด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‘ ๊ฐ€์ง€ ๋ช…๋ น์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž ํ‚ค๋ฐ”๋‚˜ Elasticsearch์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ):

[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.password

๋ชจ๋“  ๊ฒƒ์ด ์ •ํ™•ํ•˜๋ฉด Kibana๋Š” ๋กœ๊ทธ์ธ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌป๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ตฌ๋…์—๋Š” ๋‚ด๋ถ€ ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์—ญํ•  ๋ชจ๋ธ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Gold๋ถ€ํ„ฐ๋Š” LDAP, PKI, Active Directory ๋ฐ Single Sign-On ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์€ ์™ธ๋ถ€ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž ๊ธˆ ๋ฐ ํ‚ค ๊ธฐ๋ฐ˜์˜ Elastic: ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ๋ณด์•ˆ ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

Elasticsearch ๋‚ด๋ถ€ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ๋„ ์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์„œ๋‚˜ ํ•„๋“œ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์œ ๋ฃŒ ๊ตฌ๋…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์ด ๋Ÿญ์…”๋ฆฌ๋Š” Platinum ๋ ˆ๋ฒจ๋ถ€ํ„ฐ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค). ์ด๋Ÿฌํ•œ ์„ค์ •์€ Kibana ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ๋‹ค์Œ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์•ˆ API. ์ด๋ฏธ ์ต์ˆ™ํ•œ Dev Tools ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ญํ•  ๋งŒ๋“ค๊ธฐ

PUT /_security/role/ruslan_i_ludmila_role
{
  "cluster": [],
  "indices": [
    {
      "names": [ "ruslan_i_ludmila" ],
      "privileges": ["read", "view_index_metadata"]
    }
  ]
}

์‚ฌ์šฉ์ž ์ƒ์„ฑ

POST /_security/user/pushkin
{
  "password" : "nataliaonelove",
  "roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
  "full_name" : "Alexander Pushkin",
  "email" : "[email protected]",
  "metadata" : {
    "hometown" : "Saint-Petersburg"
  }
}

Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ๋ฐ์ดํ„ฐ ๋ณด์•ˆ

Elasticsearch๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋˜๋ฉด(์ผ๋ฐ˜์ ์œผ๋กœ) ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ๋ณด์•ˆ ์„ค์ •์ด ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค. ๋…ธ๋“œ ๊ฐ„ ๋ณด์•ˆ ํ†ต์‹ ์„ ์œ„ํ•ด Elasticsearch๋Š” TLS ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค ๊ฐ„์˜ ๋ณด์•ˆ ์ƒํ˜ธ ์ž‘์šฉ์„ ์„ค์ •ํ•˜๋ ค๋ฉด ์ธ์ฆ์„œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. PEM ํ˜•์‹์œผ๋กœ ์ธ์ฆ์„œ์™€ ๊ฐœ์ธ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem

์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ /../ํƒ„์„ฑ๊ฒ€์ƒ‰ ์•„์นด์ด๋ธŒ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค ํƒ„๋ ฅ์  ์Šคํƒ-ca.zip. ๊ทธ ์•ˆ์—๋Š” ํ™•์žฅ๋ช…์ด ํฌํ•จ๋œ ์ธ์ฆ์„œ์™€ ๊ฐœ์ธ ํ‚ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. crt ะธ ํ‚ค ๊ฐ๊ธฐ. ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์œ  ๋ฆฌ์†Œ์Šค์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด์ œ ๊ฐ ๋…ธ๋“œ์—๋Š” ๊ณต์œ  ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ์ธ์ฆ์„œ์™€ ๊ฐœ์ธ ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ์˜ต์…˜ -ip ๋ฐ -dns๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key

๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋ณดํ˜ธ๋˜๋Š” PKCS#12 ํ˜•์‹์˜ ์ธ์ฆ์„œ์™€ ๊ฐœ์ธ ํ‚ค๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‚จ์€ ๊ฒƒ์€ ์ƒ์„ฑ๋œ ํŒŒ์ผ์„ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ๋ฟ์ด๋‹ค. p12 ๊ตฌ์„ฑ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ:

[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/config

ํ˜•์‹์œผ๋กœ ์ธ์ฆ์„œ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. p12 ๊ฐ ๋…ธ๋“œ์˜ ํ‚ค ์ €์žฅ์†Œ ๋ฐ ์‹ ๋ขฐ ์ €์žฅ์†Œ:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

์ด๋ฏธ ์•Œ๋ ค์ง„ ํƒ„๋ ฅ์  ๊ฒ€์ƒ‰.yml ๋‚จ์€ ๊ฒƒ์€ ์ธ์ฆ์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

๋ชจ๋“  Elasticsearch ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ปฌ. ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์™„๋ฃŒ๋˜๋ฉด ์—ฌ๋Ÿฌ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋œ ์‘๋‹ต์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

[elastic@node1 ~]$ curl node1:9200/_cat/nodes -u elastic:password                                                                                    
172.18.0.3 43 75 4 0.00 0.05 0.05 dim * node2                                                                                                                     
172.18.0.4 21 75 3 0.00 0.05 0.05 dim - node3                                                                                                                     
172.18.0.2 39 75 4 0.00 0.05 0.05 dim - node1

๋˜ ๋‹ค๋ฅธ ๋ณด์•ˆ ์˜ต์…˜์ธ IP ์ฃผ์†Œ ํ•„ํ„ฐ๋ง(๊ณจ๋“œ ๋ ˆ๋ฒจ ๊ตฌ๋… ์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” IP ์ฃผ์†Œ์˜ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์˜ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ

ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€๋Š” Kibana, Logstash, Beats ๋˜๋Š” ๊ธฐํƒ€ ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋„๊ตฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ž ๊ธˆ ๋ฐ ํ‚ค ๊ธฐ๋ฐ˜์˜ Elastic: ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ๋ณด์•ˆ ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

http ๋Œ€์‹  https์— ๋Œ€ํ•œ ์ง€์›์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด elasticsearch.yml์— ์ƒˆ ์ค„์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12

์™œ๋ƒํ•˜๋ฉด ์ธ์ฆ์„œ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋ณดํ˜ธ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ ๋…ธ๋“œ์˜ ํ‚ค ์ €์žฅ์†Œ์™€ ์‹ ๋ขฐ ์ €์žฅ์†Œ์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password

ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด Elasticsearch ๋…ธ๋“œ๊ฐ€ https๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•  ์ค€๋น„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋Š” Kibana๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ๊ตฌ์„ฑ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณต์œ  ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ด๋ฏธ ์žˆ๋Š” ์ธ์ฆ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ PEM ํ˜•์‹์˜ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(PKCS#12 Kibana, Logstash ๋ฐ Beats๋Š” ์•„์ง ์ง€์›ํ•˜์ง€ ์•Š์Œ).

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key --pem

๋‚จ์€ ๊ฒƒ์€ ์ƒ์„ฑ๋œ ํ‚ค๋ฅผ Kibana ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋”์— ์••์ถ•์„ ํ‘ธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/config

ํ‚ค๋Š” ๊ฑฐ๊ธฐ์— ์žˆ์œผ๋ฏ€๋กœ ๋‚จ์€ ๊ฒƒ์€ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋„๋ก Kibana ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. kibana.yml ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ http๋ฅผ https๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  SSL ์—ฐ๊ฒฐ ์„ค์ •์ด ์žˆ๋Š” ์ค„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์„ธ ์ค„์€ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €์™€ Kibana ๊ฐ„์˜ ๋ณด์•ˆ ํ†ต์‹ ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

elasticsearch.hosts: ["https://${HOSTNAME}:9200"]
elasticsearch.ssl.certificateAuthorities: /shared_folder/ca/ca.crt
elasticsearch.ssl.verificationMode: certificate
server.ssl.enabled: true
server.ssl.key: /../kibana/config/instance/instance.key
server.ssl.certificate: /../kibana/config/instance/instance.crt

์ด๋กœ์จ ์„ค์ •์ด ์™„๋ฃŒ๋˜๊ณ  Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ์•”ํ˜ธํ™”๋ฉ๋‹ˆ๋‹ค.

๋ฌด๋ฃŒ ๋˜๋Š” ์œ ๋ฃŒ ๊ตฌ๋…, ์ž‘์—… ๋ชจ๋‹ˆํ„ฐ๋ง ๋˜๋Š” SIEM ์‹œ์Šคํ…œ ์ƒ์„ฑ์— ๋Œ€ํ•œ Elastic Stack์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์งˆ๋ฌธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์œผ๋กœ ์š”์ฒญ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ํ”ผ๋“œ๋ฐฑ ํผ ์šฐ๋ฆฌ ์›น ์‚ฌ์ดํŠธ์—

Habrรฉ์˜ Elastic Stack์— ๊ด€ํ•œ ์ถ”๊ฐ€ ๊ธฐ์‚ฌ:

Elastic Stack(Elasticsearch๋ผ๊ณ ๋„ ํ•จ, ELK๋ผ๊ณ ๋„ ํ•จ)์˜ ๊ธฐ๊ณ„ ํ•™์Šต ์ดํ•ด

Elasticsearch ํฌ๊ธฐ ์กฐ์ •

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€