์ง๋ ํ ํด ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ง์ ์ ์ถ์ด ๋ฐ์ํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ค์ ๋ก 152-FZ, Cloud-152์ ์๊ตฌ ์ฌํญ์ ์ค์ํ๋ IaaS ํ๋ซํผ์์ ์ ๋ณด ๋ณด์ ๋๊ตฌ, OS ๋ฐ ์ํํธ์จ์ด์ ๋ก๊ทธ๋ฅผ ์ ์ฅํ๊ณ ๋ถ์ํ๊ธฐ ์ํด Elasticsearch๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์ฆ์ ์์ฝํ๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ธํฐ๋ท์ "๋ถ์ด ์๋์ง" ํ์ธํฉ๋๋ค.
๊ฐ์ฅ ์ ์๋ ค์ง ๋์ถ ์ฌ๋ก(
๋จผ์ ์ธํฐ๋ท ์ถํ์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. ์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํฉ๋๊น? ์ฌ์ค Elasticsearch์ ๋ณด๋ค ์ ์ฐํ ์ด์์ ์ํด์๋
๋ค์ด๊ฐ ์ ์์ผ๋ฉด ๋ฌ๋ ค๊ฐ ๋ฌธ์ ๋ซ์ผ์ธ์.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฐ๊ฒฐ ๋ณดํธ
์ด์ ์ธ์ฆ ์์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์์ด ๋ถ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
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 ์ ๋ฌธ๊ฐ์๊ฒ ๋ฌธ์ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ก ๋ ๋ฒ์งธ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
- ์ ์ฒด ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค.
export DOMAIN_CN="example.com"
- ๊ฐ์ธ ํค๋ฅผ ์์ฑํฉ๋๋ค:
openssl genrsa -out root-ca-key.pem 4096
- ๋ฃจํธ ์ธ์ฆ์์ ์๋ช
ํฉ๋๋ค. ์์ ํ๊ฒ ๋ณด๊ดํ์ธ์. ๋ถ์ค๋๊ฑฐ๋ ์์๋ ๊ฒฝ์ฐ ๋ชจ๋ ํธ์คํธ ๊ฐ์ ์ ๋ขฐ๋ฅผ ์ฌ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
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
- ๊ด๋ฆฌ์ ํค๋ฅผ ์์ฑํฉ๋๋ค:
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
- ์ธ์ฆ์ ์๋ช
์์ฒญ์ ์์ฑํฉ๋๋ค.
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr
- ๊ด๋ฆฌ์ ์ธ์ฆ์๋ฅผ ์์ฑํฉ๋๋ค:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- 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
- ์๋ช
์์ฒญ์ ์์ฑํ์ญ์์ค.
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
- ์ธ์ฆ์ ์๋ช
:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem
- ๋ค์ ํด๋์ Elasticsearch ๋
ธ๋ ์ฌ์ด์ ์ธ์ฆ์๋ฅผ ๋ฐฐ์นํฉ๋๋ค.
/etc/elasticsearch/
ํ์ผ์ด ํ์ํฉ๋๋ค:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem
- ๊ตฌ์ฑ /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
๋ด๋ถ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ
- ์๋ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋น๋ฐ๋ฒํธ ํด์๋ฅผ ์ฝ์์ ์ถ๋ ฅํฉ๋๋ค.
sh ${OD_SEC}/tools/hash.sh -p [ะฟะฐัะพะปั]
- ํ์ผ์ ํด์๋ฅผ ์์ ๋ ํด์๋ก ๋ณ๊ฒฝํฉ๋๋ค.
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
OS์์ ๋ฐฉํ๋ฒฝ ์ค์
- ๋ฐฉํ๋ฒฝ์ด ์์๋๋๋ก ํ์ฉํฉ๋๋ค.
systemctl enable firewalld
- ์คํํด ๋ด
์๋ค:
systemctl start firewalld
- Elasticsearch์ ๋ํ ์ฐ๊ฒฐ์ ํ์ฉํฉ๋๋ค.
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent
- ๋ฐฉํ๋ฒฝ ๊ท์น์ ๋ค์ ๋ก๋ํฉ๋๋ค.
firewall-cmd --reload
- ์์
๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
firewall-cmd --list-all
Elasticsearch์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ ์ ์ฉ
- ํ๋ฌ๊ทธ์ธ์ด ์๋ ํด๋์ ์ ์ฒด ๊ฒฝ๋ก๊ฐ ํฌํจ๋ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค.
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ฐ์ดํธํ๊ณ ์ค์ ์ ํ์ธํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด ๋ณด๊ฒ ์ต๋๋ค.
${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
- ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋์๋์ง ํ์ธํ์ธ์.
curl -XGET https://[IP/ะะผั Elasticsearch]:9200/_cat/nodes?v -u admin:[ะฟะฐัะพะปั] --insecure
๊ทธ๊ฒ ์ ๋ถ์
๋๋ค. ์ด๊ฒ์ ๋ฌด๋จ ์ฐ๊ฒฐ๋ก๋ถํฐ Elasticsearch๋ฅผ ๋ณดํธํ๋ ์ต์ ์ค์ ์
๋๋ค.
์ถ์ฒ : habr.com