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截图, 内核定制, 加密存储, 可信执行环境, 可视化界面, 安全渗透, 安全防御评估, 安全飞地, 容器安全, 持久化存储, 敏感数据处理, 数据隐私, 机密计算, 网络流量审计, 网络通信, 虚拟化, 请求拦截, 通知系统, 通知系统, 隔离环境, 零信任