ETCD:基於角色的訪問控制


原文地址:Role-based access control

總覽


身份驗證已添加到etcd 2.1中。 etcd v3 API略微修改了身份驗證功能的API和用戶界面,以更好地適應新的數據模型。本指南旨在幫助用戶在etcd v3中設置基本身份驗證和基於角色的訪問控制。

特殊用戶和角色


有一個特殊用戶root,一個特殊角色root

用戶root

在激活身份驗證之前,必須創建對etcd具有完全訪問權限的root用戶。 root用戶的想法是出於管理目的:管理角色和普通用戶。 root用戶必須具有root角色,並且可以在etcd中進行任何更改。

角色root

可以將角色root授予除root用戶之外的任何用戶。 具有root角色的用戶既具有全局讀寫訪問權限,又具有更新集群的身份驗證配置的權限。 此外,root角色授予常規集群維護的特權,包括修改集群成員資格,對存儲進行碎片整理以及拍攝快照。

用戶的工作方式


etcdctluser子命令處理與用戶帳戶有關的所有事情。
可以通過以下方式找到用戶列表:

$ etcdctl user list

通過以下方式創建新用戶:

$ etcdctl user add myusername

創建新用戶將提示您輸入新密碼。 當給出選項--interactive=false時,可以從標准輸入中提供密碼。 --new-user-password也可以用於提供密碼。

可以通過以下方式為用戶授予和撤消角色:

$ etcdctl user grant-role myusername foo
$ etcdctl user revoke-role myusername bar

可以使用以下命令檢查用戶的設置:

$ etcdctl user get myusername

用戶密碼可以通過以下方式更改:

$ etcdctl user passwd myusername

更改密碼將再次提示您輸入新密碼。 當給出選項--interactive=false時,可以從標准輸入中提供密碼。

通過以下方式刪除帳戶:

$ etcdctl user delete myusername

角色的工作方式:


etcdctlrole子命令處理與授予特定用戶的特定角色的訪問控制有關的所有事情。

列出角色:

$ etcdctl role list

創建一個新角色:

$ etcdctl role add myrolename

角色沒有密碼; 它僅定義了一組新的訪問權限。

授予角色訪問單個密鑰或一系列密鑰的權限。

范圍可以指定為間隔[開始鍵,結束鍵],其中開始鍵應按字母順序在詞匯上小於結束鍵。

可以將訪問權限授予讀取,寫入或同時授予兩者,如以下示例所示:

# Give read access to a key /foo
$ etcdctl role grant-permission myrolename read /foo

# Give read access to keys with a prefix /foo/. The prefix is equal to the range [/foo/, /foo0)
$ etcdctl role grant-permission myrolename --prefix=true read /foo/

# Give write-only access to the key at /foo/bar
$ etcdctl role grant-permission myrolename write /foo/bar

# Give full access to keys in a range of [key1, key5)
$ etcdctl role grant-permission myrolename readwrite key1 key5

# Give full access to keys with a prefix /pub/
$ etcdctl role grant-permission myrolename --prefix=true readwrite /pub/

要查看授予的權限,我們可以隨時查看該角色:

$ etcdctl role get myrolename

撤消權限是按照相同的邏輯方式完成的:

$ etcdctl role revoke-permission myrolename /foo/bar

就像完全刪除一個角色一樣:

$ etcdctl role delete myrolename

開啟身份認證


啟用身份驗證的最少步驟如下。 管理員可以根據喜好在啟用身份驗證之前或之后設置用戶和角色。

確保已創建root用戶:

$ etcdctl user add root
Password of root:

開啟身份認證

$ etcdctl auth enable

此后,etcd在啟用身份驗證的情況下運行。 要出於任何原因禁用它,請使用reciprocal命令:

$ etcdctl --user root:rootpw auth disable

使用etcdctl進行身份驗證


etcdctl支持類似curl的標志進行身份驗證。

$ etcdctl --user user:password get foo

可以從提示符處獲取密碼:

$ etcdctl --user user get foo

密碼也可以從命令行參數--password獲取:

$ etcdctl --user user --password password get foo

否則,所有etcdctl命令均保持不變。 用戶和角色仍然可以創建和修改,但是需要具有root角色的用戶進行身份驗證。

使用TLS通用名稱


從v3.2版本開始,如果使用參數--client-cert-auth=true啟動etcd服務器,則客戶端的TLS證書中的“通用名稱(CN)”字段將用作etcd用戶。在這種情況下,公用名將對用戶進行身份驗證,並且客戶端不需要密碼。請注意,如果同時傳遞了1. --client-cert-auth=true且客戶端提供了CN,並且客戶端提供了2.用戶名和密碼,則將優先考慮基於用戶名和密碼的身份驗證。請注意,此功能不能與gRPC-proxygRPC-gateway一起使用。這是因為gRPC-proxy會從其客戶端終止TLS,因此所有客戶端都共享代理證書。 gRPC-gateway內部使用TLS連接將HTTP請求轉換為gRPC請求,因此它具有相同的限制。因此,客戶端不能正確地將其CN提供給服務器。如果給定證書的CN不為空,則gRPC-proxy將導致錯誤並停止。 gRPC-proxy返回錯誤,表明客戶端證書中的CN為非空。

從v3.3版本開始,如果啟用了帶有選項--peer-cert-allowed-cn--peer-cert-allowed-hostnameetcd服務器啟動,則對等節點連接篩選。如果節點的TLS證書身份與允許的節點匹配,則節點只能加入etcd集群。有關更多詳細信息,請參見etcd安全性頁面


免責聲明!

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



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