一個自動化的分布式和分權管理的統一目錄指南
2022年12月8日 在Beplay体育安卓版本平台的博客
統一目錄提供了一個統一的治理解決方案的所有數據和人工智能資產在你lakehouse雲。作為客beplay体育app下载地址戶采用統一目錄,他們想做這個編程和自動,使用基礎設施作為代碼的方法。統一目錄,每個地區,都有一個metastore的頂層容器對象統一目錄。它存儲數據資產(表和視圖)和管理訪問權限。
這對組織提出了一種新的挑戰,沒有集中的平台/治理團隊的統一目錄管理功能。Beplay体育安卓版本具體來說,團隊在這些組織現在有合作,共同在一個metastore,即如何控製訪問和執行審計完全隔離。
在這篇文章中,我們將討論如何客戶可以利用支持統一目錄中的對象beplay体育app下载地址磚起程拓殖的提供者管理分布式lakehouse有效治理模式。
我們提出兩種解決方案:
- 一個完全代表責任團隊時創建資產統一目錄
- 一個限製哪些資源團結團隊可以創建目錄
創建一個統一的目錄metastore
作為一次性引導活動,客戶需要創建一個統一目錄metastore /beplay体育app下载地址地區運營。這需要一個管理員的賬戶,這是一個非常榮幸這隻是訪問breakglass場景,比如用戶名和密碼存儲在一個秘密金庫,需要審批工作流中使用自動化的管道。
一個帳戶管理員需要使用他們的用戶名和密碼進行身份驗證在AWS上:
提供者“磚”{主機=“https://accounts.cloud.www.eheci.com”account_id =var.databricks_account_id用戶名=var.databricks_account_username密碼=var.databricks_account_password}
或使用他們的廣告令牌在Azure上:
提供者“磚”{主機=“https://accounts.azuredatabricks.net”account_id =var.databricks_account_idauth_type =“azure-cli”#或者azure-client-secret azure-msi}
磚賬戶管理需要提供:
- 一個雲存儲位置(S3 / ADLS),將默認位置為管理表來存儲數據
- 一個我的角色/身份管理,統一編目將使用訪問雲存儲中(1)
下麵的起程拓殖代碼將類似(AWS)
資源“databricks_metastore”“這”{name =“主”storage_root =var.central_bucket老板=var.unity_admin_groupforce_destroy =真正的}資源“databricks_metastore_data_access”“這”{metastore_id = databricks_metastore。這.idname = aws_iam_role.metastore_data_access.nameaws_iam_role {role_arn = aws_iam_role.metastore_data_access.arn}is_default =真正的}
團隊可以選擇不使用這個默認位置和身份的表通過設置的位置和標識管理表每個目錄,甚至更細粒度在模式級別。當創建管理表,數據將被存儲使用模式位置(如果存在)回落到目錄的位置(如果存在),隻有回到metastore位置如果前兩個位置沒有設置。
提名metastore管理員
當創建一個metastore,我們的提名unity_admin_group
隨著metastore管理員。為了避免中央權威,可以列表和管理訪問metastore中的所有對象,我們將繼續這一組空的
資源“databricks_group”“admin_group”{display_name =var.unity_admin_group}
用戶可以添加到組特殊破玻璃場景,需要高功率的管理(例如,設置初始訪問,修改目錄如果目錄所有者離開組織)的所有權。
資源“databricks_user”“break_glass”{for_each =釋放(var.break_glass_users)user_name = each.key力=真正的}資源“databricks_group_member”“admin_group_member”{for_each =釋放(var.break_glass_users)group_id = databricks_group.admin_group.idmember_id = databricks_user.break_glass each.value .id}
將責任委托給團隊
每個團隊負責創建自己的編目和管理對其數據的訪問。初始引導活動需要為每個新團隊獨立運作獲得必要的權限。
然後帳戶管理員需要執行以下:
- 創建一個名為
team-admins
格蘭特創建目錄,創建外部位置
,可選格蘭特創建共享,提供者,收件人
如果使用δ分享這個團隊
資源“databricks_group”“team_admins”{display_name =“team-admins”}資源“databricks_grants”“沙盒”{metastore = databricks_metastore.this。id格蘭特{校長= databricks_group.team_admins.display_name特權= [“CREATE_CATALOG”,“CREATE_EXTERNAL_LOCATION”,“創建共享”,“創建提供者”,“創建收件人”]}}
當一個新的團隊上,信任團隊管理員team-admins組
資源“databricks_user”“team_admins”{for_each =釋放(var.team_admins)user_name = each.key力=真正的}資源“databricks_group_member”“team_admin_group_member”{for_each =釋放(var.team_admins)group_id = databricks_group.team_admins.idmember_id = databricks_user.team_admins each.value .id}
的成員team-admins
集團現在可以輕鬆地創建新的目錄和外部位置的團隊沒有交互的帳戶管理員或metastore管理員。
新員工培訓的新團隊
過程中添加一個新的團隊磚,最初的活動從一個帳戶管理員是必需的,這樣新團隊可以自由設置他們的工作區/數據資產的偏好:
- 創建一個新的工作區通過團隊X管理員(Azure)或帳戶管理(AWS)
- 賬戶管理高度現有metastore工作區
- 賬戶管理創建了一組特定於這個團隊叫做“team_X_admin”包含的管理員團隊上。
資源“databricks_group”“team_X_admins”{display_name =“team_X_admins”}資源“databricks_user”“team_X_admins”{for_each =釋放(var.team_X_admins)user_name = each.key力=真正的}資源“databricks_group_member”“team_X_admin_group_member”{for_each =釋放(var.team_X_admins)group_id = databricks_group.team_X_admins.idmember_id = databricks_user.team_X_admins each.value .id}
- 賬戶管理創建一個存儲憑證和改變所有者team_X_admin集團使用它們。如果團隊中信任管理員雲租戶,他們可以控製存儲憑據訪問(例如,任何自己的S3 bucket或ADLS存儲賬戶)。
資源“databricks_storage_credential”“外部”{name =“team_X_credential”azure_managed_identity {access_connector_id = azurerm_databricks_access_connector.ext_access_connector。id}評論=“由特遣部隊”老板= databricks_group.team_X_admins.display_name}
- 賬戶管理然後向加州大學metastore分配新創建的工作區
資源“databricks_metastore_assignment”“這”{workspace_id =var.databricks_workspace_idmetastore_id = databricks_metastore。這.iddefault_catalog_name =“hive_metastore”}
- 團隊X管理員創建任意數量的目錄和外部位置的要求
- 因為團隊管理員不是metastore所有者或帳戶管理員,他們不能與任何實體(目錄/模式/表等),他們並不擁有,即從其他團隊。
有限責任委托給團隊
一些組織可能不想讓中央metastore團隊自主創建資產。事實上,給多個團隊創建此類資產的能力很難管理,命名約定不能執行,很難保持環境清潔。
在這種情況下,我們建議的模型中,每個團隊文件請求他們希望管理員創建的資產。團隊將資產的所有者,這樣他們可以自主分配權限給其他人。
盡可能自動化這樣的要求,我們現在使用CI / CD這是如何實現的。管理團隊擁有一個中央存儲庫在他們喜歡的版本控製係統,他們所有的腳本,在他們的組織部署磚。每個團隊允許這個存儲庫上創建分支起程拓殖配置文件添加為自己的環境中使用一個預定義的模板(起程拓殖模塊)。當團隊已經準備好了,他們創建一個請求。在這一點上,中央管理審查(這也可以自動與適當的檢查)拉請求和合並到主分支,這將觸發的部署資源的團隊。
這種方法允許一個掌控更多的個人團隊做什麼,但是它涉及到一些(有限,要求中央管理員的團隊活動。
在這種情況下,下麵的起程拓殖腳本自動執行CI / CD管道使用一個服務主體(00000000-0000-0000-0000-000000000000),這是由賬戶管理。這樣的一次性操作服務主體賬戶管理必須手動執行現有的賬戶管理,例如:
資源“databricks_service_principal”“sp”{application_id =“00000000-0000-0000-0000-000000000000”}資源“databricks_service_principal_role”“sp_account_admin”{service_principal_id = databricks_service_principal.sp。id角色=“賬戶管理”}
新員工培訓的新團隊
當一個新的團隊想要上,他們需要文件請求,創建如下對象(Azure的例子):
- 創建一個名為
team_X_admins
,其中包含賬戶管理服務主體(允許未來修改資產)+集團的成員
資源“databricks_group”“team_X_admins”{display_name =“team_X_admins”}資源“databricks_user”“team_X_admins”{for_each =釋放(var.team_X_admins)user_name = each.key力= true}資源“databricks_group_member”“team_X_admin_group_member”{for_each =釋放(var.team_X_admins)group_id = databricks_group.team_X_admins。idmember_id = databricks_user.team_X_admins [each.value]。id}數據“databricks_service_principal”“service_principal_admin”{application_id =“00000000-0000-0000-0000-000000000000”}資源“databricks_group_member”“service_principal_admin_member”{group_id = databricks_group.team_X_admins。idmember_id = databricks_service_principal.service_principal_admin。id}
- 一個新的資源組或指定一個現有的一個
資源“azurerm_resource_group”“這”{name =var.resource_group_name位置=var.resource_group_region}
- 溢價磚工作區
資源“azurerm_databricks_workspace”“這”{name =var.databricks_workspace_nameresource_group_name = azurerm_resource_group。這. name位置= azurerm_resource_group。這.locationsku =“溢價”}
- 一個新的存儲賬戶或提供現有的一個
資源“azurerm_storage_account”“這”{name =var.storage_account_nameresource_group_name = azurerm_resource_group。這. name位置= azurerm_resource_group。這.locationaccount_tier =“標準”account_replication_type =“LRS”account_kind =“StorageV2”is_hns_enabled =“真正的”}
- 一個新的容器存儲賬戶或提供現有的一個
資源“azurerm_storage_container”“容器”{name =“容器”storage_account_name = azurerm_storage_account。這. namecontainer_access_type =“私人”}
- 磚訪問連接器
資源“azurerm_databricks_access_connector”“這”{name =var.databricks_access_connector_nameresource_group_name = azurerm_resource_group。這. name位置= azurerm_resource_group。這.location身份{類型=“SystemAssigned”}}
- 將“存儲blob數據貢獻者”角色分配給訪問連接器
資源“azurerm_role_assignment”“這”{= azurerm_storage_account.this範圍。idrole_definition_name =“存儲Blob數據貢獻者”principal_id = azurerm_databricks_access_connector.metastore.identity [0].principal_id}
- 中央metastore分配給新創建的工作區
資源“databricks_metastore_assignment”“這”{metastore_id = databricks_metastore。這.idworkspace_id = azurerm_databricks_workspace。這.workspace_id}
- 創建一個存儲憑證
資源“databricks_storage_credential”“storage_credential”{name =“mi_credential”azure_managed_identity {access_connector_id = azurerm_databricks_access_connector.this。id}評論=“管理身份憑證由特遣部隊”老板= databricks_group.team_X_admins}
- 創建一個外部位置
資源“databricks_external_location”“external_location”{name =“外部”url =格式(“abfss: / / %(電子郵件保護)% s.dfs.core.windows.net/”,“容器”,“storageaccountname”)credential_name = databricks_storage_credential.storage_credential。id評論=“由特遣部隊”老板= databricks_group.team_X_adminsdepends_on = [databricks_metastore_assignment。這,數據bricks_storage_credential.storage_credential]}
- 創建一個目錄
資源“databricks_catalog”“這”{metastore_id = databricks_metastore.this。idname = var.databricks_catalog_name評論=“這個目錄是由起程拓殖管理”老板= databricks_group.team_X_adminsstorage_root =格式(“abfss: / / %(電子郵件保護)% s.dfs.core.windows.net/managed_catalog”,“容器”,“storageaccountname”)}
一旦這些對象創建團隊自主開發項目,給其他團隊成員訪問和/或合作夥伴如果有必要。
修改現有資產的團隊
團隊不允許修改資產自主統一目錄。這樣做他們可以提交新的請求與中央團隊通過修改文件他們已經創建了一個新的拉請求。
這是真的如果他們需要創建新的資產,如存儲憑證,外部位置和目錄。
統一目錄+起程拓殖=管理良好的lakehouse
上麵,我們走過一些利用內置的產品特性和推薦的最佳實踐指導方針處理實現統一目錄和持續管理的障礙。