共用方式為


教學課程:連線至 Azure Data Lake Storage Gen2

注意

本文說明設定 Azure Data Lake Storage Gen2 存取權的舊版模式。 Databricks 建議使用 Unity Catalog。 請參閱 建立 Unity Catalog 中繼存放區,以及 使用 Unity Catalog連線到雲端物件存儲和服務。

本教學課程會引導您完成使用 OAuth 2.0 搭配 Microsoft Entra ID 服務主體,從 Azure Databricks 連線到 Azure Data Lake Storage Gen2 所需的所有步驟。

需求

開始本教學課程之前,請先完成這些工作:

步驟 1:建立Microsoft專案標識符服務主體

若要使用服務主體連線到 Azure Data Lake Storage Gen2,系統管理員用戶必須建立新的Microsoft Entra ID 應用程式。 如果您已經有可用的Microsoft Entra ID 服務主體,請直接跳至 步驟 2:為您的服務主體建立客戶端密碼。

若要建立 Microsoft Entra 服務主體,請遵循下列說明:

  1. 登入 Azure 入口網站

    注意

    使用的入口網站有所不同,取決於您的 Microsoft Entra ID 應用程式是在 Azure 公用雲端中執行,還是在國家雲端或主權雲端中執行。 如需詳細資訊,請參閱國家雲端

  2. 如果您有權存取多個租用戶、訂用帳戶或目錄,請按一下頂端功能表中的 [目錄 + 訂用帳戶] (帶篩選器的目錄) 圖示,切換至您要佈建服務主體的目錄。

  3. 搜尋和 select<Microsoft Entra ID

  4. 在 [管理] 中,按下 [應用程式註冊] > [新增註冊]

  5. 針對 [名稱],輸入應用程式的名稱。

  6. 在 [支援的帳戶類型] 區段中,select僅限此組織目錄中的帳戶(單一租戶)

  7. 按下 [註冊]

步驟 2:為您的服務主體建立客戶端密碼

  1. 在 [管理] 中,按兩下 [憑證與秘密]。

  2. 在 [用戶端祕密金鑰] 索引標籤中,按下 [新增用戶端祕密金鑰]

    新用戶端密碼

  3. 在 [新增用戶端描述] 窗格的 [描述] 中輸入用戶端祕密金鑰的描述

  4. 針對 [到期],select 客戶端密碼的到期時間週期,然後按兩下 [[新增]

  5. 將用戶端祕密金鑰的複製並儲存在安全的地方,因為此用戶端祕密金鑰是應用程式的密碼。

  6. 在應用程式頁面的 [概觀] 頁面上的 [Essentials] 區段中,複製下列 values:

    • 應用程式 (用戶端) ID
    • 目錄 (租用戶) ID

步驟 3:Grant Azure Data Lake Storage Gen2 的服務主體的存取權限

您可以將角色指派給服務主體,以獲得 grant 儲存資源的存取權。 在本教學課程中,您會將 記憶體 Blob 數據參與者 指派給 Azure Data Lake Storage Gen2 帳戶上的服務主體。 您可能需要根據特定需求指派其他角色。

  1. 在 Azure 入口網站中,移至 [儲存體帳戶] 服務。
  2. Select 要使用的 Azure 記憶體帳戶。
  3. 按下 [存取控制 (IAM)]
  4. 從下拉功能表中,按一下 [+ 新增],然後選擇 [select新增角色指派]。
  5. 將您在步驟 1 中建立的 Microsoft Entra ID 應用程式名稱指定給[Select] 字段 Set,並將 set角色 指定為 儲存體 Blob 數據參與者
  6. 按一下 [檔案] 。

步驟 4:將客戶端密碼新增至 Azure 金鑰保存庫

您可以在 Azure 金鑰保存庫 中儲存步驟 1 中的客戶端密碼。

  1. 在 Azure 入口網站 中,移至金鑰保存庫服務。
  2. Select 一個要使用的 Azure Key Vault。
  3. 在 [Key Vault 設定] 頁面上,select[秘密]
  4. 點選 「+ Generate/ 匯入
  5. 在 [上傳選項] 中,select手動
  6. 針對 [ 名稱],輸入秘密的名稱。 祕密名稱在金鑰保存庫內必須是唯一的。
  7. 針對 [ ],貼上您在步驟 1 中儲存的客戶端密碼。
  8. 按一下 [建立]。

步驟 5:設定 Azure Databricks 的 Azure 密鑰保存庫實例

  1. 在 Azure 入口網站中,移至 Azure 金鑰保存庫實例。
    1. 在 [設定]下,select [Access 組態] 索引標籤。

    2. Set 許可權模型儲存庫存取原則

      注意

      建立由 Azure Key Vault 支援的機密範圍角色,使用 Key Vault 存取原則,將 GetList 權限分配給 Azure Databricks 服務的應用程式識別碼。 Azure Databricks 不支援 Azure 角色型訪問控制許可權模型。

    3. 在 [設定]下,[select網路]。

    4. 防火牆和虛擬網路中,set允許從進行存取,並允許來自特定虛擬網路和 IP 位址的公用存取

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

      注意

      您也可以 set允許從:從所有網路允許公眾存取

步驟 6:在 Azure Databricks 工作區中建立 Azure 金鑰保存庫 支援的秘密範圍

若要參考 Azure 金鑰保存庫 中儲存的用戶端密碼,您可以在 Azure Databricks 中建立 Azure 金鑰保存庫 所支援的秘密範圍。

  1. 移至 https://<databricks-instance>#secrets/createScope。 此 URL 區分大小寫;中的 createScope 範圍必須是大寫。

    建立範圍

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

  3. 使用 [ 管理主體 ] 下拉功能表來指定 [所有使用者 ] 是否具有 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. 按下 [建立] 按鈕。

步驟 7:使用 python 連線到 Azure Data Lake Storage Gen2

您現在可以使用 OAuth 2.0 與 Microsoft Entra ID 應用程式服務主體安全地存取 Azure 儲存器帳戶中的數據,以從 Azure Databricks Notebook 進行驗證。

  1. 瀏覽至 Azure Databricks 工作區,並建立新的 Python 筆記本。

  2. 執行下列 Python 程式代碼,並取代下列專案,以連線到 Azure Data Lake Storage Gen2。

    service_credential = dbutils.secrets.get(scope="<scope>",key="<service-credential-key>")
    
    spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
    spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
    spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
    spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
    spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
    

    Replace

    • <scope> 使用步驟 5 中的秘密範圍名稱。
    • 具有包含用戶端祕密之金鑰名稱的 <service-credential-key>
    • 具有 Azure 儲存體帳戶名稱的 <storage-account>
    • 具有 Microsoft Entra ID 應用程式之<application-id>
    • 具有 Microsoft Entra ID 應用程式之<directory-id>

    您現在已成功將 Azure Databricks 工作區連線到 Azure Data Lake Storage Gen2 帳戶。

Grant Azure Databricks 工作區對 Azure Data Lake Storage Gen2 的存取權

如果您在 Azure Data Lake Storage Gen2 上設定防火牆,您必須設定網路設定,以允許 Azure Databricks 工作區連線到 Azure Data Lake Storage Gen2。 首先,在 Azure 虛擬網路中部署 Azure Databricks (VNet 插入)之後,請確定您的 Azure Databricks 工作區已部署在您自己的虛擬網路中。 然後,您可以設定 私有結束點,或從您的虛擬網路 存取 ,以允許您的子網與您的 Azure Data Lake Storage Gen2 帳戶之間的存取

如果您使用無伺服器運算,例如無伺服器 SQL 倉儲,則必須從無伺服器運算平台 grant 存取 Azure Data Lake Storage Gen2。 請參閱無伺服器計算平面網路

Grant 使用私人端點存取

您可以將私人端點用於 Azure Data Lake Storage Gen2 帳戶,以允許 Azure Databricks 工作區透過私人連結安全地存取數據

若要使用 Azure 入口網站建立私人端點,請參閱 教學課程:使用 Azure 私人端點連線到記憶體帳戶。 請務必在 Azure Databricks 工作區部署所在的相同虛擬網路中建立私人端點。

從虛擬網路 Grant 存取

虛擬網絡 服務端點可讓您將重要的 Azure 服務資源只保護您的虛擬網路。 您可以在您用於 Azure Databricks 工作區的 VNet 內啟用 Azure 儲存體 的服務端點。

如需詳細資訊,包括 Azure CLI 和 PowerShell 指令,請參閱從虛擬網路 Grant存取。

  1. 以您在 Azure Data Lake Storage Gen2 帳戶上具有記憶體帳戶參與者角色的使用者身分登入 Azure 入口網站。
  2. 流覽至您的 Azure 儲存體 帳戶,然後移至 [網络] 索引標籤。
  3. 確認您已選取允許從 選取的虛擬網路和 IP 位址進行存取。
  4. 虛擬網路下,select新增現有虛擬網路
  5. 在側邊面板中,訂用帳戶下,select 虛擬網路的訂用帳戶。
  6. 在 [虛擬網路底下,select Azure Databricks 工作區部署的虛擬網路。
  7. 在 [子網]下,挑選 Select 所有
  8. 按一下 [啟用]
  9. Select 儲存 來套用變更。

疑難排解

錯誤:IllegalArgumentException:範圍不存在秘密:KeyVaultScope 和密鑰

此錯誤可能表示:

  • 程序代碼中所參考的 Databricks 支援範圍無效。

請檢閱本文步驟 4 中的秘密名稱。

錯誤:com.databricks.common.client.DatabricksServiceHttpClientException: INVALID_STATE: Databricks 無法存取 keyvault

此錯誤可能表示:

  • 程序代碼中所參考的 Databricks 支援範圍無效。 或儲存在 金鑰保存庫 中的秘密已過期。

檢閱步驟 3 以確保 Azure 金鑰保存庫 秘密有效。 請檢閱本文步驟 4 中的秘密名稱。

錯誤:ADAuthenticator$HttpException:HTTP 錯誤 401:令牌無法從 AzureAD 回應取得令牌

此錯誤可能表示:

  • 服務主體的用戶端秘密金鑰已過期。

依照本文中的步驟 2 建立新的客戶端密碼,並 update Azure Key Vault 中的秘密。

資源