為 Databricks Unity Catalog 設定跨雲端連線

本文說明如何設定跨雲端連線,直接在 Google Cloud中查詢 Databricks Unity Catalog 的資料。這項功能可將外部資料來源與現有的 Google Cloud 環境整合,統一資料分析。

之後,您可以使用無邊界 Lakehouse 管理聯合資料的存取權。

事前準備

  1. 請參閱 Lakehouse 總覽,瞭解 Lakehouse 如何管理資料存取權。
  2. 請參閱這篇文章,瞭解如何存取跨雲端資料。
  3. 請參閱支援的目錄,確認支援的設定。
  4. 瞭解如何使用區域性 Secret Manager 密鑰。如要使用密鑰驗證機制,透過 Databricks Unity Catalog 設定 Lakehouse,就必須提供這項資訊。
  5. 選用:如果您打算透過 Google Cloud 虛擬私有雲與遠端雲端服務供應商虛擬私有雲 (例如 AWS) 之間的私有互連網路轉送查詢,請確保您在遠端供應商擁有有效帳戶、佈建Cross-Cloud Interconnect或合作夥伴 Cross-Cloud Interconnect、與 Cloud Router 建立 BGP 工作階段,並確認您在兩個雲端環境中都擁有必要的 IAM 權限。
  6. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自體驗產品的實際應用成效。新客戶還能獲得價值 $300 美元的免費抵免額,能用於執行、測試及部署工作負載。
  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the BigLake, Secret Manager APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the BigLake, Secret Manager APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

必要的角色

如要取得設定跨雲端存取權所需的權限,請要求管理員授予您專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

限制和注意事項

本節列出存取跨雲端資料時的限制和注意事項。

  • Cross-Cloud Interconnect 支援的雲端服務供應商: 無邊界 Lakehouse 支援與下列遠端雲端服務供應商建立私有互連:Amazon Web Services (AWS)。您可以使用專屬 Cross-Cloud Interconnect 或合作夥伴 Cross-Cloud Interconnect。
  • 網路路由:如果未設定私人互連網路 (例如專屬 CCI 或合作夥伴 CCI),查詢會透過公開網際網路轉送。這可能會導致遠端雲端服務供應商收取較高的輸出費用,且效能較難預測。
  • Databricks Unity Catalog 設定:
  • 唯讀:Lakehouse 中的聯合目錄是遠端目錄的唯讀檢視畫面。不支援資源操作 (例如建立、更新或刪除資源),必須直接在遠端目錄中執行。
  • 資料更新間隔:聯合目錄的 --refresh-interval 旗標會決定中繼資料的同步頻率。這個值必須為 0s (已停用) 或至少 300s (5 分鐘)。目錄的背景中繼資料重新整理作業可能需要較長時間,具體取決於命名空間和資料表資源的數量。如果前一次重新整理作業超時,系統會略過目前的重新整理作業,但會安排在下一個間隔時間執行下一次重新整理作業。
  • Lakehouse 快取:所有跨雲端查詢都會自動啟用 Lakehouse 快取,將資料區塊儲存在 Google Cloud本機,節省 egress 費用。快取不支援客戶自行管理的加密金鑰 (CMEK),快取資料會使用 Google-owned and Google-managed encryption keys加密。如果對查詢中的任何資料表強制執行 constraints/gcp.restrictNonCmekServices 組織政策限制,系統會自動停用該查詢的快取功能。詳情請參閱「智慧型快取」。
  • 資料落地和法規遵循:在 Google Cloud 區域建立聯合目錄或連線,會將快取的靜態資料儲存在該目標區域。如果遠端雲端資料位於不同管轄區,請確保跨區域快取符合貴機構的資料落地和法規遵循規定。

一般工作流程

如要存取跨雲端資料,請按照下列一般步驟操作:

  • 設定 Cross-Cloud Interconnect (選用):設定 Google Cloud 虛擬私有雲與遠端雲端服務供應商之間的私人連線。
  • 設定聯合:設定驗證機制,並在 Lakehouse 中建立聯合目錄。
    • OpenID Connect (OIDC) (建議):在 Lakehouse 中建立聯合目錄,指定遠端服務主體應用程式 ID,然後使用 Lakehouse 目錄服務帳戶的專屬 ID,在 Databricks 中設定聯盟政策。
    • 以密鑰為基礎的驗證:在 Secret Manager 中,使用遠端目錄憑證建立密鑰。接著,在 Lakehouse 建立聯合目錄,並授予目錄服務帳戶密鑰存取權。
  • 驗證連線:確認 Lakehouse 能順利連線至遠端目錄。
  • 查詢資料:使用 BigQuery 或 Managed Service for Apache Spark,對身分聯盟資料執行查詢。系統會自動為查詢啟用 Lakehouse 快取,以節省輸出費用。詳情請參閱「查詢遠端資料」。
  • 設定權限:使用 Identity and Access Management (IAM),管理可查看及查詢聯合資料的人員。

設定 Cross-Cloud Interconnect (選用)

根據預設,遠端目錄的查詢會透過公開網際網路傳輸。為協助提升安全性及法規遵循能力、提供可預測的效能,以及降低資料傳輸費用,請使用私有互連。這會在您的 Google Cloud虛擬私有雲 (VPC) 與遠端雲端服務供應商的網路 (例如 AWS) 之間,建立專屬的私人網路連線。

您可以在 Google Cloud 虛擬私有雲和遠端雲端服務供應商 (例如 AWS) 的虛擬私有雲之間,佈建及設定下列任一私人互連網路選項:

在 Google Cloud 中的 Cloud Router 與遠端雲端服務供應商的虛擬私有雲之間建立 BGP 工作階段,確保路徑交換。

如要啟用私人查詢功能,您必須透過私人互連網路,設定從 Lakehouse 到遠端儲存空間 bucket (例如 AWS Amazon S3 bucket) 的路徑。您可以按照兩種架構流程設定這項路徑:

  • 內部區域 Proxy 網路負載平衡器路由:這個流程會使用Google Cloud 內部區域 Proxy 網路負載平衡器,在指向多個 AWS 彈性網路介面 (ENI) 的混合式連線網路端點群組 (NEG) 之間分配要求。這個流程對於負載平衡、擴充性和高可用性至關重要。合作夥伴 CCI 必須使用這項功能,專用 CCI 則建議使用,以便進行負載平衡、擴充及確保高可用性。
  • 直接端點路由:這個流程會將 Service Directory 直接連至單一 AWS 介面 VPC 端點 IP 位址。這個流程僅適用於專屬 CCI,不支援合作夥伴 CCI。

選取符合架構需求的設定流程:

內部區域 Proxy 網路負載平衡器

如要設定內部區域性 Proxy 網路負載平衡器,將要求分配到多個 AWS ENI,以達到高可用性和負載平衡,請按照下列步驟操作:

設定 AWS 網路

首先,建立 Amazon S3 VPC 介面端點 (AWS PrivateLink):

  1. 在 AWS VPC 控制台中,建立 Amazon S3 的介面端點。
  2. 服務名稱請指定 com.amazonaws.AWS_REGION.s3。
  3. 選取透過 Direct Connect 連線至 Google Cloud 虛擬私有雲的虛擬私有雲和子網路。
  4. 將安全性群組附加至端點,控管傳入存取權。
  5. 這會在每個所選子網路中佈建 Elastic Network Interface (ENI)。記下這些 ENI 的私人 IP 位址。

接著,設定安全性群組:

  • 請確認附加至 Amazon S3 端點 ENI 的安全性群組,允許來自 Google Cloud 虛擬私有雲的傳入 TCP 流量,透過通訊埠 443傳輸。這必須包含 Proxy 專用子網路的 CIDR 範圍,才能允許健康狀態檢查和轉送的流量。Google Cloud

設定 Google Cloud 網路

為簡化設定,請執行下列指令來設定內部負載平衡器。如需進階設定或更多詳細資料,請參閱「為混合式端點設定內部區域性 Proxy 網路負載平衡器」。

gcloud compute networks subnets create PROXY_SUBNET_NAME \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION \
    --network=VPC_NETWORK \
    --range=PROXY_SUBNET_RANGE

更改下列內容:

  • PROXY_SUBNET_NAME:僅限 Proxy 的子網路名稱。
  • PROXY_SUBNET_RANGE:虛擬私有雲網路中未使用的 CIDR 範圍 (例如 10.129.0.0/23)。
  1. 建立區域性健康狀態檢查:

    gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
        --region=REGION \
        --port=443

    更改下列內容:

    • HEALTH_CHECK_NAME:健康狀態檢查的名稱。
    • REGION: Google Cloud 區域 (例如 us-east4)。
  2. 建立混合式連線網路端點群組 (NEG),並新增端點:

    為每個可用區建立混合式 NEG (NON_GCP_PRIVATE_IP_PORT):

    gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ZONE \
        --network=VPC_NETWORK

    將 AWS ENI 的私人 IP 位址新增至對應的混合 NEG:

    gcloud compute network-endpoint-groups update NEG_NAME \
        --zone=ZONE \
        --add-endpoint="ip=AWS_S3_IP,port=443"

    更改下列內容:

    • NEG_NAME:混合型 NEG 的名稱。
    • ZONE: Google Cloud 區域 (例如 us-east4-a)。這個區域必須位於 Cross-Cloud Interconnect VLAN 連結的區域內。
    • VPC_NETWORK:虛擬私有雲網路的名稱。
    • AWS_S3_IP:該可用區中 AWS Amazon S3 VPC 端點 (ENI) 的私人 IP 位址。

    如果 AWS ENI 分布在多個可用區,請重複執行這些指令,為其他可用區建立 NEG 並新增端點。

  3. 建立及設定後端服務:

    使用內部代管負載平衡建立區域後端服務:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=TCP \
        --region=REGION \
        --health-checks=HEALTH_CHECK_NAME \
        --health-checks-region=REGION

    將混合型 NEG 新增至後端服務:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --region=REGION \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-zone=ZONE \
        --balancing-mode=CONNECTION \
        --max-connections=MAX_CONNECTIONS

    更改下列內容:

    • BACKEND_SERVICE_NAME:後端服務的名稱。
    • NEG_NAME:您在上一個步驟中建立的混合式 NEG 名稱。
    • ZONE: Google Cloud 可用區 (例如 us-east4-a)。
    • MAX_CONNECTIONS:後端應處理的並行連線數量上限 (例如 100)。

    針對您建立的每個混合型 NEG,重複執行 add-backend 指令。

  4. 設定負載平衡器前端:

    建立目標 TCP Proxy:

    gcloud compute target-tcp-proxies create TARGET_PROXY_NAME \
        --backend-service=BACKEND_SERVICE_NAME \
        --region=REGION

    建立轉送規則,將流量轉送至目標 Proxy:

    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=VPC_NETWORK \
        --subnet=VPC_SUBNET \
        --ports=443 \
        --region=REGION \
        --target-tcp-proxy=TARGET_PROXY_NAME \
        --target-tcp-proxy-region=REGION \
        --allow-global-access

    更改下列內容:

    • TARGET_PROXY_NAME:目標 Proxy 的名稱。
    • FORWARDING_RULE_NAME:轉送規則的名稱。
    • VPC_SUBNET:虛擬私有雲子網路的名稱。

為負載平衡器建立轉送規則後,請記下指派給負載平衡器的內部 IP 位址。這是您的ILB_IP_ADDRESS。

設定 Service Directory

在 Service Directory 中註冊 ILB 的 IP 位址,讓 Lakehouse 能夠找到該位址。

  1. 為遠端雲端建立命名空間:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    更改下列內容:

    • NAMESPACE:命名空間的專屬 ID。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • REGION: Google Cloud 區域。例如 us-east4。這必須與同盟目錄位於相同區域。
  2. 在 Service Directory 命名空間中建立服務:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    更改下列內容:

    • SERVICE_NAME:服務的專屬 ID。
  3. 在服務中為 ILB 建立端點:

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --project=PROJECT_ID \
        --namespace=NAMESPACE \
        --service=SERVICE_NAME \
        --location=REGION \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \
        --address=ILB_IP_ADDRESS \
        --port=443

    更改下列內容:

    • ENDPOINT_NAME:端點的專屬 ID。
    • PROJECT_NUMBER:您的 Google Cloud 專案編號。在 --network 旗標中使用專案編號。
    • ILB_IP_ADDRESS:ILB 轉送規則的內部 IP 位址。

直接端點

如要設定 Service Directory,將流量直接轉送至單一 AWS 介面 VPC 端點 IP 位址,請按照下列步驟操作:

  1. 在 AWS VPC 中,為 Amazon S3 建立介面 VPC 端點。記下這個端點的 IP 位址和通訊埠。
  2. 為遠端雲端建立命名空間:

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    更改下列內容:

    • NAMESPACE:命名空間的專屬 ID。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • REGION: Google Cloud 區域。例如 us-east4。這個區域必須與聯合目錄相同。
  3. 在 Service Directory 命名空間中建立服務:

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    更改下列內容:

    • SERVICE_NAME:服務的專屬 ID。
  4. 在服務中建立端點,其中包含 Amazon S3 介面 VPC 端點的路由資訊:

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --service=SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION \
        --address=S3_VPCE_IP_ADDRESS \
        --port=S3_VPCE_PORT \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK

    更改下列內容:

    • ENDPOINT_NAME:端點的專屬 ID。
    • S3_VPCE_IP_ADDRESS:Amazon S3 介面虛擬私有雲端點的 IP 位址。例如:10.0.1.45。
    • S3_VPCE_PORT:Amazon S3 介面 VPC 端點的通訊埠號碼。例如:443。
    • PROJECT_NUMBER:您的 Google Cloud專案編號。在 --network 旗標中使用專案編號。
    • VPC_NETWORK:與私人互連網路相關聯的 Google Cloud 虛擬私有雲網路名稱。

設定聯盟

如要查詢資料,您必須設定 Lakehouse 聯合目錄,並連至遠端 Databricks Unity Catalog。

設定驗證機制

如要使用聯合功能,必須以 Databricks 服務主體的身分,向遠端目錄驗證。選擇下列其中一種驗證選項:

OIDC

OpenID Connect (OIDC) 可透過 Databricks OAuth 權杖聯盟進行無密鑰驗證。

  1. 在 Databricks 帳戶中建立服務主體,該主體必須具備目標 Unity Catalog 的讀取權限,以及目標結構定義或目錄的 EXTERNAL USE SCHEMA 權限。
  2. 儲存服務主體的應用程式 ID (UUID)。後續步驟會用到這項資訊。

Secret-based

這個選項會使用 OAuth 用戶端 ID 和用戶端密鑰,並以區域 Secret Manager 密鑰安全儲存。

  1. 在 Databricks 帳戶中建立服務主體,並授予目標 Unity Catalog 的讀取權限。

  2. 為服務主體產生 OAuth 密鑰。

  3. 建立名為 credentials.json 的 JSON 檔案,並加入酬載:

    {
        "client_id": "CLIENT_ID",
        "client_secret": "CLIENT_SECRET"
    }

    更改下列內容:

    • CLIENT_ID:Databricks 服務主體的 OAuth 用戶端 ID。
    • CLIENT_SECRET:Databricks 服務主體的 OAuth 用戶端密鑰。
  4. 設定 Secret Manager 的區域端點:

    Secret Manager 預設會使用全域端點。不過,Lakehouse 要求密鑰必須儲存在與 Lakehouse 目錄相同的區域。如要使用 gcloud CLI 與區域性密鑰互動,您必須覆寫目前工作階段或設定檔的預設 API 端點。例如:secretmanager.us-east4.rep.googleapis.com。

    gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/

    更改下列內容:

    • REGION:儲存 Secret Manager 密鑰的 Google Cloud 區域。例如:us-east4。為避免連線能力問題,Secret 和目錄必須在相同區域建立。
  5. 將酬載上傳至 Secret Manager:

    gcloud secrets create DATABRICKS_SECRET_NAME \
      --location="REGION" \
      --project="PROJECT_ID" \
      --data-file=credentials.json

    更改下列內容:

    • DATABRICKS_SECRET_NAME:: Databricks 密鑰的名稱。
    • PROJECT_ID:您的 Google Cloud 專案 ID。

建立聯合目錄

使用 Google Cloud 控制台或 gcloudCLI 建立聯合目錄。

注意事項:

  • 僅支援使用 AWS 外部位置或 Google Cloud外部位置的 Databricks Unity Catalog。不支援使用 AWS 預設儲存空間 Google Cloud或 預設儲存空間的 Databricks Unity 目錄。

  • 您必須在 Unity Catalog 使用的 Metastore 上啟用外部資料存取權,這項功能預設為停用。

  • 您必須將目標結構定義或目錄的 EXTERNAL USE SCHEMA 權限授予 Databricks 服務主體,才能啟用憑證販售功能,以便存取外部資料。如果沒有這項權限,背景中繼資料重新整理和查詢憑證販售作業將會失敗。

控制台

如何建立聯合目錄:

  1. 前往 Google Cloud 控制台的「Lakehouse」Lakehouse。

    前往 Lakehouse

  2. 按一下「 Create catalog」(建立目錄)。

  3. 按一下「聯合目錄」。

    系統會顯示「目錄設定」部分。

  4. 在「聯合目錄來源」中,選取「Databricks (Unity)」。

  5. 在「資料位置」部分,選取要建立聯合目錄的 Lakehouse 區域。例如:us-east4。如要盡可能縮短延遲時間 (即使是透過公開網際網路),請在選取區域時執行下列操作:

    • 如果 Unity Catalog 位於 AWS,請選取最接近 AWS 區域的Google Cloud 區域。
    • 如果 Unity Catalog 位於 Google Cloud,請選取完全相同的區域。
  6. 按一下「繼續」。

    「Connection details」(連線詳細資料) 區段隨即顯示。

  7. 在「Remote catalog details」(遠端目錄詳細資料) 部分的「Unity instance name」(Unity 執行個體名稱) 欄位中,輸入目標 Databricks 執行個體名稱。例如:abcd.cloud.databricks.com。

  8. 在「Unity catalog name」(Unity Catalog 名稱) 欄位中,輸入要聯合的目標 Databricks Unity Catalog 名稱。

  9. 選取「驗證方式」的選項:

    • 在「OIDC」OIDC部分,輸入服務主體的應用程式 ID。
    • 在「Secret」中,輸入密鑰名稱。請使用下列格式:projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME。
  10. 選用:在「Service directory name」(服務目錄名稱) 欄位中,輸入 Service Directory 服務的路徑。例如:projects/PROJECT_ID/locations/REGION/namespaces/SERVICE_DIRECTORY_NAMESPACE/services/SERVICE_NAME。只有在設定私人互連網路 (Cross-Cloud Interconnect) 時,才需要執行這項操作。

  11. 點選「建立」。

gcloud

OIDC

如果您使用 OIDC,則必須指定 --unity-service-principal-application-id。

公開網際網路 (無 CCI)

如未設定 CCI,連線會透過公開網際網路安全傳輸。

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="unity" \
    --unity-service-principal-application-id="UNITY_SERVICE_PRINCIPAL_APPLICATION_ID" \
    --unity-instance-name="UNITY_INSTANCE_NAME" \
    --unity-catalog-name="UNITY_CATALOG_NAME" \
    --refresh-interval="REFRESH_INTERVAL" \
    --namespace-filters="NAMESPACE_FILTERS"

客戶擁有 (CCI)

如果您已設定私人互連 (例如專屬 CCI 或合作夥伴 CCI),請提供 Service Directory 服務參照,讓 Lakehouse 私下轉送流量。

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="unity" \
    --unity-service-principal-application-id="UNITY_SERVICE_PRINCIPAL_APPLICATION_ID" \
    --unity-instance-name="UNITY_INSTANCE_NAME" \
    --unity-catalog-name="UNITY_CATALOG_NAME" \
    --refresh-interval="REFRESH_INTERVAL" \
    --namespace-filters="NAMESPACE_FILTERS" \
    --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/SERVICE_DIRECTORY_NAMESPACE/services/SERVICE_NAME"

更改下列內容:

  • FEDERATED_CATALOG_NAME:聯合目錄的名稱。
  • PROJECT_ID:您的 Google Cloud 專案 ID。
  • REGION:建立聯合目錄的 Lakehouse 區域。這個區域必須與 Service Directory 命名空間和區域密鑰相同。如要盡可能縮短延遲時間:
    • 如果 Unity Catalog 位於 AWS,請選取最接近 AWS 區域的Google Cloud 區域。
    • 如果 Unity Catalog 處於開啟狀態 Google Cloud,請選取完全相同的區域。
  • UNITY_SERVICE_PRINCIPAL_APPLICATION_ID:Databricks 服務主體的應用程式 ID (UUID)。
  • UNITY_INSTANCE_NAME:目標 Databricks 執行個體名稱。例如:abcd.cloud.databricks.com。
  • UNITY_CATALOG_NAME:要聯合的目標 Databricks Unity Catalog 名稱。
  • REFRESH_INTERVAL:指定背景中繼資料重新整理的執行頻率。將這個值設為時間長度,例如 330s 或 5m30s。
  • NAMESPACE_FILTERS:選用:以半形逗號分隔的命名空間清單,用於聯合。例如,ns1,ns2。如省略,則會包含所有命名空間。
  • 如果您使用專屬互連網路 (CCI):
    • SERVICE_DIRECTORY_NAMESPACE:您在設定 Private Interconnect 時建立的 Service Directory 命名空間。
    • SERVICE_NAME:您在設定專屬互連時建立的 Service Directory 服務名稱。

Secret-based

如果使用密鑰式驗證,則必須指定 --secret-name。

公開網際網路 (無 CCI)

如未設定 CCI,連線會透過公開網際網路安全傳輸。

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="unity" \
    --secret-name="projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME" \
    --unity-instance-name="UNITY_INSTANCE_NAME" \
    --unity-catalog-name="UNITY_CATALOG_NAME" \
    --refresh-interval="REFRESH_INTERVAL" \
    --namespace-filters="NAMESPACE_FILTERS"

客戶擁有 (CCI)

如果您已設定私人互連 (例如專屬 CCI 或合作夥伴 CCI),請提供 Service Directory 服務參照,讓 Lakehouse 私下轉送流量。

gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --primary-location="REGION" \
    --catalog-type="federated" \
    --federated-catalog-type="unity" \
    --secret-name="projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME" \
    --unity-instance-name="UNITY_INSTANCE_NAME" \
    --unity-catalog-name="UNITY_CATALOG_NAME" \
    --refresh-interval="REFRESH_INTERVAL" \
    --namespace-filters="NAMESPACE_FILTERS" \
    --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/SERVICE_DIRECTORY_NAMESPACE/services/SERVICE_NAME"

更改下列內容:

  • FEDERATED_CATALOG_NAME:聯合目錄的名稱。
  • PROJECT_ID:您的 Google Cloud 專案 ID。
  • REGION:建立聯合目錄的 Lakehouse 區域。這必須與服務目錄命名空間和區域密鑰位於相同區域。如要盡可能縮短延遲時間:
    • 如果 Unity Catalog 位於 AWS,請選取最接近 AWS 區域的Google Cloud 區域。
    • 如果 Unity Catalog 位於 Google Cloud,請選取完全相同的區域。
  • DATABRICKS_SECRET_NAME:Databricks Secret 的名稱。
  • UNITY_INSTANCE_NAME:目標 Databricks 執行個體名稱。例如:abcd.cloud.databricks.com。
  • UNITY_CATALOG_NAME:要聯合的目標 Databricks Unity Catalog 名稱。
  • REFRESH_INTERVAL:指定背景中繼資料重新整理的執行頻率。將這個值設為時間長度,例如 330s 或 5m30s。
  • NAMESPACE_FILTERS:選用:以半形逗號分隔的命名空間清單,用於聯合。例如,ns1,ns2。如省略,則會包含所有命名空間。
  • 如果您使用專屬互連網路 (CCI):
    • SERVICE_DIRECTORY_NAMESPACE:您在設定 Private Interconnect 時建立的 Service Directory 命名空間。
    • SERVICE_NAME:您在設定私人互連網路時建立的 Service Directory 服務名稱。

完成驗證設定

使用所選驗證類型完成驗證程序。

OIDC

建立目錄時,Lakehouse 會為其佈建專屬服務帳戶。您必須擷取服務帳戶的專屬數字 ID,並用來設定 Databricks 服務主體的同盟政策。

  1. 擷取 Lakehouse 目錄服務帳戶的專屬 ID:

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
        --project="PROJECT_ID" \
        --format='value(biglake-service-account-id)'
  2. 在 Databricks 帳戶中,為先前建立的服務主體設定聯合政策。請使用下列值:

    • 核發者網址:https://accounts.google.com
    • Subject:上一步擷取的 Lakehouse 目錄服務帳戶專屬數字 ID。
    • 目標對象:https://accounts.cloud.databricks.com

    確認 Databricks 服務主體具備目標目錄和工作區的讀取權限,以及目標結構定義或目錄的 EXTERNAL USE SCHEMA 權限。

Secret-based

建立目錄時,Lakehouse 會為其佈建專屬服務帳戶 (在資源說明中傳回為 biglake-service-account)。

您必須授予這個服務帳戶權限,才能存取先前建立的密鑰。請注意,傳播 IAM 政策可能需要幾分鐘的時間。

授予目錄服務帳戶存取密鑰的權限:

gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
gcloud secrets add-iam-policy-binding DATABRICKS_SECRET_NAME \
  --project="PROJECT_ID" \
  --location="REGION" \
  --member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --format='value(biglake-service-account)')" \
  --role="roles/secretmanager.secretAccessor"

如要確認聯合目錄服務帳戶是否能存取 Secret,請執行下列指令:

gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
gcloud secrets get-iam-policy DATABRICKS_SECRET_NAME \
     --project="PROJECT_ID" \
     --location="REGION"

在輸出內容中,確認 biglake-service-account 服務帳戶已獲派 roles/secretmanager.secretAccessor 角色。

確認 Databricks 服務主體具備目標目錄和工作區的讀取權限,以及目標結構定義或目錄的 EXTERNAL USE SCHEMA 權限。

完成私人互連設定 (僅限 Cross-Cloud Interconnect)

如果透過私人互連網路 (專屬或合作夥伴 CCI) 轉送流量,您必須授予 Lakehouse 目錄服務帳戶權限,才能透過 Service Directory 探索及授權連線。

控制台

  1. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。

    前往「IAM」頁面

  2. 按一下「授予存取權」 (或「新增」)。

  3. 在「新增主體」欄位,輸入 Lakehouse 目錄服務帳戶電子郵件地址。您可以透過描述目錄來擷取這個電子郵件地址 (請參閱「gcloud」分頁)。

  4. 在「Role」(角色) 選單中,選取「Service Directory Viewer」(Service Directory 檢視者) (roles/servicedirectory.viewer)。

  5. 按一下「新增其他角色」,然後選取「Service Directory PSC Authorized Service」 (roles/servicedirectory.pscAuthorizedService)。

  6. 按一下 [儲存]。

gcloud

將必要角色授予目錄的服務帳戶:

# Grant Service Directory Viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --format='value(biglake-service-account)')" \
--role="roles/servicedirectory.viewer"

# Grant Service Directory PSC Authorized Service
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID" \
    --format='value(biglake-service-account)')" \
--role="roles/servicedirectory.pscAuthorizedService"

驗證連線

確認目錄背景中繼資料重新整理週期已順利完成,且命名空間已同步。

  1. 確認重新整理狀態顯示成功:

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID"
  2. 確認命名空間已同步:

    gcloud alpha biglake iceberg namespaces list \
      --project="PROJECT_ID" \
      --catalog="FEDERATED_CATALOG_NAME"

後續步驟