前言
Nacos 配置架構
-
通過 Nacos-client 獲取配置。 -
通過控制檯獲取配置。 -
通過服務器之間的通信協議獲取配置。 -
直接訪問持久化層(比如 DB)獲取配置。
|
|
|
|
|
|
|
|
|
|
|
不需要 |
|
|
不需要 |
Nacos 客戶端場景的認證和鑑權
開源版本的 Nacos
nacos.core.auth.enabled=true
String serverAddr = "{serverAddr}";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
properties.put("username","nacos-readonly");
properties.put("password","nacos");
ConfigService configService = NacosFactory.createConfigService(properties);
阿里雲 MSE-AK/SK
第一步:創建 RAM 權限策略如下:
第二步:創建用戶並賦予權限:
最後,只需要在代碼中添加 AK/SK 就可以了:
String serverAddr = "{serverAddr}";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
properties.put(PropertyKeyConst.ACCESS_KEY, "${accessKey}");
properties.put(PropertyKeyConst.SECRET_KEY, "${secret}");
ConfigService configService = NacosFactory.createConfigService(properties);
阿里雲 MSE- 基於 ECS 的 Ram 角色認證
第一步,創建 MSE Nacos 實例,並創建對應的權限策略(上文有說明,此處不贅述)。
第二步,創建 RAM 角色並授權。
第三步,將該角色和 ECS 關聯:
最後一步,在代碼中 指定 RAM 角色 即可:
String serverAddr = "{serverAddr}";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
properties.put(PropertyKeyConst.RAM_ROLE_NAME, "StoreServiceRole");
ConfigService configService = NacosFactory.createConfigService(properties);
經過如上配置,Nacos 客戶端在獲取配置時,雲服務器會扮演指定的 RAM 角色,阿里雲臨時安全令牌(Security Token Service,STS)來訪問 MSE Nacos 實例。
如果攻擊者獲取代碼,也無法在其他機器上運行,因爲攻擊者的機器沒有扮演 RAM 角色的權限。
如果攻擊者獲取扮演之後的認證信息,由於 STS 失效較短(默認是1小時),攻擊者拿到後很快就失效,有效減少了攻擊面。
如果需要撤銷授權,只需要在阿里雲控制檯上就可以操作,不需要重新發布應用。
相比於 AK/SK 方式的認證鑑權,ECS 關聯角色的認證鑑權更可控、更安全,所以推薦使用這種認證鑑權方式。
配置控制檯場景的認證和鑑權
開源版本的 Nacos
開源版本的 Nacos 控制檯,在登錄的時候,會通過控制檯的 login 接口,獲取臨時的 accessToken,然後後續的操作,都是以 accessToken 來做認證鑑權。
比如前文提到的 readonly-user 用戶,登錄後,就只能看到 public 命名空間下的配置信息,無法修改、無法查看其他命名空間下的配置信息。
另外,如果需要創建命名空間、刪除命名空間,則只能管理員登錄纔可以。
開源版本 Nacos 的認證鑑權,可以參考該文檔:https://nacos.io/zh-cn/docs/auth.html。
阿里雲 MSE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
比如,只允許讀取一個命名空間下的配置,不允許修改。那權限策略就可以寫:
{
"Action": [
"mse:Get*",
"mse:List*",
"mse:Query*"
],
"Resource": [
"acs:mse:*:*:instance/${instanceId}/${namespaceId}"
],
"Effect": "Allow"
}
服務器之間的認證
Nacos 服務器之間需要同步一些信息,這時也需要認證對方身份,以確認對方真的是 Nacos-server,而不是僞裝的。
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity=Authorization
nacos.core.auth.server.identity.value=secret
Authorization: secret
的請求,
才能確認對方是服務端,才能同步集羣信息;否則就拒絕同步。
持久化層的安全
-
將 Nacos server 訪問數據庫的用戶從 UserA 切換到 UserB。 -
更新 UserA 的密碼。 -
將 Nacos server 訪問數據庫的用戶從 UserB 切換回UserA。 -
更新 UserB 的密碼。
配置安全最佳實踐
捋了一遍 Nacos 配置安全的關鍵點,那麼怎麼才能保證配置安全呢。只需要做到如下最佳實踐就可以了:
-
定時檢查配置的監聽列表,確認沒有未授權的機器。 -
AK/SK 泄漏時,該如何更新 AK/SK,如何撤銷泄漏的 AK/SK。 -
對於自建 Nacos,服務器被攻破後,如何修改 nacos.core.auth.server.identity.value 的方案。
總結
而對於中大型企業,阿里雲產品 MSE 支持更加精細、更加靈活的權限配置、安全管理,也能利用和其他阿里雲產品一起做到更加安全的配置能力。
招賢納士
我們 Dubbo / Spring Cloud 商業化團隊正在招人。除了 EDAS,我們還有 ARMS (應用實時監控服務)、MSE(微服務引擎)、SAE(Serverless 應用引擎)等獨立產品。我們在忙什麼?用心打磨這些產品,就是我們的工作。團隊的目標是將阿里巴巴在服務治理上的最佳實踐通過產品化的形式輸出給阿里雲上的企業客戶,幫助客戶實現業務永遠在線。
本文分享自微信公衆號 - Kirito的技術分享(cnkirito)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。