Kibana安全特性之權限控制

1.  前言html


在以前的例子中,咱們都是直接輸入地址訪問的,系統也沒有提示咱們要輸入用戶名密碼。可是,在實際使用過程當中不大可能全部人都是超級管理員能夠作任何操做,必定是有權限控制的,這裏咱們藉助X-Pack插件來實現(PS:X-Pack是收費的,能夠申請試用30天。)node

 

2.  安裝X-Packjson


用下列命令安裝插件:瀏覽器

bin/kibana-plugin install <package name or URL>

例如:安全

bin/kibana-plugin install x-pack

事實上,咱們無需再次安裝X-Pack插件,由於在安裝Kibana的時候默認已經安裝了。服務器

By default, when you install Elasticsearch, X-Pack is installed.cookie

By default, when you install Kibana, X-Pack is installed.session

 

3.  在Elasticsearch中配置Securityapp


X-Pack安全性使你可以輕鬆地保護集羣。經過X-Pack安全性,你能夠對數據進行密碼保護,並實現更高級的安全措施,如加密通訊、基於角色的訪問控制、IP過濾和審計。curl

第1步:檢查你的license中是否包含X-Pack安全特性

若是你想嘗試全部的X-Pack特性,你能夠開始一個30天的試用。在試用期結束時,你能夠購買以繼續使用X-Pack組件的所有功能。

這裏,咱們先試用30天再說

能夠看到,試用之後咱們的license從「Basic」變成「Trial」。並且,從控制檯日誌中咱們能夠看到這個變化:

log   [03:49:03.965] [info][license][xpack] Imported license information from Elasticsearch for the [monitoring] cluster: mode: basic | status: active
log   [03:55:25.049] [info][license][xpack] Imported changed license information from Elasticsearch for the [data] cluster: mode: trial | status: active | expiry date: 2018-09-18T11:55:25+08:00

第2步:檢查你的集羣中的每一個節點配置中xpack.security.enabled是否設置爲true。若是你用的是一個trail license,這個配置項默認是false。

xpack.security.enabled: true

配置項

xpack.security.enabled

設置爲true則在節點上啓用X-Pack安全特性,false表示禁用X-Pack安全特性。(PS:推薦明確設置這個值)

xpack.security.authc.accept_default_password

在elasticsearch.yml中,將其設置爲false,以禁用默認密碼。默認密碼是「changeme」。

xpack.security.authc.anonymous.username

配置匿名用戶

xpack.security.authc.anonymous.roles

匿名用戶關聯的角色

例如:

xpack.security.authc:
  anonymous:
    username: anonymous_user 
    roles: role1, role2 
    authz_exception: true 

xpack.security.dls_fls.enabled

設置爲false表示阻止文檔和字段級別的訪問控制。默認是true。

xpack.security.authc.token.enabled

設置爲false表示禁用token服務。默認true。

xpack.security.authc.realms

配置realms,例如:

xpack.security.authc.realms:

    realm1:
        type: native
        order: 0
        ...

    realm2:
        type: ldap
        order: 1
        ...

    realm3:
        type: active_directory
        order: 2
        ...
    ...
  • type:可選值有native, ldap, active_directory, pki,  file
  • order:realm在realm鏈中的優先級,數值越小,優先級越高
  • enabled:默認true,表示啓用這個realm

第3步:爲內部節點通訊配置TSL/SSL

這須要你的集羣中至少有兩個節點。若是你的集羣中只有一個節點,那麼能夠忽略這一步。

更多參見  

https://www.elastic.co/guide/en/elasticsearch/reference/6.3/configuring-tls.html#node-certificates

https://www.elastic.co/guide/en/elasticsearch/reference/6.3/configuring-tls.html

第4步:啓動Elasticsearch

第5步:爲全部內置用戶設置密碼

X-Pack安全性提供了內置的用戶來幫助你啓動和運行。elasticsearch-setup-password命令是首次設置內置用戶密碼的最簡單方法。

內置用戶有4個,以下:

  • elastic  超級用戶
  • Kibana  用於鏈接而且和Elasticsearch通訊的
  • logstash_system     用於在Elasticsearch中存儲監控信息
  • beats_system    用於在Elasticsearch中存儲監控信息

例如,你能夠以交互模式運行命令,依次爲這些用戶設置新密碼:

bin/elasticsearch-setup-passwords interactive

(畫外音:elasticsearch-setup-passwords命令只能運行一次,不能再運行第二次。此後若是你想修改密碼的話,能夠在Kibana UI界面中通Management --> Users 或者經過API的方式來修改密碼)

第6步:選擇你想要用來認證用戶的realms類型

例如:https://www.elastic.co/guide/en/elasticsearch/reference/6.3/configuring-native-realm.html

第7步:設置用於訪問Elasticsearch的角色和用戶。例如:

curl -XPOST -u elastic 'localhost:9200/_xpack/security/role/events_admin' -H "Content-Type: application/json" -d '{
  "indices" : [
    {
      "names" : [ "events*" ],
      "privileges" : [ "all" ]
    },
    {
      "names" : [ ".kibana*" ],
      "privileges" : [ "manage", "read", "index" ]
    }
  ]
}'

curl -XPOST -u elastic 'localhost:9200/_xpack/security/user/johndoe' -H "Content-Type: application/json" -d '{
  "password" : "userpassword",
  "full_name" : "John Doe",
  "email" : "john.doe@anony.mous",
  "roles" : [ "events_admin" ]
}'

第8步:啓用審計

xpack.security.audit.enabled: true

3.1.  用戶管理API

3.1.1.  查看用戶

# 查看全部用戶
curl -X GET -u elastic "localhost:9200/_xpack/security/user"
# 查看指定用戶
curl -X GET -u elastic "localhost:9200/_xpack/security/user/jacknich"

例如:

3.1.2.  建立用戶

例如:

curl -X POST -u elastic "localhost:9200/_xpack/security/user/jacknich" -H 'Content-Type: application/json' -d'
{
  "password" : "j@rV1s",
  "roles" : [ "admin", "other_role1" ],
  "full_name" : "Jack Nicholson",
  "email" : "jacknich@example.com",
  "metadata" : {
    "intelligence" : 7
  }
}
'

在這些參數中,password 和 roles 是必須的。

(畫外音:加上「-u elastic」是由於只有elastic用戶有管理用戶權限,另外,請求參數後面能夠帶上?pretty,這樣返回的格式會好看一點兒)

3.1.3.  修改密碼

curl -X POST "localhost:9200/_xpack/security/user/jacknich/_password" -H 'Content-Type: application/json' -d'
{
  "password" : "s3cr3t"
}
'

3.1.4.  禁用/啓用/刪除用戶

curl -X PUT "localhost:9200/_xpack/security/user/jacknich/_disable"
curl -X PUT "localhost:9200/_xpack/security/user/jacknich/_enable"
curl -X DELETE "localhost:9200/_xpack/security/user/jacknich"

3.2.  角色管理API

curl -X GET "localhost:9200/_xpack/security/role"
curl -X GET "localhost:9200/_xpack/security/role/my_admin_role"
curl -X DELETE "localhost:9200/_xpack/security/role/my_admin_role"
curl -X POST "localhost:9200/_xpack/security/role/my_admin_role" -H 'Content-Type: application/json' -d'
{
  "cluster": ["all"],
  "indices": [
    {
      "names": [ "index1", "index2" ],
      "privileges": ["all"],
      "field_security" : { // 可選
        "grant" : [ "title", "body" ]
      },
      "query": "{\"match\": {\"title\": \"foo\"}}" // 可選
    }
  ],
  "run_as": [ "other_user" ], // 可選
  "metadata" : { // 可選
    "version" : 1
  }
}
'

3.3.  基於角色的訪問控制(RBAC)

X-Pack安全性提供了一種基於角色的訪問控制(RBAC)機制,它使你可以經過向角色分配特權和向用戶或組分配角色來受權用戶。

 

4.  在Kibana中配置Security


當在你的集羣上啓用X-Pack時,Kibana用戶必須登陸成功後才能夠訪問。你能夠爲Kibana用戶配置X-Pack安全角色,以控制用戶能夠訪問哪些數據。

經過Kibana向Elasticsearch發出的大多數請求都經過登陸用戶的憑證進行認證的。然而,Kibana服務器須要向Elasticsearch集羣發出一些內部請求。所以,你必須爲Kibana服務器配置用於這些請求的憑證。

啓用了X-Pack安全性以後,若是你加載一個Kibana指示板,該指示板訪問你沒有權限查看的索引中的數據,那麼你將獲得一個索引不存在的錯誤。X-Pack安全性目前尚未提供一種方法來控制哪些用戶能夠加載哪些儀表板。

爲了在Kibana中應用X-Pack安全特性:

第1步:在Elasticsearch中配置security

第2步:配置Kibana使用內置帳戶,例如:

第3步:在kibana.yml配置文件中指定xpack.security.encryptionKey,例如:

第4步:可選的:更改默認的session過時時間,例如:

xpack.security.sessionTimeout: 600000

第5步:可選的:配置Kibana加密通訊

第6步:重啓Kibana

第7步:如今一個用戶身份認證機制,並授予用戶所需的權限

你能夠在Kibana中管理權限(Management / Security / Roles 頁面)

若是你用native realm with Basic Authentication,你能夠在Management / Security / Users 頁面指定角色或者用APIs。

第8步:受權用戶用Kibana工做的時候能夠訪問哪些索引

(畫外音:你能夠根據須要爲Kibana用戶定義許多不一樣的角色)

第9步:檢查用戶是否能夠正常登陸 http://localhost:5601

4.1.  配置項

xpack.security.enabled

設置爲true(默認)以啓用X-Pack安全特性

xpack.security.cookieName

cookie的名字。默認是「sid」。

xpack.security.encryptionKey

用於加密cookie中的憑證的32個或更多字符的任意字符串。關鍵是這個密鑰不向Kibana的用戶公開。默認狀況下,在內存中會自動生成一個值。若是使用這種默認行爲,當Kibana從新啓動時,全部會話都將失效。

xpack.security.sessionTimeout

設置會話持續時間(以毫秒爲單位)。默認狀況下,會話保持活動狀態,直到瀏覽器關閉。

4.2.  Kibana用戶身份認證

Kibana支持兩種認證機制:

  • Basic Authentication
  • SAML Single Sign-On

4.2.1.  Basic Authentication

Basic Authentication在登陸Kibana時須要一個用戶名和密碼。默認它是啓用的,而且是基於Elasticsearch提供的 native realm

4.2.2.  SAML Single Sign-On

SAML身份驗證容許用戶使用外部身份提供者(如Okta或Auth0)登陸Kibana。在Kibana中設置SAML以前,請確保在Elasticsearch中啓用和配置SAML。

更多參見  https://www.elastic.co/guide/en/kibana/current/kibana-authentication.html

4.3.  User authentication(用戶認證)

爲了訪問受保護的資源,一個用戶必須經過密碼、憑證、或者其它方式(一般是token)來證實他們的身份標識。

認證過程由一個或多個被稱爲「realms」的認證服務來處理。

你能夠用本機支持管理和認證用戶,或者集成外部的用戶管理系統(好比:LDAP 和 Active Directory)。

X-Pack安全特性提供了內置的realms,好比:native,ldap,active_directory,pki,file 和 saml。若是沒有一個內置realms知足你的需求,你還能夠構建本身的realm。

當啓用X-Pack安全特性時,根據你配置的realms,你必須將用戶憑證附加到發送到Elasticsearch的請求中。例如,當使用支持用戶名和密碼的realms時,你能夠簡單的將basic auth頭信息添加到請求中。

4.4.  在Kibana管理後臺界面中取管理用戶

 

5.  演示


5.1.  kibana.yml

server.port: 5601

server.host: "192.168.101.5"

elasticsearch.url: "http://localhost:9200"

elasticsearch.username: "kibana"
elasticsearch.password: "123456"

xpack.security.enabled: true
xpack.security.encryptionKey: "4297f44b13955235245b2497399d7a93"

5.2.  elasticsearch.yml

xpack.security.enabled: true

5.3.  登陸

6.  其它相關連接


Elasticsearch

Logstash

Filebeat

Kibana

Filebeat模塊與配置

相關文章
相關標籤/搜索