这篇文章是与来自 Leidos 的 Justin Miles、Liv d'Aliberti 和 Joe Kovba 共同撰写的。
Leidos 是财富 500 强科技解决方案领导者,致力于解决国防、情报、国土安全、民用和医疗保健市场中一些世界上最严峻的挑战。在这篇文章中,我们讨论 Leidos 如何与 AWS 合作开发一种使用以下方法进行隐私保护的大语言模型 (LLM) 推理的方法: AWS Nitro Enclaves.
法学硕士旨在理解和生成类人语言,并用于许多行业,包括政府、医疗保健、金融和知识产权。法学硕士具有广泛的适用性,包括聊天机器人、内容生成、语言翻译、情感分析、问答系统、搜索引擎和代码生成。将基于 LLM 的推理引入系统也有可能引入隐私威胁,包括模型泄露、数据隐私侵犯和意外的基于 LLM 的服务操纵。需要实施技术架构,以确保法学硕士在推理过程中不会暴露敏感信息。
这篇文章讨论 Nitro Enclaves 如何帮助保护 LLM 模型部署,特别是那些使用个人身份信息 (PII) 或受保护的健康信息 (PHI) 的模型部署。本文仅用于教育目的,不应在没有额外控制的情况下在生产环境中使用。
法学硕士和 Nitro Enclave 概述
一个潜在的用例是基于 LLM 的敏感查询聊天机器人,旨在执行包含 PII 和 PHI 的问答服务。当前大多数 LLM 聊天机器人解决方案明确告知用户,出于安全考虑,他们在输入问题时不应包含 PII 或 PHI。为了减轻这些担忧并保护客户数据,服务所有者主要依赖于以下用户保护:
- 编修 – 识别和隐藏文档、文本或其他形式内容中的 PII 等敏感信息的过程。这可以通过输入数据在发送到模型或经过训练自动编辑其响应的法学硕士之前完成。
- 多因素认证 – 一个安全流程,要求用户提供多种身份验证方法来验证其身份,以获得 LLM 的访问权限。
- 传输层安全性(TLS) – 一种加密协议,提供安全通信,增强用户和 LLM 服务之间传输的数据隐私。
尽管这些做法增强了服务的安全状况,但它们不足以保护所有敏感用户信息以及在用户不知情的情况下可能持续存在的其他敏感信息。
在我们的示例用例中,法学硕士服务旨在回答员工医疗保健福利问题或提供个人退休计划。让我们分析以下示例架构并识别数据隐私风险区域。
潜在风险领域如下:
- 特权用户可以访问容纳服务器的实例。无意或未经授权的服务更改可能会导致敏感数据以意想不到的方式暴露。
- 用户必须相信该服务不会公开或保留应用程序日志中的敏感信息。
- 应用程序包的更改可能会导致服务发生更改,从而导致敏感数据的泄露。
- 有权访问实例的特权用户可以不受限制地访问服务所使用的 LLM。更改可能会导致向用户返回不正确或不准确的信息。
Nitro Enclaves 为您提供额外的隔离 亚马逊弹性计算云 (Amazon EC2) 实例,保护正在使用的数据免遭未经授权的访问,包括管理员级用户。在前面的架构中,无意的更改可能会导致敏感数据以明文形式保留,并意外地泄露给可能不需要访问该数据的用户。使用 Nitro Enclaves,您可以创建一个与 EC2 实例隔离的环境,允许您向该 enclave 分配 CPU 和内存资源。该飞地是一个高度限制的虚拟机。通过运行处理 enclave 内敏感数据的代码,父进程将无法查看 enclave 数据。
Nitro Enclaves 具有以下优势:
- 内存和CPU隔离 – 它依靠 Nitro Hypervisor 将 enclave 的 CPU 和内存与父实例上的用户、应用程序和库隔离。此功能有助于隔离飞地和您的软件,并显着减少发生意外事件的可能性。
- 独立的虚拟机 – Enclave 是附加到 EC2 实例的独立虚拟机,用于进一步保护和安全处理高度敏感的数据。
- 没有互动访问 – Enclave 仅提供与其父实例的安全本地套接字连接。它们没有持久存储、交互式访问或外部网络。
- 密码证明 – Nitro Enclaves 优惠 密码证明,用于证明 enclave 身份并验证只有授权代码在 enclave 中运行的过程。
- AWS 集成 – Nitro Enclaves 集成 AWS密钥管理服务 (AWS KMS),允许您解密已在 enclave 内使用 AWS KMS 加密的文件。 AWS证书管理器 适用于 Nitro Enclaves 的 (ACM) 允许您将公共和私有 SSL/TLS 证书用于在具有 Nitro Enclaves 的 EC2 实例上运行的 Web 应用程序和服务器。
您可以使用 Nitro Enclaves 提供的这些功能来帮助降低与 PII 和 PHI 数据相关的风险。我们建议在处理敏感用户数据时将 Nitro Enclaves 包含在 LLM 服务中。
解决方案概述
让我们检查一下示例服务的架构,现在包括 Nitro Enclaves。通过合并 Nitro Enclaves,如下图所示,LLM 成为处理 PHI 或 PII 数据的更安全的聊天机器人。
当应用程序托管在 enclave 中时,用户数据(包括 PII、PHI 和问题)在整个请求响应过程中保持加密状态。推理过程中执行的步骤如下:
- 聊天机器人应用程序生成临时 AWS 凭证并要求用户输入问题。该问题可能包含 PII 或 PHI,然后通过 AWS KMS 进行加密。加密的用户输入与临时凭证组合以创建加密的请求。
- 加密的数据作为 POST 请求发送到 Flask 托管的 HTTP 服务器。在接受敏感数据之前,应将此端点配置为 HTTP。
- 客户端应用程序接收 POST 请求,并通过安全本地通道(例如 vsock)将其转发到 Nitro Enclaves 内运行的服务器应用程序。
- Nitro Enclaves 服务器应用程序使用临时凭据来解密请求、查询 LLM 并生成响应。特定于模型的设置存储在飞地内,并受到加密证明的保护。
- 服务器应用程序使用相同的临时凭据来加密响应。
- 加密的响应作为 POST 请求的响应通过客户端应用程序返回到聊天机器人应用程序。
- 聊天机器人应用程序使用其 KMS 密钥解密响应并向用户显示明文。
先决条件
在我们开始之前,您需要满足以下先决条件才能部署解决方案:
配置 EC2 实例
完成以下步骤来配置 EC2 实例:
- 启动 r5.8x大 EC2 实例使用 amzn2-ami-kernel-5.10-hvm-2.0.20230628.0-x86_64-gp2 AMI 启用硝基飞地。
- 安装 Nitro Enclaves CLI 来构建和运行 Nitro Enclaves 应用程序:
sudo amazon-linux-extras install aws-nitro-enclaves-cli -y
sudo yum install aws-nitro-enclaves-cli-devel -y
- 验证 Nitro Enclaves CLI 的安装:
nitro-cli –version
- 本文使用的版本是1.2.2
- 安装 Git 和 Docker 以构建 Docker 映像并从 GitHub 下载应用程序。将您的实例用户添加到 Docker 组 ( 是您的 IAM 实例用户):
sudo yum install git -y
sudo usermod -aG ne <USER>
sudo usermod -aG docker <USER>
sudo systemctl start docker && sudo systemctl enable docker
- 启动并启用 Nitro Enclaves 分配器和 vsock 代理服务:
sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable nitro-enclaves-allocator.service
sudo systemctl start nitro-enclaves-vsock-proxy.service && sudo systemctl enable nitro-enclaves-vsock-proxy.service
Nitro Enclaves 使用名为 vsock 的本地套接字连接在父实例和 enclave 之间创建安全通道。
启动并启用所有服务后,重新启动实例以验证所有用户组和服务是否正常运行:
sudo shutdown -r now
配置 Nitro Enclaves 分配器服务
Nitro Enclaves 是一个隔离环境,指定实例 CPU 和内存的一部分来运行 enclave。通过 Nitro Enclaves 分配器服务,您可以指示将从父实例中获取多少个 CPU 和多少内存来运行 enclave。
使用文本编辑器修改 enclave 的保留资源(对于我们的解决方案,我们分配 8 个 CPU 和 70,000 MiB 内存以提供足够的资源):
vi /etc/nitro_enclaves/allocatory.yaml
克隆项目
配置 EC2 实例后,您可以下载代码以在 Nitro Enclaves 内运行具有 LLM 的敏感聊天机器人。
您需要更新 server.py
文件,其中包含您在开始时创建的用于加密 LLM 响应的相应 KMS 密钥 ID。
- 克隆 GitHub 项目:
cd ~/ && git clone https://<THE_REPO.git>
- 导航到项目文件夹以构建
enclave_base
Docker 镜像包含 Nitro Enclaves 软件开发套件 (SDK) 用于来自 Nitro Hypervisor 的加密证明文档(此步骤最多可能需要 15 分钟):cd /nitro_llm/enclave_base
docker build ./ -t “enclave_base”
将 LLM 保存在 EC2 实例中
我们使用开源 Bloom 560m LLM 进行自然语言处理来生成响应。该模型并未针对 PII 和 PHI 进行微调,但演示了法学硕士如何生活在飞地内。该模型还需要保存在父实例上,以便可以通过 Dockerfile 将其复制到 enclave 中。
- 导航到项目:
cd /nitro_llm
- 安装必要的要求以在本地保存模型:
pip3 install requirements.txt
- 运行
save_model.py
应用程序将模型保存在/nitro_llm/enclave/bloom
目录:python3 save_model.py
构建并运行 Nitro Enclaves 镜像
要运行 Nitro Enclaves,您需要从应用程序的 Docker 映像创建 enclave 映像文件 (EIF)。位于 enclave 目录中的 Dockerfile 包含将在 enclave 内部运行的文件、代码和 LLM。
构建和运行飞地将需要几分钟才能完成。
- 导航到项目的根目录:
cd /nitro_llm
- 将 enclave 映像文件构建为
enclave.eif
:nitro-cli build-enclave --docker-uri enclave:latest --output-file enclave.eif
构建 enclave 时,将创建一系列唯一的哈希值和平台配置寄存器 (PCR)。 PCR 是一种连续测量,用于证明硬件和应用程序的身份。这些 PCR 是加密证明所必需的,并在 KMS 密钥策略更新步骤中使用。
- 使用来自的资源运行飞地
allocator.service
(添加--attach-console
最后的参数将以调试模式运行飞地):nitro-cli run-enclave --cpu-count 8 --memory 70000 --enclave-cid 16 --eif-path enclave.eif
您需要分配至少四倍于 EIF 文件大小的空间。这可以在 allocator.service
从前面的步骤。
- 使用以下命令验证 enclave 是否正在运行:
nitro-cli describe-enclaves
更新KMS密钥策略
请完成以下步骤来更新您的 KMS 密钥策略:
- 在 AWS KMS 控制台上,选择 客户管理的密钥 在导航窗格中。
- 搜索您作为先决条件生成的密钥。
- 编辑 关于重点政策。
- 使用以下信息更新密钥策略:
- 您的帐户 ID
- 您的 IAM 用户名
- 更新后的 Cloud9 环境实例角色
- 行动
kms:Encrypt
和kms:Decrypt
- 使用条件语句将 Enclave PCR(例如 PCR0、PCR1、PCR2)添加到您的密钥策略
请参阅以下关键策略代码:
保存聊天机器人应用程序
要模仿位于 AWS 账户外部的敏感查询聊天机器人应用程序,您需要保存 chatbot.py
应用程序并在 Cloud9 环境中运行它。您的 Cloud9 环境将使用其实例角色作为临时凭证,以取消与运行 enclave 的 EC2 的权限关联。完成以下步骤:
- 在Cloud9控制台上,打开您创建的环境。
- 将以下代码复制到新文件中,例如
chatbot.py
进入主目录。 - 安装所需的模块:
pip install boto3
Pip install requests
- 在 Amazon EC2 控制台上,记下与您的 Nitro Enclaves 实例关联的 IP。
- 更新 URL 变量
http://<ec2instanceIP>:5001
.
- 运行聊天机器人应用程序:
-
python3 chat.py
当它运行时,终端将要求用户输入并遵循之前的架构图来生成安全响应。
运行私人问答聊天机器人
现在 Nitro Enclaves 已在 EC2 实例上启动并运行,您可以更安全地询问聊天机器人 PHI 和 PII 问题。让我们看一个例子。
在 Cloud9 环境中,我们向聊天机器人询问问题并提供我们的用户名。
AWS KMS 对问题进行加密,如下图所示。
然后将其发送到飞地并询问受保护的法学硕士。 LLM 的问题和响应将类似于以下屏幕截图(结果和加密响应仅在调试模式下在 enclave 内可见)。
然后使用 AWS KMS 对结果进行加密并返回到 Cloud9 环境进行解密。
清理
完成以下步骤以清理您的资源:
- 停止为容纳您的飞地而创建的 EC2 实例。
- 删除Cloud9环境。
- 删除 KMS 密钥。
- 删除 EC2 实例角色和 IAM 用户权限。
结论
在这篇文章中,我们展示了如何使用 Nitro Enclaves 部署 LLM 问答服务,以更安全地发送和接收 PII 和 PHI 信息。这是部署在 Amazon EC2 上的,并且 enclave 与 AWS KMS 集成,限制对 KMS 密钥的访问,因此仅允许 Nitro Enclave 和最终用户使用该密钥并解密问题。
如果您计划扩展此架构以支持更大的工作负载,请确保模型选择过程符合您的模型要求与 EC2 资源。此外,您必须考虑最大请求大小以及它将对 HTTP 服务器产生的影响以及针对模型的推理时间。其中许多参数可通过模型和 HTTP 服务器设置进行自定义。
确定工作负载的具体设置和要求的最佳方法是通过微调的 LLM 进行测试。虽然这篇文章仅包括敏感数据的自然语言处理,但您可以修改此架构以支持支持音频、计算机视觉或多模态的备用法学硕士。这里强调的相同安全原则可以应用于任何格式的数据。用于构建这篇文章的资源可在 GitHub回购.
在评论部分分享您将如何调整此解决方案以适应您的环境。
作者简介
贾斯汀·迈尔斯 是技术办公室 Leidos 数字现代化部门的一名云工程师。业余时间,他喜欢打高尔夫球和旅行。
Liv d'Aliberti 是技术办公室下的 Leidos AI/ML 加速器的研究员。 他们的研究重点是隐私保护机器学习。
克里斯·伦佐 是 AWS 国防和航空航天组织的高级解决方案架构师。工作之余,他喜欢在温暖的天气和旅行之间取得平衡。
乔科夫巴 是 Leidos 数字现代化部门的副总裁。在空闲时间,他喜欢裁判足球比赛和打垒球。
- :具有
- :是
- :不是
- $UP
- 000
- 1
- 15%
- 16
- 24
- 29
- 32
- 36
- 500
- 67
- 7
- 70
- 8
- 9
- a
- Able
- 加速器
- 接受
- ACCESS
- 完成
- 账号管理
- ACM
- 操作
- 适应
- 加
- 添加
- 额外
- 另外
- 地址
- 航空航天
- 驳
- AI / ML
- 所有类型
- 分配
- 让
- 允许
- 允许
- 允许
- 还
- 尽管
- Amazon
- Amazon EC2
- 亚马逊网络服务
- an
- 分析
- 分析
- 和
- 回答
- 回答
- 任何
- 应用
- 应用领域
- 应用领域
- 应用的
- 的途径
- 适当
- 建筑的
- 架构
- 架构
- 保健
- 国家 / 地区
- 地区
- 论点
- AS
- 问
- 问
- 协助
- 相关
- At
- 音频
- 认证
- 授权
- 自动
- 可使用
- AWS
- 背部
- 当前余额
- 基本包
- BE
- 成为
- 很
- before
- 开始
- 作为
- 得益
- 好处
- 最佳
- 之间
- Bloom
- 博特
- 广阔
- 建立
- 建
- 但是
- by
- 被称为
- CAN
- 进行
- 携带
- 案件
- 原因
- 证书
- 证书
- 挑战
- 更改
- 更改
- 渠道
- 即时通话
- 聊天机器人
- 聊天机器人
- 民间
- 清洁
- CLI
- 客户
- 云端技术
- Cloud9
- 码
- 收集
- 结合
- 注释
- 沟通
- 通信
- 完成
- 计算
- 一台
- 计算机视觉
- 关注
- 流程条件
- 机密
- 配置
- 配置
- 地都
- 连接方式
- 考虑
- 安慰
- 包含
- 包含
- 内容
- 内容生成
- 控制
- 正确地
- 可以
- 创建信息图
- 创建
- 凭据
- 资历
- 加密
- 电流
- 顾客
- 客户数据
- 定制
- data
- 数据隐私
- 解码
- 国防
- 演示
- 部署
- 部署
- 部署
- 描述
- 设计
- 确定
- 开发
- 研发支持
- 图表
- 数字
- 目录
- 讨论
- 讨论
- 显示器
- 码头工人
- 文件
- 文件
- 别
- 下载
- 两
- ,我们将参加
- 此前
- 编辑
- 教育的
- 效果
- 指数
- 员工
- enable
- 启用
- 飞地
- 加密
- 加密
- 结束
- 端点
- 工程师
- 引擎
- 提高
- 增强
- 更多
- 环境
- 环境中
- 事件
- 检查
- 例子
- 除
- 渗出
- 明确地
- 裸露
- 曝光
- 外部
- 失败
- 专栏
- 特征
- 数字
- 文件
- 档
- 最后
- 金融
- 重点
- 遵循
- 以下
- 如下
- 足球
- 针对
- 格式
- 形式
- 运气
- 四
- Free
- 止
- 功能
- 进一步
- Gain增益
- Games
- 生成
- 产生
- 产生
- 代
- 得到
- 混帐
- GitHub上
- 去
- 政府
- 团队
- 组的
- 手柄
- 处理
- 硬件
- 有
- he
- 健康管理
- 健康资讯
- 医疗保健
- 帮助
- 帮助
- 此处
- 突出
- 高度
- 他的
- 家园
- 国土安全部
- 主持人
- 托管
- 别墅
- 房屋
- 创新中心
- How To
- HTML
- HTTP
- HTTPS
- i
- ID
- 可识别的
- 鉴定
- 确定
- 身分
- if
- 图片
- 图片
- 影响力故事
- 实施
- 进口
- in
- 不准确
- 包括
- 包括
- 包含
- 结合
- 不正确
- 表明
- 行业
- 通知
- 信息
- 输入
- 输入
- 内
- 安装
- 安装
- 例
- 集成
- 积分
- 知识分子
- 知识产权
- 房源搜索
- 互动
- 成
- 介绍
- 介绍
- IP
- 孤立
- 隔离
- IT
- 它的
- JOE
- JSON
- 贾斯汀
- 键
- 知识
- 语言
- 大
- 大
- 最新
- 层
- 领导者
- 学习
- 最少
- 库
- 喜欢
- LIV
- 生活
- 生活
- LLM
- 本地
- 当地
- 位于
- 看
- 看起来像
- LOOKS
- 机
- 机器学习
- 机
- 主要
- 使
- 管理
- 颠覆性技术
- 操作
- 许多
- 市场
- 火柴
- 最多
- 可能..
- 数据监测
- 内存
- 元数据
- 方法
- 分钟
- 减轻
- 时尚
- 模型
- 改性
- 修改
- 模块
- 更多
- 最先进的
- 许多
- 多
- 必须
- 姓名
- 自然
- 自然语言处理
- 旅游导航
- ne
- 必要
- 需求
- 需要
- 工业网络
- 全新
- 硝基
- 没有
- 不包含
- 注意
- 现在
- of
- 优惠精选
- 办公
- on
- 仅由
- 打开
- 开放源码
- or
- 秩序
- 组织
- 其他名称
- 我们的
- 输出
- 学校以外
- 超过
- 简介
- 业主
- 包
- 面包
- 参数
- 权限
- 个人
- 亲自
- 计划
- 规划行程
- 平台
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 播放
- 政策
- 一部分
- 可能
- 帖子
- 潜力
- 做法
- 前
- 先决条件
- 先决条件
- 总统
- 以前
- 主要
- 校长
- 原则
- 隐私
- 隐私威胁
- 私立
- 过程
- 过程
- 处理
- 生产
- 项目
- 财产
- 保护
- 保护
- 协议
- 证明
- 提供
- 提供
- 提供
- 代理
- 国家
- 目的
- 查询
- 询问
- 题
- 有疑问吗?
- 接收
- 建议
- 减少
- 地区
- 寄存器
- 依赖
- 依靠
- 遗迹
- 请求
- 要求
- 必须
- 岗位要求
- 需要
- 研究
- 研究员
- 保留的
- 资源
- 资源
- 响应
- 回复
- 限制
- 限制性
- 导致
- 导致
- 保留
- 退休
- 回报
- 揭密
- 风险
- 风险
- 角色
- 根
- 运行
- 运行
- 维护
- 保护
- 同
- 样品
- 保存
- 保存
- 鳞片
- 科学
- 科学与技术
- SDK
- 搜索
- 搜索引擎
- 部分
- 扇形
- 安全
- 担保
- 安全
- 保安
- 选择
- 发送
- 敏感
- 发送
- 情绪
- 系列
- 服务器
- 服务器
- 服务
- 特色服务
- 集
- 设置
- 应该
- 展出
- 如图
- 关闭
- 显著
- 尺寸
- So
- 软件
- 软件开发
- 方案,
- 解决方案
- 一些
- 具体的
- 特别是
- 开始
- 开始
- 个人陈述
- 步
- 步骤
- 存储
- 存储
- 这样
- 足够
- SUPPORT
- 支持
- 肯定
- 磁化面
- 系统
- 产品
- 采取
- 拍摄
- 文案
- 专业技术
- 临时
- 终端
- 测试
- 文本
- 这
- 其
- 然后
- 博曼
- 他们
- Free Introduction
- 那些
- 威胁
- 通过
- 始终
- 次
- 时
- 至
- 象征
- 熟练
- 过境
- 翻译
- 旅游
- 信任
- 尝试
- 擅自
- 下
- 理解
- 独特
- 无限制
- 更新
- 更新
- 网址
- 使用
- 用例
- 用过的
- 用户
- 用户
- 使用
- 运用
- 变量
- 确认
- 版本
- 通过
- 副
- 副总裁
- 查看
- 违反
- 在线会议
- 虚拟机
- 可见
- 愿景
- 温暖
- 是
- 方法..
- 方法
- we
- 天气
- 卷筒纸
- 网络应用
- Web服务
- 什么是
- ,尤其是
- 这
- WHO
- 将
- 中
- 也完全不需要
- 工作
- 工作
- 加工
- 世界
- X
- 完全
- 您一站式解决方案
- 和风网