密碼
秘密是儲存秘密數據的金鑰值組,其金鑰名稱在秘密範圍內是唯一的。 每個範圍限制為1000個秘密。 允許的秘密值大小上限為 128 KB。
另 請參閱秘密 API。
建立祕密
秘密名稱不區分大小寫。
建立秘密的方法取決於您使用的是 Azure 金鑰保存庫 支援的範圍或 Databricks 支援的範圍。
在 Azure 金鑰保存庫 支援的範圍內建立秘密
若要在 Azure 金鑰保存庫 中建立秘密,請使用 Azure Set Secret REST API 或 Azure 入口網站 UI。
在 Databricks 支援的範圍內建立秘密
若要使用 Databricks CLI 在 Databricks 支持的範圍內建立秘密(0.205 版和更新版本):
databricks secrets put-secret --json '{
"scope": "<scope-name>",
"key": "<key-name>",
"string_value": "<secret>"
}'
如果您要建立多行密碼,您可以使用標準輸入來傳遞秘密。 例如:
(cat << EOF
this
is
a
multi
line
secret
EOF
) | databricks secrets put-secret <secret_scope> <secret_key>
您也可以從檔案提供秘密。 如需撰寫秘密的詳細資訊,請參閱 什麼是 Databricks CLI?。
列出密碼
若要列出指定範圍中的秘密:
databricks secrets list-secrets <scope-name>
回應會顯示秘密的相關元數據資訊,例如秘密的金鑰名稱。 您可以使用筆記本或作業中的 Secrets 公用程式 (dbutils.secrets) 來列出此元數據。 例如:
dbutils.secrets.list('my-scope')
讀取秘密
您可以使用 REST API 或 CLI 建立秘密,但您必須在筆記本或作業中使用 Secrets 公用程式 (dbutils.secrets) 讀取秘密。
刪除秘密
若要使用 Databricks CLI 從範圍中刪除秘密:
databricks secrets delete-secret <scope-name> <key-name>
您也可以使用 秘密 API。
若要從 Azure 金鑰保存庫 所支援的範圍中刪除秘密,請使用 Azure SetSecret REST API 或 Azure 入口網站 UI。
在Spark組態屬性或環境變數中使用秘密
重要
這項功能處於公開預覽狀態。
注意
適用於 Databricks Runtime 6.4 擴充支援和更新版本。
您可以在 Spark 組態屬性或環境變數中參考秘密。 擷取的秘密會從筆記本輸出和 Spark 驅動程式和執行程式記錄進行修訂。
重要
在參考 Spark 組態屬性或環境變數中的秘密時,請記住下列安全性影響:
如果未在叢集上啟用數據表訪問控制,任何具有可附加至叢集許可權或筆記本上執行許可權的使用者都可以從筆記本內讀取Spark組態屬性。 這包括沒有直接讀取秘密許可權的使用者。 Databricks 建議在所有叢集上啟用 數據表訪問控制 ,或使用秘密範圍管理秘密 的存取權。
即使已啟用數據表訪問控制,具有可附加至叢集許可權或筆記本上執行許可權的使用者也可以從筆記本內讀取叢集環境變數。 如果叢集上的所有使用者都無法使用,Databricks 不建議將秘密儲存在叢集環境變數中。
秘密不會從 Spark 驅動程式記錄
stdout
和stderr
數據流中修訂。 為了保護敏感數據,根據預設,Spark 驅動程式記錄只能由具有作業上 CAN MANAGE 許可權、單一使用者存取模式和共用存取模式叢集的用戶檢視。 若要允許具有 CAN ATTACH TO 或 CAN RESTART 許可權的使用者檢視這些叢集上的記錄,請在叢集設定中設定下列 Spark 組態屬性:spark.databricks.acl.needAdminPermissionToViewLogs false
。在「無隔離共用存取模式叢集」上,Spark 驅動程式記錄可由具有 CAN ATTACH TO 或 CAN MANAGE 權限的使用者檢視。 若要將誰只能讀取記錄檔給具有 CAN MANAGE 權限的使用者,請將 設定
spark.databricks.acl.needAdminPermissionToViewLogs
為true
。
需求和限制
下列需求和限制適用於參考 Spark 組態屬性和環境變數中的秘密:
- 叢集擁有者必須具有秘密範圍的 CAN READ 許可權。
- 只有叢集擁有者可以在Spark組態屬性或環境變數中新增秘密的參考,並編輯現有的範圍和名稱。 擁有者會使用 秘密 API 變更秘密。 您必須重新啟動叢集,才能再次擷取秘密。
- 具有叢集之 CAN MANAGE 許可權的使用者可以刪除秘密 Spark 組態屬性或環境變數。
在Spark組態屬性或環境變數中參考秘密的語法
您可以使用任何有效的變數名稱或 Spark 組態屬性來參考秘密。 Azure Databricks 會根據所設定值的語法,而非變數名稱,為參考秘密的變數啟用特殊行為。
Spark 組態屬性或環境變數值的語法必須是 {{secrets/<scope-name>/<secret-name>}}
。 值必須以 開頭 {{secrets/
, }}
並以 結尾。
Spark 組態屬性或環境變數的變數部分為:
<scope-name>
:與秘密相關聯之範圍的名稱。<secret-name>
:範圍中秘密的唯一名稱。
例如: {{secrets/scope1/key1}}
。
注意
- 大括弧之間不應該有空格。 如果有空格,則會將其視為範圍或秘密名稱的一部分。
使用Spark組態屬性參考秘密
您可以使用下列格式指定 Spark 組態屬性中秘密的參考:
spark.<property-name> {{secrets/<scope-name>/<secret-name>}}
任何Spark組態 <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
管理秘密許可權
本節說明如何使用什麼是 Databricks CLI 來管理秘密訪問控制 ? (0.205 版和更新版本)。 您也可以使用 Secrets API 或 Databricks Terraform 提供者。 如需秘密許可權等級,請參閱 秘密 ACL
建立秘密 ACL
使用 Databricks CLI 建立指定秘密範圍的秘密 ACL (舊版)
databricks secrets put-acl <scope-name> <principal> <permission>
對已套用許可權的主體提出放置要求會覆寫現有的許可權等級。
欄位 principal
會指定現有的 Azure Databricks 主體。 使用者會使用其電子郵件位址、使用其 applicationId
值的服務主體,以及使用其組名的群組來指定。 如需詳細資訊,請參閱 主體。
檢視秘密 ACL
若要檢視指定秘密範圍的所有秘密 ACL:
databricks secrets list-acls <scope-name>
若要取得套用至指定秘密範圍之主體的秘密 ACL:
databricks secrets get-acl <scope-name> <principal>
如果指定的主體和範圍沒有 ACL,此要求將會失敗。
刪除秘密 ACL
若要刪除套用至指定秘密範圍之主體的秘密 ACL:
databricks secrets delete-acl <scope-name> <principal>