讓 KIBANA 使用者可以匯出 CSV 並下載

Kibana 匯出報表功能預設使用舊版角色 reporting_user 控管,權限較粗略。
本文介紹如何啟用新版權限 feature_reporting.generate,讓報表匯出權限更細緻可控。

建立測試資料

首先,我們先在 Elasticsearch 匯入一筆測試資料,這個步驟只是為了有資料可以測試下載,隨便寫些甚麼都好:

1
2
3
4
5
6
7
8
9
POST /test-export-csv/_doc
{
"@timestamp": "2025-04-16T06:42:00.220Z",
"AgentName": "art",
"Speaker": "john",
"MessageText.Text": "恭喜報名成功🎉,請留意通知!",
"id": 132187942,
"@version": "1"
}

關閉舊版 Reporting 權限機制

kibana.yml 中新增以下設定:

1
xpack.reporting.roles.enabled: false

若使用 Docker Compose,可以在 docker-compose.yml 中加入環境變數:

1
2
3
4
5
6
7
8
9
kibana:
image: docker.elastic.co/kibana/kibana:8.6.1
environment:
- SERVERNAME=kibana
- ELASTICSEARCH_HOSTS=https://es01:9200
- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD=changeme
- ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt
- XPACK_REPORTING_ROLES_ENABLED=false

這樣設定之後,便可以使用 自訂角色與功能權限(如 feature_reporting.generate) 來細節控管使用者是否能夠產生報表。

測試流程與結果

本地 POC 測試流程如下:

新增一個角色,並給予以下權限:

  • Discover:all
  • Dashboard:all
  • Canvas:all
  • Visualize:all

新增使用者並套用該角色,登入後可以看到 Stack Management 出現。

在 Discover 頁面,可以使用「Generate CSV」產生報表:

進入 Stack Management > Reporting,可看到剛剛產生的 CSV 報表,點右側 Icon 可下載: