Secret.秘钥
概览
通常,工作流需要使用敏感数据:API密钥,密码,令牌,凭据等。作为最佳实践,绝不应将此类信息硬编码到工作流的源代码中,因为代码本身的保护级别不同。 此外,不应通过Prefect参数提供敏感数据,因为与许多task一样,Parameter概念抽象会存储其结果。
Prefect提供一种称为“Secret”的概念抽象来维护敏感数据。
Secret,和Prefect参数一样也是一种特殊的task,在flow中维护敏感数据。与常规task不同,Secret task被设计用来在运行时访问敏感数据,并使用特殊的ResultHandler来确保不存储结果
prefect.client.secrets API,提供用于维护敏感数据的接口。该API可以在task不可用的地方使用,包括通知,状态处理器和结果处理器
Secret保密
尽管Prefect采取措施确保Secret对象不会泄露敏感数据,但其他task可能并不那么小心。一旦将敏感数据加载到flow中,就可以将其用于任何目的。在处理敏感数据时,请务必谨慎。
机制
本地上下文
Secret基类首先通过prefect.context.secrets检查本地上下文中的敏感数据。这对于本地测试很有用,因为可以通过设置环境变量PREFECTCONTEXTSECRETS__FOO来将敏感数据添加到上下文中,该值绑定对应到上下文中的secrets.foo(如果操作系统区分大小写,则为secrets.FOO)。
Prefect云环境
如果在本地上下文中未找到敏感数据并且config.cloud.use_local_secrets=False,则Secret基类会向Prefect Cloud API查询存储的敏感数据。只有经过身份验证的Prefect Cloud Agent才能成功进行此调用。
环境变量
EnvVarSecret类从环境变量读取敏感数据。
Last updated