junwoojeong100/aca-sandbox-labs
GitHub: junwoojeong100/aca-sandbox-labs
提供基于 Azure Container Apps Dynamic Sessions 和 ACA Sandboxes 的动手实验,帮助开发者在隔离环境中安全执行 AI 生成的 Python 和 Office 任务。
Stars: 0 | Forks: 0
# 基于 Azure Container Apps 的 AI Workspace Sandbox 实践
本 repository 展示了 AI Workspace 如何在 Azure Container Apps 的隔离环境中执行不受信任的 Python 及 Office 任务,检查生成的 artifact,并在独立的 Connector 修改业务系统之前要求明确批准。Dynamic Sessions 和 ACA Sandboxes 以相互独立的路径进行文档记录和运营,请根据 workload 选择其中之一,并遵循相应的架构和实践。
## 服务选择
| 标准 | Dynamic Sessions | ACA Sandboxes (Preview) |
| --- | --- | --- |
| 适用 workload | 短暂的临时代码或文档任务 | 保持状态的 Agent workspace 和开发环境 |
| Lifecycle | Pool 分配 session 并处理过期 | Application 管理 Sandbox 的创建、suspend、resume、snapshot 和删除 |
| 启动及 resume | Prewarmed 分配。整体请求 latency 需单独测量 | Prewarmed 创建及 memory resume。Image boot 和 staging 也需测量 |
| 状态及 storage | 临时 session 文件 | Memory/disk suspend、snapshot、Blob 及 Data Disk volume |
| Network | Egress on/off、Custom Pool 的 VNet | Domain、CIDR、VNet 及 ingress policy |
| Compute 选择 | Managed Interpreter 或 Custom Container Pool | 每个 Sandbox 的 XS~XL tier |
| 成本结构 | Interpreter session-hour 或专用 Custom Pool capacity | 运行中的 vCPU/GiB-second,suspend 时停止计算 compute,保留的 storage 继续计费 |
| 运维负担 | 低。Pool 管理分配和过期 | 高。Application 管理 ID、lifecycle、state 和 orphan 清理 |
性能和价格因 region、image、quota 及时间点而异。在生产环境引入前,请测量 end-to-end 的 p95 并确认当前的 Azure meter。
## 快速开始:Dynamic Sessions
在 repository 根目录下执行。
```
export RESOURCE_GROUP="${RESOURCE_GROUP:-rg-ai-workspace-dynamic-sessions-lab}"
bash scripts/common/check-prereqs.sh
bash scripts/common/validate-repo.sh
bash scripts/dynamic-sessions/python-lab.sh
```
仅在需要 Office 工具或 Agent orchestration 时添加。
```
bash scripts/dynamic-sessions/office-lab.sh
bash scripts/dynamic-sessions/agent-lab.sh
```
请继续查看 [Dynamic Sessions 实践 index](labs/dynamic-sessions/01_Python_Code_Interpreter_Lab.md) 和 [参考架构](docs/dynamic-sessions/architecture.md)。
## 快速开始:ACA Sandboxes
在 repository 根目录下执行。
```
export RESOURCE_GROUP="${RESOURCE_GROUP:-rg-ai-workspace-aca-sandboxes-lab}"
bash scripts/common/check-prereqs.sh
bash scripts/common/validate-repo.sh
bash scripts/aca-sandboxes/quickstart.sh python
export ACA_PYTHON="${ACA_PYTHON:-.work/aca-sandboxes/venv/bin/python}"
```
根据所需的 image,使用 `office` 或 `all` 代替 `python`。
请继续查看 [ACA Sandboxes 实践 index](labs/aca-sandboxes/03_ACA_Sandboxes_Lab.md) 和 [参考架构](docs/aca-sandboxes/architecture.md)。
## Repository 结构
| 路径 | 内容 |
| --- | --- |
| [`docs/dynamic-sessions/`](docs/dynamic-sessions/) | Dynamic Sessions 架构及过往验证记录 |
| [`docs/aca-sandboxes/`](docs/aca-sandboxes/) | ACA Sandboxes 架构及过往验证记录 |
| [`labs/dynamic-sessions/`](labs/dynamic-sessions/) | Python Code Interpreter 及 Office Custom Container 实践 |
| [`labs/aca-sandboxes/`](labs/aca-sandboxes/) | Python、Office、lifecycle、state 及 network 实践 |
| `dynamic_sessions/` | Dynamic Sessions application 模块及 Office image |
| `aca_sandboxes/` | ACA Sandboxes 模块及 Python/Office image |
| `scripts/common/` | 公共前置条件及 repository 验证命令 |
| `scripts/dynamic-sessions/` | Dynamic Sessions 自动化与清理 |
| `scripts/aca-sandboxes/` | ACA Sandboxes 自动化与清理 |
| `tests/` | Policy、artifact、approval 及 Gateway offline 测试 |
过往验证依据保存在 [Dynamic Sessions 验证记录](docs/dynamic-sessions/validation.md) 和 [ACA Sandboxes 验证记录](docs/aca-sandboxes/validation.md) 中。
## 通用安全原则
- 在执行 Model 生成的任务前,优先执行 deterministic policy。
- 切勿将 Token、endpoint、session 或 Sandbox ID 以及生产环境 credential 包含在 prompt、浏览器、artifact 及用户可见的 log 中。
- 默认拒绝 Outbound 访问,仅允许范围和过期时间明确的例外。
- Source scanning 仅作为 isolation、resource limit 及 credential 分离的辅助手段使用。
- 对输入进行 quarantine,并验证其实际格式、大小、archive、malware 及 tenant ownership。
- 对输出进行 staging,验证格式和 SHA-256,生成安全的 preview 或 Diff 后,需明确批准。
- 最小权限的 Connector 在提权前需再次验证 artifact hash。
- 限制 Concurrency、执行时间、retry、storage、lifecycle 及成本。
- 无论成功、失败、取消还是 process restart,都必须执行清理。
## 清理
在删除前确认目标资源。
- Dynamic Sessions:
`RESOURCE_GROUP=rg-ai-workspace-dynamic-sessions-lab CONFIRM_DELETE=yes bash scripts/dynamic-sessions/cleanup.sh`
— [Python 清理](labs/dynamic-sessions/01A_Python_Code_Interpreter_Admin_Lab.md#17-정리),
[Office 清理](labs/dynamic-sessions/02A_Office_Custom_Container_Admin_Lab.md#17-정리)
- ACA Sandboxes:
`export ACA_PYTHON="${ACA_PYTHON:-.work/aca-sandboxes/venv/bin/python}"`,
然后执行 `RESOURCE_GROUP=rg-ai-workspace-aca-sandboxes-lab CONFIRM_DELETE=yes $ACA_PYTHON scripts/aca-sandboxes/cleanup.py`
— [Sandbox 清理](labs/aca-sandboxes/03A_ACA_Sandboxes_Admin_Lab.md#19-정리),
[Office 清理](labs/aca-sandboxes/03C_ACA_Sandboxes_Office_Admin_Lab.md#14-정리)
标签:AI工作负载, Azure, 动手实验, 安全隔离, 容器应用, 应用安全, 沙箱环境, 请求拦截, 逆向工具