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

注意

本文說明設定 Azure Data Lake Storage Gen2 存取權的舊版模式。 Databricks 建議使用 Unity 目錄。 請參閱 建立 Unity 目錄中繼存放區 並使用 Unity 目錄連線到雲端物件記憶體。

本教學課程會引導您完成使用 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 ID 服務主體,請遵循下列指示:

  1. 登入 Azure 入口網站

    注意

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

  2. 如果您有多個租使用者、訂用帳戶或目錄的存取權,請按兩下 頂端選單中的 [目錄 + 訂用帳戶] 圖示,切換至您要布建服務主體的目錄。

  3. 搜尋並選取 [Microsoft Entra ID]<

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

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

  6. 在 [支持的帳戶類型] 區段中,選取 [僅限此組織目錄中的帳戶](單一租使用者)。

  7. 按一下 [註冊] 。

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

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

  2. 在 [用戶端密碼] 索引標籤中,按一下 [新增用戶端密碼]

    新用戶端密碼

  3. 在 [ 新增客戶端密碼 ] 窗格中,針對 [描述] 輸入客戶端密碼的描述。

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

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

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

    • 應用程式 (用戶端) 識別碼
    • 目錄 (租用戶) 識別碼

    Azure 註冊的應用程式概觀

步驟 3:授與服務主體對 Azure Data Lake Storage Gen2 的存取權

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

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

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

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

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

步驟 5:在 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. 按一下 [建立] 按鈕。

步驟 6:使用 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> 包含客戶端密碼的金鑰名稱。
    • <storage-account> 具有 Azure 記憶體帳戶的名稱。
    • <application-id>具有 Microsoft Entra ID 應用程式的應用程式 (client) 識別碼。
    • <directory-id>具有 Microsoft Entra ID 應用程式的目錄 (tenant) 識別碼。

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

授與 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 倉儲,則必須將無伺服器計算平面的存取權授與 Azure Data Lake Storage Gen2。 請參閱 無伺服器計算平面網路

使用私人端點授與存取權

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

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

授與虛擬網路的存取權

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

如需詳細資訊,包括 Azure CLI 和 PowerShell 指示,請參閱 授與虛擬網路的存取權。

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

疑難排解

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

此錯誤可能表示:

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

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

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

此錯誤可能表示:

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

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

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

此錯誤可能表示:

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

依照本文中的步驟 2 建立新的客戶端密碼,並更新 Azure 金鑰保存庫 中的秘密。

資源