ZenML项目中的密钥管理实践指南
zenml 项目地址: https://gitcode.com/gh_mirrors/zen/zenml
前言
在现代机器学习工作流中,密钥管理是一个至关重要的环节。ZenML作为一个开源的机器学习操作(MLOps)框架,提供了一套完善的密钥管理机制,帮助开发者安全地处理敏感信息。本文将详细介绍如何在ZenML项目中创建、管理和使用密钥。
密钥创建方法
通过CLI创建密钥
ZenML提供了便捷的命令行接口来创建密钥:
zenml secret create <SECRET_NAME> \
--<KEY_1>=<VALUE_1> \
--<KEY_2>=<VALUE_2>
对于更复杂的场景,还可以使用JSON或YAML格式批量创建密钥:
zenml secret create <SECRET_NAME> \
--values='{"key1":"value2","key2":"value2"}'
交互式创建:对于需要更高安全性的场景,可以使用交互模式:
zenml secret create <SECRET_NAME> -i
大文件处理:当密钥值过大或包含特殊字符时,可以从文件读取:
zenml secret create <SECRET_NAME> \
--key=@path/to/file.txt
通过Python SDK创建密钥
对于喜欢编程方式的管理者,可以使用Python SDK:
from zenml.client import Client
client = Client()
client.create_secret(
name="my_secret",
values={
"username": "admin",
"password": "abc123"
}
)
密钥作用域管理
ZenML支持两种密钥作用域:
- 工作区作用域(默认):密钥在特定工作区内共享
- 用户作用域:密钥仅对特定用户可见
设置用户作用域密钥:
zenml secret create <SECRET_NAME> \
--scope user \
--<KEY_1>=<VALUE_1>
ZenML在查找密钥时遵循特定顺序:先查找用户作用域密钥,未找到时再查找工作区作用域密钥。
密钥使用实践
在堆栈组件中引用密钥
在配置堆栈组件时,可以使用{{SECRET_NAME.KEY}}
语法安全地引用密钥:
zenml experiment-tracker register mlflow \
--flavor=mlflow \
--tracking_username={{mlflow_secret.username}} \
--tracking_password={{mlflow_secret.password}}
验证级别控制
通过环境变量ZENML_SECRET_VALIDATION_LEVEL
可以控制密钥验证强度:
NONE
:不验证SECRET_EXISTS
:仅验证密钥存在SECRET_AND_KEY_EXISTS
(默认):验证密钥和键值对都存在
在步骤中获取密钥
在流水线步骤中可以直接获取密钥值:
@step
def secret_loader() -> None:
secret = Client().get_secret("mlflow_secret")
authenticate_to_some_api(
username=secret.secret_values["username"],
password=secret.secret_values["password"],
)
最佳实践建议
- 最小权限原则:根据实际需要选择密钥作用域
- 敏感信息隔离:避免在代码中硬编码密钥
- 定期轮换:建立密钥轮换机制
- 审计跟踪:记录密钥的创建和使用情况
通过ZenML的密钥管理系统,开发者可以安全、高效地管理机器学习工作流中的敏感信息,同时保持配置的灵活性和可维护性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考