【发布时间】:2020-06-26 23:59:13
【问题描述】:
我们在 apache 气流中有许多 AWS 连接字符串,任何人都可以在气流网络服务器连接部分看到我们的访问密钥和秘密密钥。如何隐藏或屏蔽气流网络服务器中的敏感数据?
我们已经在气流配置中启用了身份验证,因此它不会允许未经授权的用户。但我不想在网络视图中显示我的密钥。
【问题讨论】:
我们在 apache 气流中有许多 AWS 连接字符串,任何人都可以在气流网络服务器连接部分看到我们的访问密钥和秘密密钥。如何隐藏或屏蔽气流网络服务器中的敏感数据?
我们已经在气流配置中启用了身份验证,因此它不会允许未经授权的用户。但我不想在网络视图中显示我的密钥。
【问题讨论】:
对于 Airflow 变量部分,如果变量名称包含 secret 或 password,Airflow 将自动隐藏任何值。对该值的检查不区分大小写,因此名称包含SECRET 的变量的值也将被隐藏。
【讨论】:
我找到了这个用例的解决方法。气流AWSHook中有一个选项,我们可以在连接字符串中传递密钥路径,而不是密钥和访问密钥。
/root/keys/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 中显式公开任何键 :)
【讨论】:
LDAP 身份验证模块能够为将成为管理员的组指定基于组的过滤器,并且能够查看该菜单以及其他内容。
见the documentation under security。
superuser_filter 和 data_profiler_filter 是可选的。如果已定义,这些配置允许您指定用户必须属于的 LDAP 组,以便拥有超级用户 (admin) 和数据探查器权限。如果未定义,所有用户都将是超级用户和数据分析器。
请注意,数据分析器可以在任何已定义的连接上运行即席查询。但是,他们看不到管理菜单。您可能不希望一组用户能够执行任意 SQL 或其他任何操作,因此还要设置该过滤器。
任何用户都可以在他们的 DAG 和任务中请求任何变量。将这些变量放在它们会在日志中显示的位置很容易。
数据库提供了一种以加密方式存储连接密码和变量值的方法,但这并不能解决您的所有问题。
【讨论】:
{"aws_access_key_id":"AID", "aws_secret_access_key": "AKEY"}
我很确定 AWS 挂钩还允许您将访问密钥放在连接屏幕上的“登录”框中,并将密钥放在“密码”框中。如果钩子发现登录框中有内容,它将使用该内容和密码框作为连接信息,这里是来自 source code 的 AWS Hook 的 sn-p:
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 的“额外”框中指定 region_name,否则它将无法正常工作。
【讨论】: