共用方式為


在Spark組態屬性或環境變數中使用秘密

本文提供如何在Spark組態屬性或環境變數中參考秘密的詳細數據。 系統會從筆記本輸出及 Spark 驅動程式和執行程式記錄修訂擷取的祕密。

重要

這項功能處於公開預覽狀態

安全性考量

如果叢集上的所有使用者都無法使用,Databricks 不建議將秘密儲存在叢集環境變數中。 在參考 Spark 組態屬性或環境變數中的秘密時,請記住下列安全性影響:

  • 任何在叢集上具有 CAN ATTACH TO 許可權或筆記本上執行許可權的使用者,都可以從筆記本內讀取叢集環境變數。

  • 如果未在叢集上啟用數據表訪問控制,任何具有叢集的 CAN ATTACH TO 許可權或筆記本上執行許可權的使用者都可以從筆記本內讀取 Spark 組態屬性。 這包括沒有直接讀取秘密許可權的使用者。

  • 秘密不會從 Spark 驅動程式記錄 stdoutstderr 數據流中修訂。 為了保護敏感性資料,Spark 驅動程式記錄預設只能由對工作具有 [可管理] 權限、單一使用者存取模式和共用存取模式叢集的使用者檢視。

    在「無隔離共用存取模式叢集」上,Spark 驅動程式記錄可由具有 CAN ATTACH TO 或 CAN MANAGE 權限的使用者檢視。 若要限制只有具有 [可管理] 權限的使用者才能讀取記錄,請將 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 腳本存取。 請參閱 設定及使用環境變數與 init 腳本

例如:

您可以設定環境變數來參考秘密:

SPARKPASSWORD={{secrets/scope1/key1}}

若要擷取 init 腳本中的秘密,請使用下列模式進行存取 $SPARKPASSWORD

if [ -n "$SPARKPASSWORD" ]; then
  # code to use ${SPARKPASSWORD}
fi