Etcd安全配置之Basic Auth認證


《中小團隊落地配置中心詳解》文章中我們介紹了如何基於Etcd+Confd構建配置中心,最后提到Etcd的安全問題時說了可以使用賬號密碼認證以達到安全訪問的目的,究竟該如何開啟認證以及怎么設計權限訪問呢?本文將為你詳細解讀

認證說明

  1. Etcd v2以上的版本才支持權限認證,且僅支持Basic Auth
  2. Etcd通過用戶(user)-角色(role)-權限的方式來控制訪問,用戶關聯角色,角色擁有權限,從而用戶也就擁有了相應的權限
  3. Etcd默認沒有啟用認證機制,只要能連接etcd服務就擁有所有的權限,還是非常危險的,另一種安全的訪問方式是開啟ssl,只有使用受信任的證書才能訪問數據
  4. Etcd開啟Basic Auth之后,默認會啟用兩個角色root和guest,root角色擁有所有權限,guest擁有只讀權限,這兩個角色都不要刪除,否則你可能會遇到意想不到的Bug
  5. Etcd的權限分為只讀、只寫、可讀寫,可以對etcd的詳細key進行授權,例如:/conf/project/dev/nginx.conf,也可以授權key前綴(目錄),例如:/conf/project/,授權規則應以最小滿足需求為准則

權限設計

權限設計應先考慮我們對權限的需求,從需求出發設計權限

  • 需求
  1. 為了方便后續管理,規定配置中心所有key都應已/conf/開頭
  2. 需要兩個賬號,一個賬號用在Kerrigan(WebUI)擁有讀取、寫入、修改、刪除key的權限,一個賬號用在confd,只有只讀的權限,能夠讀取配置就可以了
  • 設計
  1. 需求很簡單,我們需要建立兩個賬號,分別對應兩個角色,兩個角色都是對/conf/開頭的Key進行控制,一個讀寫權限,一個只讀權限
  2. 定義只讀賬號名為readx,只讀角色名為readConf,定義讀寫權限賬號名為authz,讀寫權限為rootConf,可操作的key都為/conf/開頭

詳細步驟

1.添加root用戶

# etcdctl user add root
New password: 12345
User root created

2.創建root賬號后,root默認有root角色,對所有KV有讀寫權限

# etcdctl user get root
User: root
Roles:  root

# etcdctl role get root
Role: root
KV Read:
	/*
KV Write:
	/*

3.開啟auth認證

# etcdctl auth enable
Authentication Enabled

開啟權限認證后默認會多一個guest的角色
# etcdctl --username root:12345 role list
guest
root

4.添加非root賬號,一個authz的賬號,一個readx的賬號

# etcdctl --username root:12345 user add authz
New password: 
User authz created

# etcdctl --username root:12345 user add readx
New password: 
User readx created

5.添加角色,一個rootConf的角色,一個readConf的角色

# etcdctl --username root:12345 role add rootConf
Role rootConf created

# etcdctl --username root:12345 role add readConf
Role readConf created

6.為角色授權,readConf角色對/conf有只讀權限,rootConf角色對/conf有讀寫權限

# etcdctl --username root:12345 role grant --read --path /conf/* readConf
Role readConf updated

# etcdctl --username root:12345 role grant --readwrite --path /conf/* rootConf
Role rootConf updated

7.給用戶分配角色,authz賬號分配rootConf角色,readx賬號分配readConf角色

# etcdctl --username root:12345 user grant --roles rootConf authz
User authz updated

# etcdctl --username root:12345 user grant --roles readConf readx
User readx updated

8.查看用戶所擁有的角色

# etcdctl --username root:12345 user get authz
User: authz
Roles:  rootConf

# etcdctl --username root:12345 user get readx
User: readx
Roles:  readConf

這樣readx賬號就對/conf下的所有文件有了只讀權限,authz對/conf下的所有文件有了讀寫權限

常用命令

有一些命令上邊沒有介紹到,會用得到的如下:

1.關閉認證

# etcdctl --username root:12345 auth disable

2.刪除用戶

# etcdctl --username root:12345 user remove userx

3.用戶撤銷角色

# etcdctl --username root:12345 user revoke rolex

4.修改用戶密碼

# etcdctl --username root:12345 user passwd

同時還有刪除角色、撤銷角色權限可參看上邊用戶相關操作

踩坑記錄

在開啟認證后發現系統默認給添加了guest角色,覺得guest角色沒用就給刪除了,於是再連接etcd集群時就報如下錯誤:

報錯:The request requires user authentication (Insufficient credentials)

解決:重新添加guest角色


長按關注公眾號查看更多原創文章

如果你覺得文章對你有幫助,請轉發分享給更多的人。如果你覺得讀的不盡興,推薦閱讀以下文章:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM