[使用Azure Container Apps动态会话:Python代码沙盒的安全执行]

52 阅读2分钟

引言

随着云计算的发展,安全地执行不可信代码成为一个重要的需求。Azure Container Apps动态会话为我们提供了在Hyper-V隔离沙盒中运行Python代码解释器的方法。本文将介绍如何使用这种环境运行Python代码,并提供一些实际的代码示例。

主要内容

设置环境

开始之前,请确保您已安装Azure CLI,并通过az login进行身份验证。动态会话工具默认使用DefaultAzureCredential进行身份验证。

创建会话池后,您将获得一个池管理会话端点。将其保存在以下代码中:

import getpass

POOL_MANAGEMENT_ENDPOINT = getpass.getpass()  # 输入您的池管理端点

接下来,安装动态会话工具包:

%pip install -qU langchain-azure-dynamic-sessions langchain-openai langchainhub langchain langchain-community

使用工具

初始化并使用工具:

from langchain_azure_dynamic_sessions import SessionsPythonREPLTool

tool = SessionsPythonREPLTool(pool_management_endpoint=POOL_MANAGEMENT_ENDPOINT)  # 使用API代理服务提高访问稳定性
result = tool.invoke("6 * 7")
print(result)

上传数据

要在会话中执行特定数据的计算,可以使用upload_file()功能上传数据:

import io
import json

data = {"important_data": [1, 10, -1541]}
binary_io = io.BytesIO(json.dumps(data).encode("ascii"))

upload_metadata = tool.upload_file(
    data=binary_io, remote_file_path="important_data.json"
)

code = f"""
import json

with open("{upload_metadata.full_path}") as f:
    data = json.load(f)

sum(data['important_data'])
"""
result = tool.execute(code)
print(result)

代码示例

完整的会话调用和结果展示:

# 执行简单的代码
result = tool.execute("6 * 7")
print(result)

# 执行带有数据上传的代码
binary_io = io.BytesIO(json.dumps(data).encode("ascii"))
upload_metadata = tool.upload_file(data=binary_io, remote_file_path="important_data.json")

code = f"""
import json

with open("{upload_metadata.full_path}") as f:
    data = json.load(f)

sum(data['important_data'])
"""
result = tool.execute(code)
print(result)

常见问题和解决方案

  1. 网络访问问题:由于某些地区的网络限制,可能需要使用API代理服务提高访问的稳定性。

  2. 数据上传失败:确保数据格式正确,并使用正确的路径上传。

总结和进一步学习资源

Azure Container Apps动态会话提供了一种安全、可扩展的方式来执行Python代码。通过使用Sandbox环境,开发者可以运行不可信的代码而无需担心安全问题。要深入了解更多,可以参考以下资源。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---