Elasticsearch Security

Prawit Tangmanopeanchai
2 min readJul 21, 2019

--

21/7/19

หลังจากที่ได้ทำ Elasticsearch, Kibana, Logstash และ Beat ไปใช้กันเป็นที่เรียบร้อย ก็ใช้งานได้ตามที่คาดหวัง แต่คราวนี้เริ่มมาห่วงเรื่องความปลอดภัยแล้วสิ

คงไม่ดีถ้าเครื่องไหนก็ไม่รู้สามารถที่จะส่ง log มาเก็บไว้กับเราได้โดยที่เราไม่รู้ตัว เราก็จะกลายเป็นที่เก็บของ ๆ เขา จ่ายเงินให้เขาใช้พื้นที่ของเราไปฟรี ๆ

หรือว่าใครก็ไม่รู้สามารถที่จะเข้ามาดูข้อมูล log ของเราไปโดยไม่ได้รับอนุญาต หรือจะสร้างรายงาน สร้าง dashboard บลา บลา บลา ไปถึงกระทั่งลบ dashboard ที่เราอุตส่าห์ใช้เวลาทำแทบตาย 😠

อย่ากระนั้นเลย Elasticsearch เองได้แถมตัวจัดการเรื่องนี้มาให้เราได้ใช้แบบฟรีอยู่แล้ว เรียกว่า X-Pack ซึ่งแต่ก่อนต้องทำการติดตั้งเพิ่มลงไป แต่เดี๋ยวนี้ elasticsearch build-in มาให้เราเรียบร้อยแล้ว วิธีใช้ก็ง่ายแสนง่าย เริ่มจากไปที่เครื่องที่เราได้ทำการติดตั้ง program elasticsearch เอา แล้ว run command

/usr/share/elasticsearch/bin/elasticsearch-setup-password interactive

เพื่อทำการกำหนด password ให้กับ build-in user ต่าง ๆ ใน ecosystem ของ elasticsearch ก่อน (ตั้งค่าอะไรไว้ก็จดเก็บไว้ด้วยนะครับ แต่สามารถแก้ไขทีหลังได้)

เสร็จแล้วก็ทำการแก้ไข config ของ elasticsearch โดยให้เพิ่ม 2 บรรทัดนี้เข้าไปใน file “/etc/elasticsearch/elasticsearch.yml”

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

แล้วทำการ restart service ของ elasticsearch

sudo service elasticsearch restart

เป็นอันว่าเราได้ทำการ enable security ให้กับ elasticsearch เรียบร้อย ต่อจากนี้ก็จะไม่มีใครสามารถส่ง log มาเก็บไว้กับเราโดยที่เราไม่รู้ได้ (แต่ถ้าเขารู้ user/password ก็ยังทำได้อยู่ดี) คราวนี้ทั้ง logstash ทั้ง beat ทั้ง kibana ก็คุยกับ elasticsearch ไม่ได้แล้ว 😜 แล้วทำไงดี….

ตอนนี้เรามาสร้าง superuser เอาไว้สำหรับจัดการเรื่องเกี่ยวกับ user กันก่อน โดยใช้คำสั่ง

/usr/share/elasticsearch/bin/elasticsearch-users useradd superuser -p password -r superuser

คือสร้าง user ชื่อว่า “superuser” มี password คือ “password” (ง่ายไปนะ) แล้วมี role เป็น “superuser” โดย elasticsearch มี role อะไรบ้างสามารถดูได้จากที่นี่

ส่วนการใช้งานคำสั่ง elasticsearch-users ดูได้จากที่นี่

ต่อจากนั้นเราก็ต้องไปแก้ไขใน config ของ kibana ต่อเพื่อเอาไว้ใช้เป็นส่วนในการใช้จัดการ user ภายใน elasticsearch โดยให้เข้าไปแก้ไข config file “/etc/kibana/kibana.yml” โดยให้เพิ่ม 2 บรรทัดนี้เข้าไป

elasticsearch.username: “elastic”
elasticsearch.password: “password”

password ที่ใช้เป็น “password” จากที่ตั้งไว้ด้วยคำสั่ง elasticsearch-setup-passwords ถ้าใครตั้งเป็นค่าอื่นก็ให้ใส่เป็นค่าที่ตั้งไว้ลงไป เสร็จแล้วให้ทำการ restart service ของ kibana

sudo service kibana restart

พอเข้าไปที่ kibana ตอนนี้จะขึ้นหน้าจอให้ใส่ user/password แล้ว

คราวนี้เรา log in โดยใช้ user “superuser” ที่เราเพิ่งสร้างขึ้นมา จะพบว่ามีส่วนของ security เพิ่มขึ้นมาแล้ว (จากเดิมจะไม่มี) ซึ่งในส่วนนี้เองเราก็สามารถสร้าง user กำหนด role ให้กับ user ต่าง ๆ ได้แล้ว

ต่อจากนั้นเราก็ต้องตามไปแก้ไข config ของ beat ต่าง ๆ และ logstash เพื่อให้สามารถส่งข้อมูลไปเก็บที่ elasticsearch ได้ เช่นของ filebeat ก็ไปแก้ใน “/etc/filebeat/filebeat.yml” ดูตัวอย่างตามภาพเลยนะครับ

เสร็จแล้วก็ restart service ซะก็เป็นอันเสร็จ 😊

--

--

Prawit Tangmanopeanchai
Prawit Tangmanopeanchai

Written by Prawit Tangmanopeanchai

Head of Cloud Implementation Unit at gosoft (Thailand)

Responses (2)