遮罩敏感資料¶
預設情況下,當連線密碼和敏感變數以及連線額外 (JSON) 欄位中的金鑰出現在任務日誌、變數和 UI 的「已呈現」欄位檢視中時,Airflow 會遮罩這些資料。
它透過尋找出現在輸出中任何位置的特定值來執行此操作。這表示如果您有一個密碼為 a
的連線,則日誌中字母 a 的每個實例都將被替換為 ***
。
若要停用遮罩,您可以將 hide_sensitive_var_conn_fields 設定為 false。
自動遮罩是由連線或變數存取觸發的。這表示如果您透過 XCom 或任何其他側通道傳遞敏感值,則在下游任務中列印時,它將不會被遮罩。
敏感欄位名稱¶
啟用遮罩時,Airflow 將始終遮罩任務存取的每個連線的密碼欄位。
如果名稱包含 ('access_token'、'api_key'、'apikey'、'authorization'、'passphrase'、'passwd'、'password'、'private_key'、'secret'、'token') 中的任何單字,它還將遮罩變數的值、呈現的範本字典、XCom 字典或連線額外 JSON Blob 的欄位。此列表也可以擴充
[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 連線或變數來動態檢索密鑰。