客户端部署完成后,需要部署vSGX端。vSGX端用来运行TensorFlow Serving推理服务。

背景信息

vSGX端提供vSGX机密计算环境,TensorFlow Serving推理服务运行在SGX环境中。当推理服务启动时,会向客户端发送远程认证请求,证明当前vSGX环境的可行性和AI推理服务的完整性。验证成功后,推理服务会拿到客户端发送的密钥,并对加密的模型和TLS证书进行解密,至此,运行在vSGX环境中的推理服务成功运行,并等待远程访问请求并获取推理结果。

操作步骤

  1. 创建安全增强型实例并构建所需环境。
    1. 创建安全增强型实例。
      具体操作,请参见创建安全增强型实例
      请注意以下参数:
      • 实例规格:加密内存≥8 GiB,本操作选用的实例规格为ecs.g7t.xlarge
      • 镜像:Alibaba Cloud Linux 2.1903 LTS 64位 UEFI版
      • 公网IP:分配公网IPv4地址
      • 安全组:安全组需开通8500~8501端口
      说明 当客户端与vSGX端部署在同一台ECS实例时,安全组无需开通8500~8501端口。
    2. 构建SGX加密计算环境。
      具体操作,请参见构建SGX加密计算环境
    3. 安装docker-ce。

      安装后,如您的用户为非root用户,则可以执行sudo usermod -aG docker $USER将当前用户添加到docker用户组,并重新登录当前账户,以允许非root账户使用docker

      说明 需安装社区版docker-ce,使用podman-docker可能会出现潜在的兼容性问题。
  2. 登录ECS实例。
    具体操作,请参见连接方式概述
  3. 切换到使用的工作目录下,下载本实践所用的TensorFlow Serving脚本代码。
    git clone https://gitee.com/cloud_cc/confidential-computing.git
    export CC_DIR=$(realpath ./confidential-computing)
  4. 复制客户端的ssl_configure和models目录到vSGX中的tf_serving目录中。
    scp -r user_name@192.168.XX.XX:{models} {tf_serving}
    scp -r user_name@192.168.XX.XX:{ssl_configure} {tf_serving}

    user_name为客户端用户名,192.168.XX.XX为客户端IP,{models}为客户端models目录,{ssl_configure}为客户端ssl_configure目录,{tf_serving}为vSGX端tf_serving,请将以上参数修改为实际使用的参数,本实践示例如下:

    scp -r tf@192.168.XX.XX:${REMOTE_PATH_OF_CONFIDENTIAL_COMPUTING}/Tensorflow_Serving/client/models  ${CC_DIR}/Tensorflow_Serving/docker/tf_serving
    scp -r tf@192.168.XX.XX:${REMOTE_PATH_OF_CONFIDENTIAL_COMPUTING}/Tensorflow_Serving/client/ssl_configure ${CC_DIR}/Tensorflow_Serving/docker/tf_serving
  5. 获取TensorFlow Serving镜像。
    您可以通过以下任意一种方式获取TensorFlow Serving镜像。
    • 下载TensorFlow Serving容器镜像。
      cd ${CC_DIR}/Tensorflow_Serving/docker/tf_serving
      docker pull registry.cn-beijing.aliyuncs.com/tee_sgx/tf_serving:latest
    • 创建TensorFlow Serving镜像。

      您可以通过/Tensorflow_Serving/docker目录下的build_gramine_tf_serving.sh脚本创建镜像。

      cd ${CC_DIR}/Tensorflow_Serving/docker/tf_serving
      image_tag=tf_serving:v1
      ./build_gramine_tf_serving_image.sh ${image_tag}    #image_tag可自定义

      Dockerfile为gramine_tf_serving.dockerfile,主要的内容包括:

      • 容器中安装需要的依赖库
      • 容器中安装TensorFlow Serving
      • 容器中安装Gramine
      • 从主机复制文件到容器中,主要包括:
        • Makefile:Gramine编译TensorFlow Serving
        • tensorflow_model_server.manifest.template:Gramine配置TensorFlow Serving模板
          tensorflow_model_server.manifest.attestation.template中几项配置说明:
          • Gramine支持SGX RA-TLS远程认证,使能远程认证的功能需要在模板文件中进行配置。本实践使用到的模板配置如下:

            其中,SECRET_PROVISION_SERVERS指向的是远程申请验证的服务地址,SECRET_PROVISION_SET_PF_KEY代表当前认证需要远端返回保护文件解密需要的密钥。

            sgx.remote_attestation = 1
            loader.env.LD_PRELOAD = "libsecret_prov_attest.so"
            loader.env.SECRET_PROVISION_CONSTRUCTOR = "1"
            loader.env.SECRET_PROVISION_SET_PF_KEY = "1"
            loader.env.SECRET_PROVISION_CA_CHAIN_PATH ="certs/test-ca-sha256.crt"
            loader.env.SECRET_PROVISION_SERVERS ="attestation.service.com:4433" 
          • 关于保护文件的配置,Gramine提供了sgx.protected_file属性设置,用户自定义需要保护的文件,该保护的文件是指加密后的文件。本实践配置如下:
            sgx.protected_files.model= "file:models/resnet50-v15-fp32/1/saved_model.pb"

            用户侧生成的加密模型文件和TLS配置文件后,通过网络传输放到TensorFlow_Serving目录下。

        • sgx_default_qcnl.conf:配置阿里云PCCS访问地址
        • tf_serving_entrypoint.sh:容器启动后执行脚本
  6. 配置域名访问。
    sudo sh -c 'echo "remote_ip attestation.service.com" >> /etc/hosts'   #remote_ip请修改为客户端IP
    说明 当客户端与vSGX端部署在同一台ECS实例上,remote_ip为客户端内网IP。
  7. 运行TensorFlow Serving。

    TensorFlow Serving启动成功后便等待远端访问请求。

    cd ${CC_DIR}/Tensorflow_Serving/docker/tf_serving
    cp ssl_configure/ssl.cfg .
    image_tag="registry.cn-beijing.aliyuncs.com/tee_sgx/tf_serving:latest"
    ./run_gramine_tf_serving.sh -i ${image_tag} -p 8500-8501 -m resnet50-v15-fp32 -s ssl.cfg -a attestation.service.com:remote_ip
    说明
    • ${image_tag}需修改为TensorFlow Serving的image id。
    • -p 8500-8501为TensorFlow Serving对应主机的端口。
    • remote_ip需修改为secret prov server所在机器的IP或者客户端内网IP(TensorFlow Serving与secrec_prov_server位于同一台机器)。
    运行TensorFlow Serving

后续步骤

TensorFlow Serving启动成功后,会等待远程访问请求。远端访问的具体操作,请参见步骤三:远端访问