背景
第2篇博客讲解了 PiE 的大致工作原理,第3篇介绍了数据流的四个步骤。本篇解答一个关键问题:微软为什么选择让 PiE 运行在云端,而不是像 VBA 一样本地执行?
答案就是:安全。
为什么不用本地 Python?
在了解安全机制之前,先理解一个关键问题:为什么 PiE 不直接调用本地安装的 Python?
答案同样与安全有关。传统本地 Python 环境面临以下风险:
| 风险类型 | 说明 |
|---|---|
| 版本冲突 | 不同项目需要不同 Python 版本,环境配置复杂 |
| 恶意库 | PyPI 上的包可能被植入恶意代码 |
| 系统访问 | 本地 Python 可以读写文件、访问网络、执行系统命令 |
| 依赖地狱 | 第三方库之间的依赖关系难以管理 |
微软的策略是:不让 Python 代码接触本地环境,而是创建一个完全受控的云端执行环境。
隔离容器的工作原理
PiE 运行在 Azure 云端的**隔离容器(Secured Container)**中。这个容器有以下几个关键特性:
1. 完全隔离
容器与本地计算机完全隔离:
- 无法访问本地文件系统
- 无法访问本地设备(摄像头、麦克风等)
- 无法访问本地网络
- 无法执行系统级 API 调用
2. 预审核库
PiE 只能使用微软预审核过的 Python 库。这些库经过安全扫描,确保不包含恶意代码。常用的数据分析库(如 pandas、numpy、matplotlib)都在白名单中。
3. 数据只进不出
容器只能通过 xl() 函数与 Excel 交换数据:
- 读取:只能从 Excel 单元格、表格、Power Query 连接读取数据
- 写入:只能向 Excel 单元格写入数据
- 禁止:无法读取文件、网络资源、其他应用程序
4. 工作簿级别的容器生命周期
打开工作簿 → 创建容器 → 执行代码 → 关闭工作簿 → 销毁容器
容器在工作簿打开期间保持运行,关闭后立即销毁。这意味着:
- Python 代码无法持久化存储任何数据
- 每次打开工作簿,都是一个全新的容器
- 容器中的所有数据都是临时的
xl() 函数的限制
xl() 函数是 PiE 与 Excel 交互的唯一通道,它有严格的安全限制。Python 只能通过内置的 xl() 函数,以引用的方式读取当前工作簿或 Power Query 连接的数据。无法读取工作簿的宏代码(VBA)、图表对象、数据透视表等对象。
能做的事 ✔️
# 读取 Excel 单元格数据
df = xl("A1:C10")
# 读取命名表格
df = xl("SalesTable[#All]")
# 读取 Power Query 数据源
df = xl("PowerQuery_SalesData")
不能做的事 ❌
- 无法读取单元格中的公式
- 无法跨工作簿访问其他文件的数据
- 无法访问图表、数据透视表等对象
- 无法读取 VBA 宏代码
这些限制确保了:Python 代码不会被恶意利用,也无法渗透到 Excel 工作簿之外。
数据隐私
用户普遍关心一个问题:Excel 数据是否会被微软存储?
根据微软的官方说明:
- Python 代码在 Azure 容器中执行后,结果立即返回
- 容器执行完成后立即销毁,不保留数据
- Excel 数据不会存储在 Azure 服务器上
对于企业用户,PiE 符合以下合规标准和认证:
| 认证/标准 | 说明 |
|---|---|
| GDPR | 欧盟通用数据保护条例 |
| EU Data Boundary (EUDB) | 欧盟数据边界,欧盟用户容器运行于欧盟区域 |
| HITRUST | 医疗信息安全认证 |
| HIPAA | 医疗保健可携带性和责任法案 |
与 VBA 的对比
| 特性 | VBA | PiE |
|---|---|---|
| 执行环境 | 本地 | 云端 |
| 需要网络 | 否 | 是 |
| 文件访问 | 可以 | 受限 |
| 网络访问 | 可以 | 禁止 |
| 恶意代码风险 | 高 | 低 |
| 环境配置 | 复杂 | 无需配置 |
VBA 的强大在于可以本地执行所有操作,但这也意味着恶意 VBA 代码可以造成严重破坏,例如宏病毒。PiE 通过云端执行牺牲了部分灵活性,换来了更高的安全性。
总结
PiE 选择云端执行的核心目的是安全:
- 隔离容器 —— Python 代码运行在完全隔离的云端环境
- 只进不出 —— 只能通过
xl()与 Excel 交换数据 - 白名单库 —— 只能使用预审核的 Python 库
- 即用即毁 —— 容器在工作簿关闭后立即销毁
这些机制共同构成了 PiE 的安全护城河,让 Excel 用户可以放心使用 Python 进行数据分析,而无需担心恶意代码的风险。

394

被折叠的 条评论
为什么被折叠?



