Share via


使用 Unity 目錄中的 Azure 受控識別來存取記憶體

本文說明如何使用 Azure 受控識別來代表 Unity 目錄用戶連線到記憶體容器。

什麼是 Azure 受控識別?

Unity 目錄可以設定為使用 Azure 受控識別來代表 Unity 目錄使用者存取記憶體容器。 受控識別會提供身分識別,讓應用程式在聯機到支援 Microsoft Entra ID(先前稱為 Azure Active Directory) 驗證的資源時使用。

您可以使用 Unity 目錄中的受控識別來支援兩個主要使用案例:

  • 身分識別,用來連線到中繼存放區的受控記憶體帳戶(其中儲存受控數據表)。
  • 身分識別,用來連線到其他外部記憶體帳戶(無論是檔案型存取,還是透過外部數據表存取現有數據集)。

使用受控識別設定 Unity 目錄具有下列優點:使用服務主體設定 Unity 目錄:

  • 受控識別不需要您維護認證或輪替秘密。

  • 如果您的 Azure Databricks 工作區部署在您自己的 VNet(也稱為 VNet 插入中),而且您使用記憶體防火牆來保護 Azure Data Lake 儲存體 Gen2 帳戶,您可以使用受控識別將工作區連線到該帳戶。 請參閱(建議用於 VNet 插入工作區)根據您的受控識別設定 Azure 儲存體 的受信任存取權。

    注意

    您無法在標準 Azure Databricks 部署中使用記憶體防火牆。

設定 Unity 目錄的受控識別

若要設定要與 Unity 目錄搭配使用的受控識別,請先在 Azure 中建立 Azure Databricks 的存取連接器。 根據預設,存取連接器會使用系統指派的受控識別進行部署。 您可以選擇改為附加使用者指派的受控識別。 接著,您會將受控識別存取權授與 Azure Data Lake 儲存體 Gen2 帳戶,並在建立 Unity 目錄中繼存放區或記憶體認證時使用存取連接器。

需求

建立存取連接器的 Azure 使用者或服務主體必須:

  • 成為 Azure 資源群組的參與者或擁有者。

將受控識別授與記憶體帳戶的 Azure 使用者或服務主體必須:

  • 成為記憶體帳戶上具有使用者存取 管理員 istrator Azure RBAC 角色的擁有者或使用者。

步驟 1:建立 Azure Databricks 的存取連接器

Azure Databricks 的 Access 連線 or 是第一方 Azure 資源,可讓您將受控識別連線到 Azure Databricks 帳戶。

Azure Databricks 的每個存取連接器都可以包含一個系統指派的受控識別或一個使用者指派的受控識別。 如果您想要使用多個受控識別,請為每個識別建立個別的存取連接器。

使用系統指派的受控識別

  1. 以資源群組的參與者或擁有者身分登入 Azure 入口網站。

  2. 按兩下 [+ 建立 ] 或 [建立新的資源]。

  3. 搜尋 Azure Databricks 的 Access 連線 or,然後加以選取。

  4. 按一下 [建立]

  5. 在 [ 基本] 索引 標籤上,接受、選取或輸入下列欄位的值:

    • 用帳戶:這是將在其中建立存取連接器的 Azure 訂用帳戶。 預設值是您目前使用的 Azure 訂用帳戶。 它可以是租使用者中的任何訂用帳戶。
    • 資源群組:這是將建立存取連接器的 Azure 資源群組。
    • 名稱:輸入指出連接器用途的名稱。
    • 區域:這應該與您要連線的記憶體帳戶相同。
  6. 按一下 [檢閱 + 建立] 。

  7. 當您看到 [ 驗證通過 ] 訊息時,按兩下 [ 建立]。

    部署成功時,會使用系統指派的受控識別來部署存取連接器。

  8. 部署完成時,按兩下 [移至資源]。

  9. 記下 資源標識碼

    資源識別碼的格式如下:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    

使用使用者指派的受控識別

  1. 如果您還沒有使用者指派的受控識別,請建立新的受控識別,並記下其資源識別符。

    請參閱 管理使用者指派的受控識別

  2. 以資源群組的參與者或擁有者身分登入 Azure 入口網站。

    資源群組應該與您要連線的記憶體帳戶位於相同的區域中。

  3. 搜尋 [ 部署自定義範本 ],然後加以選取。

  4. 選取 [建置您自己的範本 ],並將下列範本貼到編輯器中:

    {
     "$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')]": {}
                 }
              }
          }
       ]
    }
    
  5. 在 [ 基本] 索引標籤上,接受、選取或輸入下列欄位的值:

    • 用帳戶:將在其中建立存取連接器的 Azure 訂用帳戶。 預設值是您目前使用的 Azure 訂用帳戶。 它可以是租使用者中的任何訂用帳戶。
    • 資源群組:與您要連線的記憶體帳戶位於相同區域中的資源群組
    • 名稱:指出連接器用途的名稱。
    • 區域:這應該與您要連線的記憶體帳戶相同。 如果資源群組是在與您要連線的記憶體帳戶相同的區域中建立,則可以選擇預先填入的值 '[resourceGroup(.location]' 。
    • 使用者指派的受控識別:您想要使用之使用者指派受控識別的資源標識符。
  6. 按一下 [檢閱 + 建立] 。

  7. 當您看到 [ 驗證通過 ] 訊息時,按兩下 [ 建立]。

  8. 部署完成時,按兩下 [移至資源]。

  9. 記下 資源標識碼

    資源識別碼的格式如下:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    

步驟 2:授與記憶體帳戶的受控識別存取權

若要授與此步驟中的許可權,您必須在記憶體帳戶上擁有擁有者或使用者存取 管理員 istrator Azure RBAC 角色。

  1. 登入 Azure Data Lake 儲存體 Gen2 帳戶。
  2. 移至 [存取控制 [IAM],按兩下 [+ 新增],然後選取 [新增角色指派]。
  3. 選取 [儲存體 Blob 數據參與者角色],然後按 [下一步]。
  4. 在 [存取權指派對象] 下,選取 [受控識別]
  5. 按兩下 [ +選取成員],然後選取 Azure Databricks 的 Access 連接器或 使用者指派的受控識別
  6. 搜尋您的連接器名稱或使用者指派的身分識別、選取它,然後按兩下 [ 檢閱和指派]。

或者,您可以藉由將受控識別存取權授與特定容器,以限制對記憶體帳戶的存取。 請遵循上述相同的步驟,但在記憶體帳戶上授與 儲存體 Blob 委派器角色,以及容器上的 儲存體 Blob 數據參與者角色

步驟 3:授與受控識別檔案事件的存取權

授與受控識別檔案事件的存取權,可讓 Azure Databricks 訂閱雲端提供者發出的檔案事件通知。 這可讓檔案處理更有效率。 若要授與此步驟中的許可權,您必須在記憶體帳戶上擁有擁有者或使用者存取 管理員 istrator Azure RBAC 角色。

  1. 登入 Azure Data Lake 儲存體 Gen2 帳戶。
  2. 移至 [存取控制 [IAM],按兩下 [+ 新增],然後選取 [新增角色指派]。
  3. 選取 儲存體 佇列數據參與者角色,然後按 [下一步]。
  4. 在 [存取權指派對象] 下,選取 [受控識別]
  5. 按兩下 [ +選取成員],然後選取 Azure Databricks 的 Access 連接器或 使用者指派的受控識別
  6. 搜尋您的連接器名稱或使用者指派的身分識別、選取它,然後按兩下 [ 檢閱和指派]。

此步驟可讓 Azure Databricks 自動設定檔案事件。 如果您未授與 Azure Databricks 代表您設定檔案事件的存取權,則必須針對每個位置手動配置檔案事件。 若要授與此步驟中的許可權,您必須在受控識別上擁有擁有者或使用者存取 管理員 Istrator Azure RBAC 角色,以及 Azure Data Lake 儲存體 Gen2 帳戶所屬的資源群組。

  1. 請遵循步驟 3:將檔案事件的受控識別存取權授與上述步驟,並將 儲存體 帳戶參與者以及 儲存體 佇列數據參與者角色指派給受控識別。
  2. 流覽至 Azure Data Lake 儲存體 Gen2 帳戶所屬的 Azure 資源群組。
  3. 移至 [存取控制 (IAM)],單擊 [+ 新增],然後選取 [新增角色指派]。
  4. 選取 EventGrid EventSubscription 參與者角色,然後按 [下一步]。
  5. 在 [存取權指派對象] 下,選取 [受控識別]
  6. 按兩下 [ +選取成員],然後選取 Azure Databricks 的 Access 連接器或 使用者指派的受控識別
  7. 搜尋您的連接器名稱或使用者指派的身分識別、選取它,然後按兩下 [ 檢閱和指派]。

使用受控識別來存取 Unity 目錄根記憶體帳戶

本節說明當您建立 Unity 目錄中繼存放區時,如何為受控識別提供根記憶體帳戶的存取權。

若要瞭解如何升級現有的 Unity 目錄中繼存放區以使用受控識別,請參閱 升級現有的 Unity 目錄中繼存放區以使用受控識別來存取其根記憶體

  1. 身為 Azure Databricks 帳戶管理員,登入 Azure Databricks 帳戶控制台
  2. 按兩下 [目錄圖示目錄]。
  3. 按兩下 [ 建立中繼存放區]。
  4. 輸入下欄位的值:
    • 中繼存放區的名稱

    • 將部署中繼存放區的區域

      為了獲得最佳效能,請在相同的雲端區域中共置存取連接器、工作區、中繼存放區和雲端記憶體位置。

    • ADLS Gen 2 路徑:輸入要作為中繼存放區根記憶體的記憶體容器路徑。

      會自動新增前置 abfss:// 詞。

    • Access 連線 or 識別碼:以下列格式輸入 Azure Databricks 存取連接器的資源識別碼:

      /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
      
    • (選擇性) 受控識別標識碼:如果您使用使用者指派的受控識別建立存取連接器,請輸入受控識別的資源標識符。

  5. 按一下 [建立]
  6. 出現提示時,選取要連結至中繼存放區的工作區。

使用受控識別來存取 Unity 目錄中受控的外部記憶體

Unity 目錄可讓您使用記憶體認證和外部位置存取記憶體帳戶中的現有數據。 儲存體 認證會儲存受控識別,而外部位置會定義記憶體的路徑,以及記憶體認證的參考。 您可以使用此方法來授與和控制雲端記憶體中現有數據的存取權,以及在 Unity 目錄中註冊外部數據表。

記憶體認證可以保存受控識別或服務主體。 使用受控識別的優點是允許 Unity 目錄存取受網路規則保護的記憶體帳戶,這無法使用服務主體,而且不需要管理及輪替秘密。

若要使用受控識別建立記憶體認證,並將該記憶體認證指派給外部位置,請遵循使用 Unity 目錄將 連線 雲端物件記憶體中的指示。

如果您的 Azure Databricks 工作區部署在您自己的 Azure 虛擬網路中,也稱為「VNet 插入」,而且您使用記憶體防火牆來保護 Azure Data Lake 儲存體 Gen2 帳戶,您必須:

  1. 讓您的 Azure Databricks 工作區能夠存取 Azure 儲存體。
  2. 讓您的受控識別能夠存取 Azure 儲存體。

步驟 1: 讓您的 Azure Databricks 工作區能夠存取 Azure 儲存體

您必須設定網路設定,以允許 Azure Databricks 工作區存取 Azure Data Lake 儲存體 Gen2。 您可以設定私人端點,或從 Azure Data Lake 儲存體 Gen2 上的虛擬網路存取,以允許從子網連線到 Azure Data Lake 儲存體 Gen2 帳戶。

如需指示,請參閱授與 Azure Data Lake 儲存體 Gen2 的 Azure Databricks 工作區存取權。

步驟 2:啟用受控識別以存取 Azure 儲存體

只有在已針對您的 Azure 儲存體 帳戶停用[允許受信任服務列表上的 Azure 服務存取此儲存器帳戶] 時,才需要此步驟。 如果已啟用該組態:

  • 與記憶體帳戶相同租使用者中 Azure Databricks 的任何存取連接器都可以存取記憶體帳戶。
  • 任何 Azure 信任的服務都可以存取記憶體帳戶。 請參閱 授與受信任 Azure 服務的存取權。

下列指示包含停用此設定的步驟。 您可以使用 Azure 入口網站或 Azure CLI。

使用 Azure 入口網站

  1. 登入 Azure 入口網站,尋找並選取 Azure 儲存體 帳戶,然後移至 [網络] 索引標籤。

  2. 將 [公用網络存取] 設定[從選取的虛擬網络和IP 位址啟用]。

    您可以選擇將 [公用網络存取] 設定[已停用]。 受控識別可用來略過公用網路存取的檢查。

  3. 在 [資源實例] 下,選取 Microsoft.Databricks/access 的資源類型連線 ors,然後選取您的 Azure Databricks 存取連接器。

  4. [例外狀況] 底下,清除 [ 允許受信任服務清單上的 Azure 服務存取此儲存體帳戶 ] 複選框。

使用 Azure CLI

  1. 安裝 Azure CLI登入

    若要使用 Microsoft Entra ID 服務主體登入,請參閱 使用 Microsoft Entra ID 服務主體登入 Azure CLI。

    若要使用 Azure Databricks 使用者帳戶登入,請參閱 使用 Azure Databricks 使用者帳戶登入 Azure CLI。

  2. 將網路規則新增至記憶體帳戶:

    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>
    
  3. 建立網路規則之後,請移至 Azure 入口網站中的 Azure 儲存體 帳戶,然後在 [資源實例] 下的 [網路] 索引標籤中檢視受控識別,資源類型 Microsoft.Databricks/accessConnectors

  4. [例外狀況] 底下,清除 [ 允許受信任服務清單上的 Azure 服務存取此儲存體帳戶 ] 複選框。

  5. 選擇性地將 [公用網络存取] 設定[已停用]。 受控識別可用來略過公用網路存取的檢查。

    標準方法是將此值設定為 [從選取的虛擬網络和IP位址啟用]。

無伺服器 SQL 倉儲 是在 Azure Databricks 的 Azure 訂用帳戶中執行的計算資源,而不是您的 Azure 訂用帳戶。 如果您在 Azure Data Lake 儲存體 Gen2 上設定防火牆,而且打算使用無伺服器 SQL 倉儲,您必須設定防火牆以允許從無伺服器 SQL 倉儲存取。

如需指示,請參閱 設定無伺服器計算存取的防火牆。

升級現有的 Unity 目錄中繼存放區,以使用受控識別來存取其根記憶體

如果您有使用服務主體建立的 Unity 目錄中繼存放區,而且您想要升級它以使用受控識別,您可以使用 API 呼叫來更新它。

  1. 使用設定 Unity 目錄受控識別中的指示,為 Azure Databricks 建立 Access 連線 or,並將許可權指派給用於 Unity 目錄中繼存放區根記憶體的記憶體容器。

    您可以使用系統指派的受控識別或使用者指派的受控識別來建立存取連接器。

    記下存取連接器的資源標識碼。 如果您使用使用者指派的受控識別,也請記下其資源標識碼。

  2. 身為帳戶管理員,登入指派給中繼存放區的 Azure Databricks 工作區。

    您不需要是工作區管理員。

    記下工作區 URL,這是 URL 的第一個部分,且https://包含 。azuredatabricks.net

  3. 產生個人存取令牌

  4. 將個人存取令牌新增至 .netrc 主目錄中的檔案。 這可藉由防止個人存取令牌出現在殼層的命令歷程記錄中來改善安全性。 請參閱令牌管理 API

  5. 執行下列 cURL 命令以重新建立記憶體認證。

    取代佔位元值:

    • <databricks-instance>:產生個人存取令牌之工作區的工作區 URL
    • <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>:如果您使用使用者指派的受控識別建立存取連接器,請指定受控識別的資源識別碼。
    curl -n -X POST --header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/storage-credentials --data "{
      \"name\": \"<credential-name>\",
      \"azure_managed_identity\": {
        \"access_connector_id\": \"<access-connector-id>\",
        \"managed_identity_id\": \"<managed-identity-id>\"
      }
    }"
    
  6. 記下回應中的記憶體認證標識碼。

  7. 執行下列 cURL 命令來擷取 metastore_id,其中 <databricks-instance>產生個人存取令牌之工作區的工作區 URL

    curl -n GET--header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/metastore_summary
    
  8. 執行下列 cURL 命令,以新的根記憶體認證更新中繼存放區。

    取代佔位元值:

    curl -n -X PATCH --header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/metastores/<metastore-id> --data
    "{\"storage_root_credential_id\": \"<storage-credential-id>\"}"