在Dataphin中安全地使用账号密码

更新时间:
复制为 MD 格式

场景

Dataphin中,常常需要连接外部服务以实现特定功能,例如通过连接外部FTP检测FTP服务的连通性。实现此类功能通常采用ShellPython代码任务。然而,由于外部服务通常需要访问鉴权,因此在ShellPython代码中需向服务端发送账号和密码(密钥)。那么如何在ShellPython任务中安全地使用这些账号和密码呢?

解决方案一:离线计算模板的应用

离线计算模板配合加密参数使用,可解决以上场景问题。

  1. 新建一个离线计算模板,模板名称为templ、节点类型为Shell。详细创建步骤请参见新建离线计算模板image

  2. 在离线计算模板中,输入以下模板代码。

    echo @@{account}
    echo @@{password}
  3. 打开属性面板,在属性面板的参数配置中开启账号和密码参数的加密选项。配置完成后单击确定image

  4. 单击顶部菜单栏的调试,查看所填参数及其参数值。开启参数加密后,参数值将被替换为******。调试成功后单击提交

  5. 新建Shell计算任务,开启使用模板,并选择此前创建的templ模板。

    Shell任务中,计算模板的代码仅可读,不可编辑。您可打开模板参数面板,重新设置模板参数值。imageimage

适用场景

此种解决方案适用的场景如下:

  • 多个任务,其处理逻辑类似,可以通过设置参数,后续传入不同的参数值来实现不同的目标。

  • 处理逻辑包含连接外部服务,需要通过账号密码来鉴权。

例如,可以检测一个FTP服务器上的多个文件是否已经准备就绪。可以将检测逻辑(包括通过账号密码连接FTP)封装在离线代码模板中,并将需要检测的目标文件名设定为模板参数(以明文形式,不进行加密)。对于每一个需要检测的文件,创建一个引用该模板的任务实例,并将文件名参数的取值设置为真实文件名。

安全性解析

安全性方面,使用离线代码模板,账号密码的安全保障措施如下:

  • 模板参数经过加密处理后,在查看模板时,账号和密码将以非明文形式展示。当关闭加密功能时,参数值将被清空,而不会转为明文显示。

  • 在打印运行日志的加密参数时,最终输出将进行脱敏处理。

  • 仅超级管理员具备创建和编辑离线代码模板的权限,普通开发者不可修改离线代码模板中的代码,防止其通过其他方式(写入文件、发送至外部网络等)获取加密参数的取值。

  • 模板任务实例为只读,其他用户无法通过任务实例获取加密参数的取值。

解决方案二:全局变量的应用

前往规划 > 公共定义 > 全局变量中,新建全局变量。全局变量的变量类型选择为账号密码,并开启权限管控代码审核。详细创建步骤请参见变量组及全局变量

开启权限管控后,引用此变量之前,需申请对应权限;开启代码审核后,应用此变量的代码,每次提交前,均需由指定的代码审核人进行审批,审批通过后才可提交。image

账号密码全局变量创建成功后,全局列表页面中所展示的变量值为******。若在任务中引用此全局变量,此变量的参数值同样展示为******。运行任务时,系统不会自动填充运行值,防止其他用户编写代码获取变量取值。imageimage

任务提交时,因开启代码审核,所以需指定的审核人确认代码中是否存在不安全的使用方式,审核通过后才可成功提交。image.png

适用场景

账号密码全局变量适用于需要通过账号密码连接外部服务的场景,特别是当存在多个任务时,尽管每个任务的处理逻辑各异,但仍需集中管理账号密码。

安全性解析

使用账号密码全局变量的安全保障措施有:

  • 查看或编辑账号密码全局变量时,变量值加密展示。

  • 引用账号密码全局变量时,需要申请使用权限,可预防不当使用。

  • 引用了账号密码全局变量的代码,每次提交都需经过代码审核。审核人员将对代码进行检查,确认其中是否存在账号密码泄露的风险。