全部产品
Search
文档中心

微服务引擎MSE:配置加密

更新时间:Oct 09, 2024

配置中心一般都以明文格式存储配置数据。为了提升敏感数据(如数据源、Token、用户名和密码等)的安全性,MSE通过集成KMS的密钥服务,提供了配置数据加解密能力,从而降低敏感数据的泄露风险。

前提条件

创建加密配置

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

说明

使用MSE加解密服务必须使用阿里云账号或RAM用户的AccessKey。

  1. 登录MSE注册配置中心管理控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择注册配置中心 > 实例列表

  3. 实例列表页面,单击目标实例名称。

  4. 在左侧导航栏,选择配置管理 > 配置列表

  5. 配置列表页面左上角,选择目标命名空间,然后单击创建配置

  6. 创建配置面板,打开数据加密开关。

    1. 数据加密区域,检查是否已开通KMS 加密。若未开通,请先开通KMS服务。

    2. 数据加密区域,如果您是2022年03月31日之后新开通的KMS服务,则需要选择加密所需的密钥KeyId(可在阿里云KMS创建并使用),并绑定密钥KeyId到此Nacos实例上,之后所有的配置加密都会使用此密钥。

      重要

      请勿删除或禁用绑定到此Nacos的密钥,否则加密配置无法解密。

    3. 刷新创建配置面板,选择KMS 加密方式。

      参数

      描述

      KMS AES-256 加密

      使用KMS的信封加解密方法,256位密钥,加密强度高,加密配置内容最大不超过50KB。配置内容的明文数据不会传输到KMS系统,安全性更高,推荐使用。请根据您的业务需求进行选择。

      KMS AES-128 加密

      128位密钥,加密强度中等,加密配置内容最大不超过50KB。

      KMS加密

      不推荐使用,特殊字符存在兼容性问题(例如对于&符号会被转义为\u0026),加密配置内容最大不超过6KB。

      说明

      对于新版本kms3.0的用户展示的是KMS AES-256加密。出于历史兼容考虑,对于旧版本支持kms1.0的用户展示3种加密方式,但普通KMS加密KMS AES-128 加密不推荐使用。

  7. 配置格式区域,选择一种配置格式,并在右侧配置内容文本框中输入配置内容,然后单击发布

通过KMS 1.0使用加密配置

Nacos SDK For Java

  1. 登录MSE注册配置中心管理控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择注册配置中心 > 实例列表

  3. 实例列表页面,单击目标实例名称。

  4. 在左侧导航栏,选择配置管理 > 配置列表

  5. 选择命名空间,单击目标配置的Data ID,然后在配置详情页面,单击示例代码页签。

  6. 使用加密配置。

    通过RAM角色使用加密配置

    1. 在代码中添加如下依赖。

      <dependency>
          <groupId>com.alibaba.nacos</groupId>
          <artifactId>nacos-client</artifactId>
          <version>1.4.3</version>
      </dependency>
      <dependency>
          <groupId>com.alibaba.nacos</groupId>
          <artifactId>nacos-client-mse-extension</artifactId>
          <version>1.0.4</version>
      </dependency>

      版本说明

      重要

      加解密插件版本与Nacos-client版本搭配错误,会存在稳定性风险,建议使用推荐适配版本。

      Nacos-client大版本

      Nacos-client版本

      推荐插件版本

      1.x

      1.4.3版本及以上

      1.0.2版本及以上

      2.x

      2.1.1版本及以上

      1.0.4版本及以上

    2. 根据您使用的框架类型,请选择正确的代码进行配置。

      • 如果您是直接使用Nacos Client框架获取配置,则需要配置如下示例代码。

        请将代码中的serverAddrramRoleNameregionIddataid以及group参数替换成实际业务的参数。

        try {
                Properties properties = new Properties();
                properties.put("serverAddr", "mse-xxxxxx-p.nacos-ans.mse.aliyuncs.com");
                properties.put("ramRoleName", "<ECS/ACK绑定的RAM角色>");
                properties.put("keyId", "alias/acs/mse"); //kmsv1.0版本这里是固定值
                properties.put("kms_region_id", "cn-hangzhou");
                properties.put("kmsVersion", "v1.0");
                ConfigService configService = NacosFactory.createConfigService(properties);
                System.out.println("content:::"+configService.getConfig("cipher-kms-aes-256-dataid", "group", 6000));
            } catch (Exception e) {
                e.printStackTrace();
            }
      • 如果您使用的是Spring Cloud Nacos Config框架获取配置,则需要添加如下的配置。

        kms_region_id=cn-hangzhouspring.cloud.nacos.config.server-addr=mse-xxxxxxx-p.nacos-ans.mse.aliyuncs.com:8848
        spring.cloud.nacos.config.name=cipher-kms-aes-256-dataid
        spring.cloud.nacos.config.group=group
        spring.cloud.nacos.config.ramRoleName=<ECS/ACK绑定的RAM角色>
        spring.cloud.nacos.config.kms_region_id=cn-hangzhou
        spring.cloud.nacos.config.keyId=alias/acs/mse
        spring.cloud.nacos.config.kmsVersion=v1.0
      说明

      如果使用RAM角色配置加密,则必须提前为该RAM角色授予AliyunACMFullAccessAliyunKMSFullAccess权限。更新信息,请参见为RAM角色授权

    通过RAM用户使用加密配置

    1. 在代码中添加如下依赖。

      <dependency>
          <groupId>com.alibaba.nacos</groupId>
          <artifactId>nacos-client</artifactId>
          <version>1.4.3</version>
      </dependency>
      <dependency>
          <groupId>com.alibaba.nacos</groupId>
          <artifactId>nacos-client-mse-extension</artifactId>
          <version>1.0.4</version>
      </dependency>

      版本说明

      重要

      加解密插件版本与Nacos-client版本搭配错误,会存在稳定性风险,建议使用推荐适配版本。

      Nacos-client大版本

      Nacos-client版本

      推荐插件版本

      1.x

      1.4.3版本及以上

      1.0.2版本及以上

      2.x

      2.1.1版本及以上

      1.0.3版本

    2. 根据您使用的框架类型,请选择正确的代码进行配置。

      • 如果您是直接使用Nacos Client框架获取配置,则需要配置如下示例代码。

        请将代码中的serverAddraccessKeysecretKeyregionIddataid以及group参数替换成实际业务的参数。

        说明

        微服务引擎的AccessKey ID和AccessKey Secret的环境变量名为MSE_AK、MSE_SK。

        try {
                Properties properties = new Properties();
                properties.put("serverAddr", "mse-xxxxxx-p.nacos-ans.mse.aliyuncs.com");
                properties.put("accessKey", "MSE_AK");
                properties.put("secretKey", "MSE_SK");
                properties.put("keyId", "alias/acs/mse");
                properties.put("kms_region_id", "cn-hangzhou");
                properties.put("kmsVersion", "v1.0");
                ConfigService configService = NacosFactory.createConfigService(properties);
                System.out.println("content:::"+configService.getConfig("cipher-kms-aes-256-dataid", "group", 6000));
            } catch (Exception e) {
                e.printStackTrace();
            }
      • 如果您使用的是Spring Cloud Nacos Config框架获取配置,则需要添加如下的配置,并且通过JVM系统参数-D或者环境变量配置MSE集群所在的地域,例如杭州地域为-Dkms_region_id=cn-hangzhou

        spring.cloud.nacos.config.server-addr=mse-xxxxxxx-p.nacos-ans.mse.aliyuncs.com:8848
        spring.cloud.nacos.config.name=cipher-kms-aes-256-dataid
        spring.cloud.nacos.config.group=group
        spring.cloud.nacos.config.access-key=MSE_AK
        spring.cloud.nacos.config.secret-key=MSE_SK
        spring.cloud.nacos.config.kms_region_id=cn-hangzhou
        spring.cloud.nacos.config.keyId=alias/acs/mse
        spring.cloud.nacos.config.kmsVersion=v1.0
      说明

      使用阿里云账号的AccessKey ID和AccessKey Secret可直接获取配置数据,但建议您填写RAM用户的AccessKey ID和AccessKey Secret。如果使用RAM用户配置加密,则必须提前为其授予AliyunACMFullAccessAliyunKMSFullAccess权限。如需进一步了解,请参见RAM用户

Nacos SDK For Go

通过RAM用户使用加密配置

按照以下步骤通过RAM用户获取使用加密配置的示例代码并初始化参数。

  1. 登录MSE注册配置中心管理控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择注册配置中心 > 实例列表

  3. 实例列表页面,单击目标实例名称。

  4. 在左侧导航栏,选择配置管理 > 配置列表

  5. 选择命名空间,单击目标配置的Data ID,然后在配置详情页面,单击示例代码页签。选择GO版本的示例代码,放在项目工程中。

  6. 使用go get命令下载Nacos Client Go SDK依赖。

    go get -u github.com/nacos-group/nacos-sdk-go/v2@v2.2.5

    版本说明

    加解密插件版本与Nacos-client版本搭配错误,会存在稳定性风险,建议使用推荐适配版本。

    插件功能支持

    Nacos-client版本

    KMS 1.0

    v2.0.0版本及以上(推荐最新版本)

  7. 修改Nacos Client的初始化配置。

    请将代码中的{server - addr}{AK}{SK}参数替换为实际业务的参数,并确保开启KMS配置加密功能参数OpenKMS: trueKMSVersion: KMSv1

    sc := []constant.ServerConfig{
      {
        IpAddr: "{server - addr}", // 替换为您MSE实例的地址。
        Port:   8848,
      },
    }
    var accessKey = "{AK}" // 替换为您账号的AK(用于MSE Nacos和KMS鉴权)。
    var secretKey = "{SK}" // 替换为您账号的SK(用于MSE Nacos和KMS鉴权)。
    
    cc := constant.ClientConfig{
      NamespaceId:         "public", // 命名空间ID。
      OpenKMS:              true, // 开启使用KMS为配置加密。
      KMSVersion:           KMSv1, // 使用KMS服务1.0版本。
      AccessKey:      accessKey, 
      SecretKey:      secretKey,
      TimeoutMs:           5000,
      NotLoadCacheAtStart: true,
      LogDir:              "/tmp/nacos/log",
      CacheDir:            "/tmp/nacos/cache",
      RotateTime:          "1h",
      MaxAge:              3,
      LogLevel:            "debug",
      RegionId: 						"cn-hangzhou",
    }
    
  8. 发布加密配置。

    keyId:对配置进行加密所使用的KMS密钥ID,在KMS 1.0模式可忽略此参数。

    configParam := vo.ConfigParam{
          DataId:   "cipher-kms-aes-256-crypt",
          Group:    "default",
          Content:  "cipher-aes-256",
    }
    
    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)
    }

通过KMS 3.0使用加密配置

前提条件

Nacos SDK For Java

  1. 登录MSE注册配置中心管理控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择注册配置中心 > 实例列表

  3. 实例列表页面,单击目标实例名称。

  4. 在左侧导航栏,选择配置管理 > 配置列表

  5. 选择命名空间,单击目标配置的Data ID,然后在配置详情页面,单击示例代码页签。

  6. 使用加密配置。

    通过RAM角色使用加密配置

    1. 在代码中添加如下依赖。

      <dependency>
          <groupId>com.alibaba.nacos</groupId>
          <artifactId>nacos-client</artifactId>
          <version>1.4.3</version>
      </dependency>
      <dependency>
          <groupId>com.alibaba.nacos</groupId>
          <artifactId>nacos-client-mse-extension</artifactId>
          <version>1.0.4</version>
      </dependency>
      说明

      只支持1.0.4及以上版本的加密插件使用KMS 3.0创建加密配置。

      版本说明

      加解密插件版本与Nacos-client版本搭配错误,会存在稳定性风险,建议使用推荐适配版本。

      Nacos-client大版本

      Nacos-client版本

      推荐插件版本

      1.x

      1.4.3版本及以上

      1.0.4版本及以上

      2.x

      2.1.1版本及以上

      1.0.4版本及以上

    2. 根据您使用的框架类型,选择正确的代码进行配置。

      • 如果您是直接使用Nacos Client框架获取配置,则需要配置如下示例代码。

        请将代码中的serverAddraccessKeysecretKeyregionIdkms_region_idkmsEndpointkeyId、kmsVersionkmsClientKeyFilePathkmsPasswordKeykmsCaFilePath等参数替换为实际业务的参数。

        try {
                Properties properties = new Properties();
                properties.put("serverAddr", "mse-xxxxxx-p.nacos-ans.mse.aliyuncs.com");
                properties.put("ramRoleName", "<ECS/ACK绑定的RAM角色>");
                properties.put("regionId", "cn-hangzhou");
        
                properties.put("kms_region_id", "cn-hangzhou");
              	properties.put("kmsEndpoint", "kst-hzz6xxxr.cryptoservice.kms.aliyuncs.com");
                properties.put("keyId", "yourKeyIdOrKeyAlias");
              	properties.put("kmsVersion", "v3.0");
                properties.put("kmsClientKeyContent", "clientKey_content");
                // kmsClientKeyContent与kmsClientKeyFilePath设定任意一个即可,kmsClientKeyContent优先级更高。
              	// properties.put("kmsClientKeyFilePath", "clientKey_hangzhou.json");
              	properties.put("kmsPasswordKey", "10xxxd1d");
              	properties.put("kmsCaFileContent", "ca_content");
                // kmsCaFileContent与kmsCaFilePath设定任意一个即可,kmsCaFileContent优先级更高。
              	// properties.put("kmsCaFilePath", "ca.pem");
                ConfigService configService = NacosFactory.createConfigService(properties);
                System.out.println("content:::"+configService.getConfig("cipher-kms-aes-256-dataid", "group", 6000));
            	} catch (Exception e) {
                    e.printStackTrace();
              }

        参数说明

        请确保以下参数设置正确。

        参数

        说明

        serverAddr

        MSE集群的地址。

        ramRoleName

        ECS/ACK绑定的RAM角色。

        regionId

        非必填参数。MSE集群所在的Region。

        kms_region_id

        非必填参数。KMS实例所在的Region,如果为空值,会使用regionId

        kmsEndpoint

        KMS实例VPC地址(地址中不要携带HTTPS)。

        keyId

        对配置进行加密所使用的KMS密钥ID,可在KMS密钥管理控制台创建并使用,如无需在程序中修改加密配置,则无需配置。

        kmsVersion

        KMS版本,采用固定值v3.0。

        kmsClientKeyFilePath

        KMS Client Key Content的文件路径,可在KMS实例创建应用接入点处获取。

        kmsClientKeyContent

        KMS Client Key Content的内容,可在KMS实例创建应用接入点处获取。

        说明

        kmsClientKeyContentkmsClientKeyFilePath 设定任意一个即可,kmsClientKeyContent 优先级更高。

        kmsPasswordKey

        KMS Password值,可在KMS实例创建应用接入点处获取。

        kmsCaFilePath

        KMS 使用的CA证书文件路径,可在KMS实例创建应用接入点处获取。

        kmsCaFileContent

        KMS 使用的CA证书内容,可在KMS实例创建应用接入点处获取。

        说明

        kmsCaFileContentkmsCaFilePath 设定任意一个即可,kmsCaFileContent 优先级更高。

      • 如果您使用的是Spring Cloud Nacos Config框架获取配置,则需要添加如下配置。

        #设置期望从nacos中加载的配置的dataId以及group,refreshEnabled=true指定支持动态刷新
        spring.config.import=nacos:cipher-kms-aes-256-****.properties?group=****&refreshEnabled=true
        
        ##nacos 相关配置
        
        #设置mse nacos的访问地址
        spring.cloud.nacos.config.server-addr=mse-*****.nacos-ans.mse.aliyuncs.com
        
        #设置命名空间,如果访问public公开空间,则不需要设置该参数
        spring.cloud.nacos.config.namespace=5babe1ee-****-****-****-7e7ce892e2ab
        
        #如nacos开启了鉴权,则需要设置客户端身份信息
        spring.cloud.nacos.config.ramRoleName=<ECS/ACK绑定的RAM角色>
        
        #如果以ak,sk访问nacos,因其参数的特殊性,建议以JVM参数或者环境变量方式指定。
        #JVM参数
        -Dspring.cloud.nacos.config.accessKey=LTA*************
        -Dspring.cloud.nacos.config.secretKey=*************
        #环境变量
        spring_cloud_nacos_config_accessKey=LTA*************
        spring_cloud_nacos_config_secretKey=*************
        
        ## kms相关配置
        
        #kms实例的所在region
        spring.cloud.nacos.config.kms_region_id=cn-hangzhou
        
        #kms实例vpc地址,不要携带https前缀
        spring.cloud.nacos.config.kmsEndpoint=kst-xxx.cryptoservice.kms.aliyuncs.com
        
        #kms的keyId或者keyId别名,以key或者alias开头,如不需要通过程序发布加密配置,则无需配置,解密过程不依赖此参数。
        spring.cloud.nacos.config.keyId=alias/***
        
        #kms版本 固定值
        spring.cloud.nacos.config.kmsVersion=v3.0
        
        #kms接入点的客户端密钥文件地址
        spring.cloud.nacos.config.kmsClientKeyFilePath=clientKey_hangzhou.json
        
        #kms客户端密钥密码,请设置clientKey_KAAP.***_Password.t密钥的内容,因其特殊性,建议通过JVM参数或者环境变量指定。
        #JVM参数
        -Dspring.cloud.nacos.config.kmsPasswordKey=10xxxd1d
        #环境变量
        spring.cloud.nacos.config.kmsPasswordKey=10xxxd1d
        spring_cloud_nacos_config_kmsPasswordKey=10xxxd1d
        
        #设置kms接入点的CA文件地址,校验kmsEndpoint合法性,防止身份冒充。
        spring.cloud.nacos.config.kmsCaFilePath=clientKey_hangzhou.json
        说明
        • 如果您的Nacos实例未开启RAM鉴权,可忽略MSE_AKMSE_SK的配置。

        • 如果您使用的是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版本。

    通过RAM用户使用加密配置

    1. 在代码中添加如下依赖。

      <dependency>
          <groupId>com.alibaba.nacos</groupId>
          <artifactId>nacos-client</artifactId>
          <version>1.4.3</version>
      </dependency>
      <dependency>
          <groupId>com.alibaba.nacos</groupId>
          <artifactId>nacos-client-mse-extension</artifactId>
          <version>1.0.4</version>
      </dependency>
      说明

      只支持1.0.3及以上版本的加密插件使用KMS 3.0创建加密配置。

      版本说明

      加解密插件版本与Nacos-client版本搭配错误,会存在稳定性风险,建议使用推荐适配版本。

      Nacos-client大版本

      Nacos-client版本

      推荐插件版本

      1.x

      1.4.3版本及以上

      1.0.4版本及以上

      2.x

      2.1.1版本及以上

      1.0.4版本及以上

    2. 根据您使用的框架类型,选择正确的代码进行配置。

      • 如果您是直接使用Nacos Client框架获取配置,则需要配置如下示例代码。

        请将代码中的serverAddraccessKeysecretKeyregionIdkms_region_idkmsEndpointkeyId、kmsVersionkmsClientKeyFilePathkmsPasswordKeykmsCaFilePath等参数替换为实际业务的参数。

        try {
                Properties properties = new Properties();
                properties.put("serverAddr", "mse-xxxxxx-p.nacos-ans.mse.aliyuncs.com");
                // AK和SK用于Nacos鉴权,如果您的Nacos实例未开启RAM鉴权,可忽略AK和SK配置。
                properties.put("accessKey", "MSE_AK"); 
                properties.put("secretKey", "MSE_SK");
                properties.put("regionId", "cn-hangzhou");
        
                properties.put("kms_region_id", "cn-hangzhou");
              	properties.put("kmsEndpoint", "kst-hzz6xxxr.cryptoservice.kms.aliyuncs.com");
                properties.put("keyId", "alias/acs/mse");
              	properties.put("kmsVersion", "v3.0");
                properties.put("kmsClientKeyContent", "clientKey_content");
                // kmsClientKeyContent与kmsClientKeyFilePath设定任意一个即可,kmsClientKeyContent优先级更高。
              	// properties.put("kmsClientKeyFilePath", "clientKey_hangzhou.json");
              	properties.put("kmsPasswordKey", "10xxxd1d");
              	properties.put("kmsCaFileContent", "ca_content");
                // kmsCaFileContent与kmsCaFilePath设定任意一个即可,kmsCaFileContent优先级更高。
              	// properties.put("kmsCaFilePath", "ca.pem");
                ConfigService configService = NacosFactory.createConfigService(properties);
                System.out.println("content:::"+configService.getConfig("cipher-kms-aes-256-dataid", "group", 6000));
            	} catch (Exception e) {
                    e.printStackTrace();
              }

        参数说明

        请确保以下参数设置正确。

        参数

        说明

        serverAddr

        MSE集群的地址。

        accessKey

        您账号的AccessKey ID。

        说明

        如果您的Nacos实例未开启RAM鉴权,可忽略此配置。

        secretKey

        您账号的AccessKey Secret。

        说明

        如果您的Nacos实例未开启RAM鉴权,可忽略此配置。

        regionId

        非必填参数。MSE集群所在的Region。

        kms_region_id

        非必填参数。KMS实例所在的Region,如果为空值,会使用regionId

        kmsEndpoint

        KMS实例的地址。

        keyId

        对配置进行加密所使用的KMS密钥id,可在KMS密钥管理控制台创建并使用。

        kmsVersion

        KMS版本,采用固定值v3.0。

        kmsClientKeyFilePath

        KMS Client Key Content的文件路径。可在KMS实例创建实例接入点处获取。

        kmsClientKeyContent

        KMS Client Key Content的内容。可在KMS实例创建实例接入点处获取。

        说明

        kmsClientKeyContentkmsClientKeyFilePath 设定任意一个即可,kmsClientKeyContent 优先级更高。

        kmsPasswordKey

        KMS Password值。可在KMS实例创建实例接入点处获取。

        kmsCaFilePath

        KMS 使用的CA证书文件路径。可在KMS实例创建实例接入点处获取。

        kmsCaFileContent

        KMS 使用的CA证书内容。可在KMS实例创建实例接入点处获取。

        说明

        kmsCaFileContentkmsCaFilePath 设定任意一个即可,kmsCaFileContent 优先级更高。

      • 如果您使用的是Spring Cloud Nacos Config框架获取配置,则需要添加如下配置。

        spring.cloud.nacos.config.server-addr=mse-xxxxxxx-p.nacos-ans.mse.aliyuncs.com:8848
        spring.cloud.nacos.config.name=cipher-kms-aes-256-dataid
        spring.cloud.nacos.config.group=group
        spring.cloud.nacos.config.access-key=MSE_AK
        spring.cloud.nacos.config.secret-key=MSE_SK
        spring.cloud.nacos.config.kms_region_id=cn-hangzhou
        spring.cloud.nacos.config.kmsEndpoint=kst-hzz6xxxr.cryptoservice.kms.aliyuncs.com
        spring.cloud.nacos.config.keyId=yourKeyIdOrKeyAlias
        spring.cloud.nacos.config.kmsVersion=v3.0
        spring.cloud.nacos.config.kmsClientKeyFilePath=clientKey_hangzhou.json
        spring.cloud.nacos.config.kmsCaFilePath=clientKey_hangzhou.json
        spring.cloud.nacos.config.kmsPasswordKey=10xxxd1d
        说明

        如果您的Nacos实例未开启RAM鉴权,可忽略MSE_AKMSE_SK的配置。

Nacos SDK For Go

  1. 登录MSE注册配置中心管理控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择注册配置中心 > 实例列表

  3. 实例列表页面,单击目标实例名称。

  4. 在左侧导航栏,选择配置管理 > 配置列表

  5. 选择命名空间,单击目标配置的Data ID,然后在配置详情页面,单击示例代码页签。选择GO版本的示例代码,放在项目工程中。

  6. 使用go get命令下载Nacos Client Go SDK依赖。

    go get -u github.com/nacos-group/nacos-sdk-go/v2@v2.2.5

    版本说明

    加解密插件版本与Nacos-client版本搭配错误,会存在稳定性风险,建议使用推荐适配版本。

    插件功能支持

    Nacos-client版本

    KMS 3.0

    v2.2.5版本及以上

  7. 修改Nacos Client的初始化配置。

    请将代码中的{server - addr}{AK}{SK}、{client_key_content}{password}{endpoint}{ca.pem_content}参数替换为实际业务的参数,并确保已开启KMS配置加密功能参数OpenKMS: true KMSVersion: KMSv3

    sc := []constant.ServerConfig{
      {
        IpAddr: "{server - addr}", // 替换为您MSE实例的地址。
        Port:   8848,
      },
    }
    var accessKey = "{AK}" // 如果您的Nacos实例未开启RAM鉴权,可忽略此配置。
    var secretKey = "{SK}" // 如果您的Nacos实例未开启RAM鉴权,可忽略此配置。
    
    cc := constant.ClientConfig{
      NamespaceId:         "public", // 命名空间Id。
      OpenKMS:              true, // 开启使用KMS为配置加密。
      KMSVersion:           KMSv3, // 使用KMS服务3.0版本。
      KMSv3Config:          &KMSv3Config{
        ClientKeyContent: "client_key.json"),
        Password:         "password"),
        Endpoint:         "endpoint"),
        CaContent:        "ca.pem"),
      },
      AccessKey:      accessKey, 
      SecretKey:      secretKey,
      TimeoutMs:           5000,
      NotLoadCacheAtStart: true,
      LogDir:              "/tmp/nacos/log",
      CacheDir:            "/tmp/nacos/cache",
      RotateTime:          "1h",
      MaxAge:              3,
      LogLevel:            "debug",
    }
    

    参数说明

    请确保以下参数设置正确。

    参数

    说明

    serverAddr

    MSE集群的地址。

    AK

    您账号的AccessKey ID。

    说明

    如果您的Nacos实例未开启RAM鉴权,可忽略此配置。

    SK

    您账号的AccessKey Secret。

    说明

    如果您的Nacos实例未开启RAM鉴权,可忽略此配置。

    KMSv3Config.Endpoint

    KMS实例的地址。

    KMSVersion

    KMS版本,采用固定值v3.0。

    KMSv3Config.ClientKeyContent

    KMS Client Key Content的内容。可在KMS实例创建应用接入点处获取。

    KMSv3Config.Password

    KMS Password值。可在KMS实例创建应用接入点处获取。

    KMSv3Config.CaContent

    KMS使用的CA证书内容。可在KMS实例创建应用接入点处获取。

  8. 发布加密配置。

    configParam := vo.ConfigParam{
        DataId:   "cipher-kms-aes-256-crypt",
        Group:    "default",
        Content:  "cipher-aes-256",
        KmsKeyId: "key-xxx",  // 对配置进行加密所使用的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)
    }

问题排查

常见错误排查

您可以参考以下操作进行排查:

  • 确保应用程序运行环境可访问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找不到对应文件。

相关文档