Python 如何隐藏/屏蔽气流连接和可变截面的敏感数据?

Python 如何隐藏/屏蔽气流连接和可变截面的敏感数据?,python,airflow,Python,Airflow,我们在ApacheAirflow中有许多AWS连接字符串,任何人都可以在airflow Web服务器连接部分中看到我们的访问密钥和密钥。如何在Web服务器中隐藏或屏蔽敏感数据 我们已经在airflow配置中启用了true身份验证,因此它不允许未经授权的用户。但是我不想在web视图中显示我的密钥。LDAP身份验证模块提供了为将成为管理员的组指定基于组的筛选器的功能,并且能够查看该菜单以及其他内容 看 超级用户过滤器和数据探查器过滤器是可选的。如果已定义,这些配置允许您指定用户必须属于的LDAP组

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


我们已经在airflow配置中启用了true身份验证,因此它不允许未经授权的用户。但是我不想在web视图中显示我的密钥。

LDAP身份验证模块提供了为将成为管理员的组指定基于组的筛选器的功能,并且能够查看该菜单以及其他内容

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

请注意,数据探查器可以对任何已定义的连接运行临时查询。但是,他们看不到管理菜单。您可能不希望一组用户能够在这些服务器上执行任意SQL或其他操作,因此也要设置该筛选器

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


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

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

/根/键/aws\U键

[默认值]
aws\u访问\u密钥\u id=
aws\u密码\u访问\u密钥=
区域=
[s3_prod]
aws\u访问\u密钥\u id=
aws\u密码\u访问\u密钥=
区域=

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

我很确定AWS钩子还允许您将访问密钥放入连接屏幕上的“登录”框中,将密钥放入“密码”框中。如果钩子发现登录框中有内容,它将使用该内容和密码框作为连接信息,以下是AWS钩子的代码片段:

    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'))

我还发现,您需要在气流1.9中的AWSHAKE的“额外”框中指定
区域\u名称
,否则它将不起作用。

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

是否有任何选项来屏蔽来自Web服务器的密码?如果我没有在气流配置中启用身份验证,那么它将向外部世界公开我的密钥。@MJK IIRC/admin/connection/和/admin/connection/edit ui不加载也不显示密码。字段是空的。编辑时将其保留为空,更新将保留任何存储为密码的内容不变。或者输入一些东西来设置它。在HTTPS(+身份验证?)上执行此操作。如果有人编写操作员记录连接的详细信息,则日志中显示的密码问题仍然存在。用户界面中会显示额外的连接。这对s3连接类型不好,可能对其他连接类型不好。例如,
{“aws\u访问密钥\u id”:“AID”,“aws\u secret\u访问密钥”:“AKEY”}
    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'))