fortanix/salmiac
GitHub: fortanix/salmiac
一个在 AWS Nitro Enclaves 中运行未经修改容器镜像的机密计算解决方案,通过提供网络通信和加密持久化存储突破了原生 Nitro 的功能限制。
Stars: 12 | Forks: 0
# Salmiac
一个在 AWS [Nitro Enclaves](https://aws.amazon.com/ec2/nitro/) 中运行未经修改容器镜像的保密虚拟机 (VM)。
Salmiac 使得在隔离的计算环境中运行应用程序成为可能,从而保护并安全地处理高度敏感的数据。
默认情况下,纯 Nitro Enclaves 不提供任何 enclave 环境外部的网络能力,也不提供持久化存储,这意味着当容器镜像完成执行时,您的所有数据都会丢失。
Salmiac 通过启用外部通信的网络功能并提供加密的持久化存储来增强 Nitro Enclaves。
## 实用链接
* :wrench: [Nitro-cli](https://github.com/aws/aws-nitro-enclaves-cli),Salmiac 基于此工具构建。
* :book: [The Security Design of the AWS Nitro System](https://docs.aws.amazon.com/whitepapers/latest/security-design-of-aws-nitro-system/security-design-of-aws-nitro-system.html),官方 Nitro Enclaves 白皮书。
* :film_projector: 关于 Salmiac 内部机制的[演示](https://archive.fosdem.org/2023/schedule/event/cc_aws/)。
## 快速入门指南
本指南允许您从源代码构建 salmiac,并将您的 docker 应用程序转换为可以在 nitro enclave 中运行的应用程序。
1. 设置基于 Ubuntu 的构建系统:
- 安装 Rust:
遵循[此](https://www.rust-lang.org/tools/install)指南。
- 安装 Docker:
遵循[此](https://docs.docker.com/engine/install/)指南安装 24.0.x 版本
或者
apt-get install docker-ce=5:24.0.1-1~ubuntu.20.04~focal docker-ce-cli=5:24.0.1-1~ubuntu.20.04~focal containerd.io
- 安装构建 linux kernel 所需的工具:
遵循[此](https://kernelnewbies.org/KernelBuild)指南。
- 安装额外的依赖项:
apt-get install pkg-config libclang-dev cmake libpcap-dev
2. 设置支持 Nitro 的 AWS EC2 实例:
- 在您的 EC2 上安装 docker:
遵循[此](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-docker.html)指南。
- 在您的 EC2 上安装 nitro-cli:
遵循[此](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-cli-install.html)指南。
3. 构建运行容器转换器所需的 docker 镜像
# 从仓库根目录运行
# 构建 enclave-base 镜像
cd salmiac/docker/enclave-base
docker build -t enclave-base .
# 构建 parent-base 镜像
cd ../parent-base
docker build -t parent-base .
4. 构建 enclave 内核。此步骤耗时较长,且只需执行一次。除非更新了内核配置,否则无需清理此步骤生成的构建产物。
cd amzn-linux-nbd
./build-enclave-kernel.sh build
5. 构建转换器镜像。若要生成转换器的 debug 构建,请确保在下面的步骤中移除 release 标志。
# 从仓库根目录运行
cd salmiac
# 若要生成转换器的 debug 构建,请确保在下面的步骤中移除 release 标志。
./build-converter.sh --release
cd docker
# 如果生成的是转换器的 debug 构建,请在以下脚本中使用 debug 作为参数
./build-conv-container.sh release
6. 创建一个简单的转换请求 json 文件(例如 /tmp/req.json)
关于转换请求中每个字段的更多详细信息可以在 /salmiac/api-model/src/converter.rs 中找到
{
"input_image": {
"name": "hello-world",
},
"output_image": {
"name": "hello-world-nitro",
},
"converter_options": {
"push_converted_image": false,
"enable_overlay_filesystem_persistence": false
},
"nitro_enclaves_options": {
"cpu_count": 2,
"mem_size": "4096M"
}
}
7. 通过使用上一步的文件运行容器转换器,使您的应用程序具备 Nitro VM 能力。
默认情况下,转换器会拉取输入镜像并将输出镜像推送到远程仓库。然后这些镜像会从本地 docker 缓存中被清理。在我们的示例中,请求 json 中禁用了输出镜像的推送,并且为了将镜像保留在 docker 缓存中,指定了 'PRESERVE_IMAGES' 环境变量。
docker run --rm --name converter --user 0 --privileged -v /var/run/docker.sock:/var/run/docker.sock -e PRESERVE_IMAGES=input,result -v /tmp/req-files:/app converter --request-file /app/req.json
8. 将转换后的镜像复制到您的 EC2 实例中并运行该镜像。
注意使用了禁用默认证书的环境变量,这允许您跳过对 Fortanix CCM 的访问。在 /salmiac/ENV_VARS.md 中阅读更多关于 salmiac 中使用的环境变量的信息。
# 将步骤 #7 中转换后的镜像复制到您的 EC2 实例中
# ...
# 在 EC2 内部运行复制的镜像
docker run -it --rm --privileged -v /run/nitro_enclaves:/run/nitro_enclaves -e ENCLAVEOS_DISABLE_DEFAULT_CERTIFICATE=true hello-world-nitro
## 开发者原创证书 1.1
通过对本项目做出贡献,我证明:
(a) 该贡献是由我全部或部分创建的,并且我有权根据文件中指出的开源许可证提交它;或者
(b) 该贡献基于先前的工作,据我所知,该工作在适当的开源许可证下涵盖,且我有权根据该许可证提交带有修改的该工作,无论是由我全部或部分创建的,在同一开源许可证下(除非我被允许根据不同的许可证提交),如文件中所示;或者
(c) 该贡献是由其他直接向我提供的人提供的,该人证明了、 或,且我未对其进行修改。
(d) 我理解并同意,本项目和该贡献是公开的,并且该贡献的记录(包括我随其提交的所有个人信息,包括我的签名)将被无限期保留,并可能根据本项目或涉及的开源许可证进行重新分发。
# 许可证
本项目主要根据 Mozilla Public License (MPL) 2.0 的条款分发,有关详细信息,请参阅 [LICENSE](./LICENSE)。
标签:AWS Nitro Enclaves, Docker, EC2, IaC, JSONLines, Rust, Web截图, 内核定制, 加密存储, 可信执行环境, 可视化界面, 安全渗透, 安全防御评估, 安全飞地, 容器安全, 持久化存储, 敏感数据处理, 数据隐私, 机密计算, 网络流量审计, 网络通信, 虚拟化, 请求拦截, 通知系统, 通知系统, 隔离环境, 零信任