客户端部署完成后,需要部署vSGX端。vSGX端用来运行TensorFlow Serving推理服务。
背景信息
vSGX端提供vSGX机密计算环境,TensorFlow Serving推理服务运行在SGX环境中。当推理服务启动时,会向客户端发送远程认证请求,证明当前vSGX环境的可行性和AI推理服务的完整性。验证成功后,推理服务会拿到客户端发送的密钥,并对加密的模型和TLS证书进行解密,至此,运行在vSGX环境中的推理服务成功运行,并等待远程访问请求并获取推理结果。
操作步骤
- 创建安全增强型实例并构建所需环境。
- 创建安全增强型实例。具体操作,请参见创建安全增强型实例。请注意以下参数:
- 实例规格:加密内存≥8 GiB,本操作选用的实例规格为ecs.g7t.xlarge
- 镜像:Alibaba Cloud Linux 2.1903 LTS 64位 UEFI版
- 公网IP:分配公网IPv4地址
- 安全组:安全组需开通8500~8501端口
说明 当客户端与vSGX端部署在同一台ECS实例时,安全组无需开通8500~8501端口。 - 构建SGX加密计算环境。具体操作,请参见构建SGX加密计算环境。
- 安装docker-ce。
- 镜像为Alibaba Cloud Linux 2时,请参见部署并使用Docker(Alibaba Cloud Linux 2)。
- 镜像为Alibaba Cloud Linux 3时,请参见部署并使用Docker(Alibaba Cloud Linux 3)。
安装后,如您的用户为非root用户,则可以执行
sudo usermod -aG docker $USER
将当前用户添加到docker用户组,并重新登录当前账户,以允许非root账户使用docker。说明 需安装社区版docker-ce,使用podman-docker可能会出现潜在的兼容性问题。
- 创建安全增强型实例。
- 登录ECS实例。具体操作,请参见连接方式概述。
- 切换到使用的工作目录下,下载本实践所用的TensorFlow Serving脚本代码。
git clone https://gitee.com/cloud_cc/confidential-computing.git export CC_DIR=$(realpath ./confidential-computing)
- 复制客户端的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
- 获取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目录下。
- Gramine支持SGX RA-TLS远程认证,使能远程认证的功能需要在模板文件中进行配置。本实践使用到的模板配置如下:
- sgx_default_qcnl.conf:配置阿里云PCCS访问地址
- tf_serving_entrypoint.sh:容器启动后执行脚本
- 下载TensorFlow Serving容器镜像。
- 配置域名访问。
sudo sh -c 'echo "remote_ip attestation.service.com" >> /etc/hosts' #remote_ip请修改为客户端IP
说明 当客户端与vSGX端部署在同一台ECS实例上,remote_ip为客户端内网IP。 - 运行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与secret_prov_server位于同一台机器)。