iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 22
0
Elastic Stack on Cloud

ES 新手,破門而入!!!系列 第 22

【ES新手,破門而入!】Day22 - Security,保護 ES 大作戰!作戰篇

你可以學到?

今天,我們要來實作 ES 安全性上的設定。

本篇的主題包含有:

  1. ES Security

那我們就開始吧!

動手實作 EP15:阻擋未經授權的存取

這一部分的實作,我們將可以學到:

  • 啟動 ES 的安全性機制,設置密碼給使用者
  1. 首先先用 ssh 連接到練習用的伺服器 server1,接著啟動 ES:
ssh server1
./elasticsearch/bin/elasticsearch
  1. 接著開啟另一個 terminal,連接到 server1,啟動 Kibana:
ssh server1
./kibana/bin/kibana
  1. 在瀏覽器開啟:<Public_DNS>/app/kibana#/,會發現可以直接存取 Kibana,並不需要輸入什麼帳號密碼,經過授權才能開啟,接下來我們要針對這點做改進!

  1. 關到一開始在 server1 上啟動的 ES 和 Kibana,接著編輯 ES 的設定檔(elasticsearch/config/elasticsearch.yml),加入下面一行讓安全性的功能啟動:
xpack.security.enabled: true

  1. 再次啟動 ES,這時候如果隨意對它做存取(例:curl),你會得到下面的錯誤訊息:
# curl ES server
curl 'server1:9200/_cat/nodes?pretty'

  1. 開啟安全性功能之後,為了要可以存取 ES cluster,我們就必須設置使用者帳號與密碼,在另一個連接到 server1 的 terminal,使用下列指令開始設置內建使用者的密碼:
./elasticsearch/bin/elasticsearch-setup-passwords interactive

  1. 設置好之後,這時候使用已經有的帳號去 curl ES server,輸入對應密碼後,就可以得到對應的回應:
# user=elastic
curl -u elastic 'server1:9200/_cat/nodes?pretty'

  1. 接著重新啟動 Kibana,你會發現這時候會跳出錯誤訊息,為什麼呢?因為這時候 Kibana 的連線,並沒有被 ES cluster 授予存取的權限,當我們一起動安全性功能之後,所有連接到 ES server 都需要經過授權。

  1. 那該怎麼辦呢?別緊張,只要設置一下可以存取的帳號資訊進 Kibana 就可以啦!下面是設置 Keystore 的指令:
# 創建一個 Kibana keystore 來儲存帳號資訊
./kibana/bin/kibana-keystore create

# 新增使用者帳號
./kibana/bin/kibana-keystore add elasticsearch.username

# 新增使用者密碼
./kibana/bin/kibana-keystore add elasticsearch.password

  1. 設置好之後,重新啟動 Kibana,並從瀏覽器連接,你就會看到要你輸入帳號密碼的頁面啦!

  1. 輸入完成功登入後,眼尖的你應該會發現跟最一開始打開 Kibana 的頁面有點不同!沒錯,就是左下角的地方多了一塊 Security 的區塊啦~

  1. 這時候點到 UsersRoles,就可以看到一串內建使用者/角色的設置:

  1. 剛才我們是透過 terminal 端下指令操作的方式,下面我們來使用 Security API 來進行安全性帳號的設置看看!先從左邊的面版點選 Dev Tools

  1. 將一些 sample data 放進 sales_record 的索引:

  1. 使用 Security API,先創建一個 read_only_sales 的角色,這個角色只能做讀取的動作:
PUT /_security/role/read_only_sales
{
  "cluster": [],
  "indices": [
    {
      "names": [ "sales_record" ],
      "privileges": ["read", "view_index_metadata"]
    }
  ]
}

  1. 接著再創建 sales_user 這個使用者,並賦予對應的角色:read_only_saleskibana_user(要記得加入 kibana_user 這個角色,否則該使用者將沒辦法登入 Kibana 歐!)
POST /_security/user/sales_user
{
  "password" : "xxxxxxxx",
  "roles" : [ "read_only_sales", "kibana_user" ],
  "full_name" : "Sales User",
  "email" : "training@elastic.co"
}

  1. 設置完後當然要來測試看看啦,先點一下右上方的帳號圖像,原本應該是 elastic 使用者,登出後重新登入 sales_user 使用者:

Before

After

  1. Dev Tools 中,先用 GET 來讀取看看,應該要可以拿到東西:
GET sales_record/_search

  1. 但是若是要修改的話,逼逼!母湯歐~
POST sales_record/_doc
{
  "product": "4008",
  "price": 8.69,
  "payment_type": "mastercard",
  "card_number": "9378906409894724",
  "name": "jack",
  "city": "paris",
  "country": "france"
}

今日心得與短結

今天實作了 ES 上安全性的功能,可以看到設置其實還蠻容易的!更進一步的內容,有興趣的同學也可以參考官方的學習資訊:https://www.elastic.co/training/fundamentals-of-securing-elasticsearch

明天開始就要到下一個主題:Elastic SIEM 基礎,這個我也不知道是幹麼的碗糕了!


上一篇
【ES新手,破門而入!】Day21 - Security,保護 ES 大作戰!登陸篇
下一篇
【ES新手,破門而入!】Day23 - 國土安全 Elastic SIEM 保衛隊!新兵報到!
系列文
ES 新手,破門而入!!!30

尚未有邦友留言

立即登入留言