使用 Unity 目錄中的 Azure 受控識別來存取記憶體
本文說明如何使用 Azure 受控識別來代表 Unity 目錄用戶連線到記憶體容器。
什麼是 Azure 受控識別?
Unity 目錄可以設定為使用 Azure 受控識別來代表 Unity 目錄使用者存取記憶體容器。 受控識別提供身分識別,讓應用程式在連線到支援Microsoft Entra ID 驗證的資源時使用。
您可以使用 Unity 目錄中的受控識別來支援兩個主要使用案例:
- 身分識別,用來連線到中繼存放區的受控記憶體帳戶(其中儲存受控數據表)。
- 身分識別,用來連線到其他外部記憶體帳戶(無論是檔案型存取,還是透過外部數據表存取現有數據集)。
使用受控識別設定 Unity 目錄具有下列優點:使用服務主體設定 Unity 目錄:
受控識別不需要您維護認證或輪替秘密。
如果您的 Azure Databricks 工作區部署在您自己的 VNet 中(也稱為 VNet 插入),而且您使用記憶體防火牆來保護 Azure Data Lake Storage Gen2 帳戶,您可以使用受控識別將工作區連線到該帳戶。 請參閱(建議用於 VNet 插入工作區)根據您的受控識別設定 Azure 儲存體 的受信任存取權。
注意
您無法在標準 Azure Databricks 部署中使用記憶體防火牆。
設定 Unity 目錄的受控識別
若要將受控識別設定為與 Unity 目錄搭配使用,請先在 Azure 中建立 Azure Databricks 的存取連接器。 根據預設,存取連接器會使用系統指派的受控識別進行部署。 您可以選擇改為附加使用者指派的受控識別。 接著,您會將受控識別存取權授與 Azure Data Lake Storage Gen2 帳戶,並在建立 Unity 目錄中繼存放區或記憶體認證時使用存取連接器。
需求
建立存取連接器的 Azure 使用者或服務主體必須:
- 成為 Azure 資源群組的參與者或擁有者。
將受控識別授與記憶體帳戶的 Azure 使用者或服務主體必須:
- 成為記憶體帳戶上具有使用者存取系統管理員 Azure RBAC 角色的擁有者或使用者。
步驟 1:建立 Azure Databricks 的存取連接器
適用於 Azure Databricks 的 Access Connector 是第一方 Azure 資源,可讓您將受控識別連線到 Azure Databricks 帳戶。
Azure Databricks 的每個存取連接器都可以包含一個系統指派的受控識別或一個使用者指派的受控識別。 如果您想要使用多個受控識別,請為每個識別建立個別的存取連接器。
使用系統指派的受控識別
以資源群組的參與者或擁有者身分登入 Azure 入口網站。
按兩下 [+ 建立 ] 或 [建立新的資源]。
搜尋 Azure Databricks 的 Access Connector,然後加以選取。
按一下 [建立]。
在 [ 基本] 索引 標籤上,接受、選取或輸入下列欄位的值:
- 訂用帳戶:這是將在其中建立存取連接器的 Azure 訂用帳戶。 預設值是您目前使用的 Azure 訂用帳戶。 它可以是租使用者中的任何訂用帳戶。
- 資源群組:這是將建立存取連接器的 Azure 資源群組。
- 名稱:輸入指出連接器用途的名稱。
- 區域:這應該與您要連線的記憶體帳戶相同。
按下 [檢閱 + 建立]。
當您看到 [ 驗證通過 ] 訊息時,按兩下 [ 建立]。
部署成功時,會使用系統指派的受控識別來部署存取連接器。
部署完成時,按兩下 [移至資源]。
記下 資源標識碼。
資源識別碼的格式如下:
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
使用使用者指派的受控識別
如果您還沒有使用者指派的受控識別,請建立新的受控識別,並記下其資源識別符。
請參閱 管理使用者指派的受控識別。
以資源群組的參與者或擁有者身分登入 Azure 入口網站。
資源群組應該與您要連線的記憶體帳戶位於相同的區域中。
搜尋 [ 部署自定義範本 ],然後加以選取。
選取 [建置您自己的範本 ],並將下列範本貼到編輯器中:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "connectorName": { "defaultValue": "testConnector", "type": "String", "metadata": { "description": "The name of the Azure Databricks Access Connector to create." } }, "accessConnectorRegion": { "defaultValue": "[resourceGroup().location]", "type": "String", "metadata": { "description": "Location for the access connector resource." } }, "userAssignedManagedIdentiy": { "type": "String", "metadata": { "description": "The resource Id of the user assigned managed identity." } } }, "resources": [ { "type": "Microsoft.Databricks/accessConnectors", "apiVersion": "2023-05-01", "name": "[parameters('connectorName')]", "location": "[parameters('accessConnectorRegion')]", "identity": { "type": "UserAssigned", "userAssignedIdentities": { "[parameters('userAssignedManagedIdentiy')]": {} } } } ] }
在 [ 基本] 索引標籤上,接受、選取或輸入下列欄位的值:
- 訂用帳戶:將在其中建立存取連接器的 Azure 訂用帳戶。 預設值是您目前使用的 Azure 訂用帳戶。 它可以是租使用者中的任何訂用帳戶。
- 資源群組:與您要連線的記憶體帳戶位於相同區域中的資源群組。
- 名稱:指出連接器用途的名稱。
- 區域:這應該與您要連線的記憶體帳戶相同。 如果資源群組是在與您要連線的記憶體帳戶相同的區域中建立,則可以選擇預先填入的值 '[resourceGroup(.location]' 。
- 使用者指派的受控識別:您想要使用之使用者指派受控識別的資源標識符。
按下 [檢閱 + 建立]。
當您看到 [ 驗證通過 ] 訊息時,按兩下 [ 建立]。
部署完成時,按兩下 [移至資源]。
記下 資源標識碼。
資源識別碼的格式如下:
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
步驟 2:授與記憶體帳戶的受控識別存取權
若要授與此步驟中的許可權,您必須在記憶體帳戶上擁有擁有者或使用者存取系統管理員 Azure RBAC 角色。
- 登入您的 Azure Data Lake Storage Gen2 帳戶。
- 移至 [存取控制 [IAM],按兩下 [+ 新增],然後選取 [新增角色指派]。
- 選取 [儲存體 Blob 資料參與者] 角色,然後按 [下一步]。
- 在 [存取權指派對象] 下,選取 [受控識別]。
- 按兩下 [ +選取成員],然後選取 Azure Databricks 的 Access 連接器或 使用者指派的受控識別。
- 搜尋您的連接器名稱或使用者指派的身分識別、選取它,然後按兩下 [ 檢閱和指派]。
或者,您可以藉由將受控識別存取權授與特定容器,以限制對記憶體帳戶的存取。 請遵循上述相同的步驟,但在記憶體帳戶上授 與記憶體 Blob 委派器角色 ,以及 容器上的記憶體 Blob 數據參與者角色 。
步驟 3:授與受控識別檔案事件的存取權
授與受控識別檔案事件的存取權,可讓 Azure Databricks 訂閱雲端提供者發出的檔案事件通知。 這可讓檔案處理更有效率。 若要授與此步驟中的許可權,您必須在記憶體帳戶上擁有擁有者或使用者存取系統管理員 Azure RBAC 角色。
- 登入您的 Azure Data Lake Storage Gen2 帳戶。
- 移至 [存取控制 (IAM)],單擊 [+ 新增],然後選取 [新增角色指派]。
- 選取 [ 記憶體佇列數據參與者 ] 角色,然後按 [下一步]。
- 在 [存取權指派對象] 下,選取 [受控識別]。
- 按兩下 [ +選取成員],然後選取 Azure Databricks 的 Access 連接器或 使用者指派的受控識別。
- 搜尋您的連接器名稱或使用者指派的身分識別、選取它,然後按兩下 [ 檢閱和指派]。
步驟 4:授與 Azure Databricks 代表您配置檔案事件的存取權
注意
此步驟是選擇性的,但強烈建議使用。 如果您未授與 Azure Databricks 代表您設定檔案事件的存取權,則必須針對每個位置手動配置檔案事件。 如果您未這麼做,您對於 Databricks 未來可能會發行的重要功能存取權有限。
此步驟可讓 Azure Databricks 自動設定檔案事件。 若要授與此步驟中的許可權,您必須在受控識別上擁有擁有者或使用者存取系統管理員 Azure RBAC 角色,以及 Azure Data Lake Storage Gen2 帳戶所屬的資源群組。
- 依照步驟 3:將受控識別存取權授與檔案事件,並將記憶體帳戶參與者以及記憶體佇列數據參與者角色指派給受控識別中的指示。
- 流覽至 Azure Data Lake Storage Gen2 帳戶所屬的 Azure 資源群組。
- 移至 [存取控制 [IAM],按兩下 [+ 新增],然後選取 [新增角色指派]。
- 選取 EventGrid EventSubscription 參與者角色,然後按 [下一步]。
- 在 [存取權指派對象] 下,選取 [受控識別]。
- 按兩下 [ +選取成員],然後選取 Azure Databricks 的 Access 連接器或 使用者指派的受控識別。
- 搜尋您的連接器名稱或使用者指派的身分識別、選取它,然後按兩下 [ 檢閱和指派]。
使用受控識別來存取 Unity 目錄根記憶體帳戶
本節說明當您建立 Unity 目錄中繼存放區時,如何為受控識別提供根記憶體帳戶的存取權。
若要瞭解如何升級現有的 Unity 目錄中繼存放區以使用受控識別,請參閱 升級現有的 Unity 目錄中繼存放區以使用受控識別來存取其根記憶體。
- 身為 Azure Databricks 帳戶管理員,登入 Azure Databricks 帳戶控制台。
- 按下 [目錄]。
- 按兩下 [ 建立中繼存放區]。
- 輸入下欄位的值:
中繼存放區的名稱 。
將部署中繼存放區的區域 。
為了獲得最佳效能,請在相同的雲端區域中共置存取連接器、工作區、中繼存放區和雲端記憶體位置。
ADLS Gen 2 路徑:輸入要作為中繼存放區根記憶體的記憶體容器路徑。
會自動新增前置
abfss://
詞。存取連接器識別碼:以下列格式輸入 Azure Databricks 存取連接器的資源識別碼:
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
(選擇性) 受控識別標識碼:如果您使用使用者指派的受控識別建立存取連接器,請輸入受控識別的資源標識符。
- 按一下 [建立]。
- 出現提示時,選取要連結至中繼存放區的工作區。
使用受控識別來存取 Unity 目錄中受控的外部記憶體
Unity 目錄可讓您使用記憶體認證和外部位置存取記憶體帳戶中的現有數據。 記憶體認證會儲存受控識別,而外部位置會定義記憶體的路徑,以及記憶體認證的參考。 您可以使用此方法來授與和控制雲端記憶體中現有數據的存取權,以及在 Unity 目錄中註冊外部數據表。
記憶體認證可以保存受控識別或服務主體。 使用受控識別的優點是允許 Unity 目錄存取受網路規則保護的記憶體帳戶,這無法使用服務主體,而且不需要管理及輪替秘密。
若要使用受控識別建立記憶體認證,並將該記憶體認證指派給外部位置,請遵循使用 Unity 目錄連線到雲端物件記憶體和服務中的指示。
(建議用於 VNet 插入的工作區)根據受控識別設定對 Azure 儲存體 的信任存取
如果您的 Azure Databricks 工作區部署在您自己的 Azure 虛擬網路中,也稱為 「VNet 插入」,而且您使用記憶體防火牆來保護 Azure Data Lake Storage Gen2 帳戶,您必須:
- 讓您的 Azure Databricks 工作區能夠存取 Azure 儲存體。
- 讓您的受控識別能夠存取 Azure 儲存體。
步驟 1: 讓您的 Azure Databricks 工作區能夠存取 Azure 儲存體
您必須設定網路設定,以允許 Azure Databricks 工作區存取 Azure Data Lake Storage Gen2。 您可以設定私人端點,或從 Azure Data Lake Storage Gen2 上的虛擬網路存取,以允許從子網連線到 Azure Data Lake Storage Gen2 帳戶。
如需指示,請參閱 將 Azure Databricks 工作區存取權授與 Azure Data Lake Storage Gen2。
步驟 2:啟用受控識別以存取 Azure 儲存體
只有在針對您的 Azure 儲存體 帳戶停用[允許受信任服務列表上的 Azure 服務存取此儲存器帳戶] 時,才需要此步驟。 如果已啟用該組態:
- 與記憶體帳戶相同租使用者中 Azure Databricks 的任何存取連接器都可以存取記憶體帳戶。
- 任何 Azure 信任的服務都可以存取記憶體帳戶。 請參閱 授與受信任 Azure 服務的存取權。
下列指示包含停用此設定的步驟。 您可以使用 Azure 入口網站或 Azure CLI。
使用 Azure 入口網站
登入 Azure 入口網站,尋找並選取 Azure 儲存體 帳戶,然後移至 [網络] 索引標籤。
將 [公用網络存取] 設定為 [從選取的虛擬網络和IP 位址啟用]。
您可以選擇將 [公用網络存取] 設定為 [已停用]。 受控識別可用來略過公用網路存取的檢查。
在 [資源實例] 下,選取 Microsoft.Databricks/accessConnectors 的資源類型,然後選取您的 Azure Databricks 存取連接器。
在 [例外狀況] 底下,清除 [ 允許受信任服務清單上的 Azure 服務存取此儲存體帳戶 ] 複選框。
使用 Azure CLI
安裝 Azure CLI 並 登入。
若要使用 Microsoft Entra ID 服務主體登入,請參閱 使用 Microsoft Entra ID 服務主體登入 Azure CLI。
若要使用 Azure Databricks 使用者帳戶登入,請參閱 使用 Azure Databricks 使用者帳戶登入 Azure CLI。
將網路規則新增至記憶體帳戶:
az storage account network-rule add \ -–subscription <subscription id of the resource group> \ -–resource-id <resource Id of the access connector for Azure Databricks> \ -–tenant-id <tenant Id> \ -g <name of the Azure Storage resource group> \ -–account-name <name of the Azure Storage resource> \
以下欄格式新增資源識別碼:
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
建立網路規則之後,請移至 Azure 入口網站中的 Azure 儲存體 帳戶,然後在 [資源實例] 下的 [網路] 索引標籤中檢視受控識別,資源類型
Microsoft.Databricks/accessConnectors
。在 [例外狀況] 底下,清除 [ 允許受信任服務清單上的 Azure 服務存取此儲存體帳戶 ] 複選框。
選擇性地將 [公用網络存取] 設定為 [已停用]。 受控識別可用來略過公用網路存取的檢查。
標準方法是將此值設定為 [從選取的虛擬網络和IP位址啟用]。
(建議)設定 Azure 記憶體防火牆以允許從無伺服器 SQL 倉儲存取
無伺服器 SQL 倉儲 是在 Azure Databricks 的 Azure 訂用帳戶中執行的計算資源,而不是您的 Azure 訂用帳戶。 如果您在 Azure Data Lake Storage Gen2 上設定防火牆,而且打算使用無伺服器 SQL 倉儲,則必須設定防火牆以允許從無伺服器 SQL 倉儲存取。
如需指示,請參閱設定供無伺服器計算存取的防火牆。
升級現有的 Unity 目錄中繼存放區,以使用受控識別來存取其根記憶體
如果您有使用服務主體建立的 Unity 目錄中繼存放區,而且您想要升級它以使用受控識別,您可以使用 API 呼叫來更新它。
使用設定 Unity 目錄受控識別中的指示,建立適用於 Azure Databricks 的 Access Connector,並將許可權指派給用於 Unity 目錄中繼存放區根記憶體的記憶體容器。
您可以使用系統指派的受控識別或使用者指派的受控識別來建立存取連接器。
記下存取連接器的資源標識碼。 如果您使用使用者指派的受控識別,也請記下其資源標識碼。
身為帳戶管理員,登入指派給中繼存放區的 Azure Databricks 工作區。
您不需要是工作區管理員。
在您的本機環境中建立包含下列各項的 Azure Databricks 驗證組態設定檔:
- 您產生個人存取令牌之工作區的工作區實例名稱和工作區識別碼。
- 個人存取令牌值。
使用 Databricks CLI 執行下列命令來重新建立記憶體認證。
取代預留位置值:
<credential-name>
:記憶體認證的名稱。<access-connector-id>
:Azure Databricks 存取連接器的資源標識碼,格式為/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
<managed-identity-id>
:如果您使用使用者指派的受控識別建立存取連接器,請指定受控識別的資源識別碼。<profile-name>
:Azure Databricks 驗證組態配置檔的名稱。
databricks storage-credentials create --json '{ "name\": "<credential-name>", "azure_managed_identity": { "access_connector_id": "<access-connector-id>", "managed_identity_id": "<managed-identity-id>" } }' --profile <profile-name>
記下回應中的記憶體認證標識碼。
執行下列 Databricks CLI 命令來擷
metastore_id
取 。 將 取代<profile-name>
為您的 Azure Databricks 驗證組態配置檔名稱。databricks metastores summary --profile <profile-name>
執行下列 Databricks CLI 命令,以新的根記憶體認證更新中繼存放區。
取代預留位置值:
<metastore-id>
:您在上一個步驟中擷取的中繼存放區標識碼。<storage-credential-id>
:記憶體認證標識碼。<profile-name>
:Azure Databricks 驗證組態配置檔的名稱。
databricks metastores update <metastore-id> \ --storage-root-credential-id <storage-credential-id> \ --profile <profile-name>