配置中心一般都以明文格式儲存配置資料。為了提升敏感性資料(如資料來源、Token、使用者名稱和密碼等)的安全性,MSE通過整合KMS的密鑰服務,提供了配置資料加解密能力,從而降低敏感性資料的泄露風險。
前提條件
已購買和啟用KMS執行個體,並確保您的KMS執行個體鏡像版本在dkms-3.0.0以上。具體操作,請參見購買和啟用KMS執行個體以及升級KMS執行個體的鏡像版本。
已完成密鑰的建立,具體操作,請參見密鑰管理快速入門。
為保障資料安全性,MSE使用阿里雲KMS來加解密。KMS包括共用版和專屬版兩個版本,KMS共用版已全面停止服務,詳細資料請參照【公告】KMS共用版停止全面支援(EOFS)和停止服務(EOS),如果您是KMS共用版客戶,建議您升級到專屬版。如果您是2022年03月31日之後新開通的KMS,則需要購買專屬KMS。詳細資料,請參見【升級公告】KMS升級為專屬KMS。關於KMS的收費標準,請參見KMS計費說明。
本文主要以專屬KMS版本為準,如果您是2022年03月31日之前開通的KMS共用版,請參見常見問題進行配置。
建立加密配置
按照以下步驟在MSE控制台建立加密配置。
登入MSE註冊配置中心控制台,並在頂部功能表列選擇地區。
在左側導覽列,選擇注册配置中心 > 实例列表。
在实例列表頁面,單擊目標執行個體名稱。
在左側導覽列,選擇配置管理 > 配置列表。
在配置列表頁面左上方,選擇目標命名空间,然後單擊创建配置。
在建立配置面板,輸入Data ID和Group,然後開啟資料加密開關,並選擇KMS 密鑰。如果您還未建立KMS 密鑰,請單擊去建立,您可在Key Management Service控制台完成建立(建立完成後,重新整理建立配置面板即可看到新建立的KMS密鑰)。
重要如果您是2022年03月31日之後新開通的KMS專屬版,則需要選擇加密所需的密鑰ID,並綁定密鑰ID到此Nacos執行個體上,之後所有的配置加密都會使用此密鑰。
如果沒有提示綁定專屬執行個體keyId,則表明在2022年03月31日前已開通過KMS服務,當前仍可使用共用版KMS。應用程式內訪問共用版KMS服務的配置方式不同,請注意區分。
對於KMS專屬版的使用者展示的是KMS AES-256加密。出於歷史相容考慮,對於舊版本KMS共用版的使用者展示3種加密方式,但普通KMS加密和KMS AES-128 加密不推薦使用。
KMS AES-256 加密:使用KMS的信封加解密方法,256位密鑰,加密強度高,加密配置內容最大不超過50KB。配置內容的明文資料不會傳輸到KMS系統,安全性更高,推薦使用。請根據您的業務需求進行選擇。
KMS AES-128 加密:128位密鑰,加密強度中等,加密配置內容最大不超過50KB。
KMS加密:不推薦使用,特殊字元存在相容性問題(例如對於
&符號會被轉義為\u0026),加密配置內容最大不超過6KB。
綁定後 MSE Nacos 執行個體不允許更換密鑰,刪除密鑰則無法正常訪問加密配置。
在配置格式地區,選擇一種資料格式,並在右側配置内容文字框中輸入配置內容,然後單擊发布。
Nacos SDK For Java使用加密配置
在專案中的pom.xml添加下列依賴。
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>{nacos-client-version}</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client-mse-extension</artifactId> <version>{nacos-client-mse-extension-version}</version> </dependency>版本說明
Nacos-client大版本
Nacos-client版本
推薦外掛程式版本
1.x
1.4.3版本及以上
1.0.6版本及以上
2.x
2.1.1版本及以上
1.0.6版本及以上
重要加解密外掛程式版本與Nacos-client版本搭配錯誤,會存在穩定性風險,建議使用推薦適配版本。
根據您使用的架構類型,選擇正確的代碼進行配置。
直接使用Nacos Client
如果您是直接使用Nacos Client架構擷取配置,則需要配置如下範例程式碼。
try { Properties properties = new Properties(); // Nacos叢集地址 properties.put("serverAddr", "{serverAddr}"); // ECSRAMRole訪問憑證配置 properties.put("ramRoleName", "{ramRoleName}"); // KMS執行個體訪問地址 properties.put("kmsEndpoint", "{kmsEndpoint}"); ConfigService configService = NacosFactory.createConfigService(properties); System.out.println("content:::"+configService.getConfig("{dataId}", "{group}", 6000)); } catch (Exception e) { e.printStackTrace(); }kmsEndpoint 為 KMS 執行個體訪問地址。如果訪問環境為同VPC網路內訪問,則為執行個體VPC地址,如果為公用網路,則為公用網關-公網接入地址或者公用網關-VPC接入地址。具體地址擷取方式請參見常見問題的如何獲得KMS執行個體訪問地址。
如果您使用AccessKey作為訪問KMS的憑證,則將如下:
properties.put("ramRoleName", "{ramRoleName}");替換為:
properties.put("accessKey", "{accessKey}"); properties.put("secretKey", "{secretKey}");此外,Nacos Java SDK 還支援通過STS Token,RAMRoleArn等多種訪問憑證使用加密配置,具體支援的訪問憑證種類以及用戶端配置方式參見配置加密支援的訪問憑證。
如果您需要在SDK側進行加密配置發布,並且是2022年03月31日之後新開通的KMS服務,則需要額外添加以下代碼:
properties.put("keyId", "{keyId}");請將代碼中的serverAddr、ramRoleName、accessKey、secretKey、kmsEndpoint、dataId、group及keyId參數替換成實際業務的參數。
使用Spring Cloud Nacos Config架構
說明如果您使用的是Spring Cloud Alibaba 2022.x以及2023.x版本請升級到2023.0.1.2版本。
如果您使用的是Spring Cloud Alibaba 2021.x版本請升級到2021.0.6.1版本。
如果您使用的是Spring Cloud Alibaba 2.x版本請升級到2.2.10版本。
請確保Spring Cloud Alibaba、Spring Cloud、Spring Boot 版本對應關係正確。具體版本對應關係請參考Spring Cloud Alibaba官網對應分支下的版本發布說明。
如果您使用的是Spring Cloud Nacos Config架構擷取配置,則需要添加如下的配置。
spring.cloud.nacos.config.server-addr={serverAddr} spring.config.import=nacos:{dataId}?group={group}&refreshEnabled=true #ECSRAMRole訪問憑證配置 spring.cloud.nacos.config.ramRoleName={ramRoleName} spring.cloud.nacos.config.kmsEndpoint={kmsEndpoint}kmsEndpoint 為 KMS 執行個體訪問地址。如果訪問環境為同VPC網路內訪問,則為執行個體VPC地址,如果為公用網路,則為公用網關-公網接入地址或者公用網關-VPC接入地址。具體地址擷取方式請參見常見問題的如何獲得KMS執行個體訪問地址。
如果您使用AccessKey作為訪問KMS的憑證,則將如下:
spring.cloud.nacos.config.ramRoleName={ramRoleName}替換為:
spring.cloud.nacos.config.accesskey={accessKey} spring.cloud.nacos.config.secretkey={secretKey} #如果以ak,sk訪問nacos,因其參數的特殊性,建議以JVM參數或者環境變數方式指定。 #JVM參數 -Dspring.cloud.nacos.config.accessKey={accessKey} -Dspring.cloud.nacos.config.secretKey={secretKey} #環境變數 spring_cloud_nacos_config_accessKey={accessKey} spring_cloud_nacos_config_secretKey={secretKey}此外,Nacos Java SDK 還支援通過STS Token,RAMRoleArn等多種訪問憑證使用加密配置,具體支援的訪問憑證種類以及用戶端配置方式參見配置加密支援的訪問憑證。
如果需要在SDK側進行加密配置發布,並且是2022年03月31日之後新開通的KMS服務,則需要額外添加如下的配置:
spring.cloud.nacos.config.keyId={keyId}請將代碼中的serverAddr、ramRoleName、accessKey、secretKey、kmsEndpoint、dataId、group及keyId參數替換成實際業務的參數。
參數說明
請確保以下參數設定正確。
參數
說明
serverAddr
MSE叢集的地址,例:
mse-*****.nacos-ans.mse.aliyuncs.com。ramRoleName
ECS/ACK綁定的RAM角色。
accessKey、secretKey
您帳號的AccessKey ID和AccessKey Secret
和ramRoleName參數二選一。
kmsEndpoint
KMS 執行個體訪問地址。如果訪問環境為同VPC網路內訪問,則為執行個體VPC地址,如果為公用網路,則為公用網關-公網接入地址或者公用網關-VPC接入地址。具體地址擷取方式請參見常見問題的如何獲得KMS執行個體訪問地址。
dataId
加密配置的dataId,例:
cipher-kms-aes-256-****.properties。group
加密配置的groupName。
keyId
對配置進行加密所使用的KMS密鑰id,可在KMS密鑰管理主控台建立並使用,
例:
alia/***或key-***。
Nacos SDK For Go使用加密配置
使用
go get命令下載Nacos Client Go SDK依賴。go get -u github.com/nacos-group/nacos-sdk-go/v2@v2.2.8修改Nacos Client的初始化配置。
Nacos Go SDK 目前只支援AccessKey 作為訪問KMS的訪問憑證,請將代碼中的serverAddr、accessKey、secretKey、kmsEndpoint參數替換為實際業務的參數,並確保開啟KMS配置加密功能參數
OpenKMS: true。sc := []constant.ServerConfig{ { IpAddr: "{serverAddr}", // 替換為您MSE執行個體的地址。 Port: 8848, }, } var accessKey = "{accessKey}" var secretKey = "{secretKey}" cc := constant.ClientConfig{ NamespaceId: "public", // 命名空間Id。 OpenKMS: true, // 開啟使用KMS為配置加密。 AccessKey: accessKey, SecretKey: secretKey, KMSConfig: &constant.KMSConfig{Endpoint: "{kmsEndpoint}",}, TimeoutMs: 5000, NotLoadCacheAtStart: true, LogDir: "/tmp/nacos/log", CacheDir: "/tmp/nacos/cache", RotateTime: "1h", MaxAge: 3, }kmsEndpoint 為 KMS 執行個體訪問地址。如果訪問環境為同VPC網路內訪問,則為執行個體VPC地址,如果為公用網路,則為公用網關-公網接入地址或者公用網關-VPC接入地址。具體地址擷取方式請參見常見問題的如何獲得KMS執行個體訪問地址。
發布加密配置。
keyId:對配置進行加密所使用的KMS密鑰ID。configParam := vo.ConfigParam{ DataId: "{dataId}", Group: "{group}", Content: "content", KmsKeyId: "{keyId}", // 對配置進行加密所使用的KMS密鑰Id,可在KMS密鑰管理主控台建立並使用。 } published, err := client.PublishConfig(configParam) if published && err == nil { fmt.Printf("successfully publish: group[%s], dataId[%s], data[%s]\n", configParam.Group, configParam.DataId, configParam.Content) } else { fmt.Printf("failed to publish: group[%s], dataId[%s], data[%s]\n with error: %s\n", configParam.Group, configParam.DataId, configParam.Content, err) }
參數說明
請確保以下參數設定正確。
參數 | 說明 |
serverAddr | MSE叢集的地址,例: |
accessKey、secretKey | RAM使用者的AccessKey ID和AccessKey Secret。 |
kmsEndpoint | KMS 執行個體訪問地址。如果訪問環境為同VPC網路內訪問,則為執行個體VPC地址,如果為公用網路,則為公用網關-公網接入地址或者公用網關-VPC接入地址。具體地址擷取方式請參見如何獲得KMS執行個體訪問地址。 |
dataId | 加密配置的dataId,例: |
group | 加密配置的groupName。 |
keyId | 對配置進行加密所使用的KMS密鑰id,可在KMS密鑰管理主控台建立並使用, 例: |
Nacos SDK For Java配置加密支援的訪問憑證
Nacos SDK For Java 支援通過多種訪問憑證來使用配置加密,您可以根據使用情境對認證和授權的要求,選擇對應的方式初始化憑證提供者。
Nacos SDK For Java 支援的配置加密訪問憑證種類包括以下幾種:
具體用戶端訪問憑證方式請參照Nacos Client訪問鑒權中配置中心的相關部分,並為對應的訪問憑證授予對應的許可權,選擇以下系統策略。此操作將授予對所有KMS執行個體的讀寫權限,屬於粗粒度授權。
權限原則名稱 | 說明 |
AliyunKMSFullAccess | 管理Key Management Service的許可權,等同於阿里雲帳號的許可權,被授予該許可權的RAM使用者擁有所有功能的操作許可權。 |
常見問題
2022年3月31日之前開通的KMS共用版,應該如何進行配置。
如果您是2022年3月31日之前開通的KMS共用版服務,只需要在前文配置的基礎上,將kmsEndpoint參數替換為kmsRegionId即可,kmsRegionId為KMS執行個體所在的Region,例如cn-hangzhou。具體請根據使用的架構,按照如下步驟對用戶端配置進行修改。
JAVA SDK 直接通過Nacos Client使用加密配置
將代碼中的如下:
properties.put("kmsEndpoint", "{kmsEndpoint}");替換為
properties.put("kms_region_id", "{kmsRegionId}");JAVA SDK 通過Spring Cloud Nacos Config架構使用加密配置
將設定檔中的如下:
spring.cloud.nacos.config.kmsEndpoint={kmsEndpoint}替換為
spring.cloud.nacos.config.kms_region_id={kmsRegionId}GO SDK 使用加密配置
在ClientConfig中,配置RegionId參數,將如下:
cc := constant.ClientConfig{
NamespaceId: "public",
OpenKMS: true,
AccessKey: accessKey,
SecretKey: secretKey,
KMSConfig: &constant.KMSConfig{Endpoint: "{kmsEndpoint}",},
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "/tmp/nacos/log",
CacheDir: "/tmp/nacos/cache",
RotateTime: "1h",
MaxAge: 3,
}替換為
cc := constant.ClientConfig{
NamespaceId: "public",
OpenKMS: true,
AccessKey: accessKey,
SecretKey: secretKey,
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "/tmp/nacos/log",
CacheDir: "/tmp/nacos/cache",
RotateTime: "1h",
MaxAge: 3,
RegionId: "{kmsRegionId}",
}如何獲得KMS執行個體訪問地址
如果訪問環境和KMS執行個體處於相同VPC下,kmsEndpoint值為KMS執行個體管理介面的執行個體VPC地址。

如果通過公用網路進行訪問,需要在KMS執行個體管理介面下開啟對應UID的公網訪問開關。


對於訪問環境處於阿里雲VPC環境下的,kmsEndpoint為公網網關VPC接入地址。
問題排查
常見錯誤排查
您可以參考以下操作進行排查:
確保應用程式運行環境可訪問MSE和KMS執行個體的VPC地址。
說明無需保證MSE執行個體與KMS執行個體網路可互達。
確認使用的KMS版本為
v1.0還是v3.0。如果您使用的KMS版本為v1.0,需確保您在2022年03月31日之前開通了KMS服務。說明2022年03月31日之後新開通的KMS服務,需要購買專屬KMS,KMS 1.0的加密功能不再對新使用者開放。
確保您使用的Nacos-client版本與加解密外掛程式的版本相匹配,請參見本文中對應的版本說明。
Nacos Java SDK問題排查
Nacos日誌異常堆棧關鍵字 | 問題原因 |
| 初始化參數 |
| 初始化參數 |
| 初始化參數 |
| 初始化參數 |
| 初始化參數 |
| 初始化參數 |
| 初始化參數 |
|
|
| 初始化參數 |
| 初始化參數 |