๋ˆ„์ถœ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Elasticsearch๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

์ง€๋‚œ ํ•œ ํ•ด ๋™์•ˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋งŽ์€ ์œ ์ถœ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํƒ„์„ฑ ๊ฒ€์ƒ‰ (์—ฌ๊ธฐ์—, ์—ฌ๊ธฐ์— ะธ ์—ฌ๊ธฐ์—). ๋งŽ์€ ๊ฒฝ์šฐ ๊ฐœ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐฐํฌํ•œ ํ›„ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ ์„ค์ •์„ ํ™•์ธํ–ˆ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ์œ ์ถœ์€ ํ”ผํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ 152-FZ, Cloud-152์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ค€์ˆ˜ํ•˜๋Š” IaaS ํ”Œ๋žซํผ์—์„œ ์ •๋ณด ๋ณด์•ˆ ๋„๊ตฌ, OS ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด Elasticsearch๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ฆ‰์‹œ ์˜ˆ์•ฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

๋ˆ„์ถœ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Elasticsearch๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ธํ„ฐ๋„ท์— "๋ถ™์–ด ์žˆ๋Š”์ง€" ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ž˜ ์•Œ๋ ค์ง„ ๋ˆ„์ถœ ์‚ฌ๋ก€(์—ฌ๊ธฐ์—, ์—ฌ๊ธฐ์—) ๊ณต๊ฒฉ์ž๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์†Œ๋ฐ•ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ธํ„ฐ๋„ท์— ๊ฒŒ์‹œ๋˜์—ˆ์œผ๋ฉฐ ์ธ์ฆ ์—†์ด ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.  

๋จผ์ € ์ธํ„ฐ๋„ท ์ถœํŒ์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. ์™œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ์‚ฌ์‹ค Elasticsearch์˜ ๋ณด๋‹ค ์œ ์—ฐํ•œ ์šด์˜์„ ์œ„ํ•ด์„œ๋Š” ์ถ”์ฒœ ์„ธ ๊ฐœ์˜ ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•˜๋ ค๋ฉด ํฌํŠธ๋ฅผ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌ์ž๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜์ง€ ์•Š์œผ๋ฉฐ ์‚ฌ์šฉ์ž๋Š” ์–ด๋””์—์„œ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์— ์ž…๋ ฅํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค http://[IP/ะ˜ะผั Elasticsearch]:9200/_cat/nodes?v

๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉด ๋‹ฌ๋ ค๊ฐ€ ๋ฌธ์„ ๋‹ซ์œผ์„ธ์š”.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ๋ณดํ˜ธ

์ด์ œ ์ธ์ฆ ์—†์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Elasticsearch์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” ์ธ์ฆ ๋ชจ๋“ˆ์ด ์žˆ์ง€๋งŒ ์œ ๋ฃŒ X-Pack ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ธํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(1๊ฐœ์›” ๋ฌด๋ฃŒ ์‚ฌ์šฉ).

์ข‹์€ ์†Œ์‹์€ 2019๋…„ ๊ฐ€์„์— Amazon์ด X-Pack๊ณผ ๊ฒน์น˜๋Š” ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ๋•Œ ์ธ์ฆ ๊ธฐ๋Šฅ์€ Elasticsearch 7.3.2 ๋ฒ„์ „์˜ ๋ฌด๋ฃŒ ๋ผ์ด์„ ์Šค๋กœ ์ œ๊ณต๋˜์—ˆ์œผ๋ฉฐ Elasticsearch 7.4.0์˜ ์ƒˆ ๋ฆด๋ฆฌ์Šค๋Š” ์ด๋ฏธ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค.

์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์„ค์น˜๊ฐ€ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ฝ˜์†”๋กœ ์ด๋™ํ•˜์—ฌ ์ €์žฅ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

RPM ๊ธฐ๋ฐ˜:

curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo

yum update

yum install opendistro-security


DEB ๊ธฐ๋ฐ˜:

wget -qO โ€ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -

SSL์„ ํ†ตํ•ด ์„œ๋ฒ„ ๊ฐ„ ์ƒํ˜ธ ์ž‘์šฉ ์„ค์ •

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐ๋˜๋Š” ํฌํŠธ์˜ ๊ตฌ์„ฑ์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. SSL ์•”ํ˜ธํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋ฒ„๊ฐ€ ๊ณ„์†ํ•ด์„œ ์„œ๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด SSL์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ ๊ฐ„ ์‹ ๋ขฐ๋Š” ์ž์ฒด ์ธ์ฆ ๊ธฐ๊ด€ ์œ ๋ฌด์— ๊ด€๊ณ„์—†์ด ์„ค์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค. CA ์ „๋ฌธ๊ฐ€์—๊ฒŒ ๋ฌธ์˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๋‘ ๋ฒˆ์งธ๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ์ „์ฒด ๋„๋ฉ”์ธ ์ด๋ฆ„์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    export DOMAIN_CN="example.com"

  2. ๊ฐœ์ธ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

    openssl genrsa -out root-ca-key.pem 4096

  3. ๋ฃจํŠธ ์ธ์ฆ์„œ์— ์„œ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•˜์„ธ์š”. ๋ถ„์‹ค๋˜๊ฑฐ๋‚˜ ์†์ƒ๋œ ๊ฒฝ์šฐ ๋ชจ๋“  ํ˜ธ์ŠคํŠธ ๊ฐ„์˜ ์‹ ๋ขฐ๋ฅผ ์žฌ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    openssl req -new -x509 -sha256 -subj "/C=RU/ST=Moscow/O=Moscow, Inc./CN=${DOMAIN_CN}" 
    -key root-ca-key.pem -out root-ca.pem

  4. ๊ด€๋ฆฌ์ž ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

    openssl genrsa -out admin-key-temp.pem 4096
    openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt 
    -v1 PBE-SHA1-3DES -out admin-key.pem

  5. ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " 
    -key admin-key.pem -out admin.csr

  6. ๊ด€๋ฆฌ์ž ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

    openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem 
    -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem

  7. Elasticsearch ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    export NODENAME="node-01"
    openssl genrsa -out ${NODENAME}-key-temp.pem 4096
    openssl pkcs8 -inform PEM -outform PEM -in ${NODENAME}-key-temp.pem -topk8 -nocrypt 
    -v1 PBE-SHA1-3DES -out ${NODENAME}-key.pem

  8. ์„œ๋ช… ์š”์ฒญ์„ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

    openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${NODENAME}.${DOMAIN_CN}"  
    -addext"subjectAltName=DNS:${NODENAME}.${DOMAIN_CN},DNS:www.${NODENAME}.${DOMAIN_CN}" 
    -key ${NODENAME}-key.pem -out ${NODENAME}.csr

  9. ์ธ์ฆ์„œ ์„œ๋ช…:

    openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial 
    -sha256 -out node.pem

  10. ๋‹ค์Œ ํด๋”์˜ Elasticsearch ๋…ธ๋“œ ์‚ฌ์ด์— ์ธ์ฆ์„œ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

    /etc/elasticsearch/


    ํŒŒ์ผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

            node-01-key.pem
    	node-01.pem
    	admin-key.pem
    	admin.pem
    	root-ca.pem

  11. ๊ตฌ์„ฑ /etc/elasticsearch/elasticsearch.yml โ€“ ์ธ์ฆ์„œ๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ ์ด๋ฆ„์„ ๋‹น์‚ฌ๊ฐ€ ์ƒ์„ฑํ•œ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

    opendistro_security.ssl.transport.pemcert_filepath: node-01.pem                                                                                                                                                                                    
    	opendistro_security.ssl.transport.pemkey_filepath: node-01-key.pem                                                                                                                                                                                 
    	opendistro_security.ssl.transport.pemtrustedcas_filepath: root-ca.pem                                                                                                                                                                              
    	opendistro_security.ssl.transport.enforce_hostname_verification: false                                                                                                                                                                             
    	opendistro_security.ssl.http.enabled: true                                                                                                                                                                                                         
    	opendistro_security.ssl.http.pemcert_filepath: node-01.pem                                                                                                                                                                                         
    	opendistro_security.ssl.http.pemkey_filepath: node-01-key.pem                                                                                                                                                                                      
    	opendistro_security.ssl.http.pemtrustedcas_filepath: root-ca.pem                                                                                                                                                                                   
    	opendistro_security.allow_unsafe_democertificates: false                                                                                                                                                                                           
    	opendistro_security.allow_default_init_securityindex: true                                                                                                                                                                                         
    	opendistro_security.authcz.admin_dn:                                                                                                                                                                                                               
    	  โˆ’ CN=admin,CN=example.com,O=Moscow Inc.,ST=Moscow,C=RU                                                                                                                                                                                                  
    	opendistro_security.nodes_dn:                                                                                                                                                                                                                      
    	  โˆ’ CN=node-01.example.com,O=Moscow Inc.,ST=Moscow,C=RU

๋‚ด๋ถ€ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ

  1. ์•„๋ž˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    sh ${OD_SEC}/tools/hash.sh -p [ะฟะฐั€ะพะปัŒ]

  2. ํŒŒ์ผ์˜ ํ•ด์‹œ๋ฅผ ์ˆ˜์‹ ๋œ ํ•ด์‹œ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

    /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml

OS์—์„œ ๋ฐฉํ™”๋ฒฝ ์„ค์ •

  1. ๋ฐฉํ™”๋ฒฝ์ด ์‹œ์ž‘๋˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

    systemctl enable firewalld

  2. ์‹คํ–‰ํ•ด ๋ด…์‹œ๋‹ค:

    systemctl start firewalld

  3. Elasticsearch์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

    firewall-cmd --set-default-zone work
    firewall-cmd --zone=work --add-port=9200/TCP --permanent

  4. ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ๋‹ค์‹œ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    firewall-cmd --reload

  5. ์ž‘์—… ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    firewall-cmd --list-all

Elasticsearch์— ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ ์šฉ

  1. ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ๋Š” ํด๋”์˜ ์ „์ฒด ๊ฒฝ๋กœ๊ฐ€ ํฌํ•จ๋œ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    export  OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"

  2. ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์„ค์ •์„ ํ™•์ธํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    ${OD_SEC}/tools/securityadmin.sh -cd ${OD_SEC}/securityconfig/ 
    -icl -nhnv -cacert /etc/elasticsearch/root-ca.pem 
    -cert /etc/elasticsearch/admin.pem  
    -key /etc/elasticsearch/admin-key.pem

  3. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

    curl -XGET https://[IP/ะ˜ะผั Elasticsearch]:9200/_cat/nodes?v -u admin:[ะฟะฐั€ะพะปัŒ] --insecure

๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฌด๋‹จ ์—ฐ๊ฒฐ๋กœ๋ถ€ํ„ฐ Elasticsearch๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ์ตœ์†Œ ์„ค์ •์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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