分享方式:


使用服務主體建立 Unity 目錄受控記憶體(舊版)

重要

此檔已淘汰,且可能未更新。 不再支援此內容中所提及的產品、服務或技術。 若要檢視目前的系統管理檔,請參閱 管理您的 Azure Databricks 帳戶

本文說明使用服務主體建立外部位置和受控記憶體的舊版方法。 Databricks 強烈建議您使用 Azure 受控識別作為可存取記憶體容器的身分識別,而不是服務主體。 請參閱 在 Unity 目錄中使用 Azure 受控識別來存取記憶體

不過,如果您仍想要使用服務主體,或您現有的 Unity 目錄受控記憶體或外部位置使用服務主體,而且您想要瞭解此程式,則會提供此封存文章中的指示。

建立使用服務主體存取的中繼存放區(舊版)

若要建立服務主體存取的 Unity 目錄中繼存放區:

  1. 建立 Azure Data Lake Storage Gen2 的記憶體帳戶。

    此帳戶中的記憶體容器會儲存中繼存放區的所有 受控數據表,但目錄或架構中具有自己受控儲存位置的記憶體容器除外。

    請參閱建立儲存體帳戶以與 Azure Data Lake Storage Gen2 搭配使用。 這必須是 Azure Databricks 工作區相同區域中的進階效能 Azure Data Lake Storage Gen2 帳戶。

  2. 在新記憶體帳戶中建立容器。

    記下容器的 ADLSv2 URI,格式如下:

    abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<metastore-name>
    

    在後續步驟中,將 取代 <storage-container> 為此 URI。

  3. 在 Microsoft Entra ID 中,建立服務主體,並將許可權指派給記憶體帳戶,並使用服務主體存取記憶體中的 指示和 Microsoft Entra ID(Azure Active Directory)

    Unity 目錄會使用此服務主體來代表 Unity 目錄使用者存取記憶體帳戶中的容器。 產生服務主體的客戶端密碼。 請參閱 Microsoft Entra ID 服務主體驗證。 記下服務主體的用戶端密碼、用戶端應用程式識別碼,以及您建立此服務主體的目錄識別碼。 在下列步驟中,以這些值取代 <client-secret><client-application-id><directory-id>

  4. 記下這些屬性,您會在建立中繼存放區時使用:

    • <aad-application-id>
    • 記憶體帳戶區域
    • <storage-container>
    • 服務主體的 <client-secret><client-application-id><directory-id>
  5. 您無法在帳戶主控台 UI 中使用服務主體來建立存取的中繼存放區。 請改用 帳戶中繼存放區 API。 例如:

    curl -n -X POST --header 'Content-Type: application/json' https://<account-domain>/api/2.0/accounts/<account-id>/metastores
    --data '{
       "metastore_info": {
          "name": "<metastore-name>",
          "storage_root": "<storage-container>",
          "region": "<region>"
          "storage_root_credential_id"
       }
    }'
    

    若要瞭解如何向帳戶層級 API 進行驗證,請參閱 Microsoft Entra ID 服務主體驗證

    建立中繼存放區的使用者是其擁有者。 Databricks 建議您將中繼存放區的擁有權重新指派給群組。 請參閱 指派中繼存放區管理員

  6. 記下中繼存放區的標識碼。 當您檢視中繼存放區的屬性時,中繼存放區的標識碼是 之後 /data 和之前 /configurationURL 的一部分。

  7. 中繼存放區已建立,但 Unity 目錄尚無法將數據寫入其中。 若要完成中繼存放區的設定:

    1. 在不同的瀏覽器中,以工作區系統管理員身分登入指派給中繼存放區的工作區。

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

    3. 產生個人存取令牌。 請參閱令牌管理 API

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

    5. 執行下列 cURL 命令來建立中繼存放區的根記憶體認證。 取代佔位元值:

      • <workspace-url>:產生個人存取令牌之工作區的 URL。
      • <credential-name>:記憶體認證的名稱。
      • <directory-id>:您所建立之服務主體的目錄標識符。
      • <application-id>:您所建立服務主體的應用程式識別碼。
      • <client-secret>:您為服務主體產生的客戶端密碼值(而非客戶端密碼識別碼)。
      curl -n -X POST --header 'Content-Type: application/json' https://<workspace-url>/api/2.0/unity-catalog/storage-credentials --data "{
         \"name\": \"<credential-name>\",
         \"azure_service_principal\": {
         \"directory_id\": \"<directory-id>\",
         \"application_id\": \"<application-id>\",
         \"client_secret\": \"<client-secret>\"
         }
      }"
      

      記下記憶體認證標識碼,這是 cURL 命令回應中的 值 id

  8. 執行下列 cURL 命令,以新的根記憶體認證更新中繼存放區。 取代佔位元值:

    • <workspace-url>:產生個人存取令牌之工作區的 URL。
    • <metastore-id>:中繼存放區的標識符。
    • <storage-credential-id>:來自上一個命令的記憶體認證標識碼。
    curl -n -X PATCH --header 'Content-Type: application/json' https://<workspace-url>/api/2.0/unity-catalog/metastores/<metastore-id> --data
    "{\"storage_root_credential_id\": \"<storage-credential-id>\"}"
    

您現在可以 將工作區新增至中繼存放區

建立使用服務主體的記憶體認證(舊版)

若要使用服務主體建立記憶體認證,您必須是 Azure Databricks 帳戶管理員。建立服務主體記憶體認證的帳戶管理員可以將擁有權委派給其他使用者或群組,以管理其許可權。

首先,建立服務主體,並在使用服務主體和 Microsoft Entra ID(Azure Active Directory) 存取記憶體之後,授與記憶體帳戶的存取權。

您無法使用目錄總管新增服務主體記憶體認證。 請改用 記憶體認證 API。 例如:

curl -X POST -n \
https://<databricks-instance>/api/2.1/unity-catalog/storage-credentials \
-d '{
   "name": "<storage-credential-name>",
   "read_only": true,
   "azure_service_principal": {
      "directory_id": "<directory-id>",
      "application_id": "<application-id>",
      "client_secret": "<client-secret>"
   },
   "skip_validation": "false"
   }'

您也可以使用 Databricks Terraform 提供者databricks_storage_credential來建立記憶體認證。