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

背景信息

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

操作步骤

  1. 创建安全增强型实例并构建所需环境。
    1. 创建安全增强型实例。
      具体操作,请参见创建安全增强型实例
      请注意以下参数:
      • 实例规格:加密内存≥32 GiB,本操作选用的实例规格为ecs.g7t.4xlarge
      • 镜像:Alibaba Cloud Linux 2.1903 LTS 64位 UEFI版
      • 公网IP:分配公网IPv4地址
    2. 构建SGX加密计算环境。
      具体操作,请参见构建SGX加密计算环境
    3. 安装Docker。
  2. 登录ECS实例。
    具体操作,请参见连接方式概述
  3. 切换到使用的工作目录(如/home/test)下,下载本实践所用的TensorFlow Serving脚本代码。
    cd /home/tf
    git clone https://gitee.com/cloud_cc/confidential-computing.git
  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 root@192.168.XX.XX:/home/tf/confidential-computing/Tensorflow_Serving/client/models  /home/tf/confidential-computing/Tensorflow_Serving/docker/tf_serving
    scp -r root@192.168.XX.XX:/home/tf/confidential-computing/Tensorflow_Serving/client/ssl_configure /home/tf/confidential-computing/Tensorflow_Serving/docker/tf_serving
  5. 获取TensorFlow Serving镜像。
    您可以通过以下任一一种方式获取TensorFlow Serving镜像。
    • 下载TensorFlow Serving容器镜像。
      cd /home/tf/confidential-computing/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 /home/test/confidential-computing/Tensorflow_Serving/docker
      ./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" 
            sgx.trusted_files.libsecretprovattest ="file:libsecret_prov_attest.so"
            sgx.trusted_files.cachain= "file:certs/test-ca-sha256.crt"
          • 关于保护文件的配置,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. 配置域名访问。
    echo "remote_ip attestation.service.com" >> /etc/hosts   #remote_ip请修改为客户端IP
  7. 运行TensorFlow Serving。

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

    cd /home/tf/confidential-computing/Tensorflow_Serving/docker/tf_serving
    cp ssl_configure/ssl.cfg .
    ./run_gramine_tf_serving.sh -i ${image_id} -p 8500-8501 -m resnet50-v15-fp32 -s ssl.cfg -a attestation.service.com:remote_ip
    说明
    • ${image_id}需修改为TensorFlow Serving的image id。
    • -p 8500-8501为TensorFlow Serving对应主机的端口。
    • remote_ip需修改为客户端的IP。
    运行TensorFlow Serving

后续步骤

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