共用方式為


將工作區群組複製到新的帳戶群組

此頁面為想要在 Azure Databricks 工作區中授與 取用者存取 使用者的工作區系統管理員提供指引。 它包含 Python 腳本,可協助使用適用於 Python 的 Databricks SDK 來管理群組。

背景

工作區通常會設定,如此一來,工作區中的所有用戶會在布建時自動被指派 工作區存取 使用權和 Databricks SQL 使用權。 由於權益是累加的,因此使用者在 使用者存取權 是他們的唯一權益時,只會看到簡化的工作區。 如果群組被授予任何權利,其比消費者存取權的權限更高,則該群組中的任何使用者都不會只獲得消費者體驗。

此頁面提供工作流程,將現有的 users 系統群組複製到保留 工作區存取 權和 Databricks SQL 存取 權的新群組。 接著會說明如何重新設定 users 群組,以便新布建的使用者預設只被指派給 取用者存取 權限。 使用此設定時,需要較高層級存取權的用戶必須在新增至工作區時新增至新群組。

授予消費者存取權

如果您已使用 users 群組將撰寫許可權授與所有工作區的使用者,請使用下列步驟來允許某些使用者僅獲得取用者存取權。

  1. 複製工作區 users 的系統群組

    • 建立新的帳戶群組,其中包含工作區 users 群組的所有目前成員。
    • 指派較高許可權的權利,例如 工作區存取 權或 Databricks SQL 存取 權給這個新群組,而不是預設 users 群組。
  2. users 群組中移除較高許可權的權利:這可讓您將新使用者新增為取用者,而不會由群組權利自動升級。

  3. 將新使用者新增為消費者:新增只應擁有消費者存取體驗的使用者到工作區。

使用適用於 Python 的 Databricks SDK 自動化管理權限

下列 Python 腳本會將複製 users 群組並指派適當權利的程式自動化。 它會使用適用於 Python 的 Databricks SDK,而且需要具有帳戶和工作區系統管理員許可權的服務主體,並使用 OAuth 進行驗證。 請參閱 使用 OAuth 以用戶帳戶授權對 Azure Databricks 資源的互動式存取

先決條件

  • 具有系統管理員許可權的服務主體
  • 環境變數集:
    • DATABRICKS_ACCOUNT_ID (來自帳戶主控台 URL 的 UUID)
    • DATABRICKS_WORKSPACE_ID (工作區 URL 的數值識別碼)
    • DATABRICKS_CLIENT_ID (服務主體用戶端識別碼)
    • DATABRICKS_CLIENT_SECRET (服務主體客戶端密碼)

範例腳本


import os
import databricks.sdk as dbx
from databricks.sdk.service import iam

# Set the Databricks account host URL for your account's cloud
DATABRICKS_HOST = "https://accounts.azuredatabricks.net
"

Fetch credentials from environment variables
DATABRICKS_ACCOUNT_ID = os.getenv("DATABRICKS_ACCOUNT_ID")
DATABRICKS_WORKSPACE_ID = os.getenv("DATABRICKS_WORKSPACE_ID")
DATABRICKS_CLIENT_ID = os.getenv("DATABRICKS_CLIENT_ID")
DATABRICKS_CLIENT_SECRET = os.getenv("DATABRICKS_CLIENT_SECRET")

# Initialize Databricks account client
account_client = dbx.AccountClient(
host=DATABRICKS_HOST,
account_id=DATABRICKS_ACCOUNT_ID,
client_id=DATABRICKS_CLIENT_ID,
client_secret=DATABRICKS_CLIENT_SECRET,
)

print(f"Authenticated to Databricks account {DATABRICKS_ACCOUNT_ID}")

# Get workspace and initialize workspace client
workspace = account_client.workspaces.get(workspace_id=DATABRICKS_WORKSPACE_ID)
workspace_name = workspace.workspace_name
workspace_client = account_client.get_workspace_client(workspace)

print(f"Authenticated to Databricks workspace {DATABRICKS_WORKSPACE_ID}, '{workspace_name}'")

def get_workspace_group(group_name):
group = list(workspace_client.groups.list(filter=f"displayName eq '{group_name}'"))
print(f"Found workspace group: {group.display_name}")
print(f"Workspace {group.display_name} has {len(group.members)} members")
return group

def clone_workspace_group_to_account(workspace_group_name, new_account_group_name):
workspace_group = get_workspace_group(workspace_group_name)
group = account_client.groups.create(
display_name=new_account_group_name, members=workspace_group.members
)
print(f"Created account group: {new_account_group_name}")
print(f"Cloned workspace group {workspace_group.display_name} to account group {group.display_name}")
print(f"Account {group.display_name} has {len(group.members)} members")
return group

def add_account_group_to_workspace(account_group, workspace):
permissions = account_client.workspace_assignment.update(
workspace_id=workspace.workspace_id,
principal_id=account_group.id,
permissions=[iam.WorkspacePermission.USER],
)
print(f"Added account group {account_group.display_name} to workspace {workspace.workspace_id}, {workspace.workspace_name}")
return permissions

# Clone workspace 'users' group to new account group '{workspace_name}-contributors'
account_group = clone_workspace_group_to_account(
"users", f"{workspace_name}-contributors"
)

# Add account group '{workspace_name}-contributors' to the workspace
permissions = add_account_group_to_workspace(account_group, workspace)

複製您的現有群組並重新指派許可權之後,您可以將使用者存取權授予指定的或任何其他群組,以便在新使用者新增至工作區時,自動擁有該存取權。

備註

調整組名和權限,以符合組織的政策和命名慣例。 在廣泛套用變更之前,請務必先測試非生產環境中的變更。