共用方式為


祕密管理

有時候存取資料需要您透過 JDBC 向外部資料源進行驗證。 您可以使用 Azure Databricks 秘密來儲存您的認證,並在筆記本和作業中參考認證,而不是直接輸入您的認證。 本文提供 Azure Databricks 秘密的概觀。

秘密概觀

若要設定及使用秘密,請:

  1. 建立秘密範圍。 秘密範圍是名稱所識別的秘密集合。
  2. 將秘密新增至範圍
  3. 指派秘密範圍的許可權。
  4. 使用 Databricks 公用程式存取秘密,請參閱 秘密公用程式 (dbutils.secrets)

如需如何在工作流程中使用秘密的端對端範例,請參閱 教學課程:建立和使用 Databricks 秘密。 若要在Spark組態屬性或環境變數中使用秘密,請參閱 在Spark組態屬性或環境變數中使用秘密。

警告

系統管理員、祕密建立者和獲授與權限的使用者可以讀取 Azure Databricks 祕密。 雖然 Databricks 會努力編輯可能顯示在筆記本中的秘密值,但無法防止這類使用者讀取秘密。 請參閱 秘密修訂

管理秘密範圍

秘密範圍是名稱所識別的秘密集合。 Databricks 建議將秘密範圍與角色或應用程式對齊,而不是個人。

秘密範圍有兩種類型:

  • Azure 金鑰保存庫 支援:您可以使用 Azure 金鑰保存庫 支援的秘密範圍來參考儲存在 Azure 金鑰保存庫 中的秘密。 Azure 金鑰保存庫 支援的秘密範圍是 金鑰保存庫 的只讀介面。 您必須在 Azure 中管理 Azure 金鑰保存庫 支援的秘密範圍中的秘密。
  • Databricks 支援:D atabricks 支援的秘密範圍會儲存在 Azure Databricks 所擁有和管理的加密資料庫中。

建立秘密範圍之後,您可以指派許可權,授與使用者讀取、寫入及管理 Scret 範圍的存取權。

建立 Azure 金鑰保存庫 支援的秘密範圍

本節說明如何使用 Azure 入口網站 和 Azure Databricks 工作區 UI 來建立 Azure 金鑰保存庫 支援的秘密範圍。 您也可以使用 Databricks CLI 建立 Azure 金鑰保存庫 支援的秘密範圍。

需求

  • 您必須有 Azure 金鑰保存庫實例。 如果您沒有金鑰保存庫實例,請遵循使用 Azure 入口網站 建立 金鑰保存庫 中的指示。
  • 您必須在想要用來備份秘密範圍的 Azure 金鑰保存庫實例上擁有 金鑰保存庫 參與者、參與者或擁有者角色。

注意

建立 Azure 金鑰保存庫 支援的秘密範圍需要 Azure 金鑰保存庫實例上的參與者或擁有者角色,即使先前已將 Azure Databricks 服務授與金鑰保存庫的存取權也一樣。

如果密鑰保存庫存在於與 Azure Databricks 工作區不同的租使用者中,則建立秘密範圍的 Azure AD 用戶必須具有 在密鑰保存庫租使用者中建立服務主體 的許可權。 否則,會發生下列錯誤:

Unable to grant read/list permission to Databricks service principal to KeyVault 'https://xxxxx.vault.azure.net/': Status code 403, {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."},"requestId":"XXXXX","date":"YYYY-MM-DDTHH:MM:SS"}}

設定 Azure Databricks 的 Azure 金鑰保存庫實例

  1. 登入 Azure 入口網站,尋找並選取 Azure 金鑰保存庫實例。

  2. 在 [設定] 底下,按兩下 [存取組態] 索引標籤

  3. 將許可權模型設定保存庫存取原則

    注意

    建立 Azure 金鑰保存庫 支援的秘密範圍角色,會使用密鑰保存庫存取原則,將取得列出許可權授與 Azure Databricks 服務的應用程式識別碼。 Azure Databricks 不支援 Azure 角色型訪問控制許可權模型。

  4. 在 [設定] 底下,選取 [網路]

  5. [防火牆和虛擬網络] 中,將 [允許從:存取] 設為 [允許來自特定虛擬網络和IP 位址的公用存取]。

    在 [例外狀況] 底下,核取 [允許信任 Microsoft 服務 略過此防火牆

    注意

    您也可以將 [允許從: 存取] 設定[允許來自所有網络的公用存取]。

建立 Azure Key Vault 支援的秘密範圍

  1. 移至 https://<databricks-instance>#secrets/createScope。 將 <databricks-instance> 替換為 Azure Databricks 部署的工作區 URL。 此 URL 區分大小寫。 例如, scope in createScope 必須使用大寫 S

    建立範圍

  2. 輸入秘密範圍的名稱。 秘密範圍名稱不區分大小寫。

  3. [管理主體 ] 中,選取 [ 建立者 ] 或 [所有工作區使用者 ],以指定哪些使用者具有秘密範圍的 MANAGE 許可權。

    MANAGE 許可權可讓使用者讀取、寫入及授與範圍的許可權。 您的帳戶必須有 進階方案 ,才能選擇 [建立者]。

  4. 輸入 DNS 名稱 (例如https://databrickskv.vault.azure.net/) 和資源識別碼,例如:

    /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/databricks-rg/providers/Microsoft.KeyVault/vaults/databricksKV
    

    這些屬性可從您 Azure 入口網站 中 Azure 金鑰保存庫 的 [設定>屬性] 索引標籤取得。

  5. 按一下 [建立]。

  6. 使用 Databricks CLIdatabricks secrets list-scopes 命令來確認已成功建立範圍。

建立 Databricks 支援的秘密範圍

本節說明如何使用什麼是 Databricks CLI 建立秘密範圍 (0.205 版和更新版本)。 您也可以使用 秘密 API

秘密範圍名稱:

  • 工作區內必須是唯一的。
  • 必須包含英數位元、破折號、底線、 @和句號,且不能超過 128 個字元。
  • 不區分大小寫。

秘密範圍名稱會視為非敏感性,而且可由工作區中的所有用戶讀取。

若要使用 Databricks CLI 建立範圍:

databricks secrets create-scope <scope-name>

根據預設,系統會使用建立範圍之使用者的 MANAGE 許可權來建立範圍。 建立 Databricks 支援的秘密範圍之後,您可以將秘密新增至其中。

列出秘密範圍

若要使用 CLI 列出工作區中的現有範圍:

databricks secrets list-scopes

您也可以使用 秘密 API 列出秘密範圍。

刪除秘密範圍

刪除秘密範圍會刪除套用至範圍的所有秘密和 ACL。 若要使用 CLI 刪除範圍,請執行下列命令:

databricks secrets delete-scope <scope-name>

您也可以使用 秘密 API 刪除秘密範圍。

管理秘密

秘密是金鑰/值組,會使用秘密範圍內唯一的金鑰名稱來儲存機密數據。

本節說明如何使用什麼是 Databricks CLI 建立秘密範圍 (0.205 版和更新版本)。 您也可以使用 秘密 API。 秘密名稱不區分大小寫。

建立密碼

建立秘密的方法取決於您使用的是 Azure 金鑰保存庫 支援的範圍或 Databricks 支援的範圍。

在 Azure 金鑰保存庫 支援的範圍內建立秘密

若要在 Azure 中建立秘密 金鑰保存庫 請使用 Azure 入口網站 或 Azure Set Secret REST API。 如需範例,請參閱步驟 4:將客戶端密碼新增至 Azure 金鑰保存庫

Azure Key Vault

在 Databricks 支援的範圍內建立秘密

本節說明如何使用 Databricks CLI(版本 0.205 及以上)或在筆記本中使用 適用於 Python 的 Databricks SDK來建立秘密。 您也可以使用 秘密 API。 秘密名稱不區分大小寫。

Databricks CLI

當您在 Databricks 支援的範圍內建立秘密時,您可以使用下列三種方式之一來指定秘密值:

  • 使用 –string-value 旗標將值指定為字串。
  • 以互動方式提示時輸入秘密(單行秘密)。
  • 使用標準輸入傳遞秘密(多行秘密)。

例如:

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 <scope-name> <key-name>

適用於 Python 的 Databricks SDK

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.secrets.put_secret("<secret_scope>","<key-name>",string_value ="<secret>")

讀取秘密

若要讀取筆記本或作業中的秘密,您必須使用 Secrets 公用程式 (dbutils.secrets)。 例如:

password = dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")

列出密碼

若要列出指定範圍中的秘密:

databricks secrets list-secrets <scope-name>

回應會顯示秘密的相關元數據資訊,例如秘密的金鑰名稱。 您可以使用筆記本或作業中的 Secrets 公用程式 (dbutils.secrets) 來列出此元數據。 例如:

dbutils.secrets.list('my-scope')

刪除秘密

若要使用 Databricks CLI 從範圍中刪除秘密:

databricks secrets delete-secret <scope-name> <key-name>

您也可以使用 秘密 API

若要從 Azure 金鑰保存庫 所支援的範圍中刪除秘密,請使用 Azure SetSecret REST API 或 Azure 入口網站 UI。

管理秘密範圍許可權

根據預設,建立秘密範圍的使用者會被授與 MANAGE 許可權。 這可讓範圍建立者讀取範圍中的秘密、將秘密寫入範圍,以及管理範圍的許可權。

注意

秘密 ACL 位於範圍層級。 如果您使用 Azure 金鑰保存庫 支援的範圍,則授與範圍存取權的使用者可以存取 Azure 金鑰保存庫 中的所有秘密。 若要限制存取,請使用個別的 Azure 金鑰保存庫實例。

本節說明如何使用什麼是 Databricks CLI 來管理秘密訪問控制 (0.205 版和更新版本)。 您也可以使用 秘密 API。 如需秘密許可權等級,請參閱 秘密 ACL

授與秘密範圍的用戶許可權

若要使用 Databricks CLI 授與秘密範圍的用戶許可權:

databricks secrets put-acl <scope-name> <principal> <permission>

對已套用許可權的主體提出放置要求會覆寫現有的許可權等級。

欄位 principal 會指定現有的 Azure Databricks 主體。 使用者會使用其電子郵件位址、使用其 applicationId 值的服務主體,以及使用其組名的群組來指定。 如需詳細資訊,請參閱 主體

檢視秘密範圍許可權

若要檢視指定秘密範圍的所有秘密範圍許可權:

databricks secrets list-acls <scope-name>

若要取得套用至指定秘密範圍之主體的秘密範圍許可權:

databricks secrets get-acl <scope-name> <principal>

如果指定的主體和範圍沒有 ACL,則此要求會失敗。

刪除秘密範圍許可權

若要刪除套用至指定秘密範圍之主體的秘密範圍許可權:

databricks secrets delete-acl <scope-name> <principal>

秘密修訂

將認證儲存為 Azure Databricks 秘密可讓您在執行筆記本和作業時輕鬆地保護您的認證。 不過,很容易不小心將秘密列印到標準輸出緩衝區,或在變數指派期間顯示值。

為避免這種情況,Azure Databricks 會使用 dbutils.secrets.get()來修訂所有讀取的秘密值。 在筆記本資料格輸出中顯示時,秘密值會取代為 [REDACTED]

例如,如果您使用 將變數設定為秘密值 dbutils.secrets.get() ,然後列印該變數,則該變數會取代為 [REDACTED]

警告

筆記本數據格輸出的秘密修訂僅適用於常值。 秘密修訂功能不會防止秘密常值的刻意和任意轉換。 若要確保正確控制秘密,您應該使用 訪問控制清單 來限制執行命令的許可權。 這可防止未經授權的共享筆記本內容存取。