consul的acl配置
Consul使用 Access Control Lists(ACL-訪問控制列表)來保護對UI、API、CLI、服務通信和代理通信的訪問;ACL的核心是將規則分組為策略,然后將一個或多個策略與令牌相關聯。
Consul使用token的形式進行安全控制訪問,這里的token就是隨機的字符串,有了token就有對應的操作權限啦;就好比之前說到WebAPI接口加訪問控制一樣,通過一個授權token就可以訪問相關的接口資源。
配置ACL的前提是所有節點都需要將ACL啟用,然后還要一個bootstrap token,因為針對子權限(策略)生成token的時候需要用到,就好比MySQL中的root用戶一樣,只有有了root權限才能給其他用戶分配更多的權限。接下就以UI的訪問和Services的控制進行ACL配置演示,其他基本上都一樣,重點就是規劃好策略規則。
首先在各節點啟動時將ACL啟用,在配置文件夾目錄中(這里目錄名是config)增加acl.hcl文件(每個節點都需要加),內容如下:
acl = { enabled = true default_policy = "deny" enable_token_persistence = true }
參數說明:
enaled=true 代表開啟ACL default_policy="deny" 默認為allow,如果需要自定義權限,需要將其設置為deny ebale_token_persistence=true 開啟token持久化,將token持久化到磁盤上
這里需要注意一點,之前說配置目錄下的Json文件會被自動加載,其實還有hcl文件也會被自動加載,這里用hcl的形式演示一下。 配置文件準備好之后,重新啟動節點即可(集群中的所有節點都需要用上),訪問UI試試,就會彈出如下界面:

點擊登錄,需要輸入一個Token,如果是在配置文件中配置,輸入配置的token即可,如果沒有配置,可以在運行時生成一個bootstrap token,在任意一個Server中執行consul acl bootstrap命令獲得該bootstrap token;Consul中token都很重要,需要保存好。
執行: ./consul acl bootstrap,輸出內容為:
AccessorID: 866ae204-de9e-115d-8a3b-3db6e3a60673 SecretID: 0f90f4c2-bea5-fea7-1829-82449a6c5242 Description: Bootstrap Token (Global Management) Local: false Create Time: 2023-11-15 15:32:48.7500702 +0800 CST Policies: 00000000-0000-0000-0000-000000000001 - global-management
輸出說明:
SecretID: 生成了一個Token Policies:0000...001 - global-managerment 使用的全局策略,權限很大,類似于MySQL的root
將生成的bootstrap token輸入在登錄框中,然后就可以正常獲取信息啦;

bootstrap token權限很大,不可能每個小伙伴都擁有,就像MySQL的root權限一樣,只能有個別的人知道。其他用戶的權限需單獨控制;Consul也是如此,針對不同權限策略,生成對應的token,使用這個token就只能訪問或操作對應權限范圍內的資源。

浙公網安備 33010602011771號