屏蔽敏感数据

默认情况下,当连接密码和敏感变量以及连接额外(JSON)字段中的密钥出现在任务日志、变量和 UI 的渲染字段视图中时,Airflow 将对其进行屏蔽。

它通过查找出现在输出中任何位置的特定来实现这一点。这意味着,如果你的连接密码为 a,那么日志中出现的每个字母 a 都将被替换为 ***

要禁用屏蔽,可以将 hide_sensitive_var_conn_fields 设置为 false。

自动屏蔽由连接或变量访问触发。这意味着,如果你通过 XCom 或任何其他侧通道传递敏感值,则在下游任务中打印时它不会被屏蔽。

敏感字段名称

启用屏蔽后,Airflow 将始终屏蔽任务访问的每个连接的密码字段。

如果变量、渲染模板字典、XCom 字典或连接的额外 JSON blob 的字段名称包含 ('access_token', 'api_key', 'apikey', 'authorization', 'passphrase', 'passwd', 'password', 'private_key', 'secret', 'token') 中的任何单词,它还会屏蔽其值。此列表也可以扩展

[core]
sensitive_var_conn_names = comma,separated,sensitive,names

添加您自己的掩码

如果你想屏蔽其他未通过上述方法屏蔽的密钥,你可以在 DAG 文件或操作符的 execute 函数中使用 mask_secret 函数进行屏蔽。例如

@task
def my_func():
    from airflow.utils.log.secrets_masker import mask_secret

    mask_secret("custom_value")

    ...

class MyOperator(BaseOperator):
    def execute(self, context):
        from airflow.utils.log.secrets_masker import mask_secret

        mask_secret("custom_value")

        ...

必须在生成任何日志/输出之前设置掩码才能生效。

使用环境变量时不进行屏蔽

当你使用某些操作符(例如 airflow.providers.cncf.kubernetes.operators.pod.KubernetesPodOperator)时,你可能会试图通过环境变量传递密钥。这是一种非常糟糕的做法,因为环境变量对于任何有权查看进程环境的人都是可见的——通过环境变量传递的此类密钥将不会被 Airflow 屏蔽。

如果你需要将密钥传递给 KubernetesPodOperator,你应该使用原生的 Kubernetes 密钥,或者使用 Airflow 连接或变量来动态检索密钥。

此条目是否有帮助?