- 场景
在Dataphin中, 经常遇到需要连接外部服务来实现一些特定的功能, 如连接外部FTP检测FTP服务的连通性. 实现此类功能, 一般是使用shell或者Python代码任务. 由于外部服务大多都有访问鉴权, 就需要在shell/Python代码中向服务端发送账号密码(密钥),如何在shell或者Python任务中安全的使用账号密码?
- 解决方案及功能
离线代码模板+加密参数
使用流程
- 点击导航菜单"计算模板", 点击新建"离线计算模板", 名称为 templ, 节点类型为 shell
- 输入模板代码, 代码中的 账号, 密码 使用变量代替 (使用 @@{变量名} 的方式自由定义模板参数变量). 打开"模板信息", 在"参数配置"中, 开启 账号, 密码 两个模板参数的加密选项.
- 点击工具栏"调试", 调试代码模板. 日志中如果有打印输出加密的参数变量, 将被替换为 "******". 调试后, 提交.
- 在"计算任务"中, 新建 shell 任务, 选择代码模板 templ, 即可新建一个 templ 模板的任务实例. 离线代码模板的任务实例是只读模式, 不可编辑修改代码, 可以重新设置模板参数值 (覆盖模板默认参数值).
安全性解析
使用离线代码模板, 账号密码的安全保障措施有:
- 模板参数加密后, 查看模板时, 账号密码展示为非明文样式. 关闭加密时, 参数值将清空, 而不是将参数值转为明文显示.
- 向运行日志打印加密参数时, 最终输出将做脱敏处理.
- 只有超级管理员可以创建和编辑离线代码模板, 普通开发者不可修改离线代码模板的代码, 杜绝以其他方式(如: 写入文件, 发送给外部网络)获取加密参数的取值.
- 模板任务实例为只读, 其他用户无法通过任务实例获取加密参数的取值.
适用场景
离线代码模板+加密参数 的适用场景如下:
- 多个任务, 处理逻辑类似, 可以通过设置参数, 传入不同的参数值来实现不同的目标.
- 处理逻辑包含连接外部服务, 需要通过账号密码来鉴权
比如, 检测一个ftp服务器上的多个文件是否已经准备好. 可以将检测的逻辑(包含通过账号密码连接ftp)放入离线代码模板, 将需要检测的目标文件名设置为模板参数(明文, 不加密). 为每一个需要检测的文件创建一个引用该模板任务实例, 设置文件名参数的取值为 真实文件名.