客户端部署完成后,需要部署vSGX端。vSGX端用来运行TensorFlow Serving推理服务。
背景信息
vSGX端提供vSGX机密计算环境,TensorFlow Serving推理服务运行在SGX环境中。当推理服务启动时,会向客户端发送远程认证请求,证明当前vSGX环境的可行性和AI推理服务的完整性。验证成功后,推理服务会拿到客户端发送的密钥,并对加密的模型和TLS证书进行解密,至此,运行在vSGX环境中的推理服务成功运行,并等待远程访问请求以获取推理结果。
操作步骤
创建安全增强型实例并构建所需环境。
创建安全增强型实例。
具体操作,请参见创建可信实例。
请注意以下参数:
实例规格:加密内存≥8 GiB,本操作选用的实例规格为ecs.g7t.xlarge
镜像:Alibaba Cloud Linux 3.2104 LTS 64位 UEFI版
公网IP:分配公网IPv4地址
安全组:安全组需开通8500~8501端口
说明当客户端与vSGX端部署在同一台ECS实例时,安全组无需开通8500~8501端口。
构建SGX加密计算环境。
具体操作,请参见构建SGX机密计算环境。
安装Docker CE。
具体操作,请参见安装Docker并使用(Linux)。
安装后,如您的用户为非root用户,则可以执行
sudo usermod -aG docker $USER
将当前用户添加到docker用户组,并重新登录当前账户,以允许非root账户使用docker。说明需安装社区版Docker CE,使用podman-docker可能会出现潜在的兼容性问题。
登录ECS实例。
具体操作,请参见通过密码或密钥认证登录Linux实例。
切换到使用的工作目录下,下载本实践所用的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=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:容器启动后执行脚本
配置域名访问。
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,您可以通过
docker images
查询。-p 8500-8501为TensorFlow Serving对应主机的端口。
remote_ip需修改为secret_prov_server所在机器的IP或者客户端内网IP(TensorFlow Serving与secret_prov_server位于同一台机器)。
后续步骤
TensorFlow Serving启动成功后,会等待远程访问请求。远端访问的具体操作,请参见步骤三:远端访问推理结果。