Etcd安全配置之Basic Auth認證

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

認證說明

  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用戶ui

# 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認證code

# etcdctl auth enable
Authentication Enabled

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

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

# 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的角色ci

# 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有讀寫權限rem

# 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角色get

# 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.查看用戶所擁有的角色it

# 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角色


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

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

相關文章
相關標籤/搜索