教學課程:連線至 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 所需的所有步驟。
需求
開始本教學課程之前,請先完成這些工作:
- 建立 Azure Databricks 工作區。 請參閱快速入門:建立 Azure Databricks 工作區
- 建立 Azure Data Lake Storage Gen2 儲存器帳戶。 請參閱 快速入門:建立 Azure Data Lake Storage Gen2 儲存器帳戶。
- 建立 Azure Key Vault。 請參閱快速入門:建立 Azure 金鑰保存庫
步驟 1:建立Microsoft專案標識符服務主體
若要使用服務主體連線到 Azure Data Lake Storage Gen2,系統管理員用戶必須建立新的Microsoft Entra ID 應用程式。 如果您已經有可用的Microsoft Entra ID 服務主體,請直接跳至 步驟 2:為您的服務主體建立客戶端密碼。
若要建立 Microsoft Entra 服務主體,請遵循下列說明:
登入 Azure 入口網站。
注意
使用的入口網站有所不同,取決於您的 Microsoft Entra ID 應用程式是在 Azure 公用雲端中執行,還是在國家雲端或主權雲端中執行。 如需詳細資訊,請參閱國家雲端。
如果您有權存取多個租用戶、訂用帳戶或目錄,請按一下頂端功能表中的 [目錄 + 訂用帳戶] (帶篩選器的目錄) 圖示,切換至您要佈建服務主體的目錄。
搜尋並選取 <Microsoft Entra ID。
在 [管理] 中,按下 [應用程式註冊] > [新增註冊]。
針對 [名稱],輸入應用程式的名稱。
在 [支援的帳戶類型] 區段,選取 [僅此組織目錄中的帳戶 (單一租用戶)]。
按下 [註冊]。
步驟 2:為您的服務主體建立客戶端密碼
在 [管理] 中,按兩下 [憑證與秘密]。
在 [用戶端祕密金鑰] 索引標籤中,按下 [新增用戶端祕密金鑰]。
在 [新增用戶端描述] 窗格的 [描述] 中輸入用戶端祕密金鑰的描述。
對於 [過期],選取用戶端密碼的過期時限,然後按下 [新增]。
將用戶端祕密金鑰的值複製並儲存在安全的地方,因為此用戶端祕密金鑰是應用程式的密碼。
在應用程式頁面 [概觀] 頁面的 [基本資訊] 區段,拷貝下列值:
- 應用程式 (用戶端) ID
- 目錄 (租用戶) ID
步驟 3:授與服務主體對 Azure Data Lake Storage Gen2 的存取權
您可以將角色指派給服務主體,以授與儲存體資源的存取權。 在本教學課程中,您會將 記憶體 Blob 數據參與者 指派給 Azure Data Lake Storage Gen2 帳戶上的服務主體。 您可能需要根據特定需求指派其他角色。
- 在 Azure 入口網站中,移至 [儲存體帳戶] 服務。
- 選取要使用的 Azure 儲存體帳戶。
- 按下 [存取控制 (IAM)]。
- 從下拉式功能表中選取 [+ 新增],然後從下拉式功能表選取 [新增角色指派]。
- 將 [選取] 字段設定為您在步驟 1 中建立的 Microsoft Entra ID 應用程式名稱,並將 [角色] 設定為 [記憶體 Blob 數據參與者]。
- 按一下 [檔案] 。
步驟 4:將客戶端密碼新增至 Azure 金鑰保存庫
您可以在 Azure 金鑰保存庫 中儲存步驟 1 中的客戶端密碼。
- 在 Azure 入口網站 中,移至金鑰保存庫服務。
- 選取要使用的 Azure 金鑰保存庫。
- 在 Key Vault 設定頁面中選取 [祕密]。
- 按兩下 [ + 產生/匯入]。
- 在 [上傳選項] 中,選取 [ 手動]。
- 針對 [ 名稱],輸入秘密的名稱。 祕密名稱在金鑰保存庫內必須是唯一的。
- 針對 [ 值],貼上您在步驟 1 中儲存的客戶端密碼。
- 按一下 [建立]。
步驟 5:設定 Azure Databricks 的 Azure 密鑰保存庫實例
- 在 Azure 入口網站中,移至 Azure 金鑰保存庫實例。
在 [設定] 底下,選取 [存取組態] 索引卷標。
將許可權模型設定為保存庫存取原則。
注意
建立 Azure 金鑰保存庫 支援的秘密範圍角色,會使用密鑰保存庫存取原則,將取得和列出許可權授與 Azure Databricks 服務的應用程式識別碼。 Azure Databricks 不支援 Azure 角色型訪問控制許可權模型。
在 [設定] 底下,選取 [網路]。
在 [防火牆和虛擬網络] 中,將 [允許從:存取] 設為 [允許來自特定虛擬網络和IP 位址的公用存取]。
在 [例外狀況] 底下,核取 [允許信任 Microsoft 服務 略過此防火牆。
注意
您也可以將 [允許從: 存取] 設定為 [允許來自所有網络的公用存取]。
步驟 6:在 Azure Databricks 工作區中建立 Azure 金鑰保存庫 支援的秘密範圍
若要參考 Azure 金鑰保存庫 中儲存的用戶端密碼,您可以在 Azure Databricks 中建立 Azure 金鑰保存庫 所支援的秘密範圍。
移至
https://<databricks-instance>#secrets/createScope
。 此 URL 區分大小寫;中的createScope
範圍必須是大寫。輸入秘密範圍的名稱。 秘密範圍名稱不區分大小寫。
使用 [ 管理主體 ] 下拉功能表來指定 [所有使用者 ] 是否具有
MANAGE
此秘密範圍的許可權,或只有 秘密範圍的建立者 (也就是說,您)。輸入 DNS 名稱 (例如
https://databrickskv.vault.azure.net/
) 和資源識別碼,例如:/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/databricks-rg/providers/Microsoft.KeyVault/vaults/databricksKV
這些屬性可從您 Azure 入口網站 中 Azure 金鑰保存庫 的 [設定>屬性] 索引標籤取得。
按下 [建立] 按鈕。
步驟 7:使用 python 連線到 Azure Data Lake Storage Gen2
您現在可以使用 OAuth 2.0 與 Microsoft Entra ID 應用程式服務主體安全地存取 Azure 儲存器帳戶中的數據,以從 Azure Databricks Notebook 進行驗證。
瀏覽至 Azure Databricks 工作區,並建立新的 Python 筆記本。
執行下列 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 應用程式之應用程式 (用戶端) ID 的
<application-id>
。 - 具有 Microsoft Entra ID 應用程式之目錄 (租用戶) ID 的
<directory-id>
。
您現在已成功將 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 指示,請參閱 授與虛擬網路的存取權。
- 以您在 Azure Data Lake Storage Gen2 帳戶上具有記憶體帳戶參與者角色的使用者身分登入 Azure 入口網站。
- 流覽至您的 Azure 儲存體 帳戶,然後移至 [網络] 索引標籤。
- 確認您已選取允許從 選取的虛擬網路和 IP 位址進行存取。
- 在 [虛擬網络] 底下,選取 [新增現有的虛擬網络]。
- 在側邊面板中的 [訂用帳戶] 底下,選取虛擬網络位於的訂用帳戶。
- 在 [虛擬網络] 底下,選取 Azure Databricks 工作區部署的虛擬網路。
- 在 [子網] 底下,挑選 [全部選取]。
- 按一下 [啟用] 。
- 選取儲存套用變更。
疑難排解
錯誤:IllegalArgumentException:範圍不存在秘密:KeyVaultScope 和密鑰
此錯誤可能表示:
- 程序代碼中所參考的 Databricks 支援範圍無效。
請檢閱本文步驟 4 中的秘密名稱。
錯誤:com.databricks.common.client.DatabricksServiceHttpClientException: INVALID_STATE: Databricks 無法存取 keyvault
此錯誤可能表示:
- 程序代碼中所參考的 Databricks 支援範圍無效。 或儲存在 金鑰保存庫 中的秘密已過期。
檢閱步驟 3 以確保 Azure 金鑰保存庫 秘密有效。 請檢閱本文步驟 4 中的秘密名稱。
錯誤:ADAuthenticator$HttpException:HTTP 錯誤 401:令牌無法從 AzureAD 回應取得令牌
此錯誤可能表示:
- 服務主體的用戶端秘密金鑰已過期。
依照本文中的步驟 2 建立新的客戶端密碼,並更新 Azure 金鑰保存庫 中的秘密。