如何隐藏/屏蔽来自气流连接和变量部分的敏感数据?

时间:2018-03-28 07:11:38

标签: python airflow

我们在apache气流中有许多AWS连接字符串,任何人都可以在气流网络服务器连接部分看到我们的访问密钥和密钥。如何隐藏或屏蔽气流网络服务器中的敏感数据?

enter image description here

我们已经在气流配置中启用了身份验证,因此不允许未经授权的用户。但我不想在网页视图中显示我的密钥。

4 个答案:

答案 0 :(得分:1)

我找到了此用例的解决方法。气流AWSHook中有一个选项,我们可以在连接字符串中传递密钥路径而不是密钥和访问密钥。

enter image description here

  

/根/键/ aws_keys

[default]
aws_access_key_id=<access key>
aws_secret_access_key=<secret key>
region=<region>

[s3_prod]
aws_access_key_id=<access key>
aws_secret_access_key=<secret key>
region=<region>

它如何运作?首先,它将检查连接字符串中的额外参数,以便添加任何aws键,否则它将检查密钥路径(s3_config_file)。如果两个选项都不可用,那么它将从boto.cfg文件中查找凭据。所以现在不需要在UI中显式公开任何键:)

答案 1 :(得分:1)

对于“气流变量”部分,如果变量名称包含secretpassword,Airflow将自动隐藏任何值。该值的检查不区分大小写,因此名称为SECRET的变量的值也将被隐藏。

答案 2 :(得分:0)

LDAP身份验证模块可以为将成为管理员的组指定基于组的过滤器,并能够查看该菜单,其余部分。

请参阅the documentation under security

  

superuser_filter和data_profiler_filter是可选的。如果已定义,则这些配置允许您指定用户必须属于的LDAP组,以便拥有超级用户(admin)和数据分析器权限。如果未定义,则所有用户都将成为超级用户和数据分析器。

请注意,数据分析器可以在任何已定义的连接上运行adhoc查询。然而,他们无法看到管理员菜单。您可能不希望一组用户能够执行任意SQL或其他任何操作,因此也设置该过滤器。

任何用户都可以在他们的DAG和任务中请求任何变量。将这些变量放在将在日志中显示的位置很容易。

数据库提供了一种以加密方式存储连接密码和变量值的方法,但这并不能解决您的所有问题。

答案 3 :(得分:0)

我很确定AWS钩子还允许您将访问密钥放在“登录”框中,并将密钥放在连接屏幕上的“密码”框中。如果钩子发现登录框中有东西,它会使用它和密码框作为连接信息,这里是AWS Hook的source code的片段:

    if self.aws_conn_id:
        try:
            connection_object = self.get_connection(self.aws_conn_id)
            if connection_object.login:
                aws_access_key_id = connection_object.login
                aws_secret_access_key = connection_object.password

            elif 'aws_secret_access_key' in connection_object.extra_dejson:
                aws_access_key_id = connection_object.extra_dejson['aws_access_key_id']
                aws_secret_access_key = connection_object.extra_dejson['aws_secret_access_key']

            elif 's3_config_file' in connection_object.extra_dejson:
                aws_access_key_id, aws_secret_access_key = \
                    _parse_s3_config(connection_object.extra_dejson['s3_config_file'],
                                     connection_object.extra_dejson.get('s3_config_format'))

我还发现你需要在Airflow 1.9中的AWSHook的“Extra”框中指定region_name,否则它将无效。