在Spark組態屬性或環境變數中使用秘密
本文提供如何在Spark組態屬性或環境變數中參考秘密的詳細數據。 系統會從筆記本輸出及 Spark 驅動程式和執行程式記錄修訂擷取的祕密。
重要
這項功能處於公開預覽狀態。
安全性考量
如果叢集上的所有使用者都無法使用,Databricks 不建議將秘密儲存在叢集環境變數中。 在參考 Spark 組態屬性或環境變數中的秘密時,請記住下列安全性影響:
任何在叢集上具有 CAN ATTACH TO 許可權或筆記本上執行許可權的使用者,都可以從筆記本內讀取叢集環境變數。
如果未在叢集上啟用 table 訪問控制,任何具有叢集的 CAN ATTACH TO 許可權或筆記本上執行許可權的使用者都可以從筆記本內讀取 Spark 組態屬性。 這包括沒有直接讀取秘密許可權的使用者。
秘密不會從 Spark 驅動程式記錄
stdout
和stderr
數據流中修訂。 為了保護敏感性資料,Spark 驅動程式記錄預設只能由對工作具有 [可管理] 權限、單一使用者存取模式和共用存取模式叢集的使用者檢視。在「無隔離共用存取模式叢集」上,Spark 驅動程式記錄可由具有 CAN ATTACH TO 或 CAN MANAGE 權限的使用者檢視。 若要 limit 只能將記錄讀取給 CAN MANAGE 權限的使用者,set
spark.databricks.acl.needAdminPermissionToViewLogs
true
。
需求
下列需求適用於在 Spark 組態屬性和環境變數中參考秘密:
- 叢集擁有者必須具有秘密範圍的 CAN READ 許可權。
- 您必須是叢集擁有者,才能在Spark組態屬性或環境變數中新增或編輯秘密。
- 如果密碼已更新,您必須重新啟動叢集,才能再次擷取秘密。
- 您必須擁有叢集的 CAN MANAGE 許可權,才能刪除秘密 Spark 組態屬性或環境變數。
使用Spark組態屬性參考秘密
您可以使用下列格式指定 Spark 組態屬性中秘密的參考:
spark.<property-name> {{secrets/<scope-name>/<secret-name>}}
將:
-
<scope-name>
具有秘密範圍的名稱。 -
<secret-name>
具有範圍中秘密的唯一名稱。 -
<property-name>
使用Spark組態屬性
每個Spark組態屬性只能參考一個秘密,但您可以設定多個Spark屬性來參考秘密。
例如:
spark.password {{secrets/scope1/key1}}
若要擷取筆記本中的秘密,並使用它:
Python
spark.conf.get("spark.password")
SQL
SELECT ${spark.password};
參考環境變數中的秘密
您會以下欄格式指定環境變數中的秘密路徑:
<variable-name>={{secrets/<scope-name>/<secret-name>}}
當您參考祕密時,可以使用任何有效的變數名稱。 環境變數中參考的祕密存取權取決於設定叢集的使用者權限。 雖然儲存在環境變數中的秘密可供所有叢集使用者存取,但會從純文本顯示進行修訂,類似於其他秘密參考。
參考秘密的環境變數可從叢集範圍的 init 腳本存取。 請參閱 Set 並使用環境變數搭配 init 腳本。
例如:
您 set 環境變數來參考秘密:
SPARKPASSWORD={{secrets/scope1/key1}}
若要擷取 init 腳本中的秘密,請使用下列模式進行存取 $SPARKPASSWORD
:
if [ -n "$SPARKPASSWORD" ]; then
# code to use ${SPARKPASSWORD}
fi