瓦片数据加密使用介绍

使用说明

为防止瓦片数据被非法爬取,保障数据安全,SuperMap GIS 12i系列产品提供了从服务端加密到客户端解密的全流程瓦片数据加密能力。该功能支持对矢量瓦片、三维模型瓦片等各类瓦片数据进行动态加密。

GIS云套件内置了AES(Advanced Encryption Standard)与SM4两种国际/国密加密算法,您可以根据安全策略任选其一进行配置。配置完成后,发布的地图、三维等服务中的瓦片数据将自动进行加密。要浏览加密后的瓦片数据,需使用支持解密的SuperMap Web客户端(如iClient和iClient3D for WebGL/WebGPU)。

功能入口

瓦片数据加密功能通过在GIS云套件的Consul配置中心进行动态配置实现。需要先访问cloudsuite-consul服务,然后在键/值存储中创建相应的加密配置。

操作步骤

请按照以下步骤为GIS云套件中的服务实例配置瓦片数据动态加密:

  1. 访问Consul配置中心

    Consul服务默认不对外暴露端口,需要先开启端口。根据GIS云套件的部署方式,请选择对应的操作:

    • 方式一:通过SuperMap iManager创建的GIS云套件

      1. 登录iManager,在左侧导航栏进入站点管理
      2. 单击目标GIS云套件站点的名称,进入服务列表区域。
      3. 找到cloudsuite-consul服务,点击操作列的开启端口
      4. 指定一个映射端口(或使用随机端口),点击确定
      5. 待服务地址列显示链接后,点击该链接即可访问Consul Web界面。
    • 方式二:通过部署包安装的GIS云套件

      1. 访问Kubernetes Dashboard界面,地址通常为 http://<GIS云套件主机IP>:31234
      2. 在命名空间下拉列表中,选择GIS云套件所在的命名空间(默认为supermapgiscloudsuite)。
      3. 点击界面右上角的 “+” 创建新资源,选择创建Service
      4. 将以下YAML配置粘贴到编辑框中,并根据实际情况修改namespacenodePort(确保端口不冲突)。
      kind: Service
      apiVersion: v1
      metadata:
        name: cloudsuite-consul-external
        namespace: supermap # 请替换为实际的命名空间
        annotations:
          showPorts: '[8500]'
      spec:
        ports:
          - name: http
            protocol: TCP
            port: 8500
            targetPort: 8500
            nodePort: 30002  # 外部访问端口,请按需修改
        selector:
          app: cloudsuite-consul
        type: NodePort
        sessionAffinity: None
        externalTrafficPolicy: Cluster
      1. 点击上传完成创建。
      2. 通过 http://<GIS云套件主机IP>:<nodePort> 访问Consul Web界面(例如:http://192.168.1.100:30002)。
  2. 创建加密配置

    1. 在Consul Web界面上方导航栏,点击Key/Value
    2. 点击Create,在输入框中填写Key为:Security-EncryptionConfig
    3. Value文本框中,填入瓦片数据动态加密的JSON配置。下方提供了一个包含三维模型瓦片(.s3m)和矢量瓦片(.mvt)的配置示例,您可以根据需要修改。
    {
      "encryption": {
        "serviceKeySettings": [
          {
            "algorithm": "AES",
            "keyID": "keyID1",
            "keyLength": "256"
          },
          {
            "algorithm": "SM4",
            "keyID": "keyID2",
            "keyLength": "128"
          },
          {
            "algorithm": "SM4",
            "keyID": "keyID3",
            "keyLength": "128"
          }
        ]
      },
      "svcworkkeymappings": [
        {
          "keyID": "keyID1",
          "typeName": "com.supermap.services.components.impl.RealspaceImpl",
          "urls": [
            "/iserver/services/.*?/rest/realspace/datas/.*?/data/path/.*?/.*?\\.s3m.*"
          ]
        },
        {
          "keyID": "keyID2",
          "typeName": "com.supermap.services.components.impl.MapImpl",
          "urls": [
            "/iserver/services/.*?/rest/maps/.*?/tileFeature\\.mvt.*",
            "/iserver/services/.*?/restjsr/v1/vectortile/maps/.*?/tiles/.*?/.*?/.*?\\.mvt.*"
          ]
        },
        {
          "keyID": "keyID3",
          "typeName": "com.supermap.services.components.impl.DataImpl",
          "urls": [
            "/iserver/services/.*?/rest/data/datasources/.*?/datasets/.*?/tileFeature\\.mvt.*"
          ]
        }
      ]
    }

    consulconfig

  3. 保存并生效

    点击Save保存配置。为了使配置生效,需要重启GIS云套件的后端API服务(cloudsuite-dashboard-api),然后重新发布相关的服务实例。

参数说明

上述JSON配置文件中的关键参数说明如下:

  • encryption.serviceKeySettings:定义加密算法及密钥规格。

    • algorithm(必填):加密算法名称。取值为 SM4AES。支持两段式写法(如SM4/CTR)或简写。
    • keyID(必填):加密算法的唯一标识符,用于关联服务组件。仅支持字母和数字,如 keyID1
    • keyLength(必填):密钥长度,单位为比特(b)。SM4算法固定为128,AES算法常用256。

     

  • svcworkkeymappings:定义具体哪些服务的哪些接口使用加密,以及使用哪个keyID对应的算法。

    • keyID(必填):引用上面定义的算法标识符。
    • typeName(必填):服务组件类的全限定名。
      • com.supermap.services.components.impl.RealspaceImpl:三维服务组件
      • com.supermap.services.components.impl.MapImpl:地图服务组件
      • com.supermap.services.components.impl.DataImpl:数据服务组件
    • urls(必填):需要加密的请求URL正则表达式数组。一个服务组件可配置多个接口。使用 .*? 匹配可变部分。配置的URL需与实际请求的URL路径匹配。

     

验证配置

配置生效后,可通过以下方式验证:

  1. 客户端验证:使用GIS云套件内置的二维/三维表述(如iClient for OpenLayers, MapboxGL, WebGL, Cesium)直接浏览配置了加密的服务时,瓦片将无法正常显示(因为未携带解密密钥)。

  2. 服务端验证:通过REST API请求被加密服务的资源描述信息(如 http://<server>:<port>/iserver/services/map-China100.json),在返回的JSON响应体中,如果包含 "serviceEncryptInfo" 字段,并且其内容与您的配置相符,则说明加密配置已生效。

    {
      ...
      "serviceEncryptInfo": {
        "encrptSpec": {
          "keyLength": 128,
          "attributes": null,
          "version": "1.1",
          "algorithm": "SM4"
        },
        "updateTime": "Fri Apr 18 10:07:15 CST 2025",
        "encrptKeyID": "keyID1"
      },
      ...
    }
注意事项:
  1. 配置格式:在Consul中填入JSON配置时,请确保为标准的JSON格式,不要包含任何注释(如 #//)。
  2. KeyID唯一性:在 svcworkkeymappings 中,一个服务组件类型(typeName)只能关联一个 keyID,且不同服务组件关联的 keyID 不能相同。
  3. URL匹配urls 中的正则表达式必须能够精确匹配到您希望加密的瓦片请求路径,配置错误可能导致加密不生效或服务异常。
  4. 生效条件:修改Consul配置后,必须重启cloudsuite-dashboard-api服务,并且重新发布相关的服务实例,新配置才会对该服务实例生效。
  5. 客户端适配:服务端加密后,必须使用支持对应解密算法的SuperMap Web客户端(如iClient JavaScript 11i或更新版本)并正确配置解密密钥,才能正常浏览数据。客户端配置方法请参考 SuperMap iServer帮助文档

相关主题

GIS云套件管理

服务实例管理