全部產品
Search
文件中心

Microservices Engine:配置加密

更新時間:Jul 26, 2025

配置中心一般都以明文格式儲存配置資料。為了提升敏感性資料(如資料來源、Token、使用者名稱和密碼等)的安全性,MSE通過整合KMS的密鑰服務,提供了配置資料加解密能力,從而降低敏感性資料的泄露風險。

前提條件

重要

建立加密配置

按照以下步驟在MSE控制台建立加密配置。

  1. 登入MSE註冊配置中心控制台,並在頂部功能表列選擇地區。

  2. 在左側導覽列,選擇注册配置中心 > 实例列表

  3. 实例列表頁面,單擊目標執行個體名稱。

  4. 在左側導覽列,選擇配置管理 > 配置列表

  5. 配置列表頁面左上方,選擇目標命名空间,然後單擊创建配置

  6. 建立配置面板,輸入Data IDGroup,然後開啟資料加密開關,並選擇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 執行個體不允許更換密鑰,刪除密鑰則無法正常訪問加密配置。

  7. 配置格式地區,選擇一種資料格式,並在右側配置内容文字框中輸入配置內容,然後單擊发布

Nacos SDK For Java使用加密配置

  1. 在專案中的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版本搭配錯誤,會存在穩定性風險,建議使用推薦適配版本。

  2. 根據您使用的架構類型,選擇正確的代碼進行配置。

    直接使用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使用加密配置

  1. 使用go get命令下載Nacos Client Go SDK依賴。

    go get -u github.com/nacos-group/nacos-sdk-go/v2@v2.2.8
  2. 修改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執行個體訪問地址

  3. 發布加密配置。

    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叢集的地址,例:mse-*****.nacos-ans.mse.aliyuncs.com

accessKey、secretKey

RAM使用者的AccessKey ID和AccessKey Secret。

kmsEndpoint

KMS 執行個體訪問地址。如果訪問環境為同VPC網路內訪問,則為執行個體VPC地址,如果為公用網路,則為公用網關-公網接入地址或者公用網關-VPC接入地址。具體地址擷取方式請參見如何獲得KMS執行個體訪問地址

dataId

加密配置的dataId,例:cipher-kms-aes-256-****.properties

group

加密配置的groupName。

keyId

對配置進行加密所使用的KMS密鑰id,可在KMS密鑰管理主控台建立並使用,

例:alia/***key-***

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地址。image

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

    image

    image

  • 對於訪問環境處於阿里雲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日誌異常堆棧關鍵字

問題原因

keyId is not set up yet

初始化參數keyId為空白或未指定。

Forbidden.KeyNotFound : The specified Key is not found.

初始化參數keyId在對應的KMS執行個體中不存在。

kmsEndpoint is empty

初始化參數kmsEndpoint為空白。

test-kst-xxxx.cryptoservice.kms.aliyuncs.com: 未知的名稱或服務

初始化參數kmsEndpoint網路不可達。

kmsPasswordKey is empty

初始化參數kmsPasswordKey為空白。

keystore password was incorrect

初始化參數kmsPasswordKey設定不正確。

SDK.ServerUnreachable : Server unreachable: connection https://kst-xxx.cryptoservice.kms.aliyuncs.com

初始化參數kmsVersion未指定為v3.0

None of the TrustManagers trust this certificate chain

  1. 初始化參數kmsVersion未指定為v3.0

  2. 初始化參數kmsCaFilePath為空白。

kmsClientKeyFilePath is empty

初始化參數kmsClientKeyFilePath為空白。

unable to find valid certification path to requested target

初始化參數kmsCaFilePath找不到對應檔案。

相關文檔