Airflow Summit 2025 将于 10 月 07-09 日举行。立即注册获取早鸟票!

屏蔽敏感数据

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

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

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

自动屏蔽由 Connection 或 Variable 访问触发。这意味着如果您通过 XCom 或任何其他旁路通道传递敏感值,当其在下游任务中打印时将不会被屏蔽。

敏感字段名称

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

如果 Variable 的值、渲染模板字典、XCom 字典或 Connection 的额外 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 文件或 operator 的 execute 函数中使用 mask_secret 函数来实现。例如

@task
def my_func():
    from airflow.sdk.execution_time.secrets_masker import mask_secret

    mask_secret("custom_value")

    ...

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

        mask_secret("custom_value")

        ...

屏蔽必须在产生任何日志/输出之前设置才能生效。

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

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

如果您需要向 KubernetesPodOperator 传递密钥,您应该使用原生的 Kubernetes secrets 或使用 Airflow Connection 或 Variables 动态检索密钥。

此条目是否有帮助?