iT邦幫忙

2024 iThome 鐵人賽

DAY 23
1
DevOps

Grafana Zero to Hero系列 第 23

Grafana Zero to Hero - Management:使用者管理

  • 分享至 

  • xImage
  •  

接下來開始進入 Grafana 的管理章節,將依序介紹基礎的設定檔管理、認證授權、Grafana 服務管理與 Grafana Infrastructure as Code(IaC)。

基礎管理

Grafana 的系統管理主要透過 ini 設定檔進行設定,完整的參數清單可以參考官方文件。可以在 admin 頁面查看目前的所有設定,所有設定調整後都需要重啟 Grafana 才會生效。例如,前面介紹過的 Contact Point 的 Mail Integration 需要在設定檔中的 smtp section 設定相關資訊:

[smtp]
enabled = true
host = smtp.gmail.com:587
user = [gamil account]
password = [google app password]
from_address = "alert@grafana.demo.com"
from_name = "Grafana"
skip_verify = true

Config

除了以 ini 設定檔進行設定,也可以在 Grafana 服務運行的環境中透過環境變數直接進行設定。ini 設定檔與環境變數可以共同使用,環境變數的優先度較高,會覆蓋 ini 設定檔。環境變數的 Pattern 是 GF_[SectionName]_[KeyName],並全部改為大寫。如果 Section 或 Key 包含 .-,都需用 _ 替代。例如,開啟告警截圖功能需要設定 unified_alerting.screenshotscapture,對應的環境變數就是 GF_UNIFIED_ALERTING_SCREENSHOTS_CAPTURE。本系列的許多 Lab 就有使用這種方式進行設定,例如:

services:
  grafana:
    image: grafana/grafana:11.2.0
    environment:
      GF_FEATURE_TOGGLES_ENABLE: externalServiceAccounts
      GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS: grafana-oncall-app
      GF_INSTALL_PLUGINS: grafana-oncall-app

認證與授權

平台的價值取決於使用者的數量與參與程度,Grafana 作為資料視覺化平台也是一樣的道理,越多人使用它就能帶來更多價值。但隨著使用者增加,對授權與認證的管理就需要開始認真規劃。

認證

Grafana 預設的認證方式是內建的帳號管理機制,最初會設定一個 admin 帳號,admin 可以建立使用者帳號,或是開啟 allow_sign_up 設定讓使用者自行申請。

Signup

但當使用者開始增多時,原本透過申請的方式建立帳號開始變得難以管理,這時候可能會導入組內已有的認證方式。

LDAP

LDAP(Lightweight Directory Access Protocol)是一種協議,用於存取和管理分佈式目錄服務資訊,主要用於儲存使用者資訊,並以這些資料進行認證,從而實現單一登入(Single Sign-On, SSO)。常見的 LDAP Server 有 OpenLDAPApacheDSFreeIPA 等。另外,LDAP 也可作為通訊協定來進行操作,例如 AD(Active Directory),AD 是 Windows 的身份管理解決方案,提供 LDAP 協議與更多企業環境相關的群組管理功能。

Grafana 支援使用 LDAP 進行認證,還可以透過 LDAP 中的 Group 來直接分派使用者的 Role 與 Organization。若要啟用 LDAP,需分別設定 Grafana 的 ini 設定檔與一份 LDAP toml 設定檔。

[log]
# LADP 相關功能顯示 Debug log,方便用於排除問題
filters = ldap:debug

[auth.ldap]
# 啟用 LADP,預設為 false
enabled = true

# LDAP toml 設定檔的位置,預設為 /etc/grafana/ldap.toml
config_file = /etc/grafana/ldap.toml

# 當 LDAP 認證成功時允許建立新的帳號,如果設定為 false 只有已經在 Grafana 中建立帳號的人才能透過 LDAP 認證並登入
allow_sign_up = true
[[servers]]
# LDAP server host
host = "lldap"
# LDAP server Port
port = 3890
# 是否使用 SSL
use_ssl = false

# 供 Grafana 登入 LDAP Server 查詢使用者資料的帳號
bind_dn = "cn=admin,ou=people,dc=example,dc=com"
# 供 Grafana 登入 LDAP Server 查詢使用者資料的帳號的密碼
bind_password = "password"

# LDAP Server 的 Timeout 秒數
timeout = 10

# 認證時帳號帶入的屬性,%s 即為認證時輸入的帳號
search_filter = "(uid=%s)"

# 要搜尋哪個範圍的帳號
search_base_dns = ["dc=example,dc=com"]

# Grafana User 的屬性與 LDAP 中屬性的 Mapping
[servers.attributes]
member_of = "memberOf"
email = "mail"
name = "displayName"
surname = "sn"
username = "uid"

# LDAP User 的 Group 與 Grafana role 的 mapping
# 如果不設定任何 group_mappings,所有認證通過的使用者都可以登入,Role 則為 Viewer 
[[servers.group_mappings]]
group_dn = "cn=grafana_admin,ou=groups,dc=example,dc=com"
org_role = "Admin"
grafana_admin = true

[[servers.group_mappings]]
group_dn = "cn=grafana_editor,ou=groups,dc=example,dc=com"
org_role = "Editor"

[[servers.group_mappings]]
group_dn = "*"
org_role = "Viewer"

在本篇範例中,我們使用 lldap 這款輕量的 LDAP Server,可以直接用 Container 運行並提供 Web UI 操作。設定完 Grafana ini 與 LDAP toml 後,可以在 lldap 中建立使用者帳號,並將這些帳號加上 Group 供 group_mappings 使用。在 Grafana 的 Administration > Authentication 頁籤中選擇 LDAP 後可以查看與 LDAP Server 的連線狀況,也可以輸入使用者帳號,測試搜尋、屬性帶入、Group 是否都有如預期運作。

lldap list
lldap 的 User 清單

lldap user
lldap 的 User 資訊

ldap test
在 Grafana 中測試 LDAP 是否可以搜尋到使用者

設定正確後,使用者就可以用 LDAP 中設定的帳號密碼進行登入。登入後在 Admin 頁面的 User 中可以看到使用者的來源資訊。

User List
User 清單的 Origin 欄位會顯示使用者的來源

User Detail
User 詳細資訊中也會顯示資料的來源

OAuth2

Grafana 提供了許多第三方服務的 OAuth2 串接,例如 GoogleGitHubGitLab 等。

授權

Grafana 在導入初期,通常不會針對權限有過多限制,為了能夠快速推動,通常會讓每個人都是 Admin,方便自行添加 Dashboard、Data Source、Alerting 等資源。但隨著更多使用者湧入,Dashboard 可能需要卡控讀寫權限、Data Source 不希望被任意修改或查看,這時就需要導入權限管理設定。詳細說明可以參考官方文件的 Roles and permissions,以下將介紹幾個常用的權限管理方式。

Grafana Admin

Grafana Admin 是擁有最高權限的管理者,可以使用 Grafana 的所有功能。在 Lab 中,我們登入的 admin 帳號具有 Grafana Admin 角色,是否啟用此角色可以在 User 頁籤中設定。

Grafana Admin

給予 Grafana Admin 權限前要確認該使用者是否熟悉 Grafana 操作,避免使用者意外破壞 Grafana 中的各類設定。如果想要有限度地給予使用者建立各種資源的權限,可以使用接下來介紹的 Role。

Role

Role 是 Grafana User 的屬性之一,主要分為 Admin、Editor、Viewer 三種。其差別如下:

  • Admin:管理者,可以設定 Data Source
  • Editor:編輯者,可以建立 Dashboard、Alerting 等,並使用 Explore 功能
  • Viewer:瀏覽者,只能瀏覽別人建立的 Dashboard

透過設定 Role 可以有效地限定使用者能使用的功能,避免各類設定被破壞或誤用 Explore 功能,導致服務效能問題等。

Roles
User 清單可以查看所有 User 的 Role

Viewer
Viewer 只能使用有限的功能

如果想讓 Viewer 也可以使用 Explore 功能,則可以透過 viewers_can_edit 設定來啟用。

Team

Team 也是 Grafana User 的屬性之一,可以建立不同的 Team,每個 User 也可以同時屬於多個 Team。最主要的用途是卡控 Dashboard、Folder 權限。如果有搭配使用 Grafana OnCall,其中使用的 Team 就是來自這邊。

如果熟悉 RBAC(Role-based access control),其實可以把 Team 當作是 RBAC 中的 Role,設定 Team 可以操作哪些內容,然後再把 Team 標記在不同 User 身上。

Team
Team 清單

Team User
Team 中的 User

Folder Add Permissions
Folder 可以個別設定 Permissions

Folder Permissions
Permissions 可以依據 Role、User、Team 設定 Admin、Edit、View

Dashboard Permissions
Dashboard 也可以個別設定 Permissions

預設只有 Admin 可以建立 Team 與管理 Team,開啟 editors_can_admin 後,Editor 也可以管理 Team。

Organization

Multi Tenant 是平台型服務中特別強調的一個功能,目的是希望不同組別的使用者在同一平台上時不會看到彼此的資料,且無需為每個使用者建立單獨的 instance。例如,Grafana 推出的 Mimir、Loki、Tempo 都有 Multi Tenant 的功能。Grafana 透過 Organization 實現 Multi Tenant 的功能,不同 Organization 的所有設定都是完全獨立的。

Default Org
預設的 Main Organization

Org config
Organization 的設定頁

New Org
新增 Organization 後,可以在左上看到 Organization 的選單,切換後可以看到 URL 的 org query string 改變

Grafana 只有一個 User Database,但可以在 User 的設定頁指定要加入哪個 Organization。但如果帳號是透過其他登入驗證機制同步的,則可能無法手動指定新的 Organization,必須依照該登入驗證機制的設定進行匯入。

Add to org
User 的設定頁可以指定加入哪個 Organization

User List
在 User 清單頁也可以看到當下 Organization 的 User 清單

Lab

範例程式碼:https://github.com/blueswen/grafana-zero-to-hero/tree/main/07-management/01-users

此 Lab 會建立

  1. Nginx:單純作為被監測的 Container
  2. cAdvisor:收集 Container 資料
  3. Node Exporter:收集運行的機器(Node)的資料
  4. Prometheus:採集 cAdvisor 與 Node Exporter 的 Metrics
  5. Grafana:Lab 操作
  6. lldap:測試用 LDAP Server

Quick Start

  1. 啟動所有服務

    docker-compose up -d
    
  2. 登入 lldap 建立 LDAP 帳號供 Grafana 串接登入使用

    1. lldap: http://localhost:17170,登入帳號密碼為 admin/password
    2. 建立數組帳號
    3. 建立 Group:grafana_admin、grafana_editor,並將前面建立的帳號加入 Group 中
  3. 登入 Grafana 設定與操作各種權限設定

    1. Grafana: http://localhost:3000,登入帳號密碼為 admin/admin
    2. 進入 Administration > Authentication 頁籤中選擇 LDAP,確認 lldap 上新增的帳號可以被查詢到
    3. 開啟無痕視窗用 lldap 新增的帳號登入
    4. 測試 Role、Team、Organization 等功能
  4. 關閉所有服務

    docker-compose down
    

參考資料

  1. lldap - Light LDAP implementation for authentication

上一篇
Grafana Zero to Hero - Grafana OnCall:從 Alerting 邁向 IRM
下一篇
Grafana Zero to Hero - Management:自我監控與高可用
系列文
Grafana Zero to Hero30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
andrewchen930511
iT邦新手 5 級 ‧ 2024-10-09 12:24:31

Blueswen 大大這系列的 Grafana 文章寫得很棒,我的這篇Grafana GCP OAuth 鐵人賽文章,介紹完後會轉導到你這篇

我要留言

立即登入留言