Elastic 操作權限管理 Role-Based Access Control 簡介

me
林彥成
2020-09-13 | 2 min.
文章目錄
  1. 1. Role-Based Access Control
  2. 2. Built-in Users
  3. 3. Built-in Roles
  4. 4. 使用者與角色管理

這篇文章主要會簡介 Role-Based Access Control (RBAC),因為當沒有任何權限控管時,每個人都可以對 Index 進行讀取和修改,這樣就毫無隱私及安全性可言,所以 Elasticsearch 提供了 Role-Based Access Control (RBAC) 讓管理者進行相關設定。

Role-Based Access Control

RBAC 機制中,每個使用者可能會得到很多不同的角色,每個角色擁有不同的層級的權限,角色可以提供選取的權限非常多種,可以參考文件中 security-privileges 的部分

在我們把機制啟動之後,可以設置相關密碼,Elasticsearch 其實本來就有提供預設的使用者及角色,相關的設定都會存放在特定的 Index 中,主要是讓相關的服務像是 Beats、Kibana 等可以運作,所以接下來就會從預設值開始了解。

Built-in Users

Elastic Stack 在安全性方面,提供了一些內建的使用者,會存放在 .security Index 裡面,想要修改預設的密碼就可以透過這個指令 bin/elasticsearch-setup-passwords interactive 來設定,內建的使用者,看文件看說明也可以在各服務找到對應的 yml (kibana.yml)去修改。

1
2
elasticsearch.username: "kibana_system"
elasticsearch.password: "kibanapassword"

內建的使用者列表與細節如下,剛開始可先用 elastic 測試連線與功能,之後再創一個常用的使用者。

  • elastic(超級使用者): 擁有存取全部 cluster 的權限,沒設定的話預設本來就會有預設密碼
  • kibana_system(一般使用者): 給 Kibana 服務跟 Elasticsearch 互動用的帳號
  • logstash_system(一般使用者): Logstash 存資料進 Elasticsearch 用
  • beats_system(一般使用者): 給不同類型的 beat 儲存或監控 Elasticsearch
  • apm_system(一般使用者): APM server 使用,儲存或監控 Elasticsearch
  • remote_monitoring_user(一般使用者): 特別給 Metricbeat 使用,可以蒐集儲存相關需監控的資訊

Built-in Roles

剛開始創建使用者,可能發現權限很多有點難懂,也可以先使用內建的角色去進行相關安排,每個使用者都有一個預設的角色,允許去打 Auth 的 API 還有讀取或修改自己的相關資訊,像是修改密碼等等。

  • apm_system: 給跟 APM 系統同等級的權限,可以傳送相關資訊
  • apm_user: APM 使用者用,像是針對 apm-*.ml-anomalies*readview_index_metadata 的權限
  • beats_admin: .management-beat的控制權,進行相關 Beats 的配置
  • beats_system: 能傳送系統層級的監控資訊,不適合給使用者
  • data_frame_transforms_admin: 管理 transforms,包含 kibana 中機器學習模組的權限
  • data_frame_transforms_user: 使用 transforms,包含 kibana 中機器學習模組的權限
  • ingest_admin: 可以管理全部的 Index、Pipeline,但不包含創建
  • kibana_dashboard_only_user: 只能讀取 Dashborad 用
  • kibana_system: 任何足夠管理 Kibana 的相關權限 .monitoring-*.reporting-*,不適合給使用者
  • kibana_user: 可以存取所有 Kibana 功能
  • logstash_admin: .logstash* 的控制權,管理相關配置
  • logstash_system: Logstash system 層級的相關權限,不適合給使用者
  • machine_learning_admin: 機器學習相關的控制權
  • machine_learning_user: 存取機器學習相關最小的權限配置
  • monitoring_user: 監控 Index 的最小權限配置
  • remote_monitoring_agent: 寫資料到 .monitoring-*metricbeat-* 中的最小權限配置
  • remote_monitoring_collector: 可以蒐集 Elastic Stack 監控相關資料的最小權限配置
  • reporting_user: 只能存取自己相關報告的權限
  • snapshot_user: 讓使用者可以對任何 Index 做快照
  • superuser: 超級使用者
  • transport_client: 使用者可以看所有的 metadata、但不能讀資料
  • watcher_admin: .watches 的控制權
  • watcher_user: 可以存取 .watches

使用者與角色管理

要進行使用者與角色管理有兩種方式

  • Kibana GUI 中的使用者與角色設定
    • 新增 Role
    • 加入相關權限
    • 新增使用者
    • 加入相關 Role

      如下圖箭頭指的三個位置
      SecurityPrivileges

  • Security API: 透過寫程式打 API 進行操作,可能在只安裝 Elasticsearch 才有需要? 底下就是示範新增一個 test-user並進行相關設定,其實 Kibana GUI 理論上也是打 API 完成設置,所以有可以用就不需要再自己寫一套了?
    • Create and update users
    • Create and update roles
    • Change passwords
    • Delete users/roles
    • Disable/Enable users
    • Get users/roles
1
2
3
4
5
6
7
8
9
10
11
POST /_security/user/test-user
{
"password" : "test-password",
"roles" : [ "safety_inspector"],
"full_name" : "test test",
"email" : "test@test.com",
"metadata" : {
"hometown" : "test"
}
}


喜歡這篇文章,請幫忙拍拍手喔 🤣


share