Yandex.Cloud Lockbox 金鑰後端¶
本主題介紹如何配置 Apache Airflow 以使用 Yandex Lockbox 作為金鑰後端以及如何管理金鑰。
入門¶
在開始之前,請確保您已在 Apache Airflow 安裝中安裝了 yandex provider
pip install apache-airflow-providers-yandex
啟用 Yandex Lockbox 金鑰後端¶
要啟用 Yandex Lockbox 作為金鑰後端,請在 airflow.cfg 檔案的 [secrets] 部分中將 LockboxSecretBackend 指定為您的 backend。
以下是示例配置
[secrets]
backend = airflow.providers.yandex.secrets.lockbox.LockboxSecretBackend
您也可以使用環境變數設定此項
export AIRFLOW__SECRETS__BACKEND=airflow.providers.yandex.secrets.lockbox.LockboxSecretBackend
您可以使用 airflow config get-value 命令驗證配置選項是否已正確設定
$ airflow config get-value secrets backend
airflow.providers.yandex.secrets.lockbox.LockboxSecretBackend
後端引數¶
下一步是使用 backend_kwargs 選項配置後端引數,您可以提供以下引數
yc_oauth_token: 指定用於連線到 Yandex Lockbox 的使用者帳戶 OAuth 令牌。引數值應類似於y3_xx123。yc_sa_key_json: 指定 JSON 格式的服務帳戶金鑰。引數值應類似於{"id": "...", "service_account_id": "...", "private_key": "..."}。yc_sa_key_json_path: 指定 JSON 檔案路徑中的服務帳戶金鑰。引數值應類似於/home/airflow/authorized_key.json,檔案內容格式應如下所示:{"id": "...", "service_account_id": "...", "private_key": "..."}。yc_connection_id: 指定用於連線到 Yandex Lockbox 的連線 ID。預設值為yandexcloud_default。folder_id: 指定在其中搜索 Yandex Lockbox 金鑰的資料夾 ID。如果設定為None(在 JSON 中為null),請求將使用連線中指定的folder_id(如果已指定)。connections_prefix: 指定讀取金鑰以獲取連線的字首。如果設定為None(在 JSON 中為null),則不會向 Yandex Lockbox 傳送獲取連線的請求。預設值為airflow/connections。variables_prefix: 指定讀取金鑰以獲取變數的字首。如果設定為None(在 JSON 中為null),則不會向 Yandex Lockbox 傳送獲取變數的請求。預設值為airflow/variables。config_prefix: 指定讀取金鑰以獲取配置的字首。如果設定為None(在 JSON 中為null),則不會向 Yandex Lockbox 傳送獲取變數的請求。預設值為airflow/config。(注:原文此處可能存在筆誤,將“配置”誤寫為“變數”)sep: 指定連線secret_prefix和secret_id的分隔符。預設值為/。endpoint: 指定 API 端點。如果設定為None(在 JSON 中為null),請求將使用連線中指定的端點(如果已指定);否則,將使用預設端點。
確保將所有選項以 JSON 字典的形式提供。
例如,如果您想將 connections_prefix 設定為 "example-connections-prefix",將 variables_prefix 設定為 "example-variables-prefix",則您的配置檔案應如下所示
[secrets]
backend = airflow.providers.yandex.secrets.lockbox.LockboxSecretBackend
backend_kwargs = {"connections_prefix": "example-connections-prefix", "variables_prefix": "example-variables-prefix"}
設定憑據¶
您需要指定憑據或 yandexcloud 連線的 ID 以連線到 Yandex Lockbox。
將按以下優先順序使用憑據
OAuth 令牌
檔案中的 JSON 格式服務帳戶金鑰
JSON 格式服務帳戶金鑰
Yandex Cloud 連線
如果您未指定任何憑據,系統將使用預設連線 ID:yandexcloud_default。
儲存和檢索連線¶
要儲存連線,您需要建立名稱格式如下的金鑰:{connections_prefix}{sep}{connection_name}。
有效負載必須包含帶有任意鍵的文字值。
以 URI 形式儲存連線¶
儲存連線的主要方式是使用連線 URI 表示形式,例如 mysql://myname:mypassword@myhost.com?this_param=some+val&that_param=other+val%2A。
以下是使用 yc CLI 建立金鑰的示例
$ yc lockbox secret create \
--name airflow/connections/mysqldb \
--payload '[{"key": "value", "text_value": "mysql://myname:mypassword@myhost.com?this_param=some+val&that_param=other+val%2A"}]'
done (1s)
name: airflow/connections/mysqldb
以 JSON 形式儲存連線¶
另一種儲存連線的方式是使用 JSON 格式
{
"conn_type": "mysql",
"host": "host.com",
"login": "myname",
"password": "mypassword",
"extra": {
"this_param": "some val",
"that_param": "other val*"
}
}
以下是使用 yc CLI 建立金鑰的示例
$ yc lockbox secret create \
--name airflow/connections/my_sql_db_json \
--payload '[{"key": "value", "text_value": "{\"conn_type\": \"mysql\", \"host\": \"host.com\", \"login\": \"myname\", \"password\": \"mypassword\", \"extra\": {\"this_param\": \"some val\", \"that_param\": \"other val*\"}}"}]'
done (1s)
name: airflow/connections/my_sql_db_json
檢索連線¶
要檢查連線是否從 Lockbox 金鑰後端正確讀取,您可以使用 airflow connections get
$ airflow connections get mysqldb -o json
[{"id": null, "conn_id": "mysqldb", "conn_type": "mysql", "description": null, "host": "host.com", "schema": "", "login": "myname", "password": "mypassword", "port": null, "is_encrypted": "False", "is_extra_encrypted": "False", "extra_dejson": {"this_param": "some val", "that_param": "other val*"}, "get_uri": "mysql://myname:mypassword@myhost.com/?this_param=some+val&that_param=other+val%2A"}]
儲存和檢索變數¶
要儲存變數,您需要建立名稱格式如下的金鑰:{variables_prefix}{sep}{variable_name}。有效負載必須包含帶有任意鍵的文字值。
變數值可能如下所示:some_secret_data。
以下是使用 yc CLI 建立金鑰的示例
$ yc lockbox secret create \
--name airflow/variables/my_variable \
--payload '[{"key": "value", "text_value": "some_secret_data"}]'
done (1s)
name: airflow/variables/my_variable
要檢查變數是否從 Lockbox 金鑰後端正確讀取,您可以使用 airflow variables get
$ airflow variables get my_variable
some_secret_data
儲存和檢索配置¶
Lockbox 金鑰後端也適用於儲存敏感配置。
例如,我們將為您提供用於 sentry.sentry_dsn 的金鑰,並使用 sentry_dsn_value 作為配置值名稱。
要儲存配置,您需要建立名稱格式如下的金鑰:{config_prefix}{sep}{config_value_name}。有效負載必須包含帶有任意鍵的文字值。
以下是使用 yc CLI 建立金鑰的示例
$ yc lockbox secret create \
--name airflow/config/sentry_dsn_value \
--payload '[{"key": "value", "text_value": "https://public@sentry.example.com/1"}]'
done (1s)
name: airflow/config/sentry_dsn_value
然後,我們需要在 Apache Airflow 配置中將配置值名稱指定為 {key}_secret
[sentry]
sentry_dsn_secret = sentry_dsn_value
要檢查配置值是否從 Lockbox 金鑰後端正確讀取,您可以使用 airflow config get-value
$ airflow config get-value sentry sentry_dsn
https://public@sentry.example.com/1
清理您的金鑰¶
您可以使用 yc CLI 輕鬆刪除您的金鑰
$ yc lockbox secret delete --name airflow/connections/mysqldb
name: airflow/connections/mysqldb