当前位置: 首页 > news >正文

阿里云上启动enclave 并与宿主机通信

首先创建阿里云可信执行环境

可以选择的 c8i 4vCPU 及以上的机型。 因为至少两个CPU。

阿里云的每台ECS实例只允许创建一个Enclave。
创建实例参考
在这里插入图片描述
在实例中安装docker,并安装 Enclave CLI ,同样参考阿里云构建Enclave机密环境。

成功安装enclave 环境后,实现如下效果:
在这里插入图片描述

在这里插入图片描述

至此,enclave 的环境准备完成。

构建enclave 镜像

我们将要在tee中执行的程序打包成docker,并创建enclave 镜像。
在enclave 中运行 eif 镜像。 官方教程

enclave 与 宿主机通信

enclave 中的程序只能通过 vsock 与宿主机进行通信。安装完 enclave cli之后就有了 vsock 环境

我们常见的 tcp udp 的程序是无法直接通信的,必须要使用vsock 的sdk 来编写程序实现通信。
我使用了"github.com/mdlayher/vsock" 实现通信过程。

server 运行在 enclave 中

package mainimport ("fmt""io""log""github.com/mdlayher/vsock"
)func main() {const port = 5005// 监听所有 CID 的 vsock 端口l, err := vsock.Listen(port, nil)if err != nil {log.Fatalf("listen error: %v", err)}defer l.Close()fmt.Printf("Enclave listening on vsock port %d...\n", port)for {conn, err := l.Accept()if err != nil {log.Fatalf("accept error: %v", err)}go func(c io.ReadWriteCloser) {defer c.Close()buf := make([]byte, 1024)n, _ := c.Read(buf)fmt.Printf("Enclave got: %s\n", string(buf[:n]))c.Write([]byte("Hello from Enclave"))}(conn)}
}

我们构建一个docker镜像,将server 程序打包进去。

# Dockerfile
FROM golang:1.23.7 AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
# 动态链接二进制
RUN go build -trimpath -ldflags="-s -w" -o /out/server .# 运行层:带 glibc 的 distroless
FROM gcr.io/distroless/base-debian12
COPY --from=build /out/server /server
ENTRYPOINT ["/server"]

运行server

docker build -t vsock-server:1.0 .sudo enclave-cli build-enclave --docker-uri vsock-server:1.0 --output-file vsock-server.eifsudo enclave-cli run-enclave --cpu-count 2 --memory 1024 --eif-path  vsock-server.eif

client 运行在宿主机中

package mainimport ("fmt"// "io""log""github.com/mdlayher/vsock"
)func main() {// 替换成 describe-enclaves 查到的 EnclaveCIDconst cid = 4const port = 5005conn, err := vsock.Dial(cid, port, nil)if err != nil {log.Fatalf("dial error: %v", err)}defer conn.Close()conn.Write([]byte("Ping from Host"))buf := make([]byte, 1024)n, _ := conn.Read(buf)fmt.Printf("Host got: %s\n", string(buf[:n]))
}

运行client
在这里插入图片描述

参考代码

http://www.xdnf.cn/news/1488565.html

相关文章:

  • 韧性双核系统:个人与关系的共生进化框架
  • 2024理想算法岗笔试笔记
  • HTTP中Payload的含义解析
  • MySQL集群高可用架构——组复制 (MGR)
  • Set集合
  • matrix-breakout-2-morpheus靶机渗透
  • 【从零开始学习Redis】秒杀优化——阻塞队列、消息队列实现异步秒杀
  • 虚拟机之CentOS、网络设置的有趣问题
  • openpyxl和excel数据驱动
  • C++20格式化字符串:std::format的使用与实践
  • 大坝安全监测中的单北斗GNSS变形监测系统应用解析
  • 宋红康 JVM 笔记 Day14|垃圾回收概述
  • Android --- AOSP源码导入Android Studio
  • 使用 Doxygen 生成 C++ 与 Python 项目文档
  • 腾讯云TDSQL-C 与传统MySQL对比
  • tf_keras包
  • 【工具变量】地级市中小企业数字化转型月度DID数据集(2022.1-2025.7)
  • 设计模式:模板方法模式(Template Method Pattern)
  • 设计模式:状态模式(State Pattern)
  • 【数据分析】一种用于校正微生物组数据中批次效应的多变量框架
  • 人工智能学习:Transformer架构
  • 简单的说一说前端开发语言React
  • 学习字符串
  • NW506NW507美光固态闪存NW525NW539
  • AI时代的软件开发革命:吴恩达关于快速工程的深度思考
  • WebGL2初识
  • 开源 C++ QT Widget 开发(十三)IPC通讯--本地套接字 (Local Socket)
  • 【Flink】Flink Runtime 架构设计
  • LangChain实战(二十一):构建自动化AI客服系统
  • 蓓韵安禧DHA孕期友好配方:纯净营养安心孕育健康