メインコンテンツまでスキップ

ワークスペース グループを新しいアカウント グループに複製する

このページでは、Databricks ワークスペースで コンシューマー アクセス をユーザーに付与するワークスペース管理者向けのガイダンスを提供します。これには、Databricks SDK for Python を使用してグループを管理するのに役立つ Python スクリプトが含まれています。

バックグラウンド

ワークスペースは、通常、プロビジョニング時にワークスペース Databricks SQL アクセス権と エンタイトルメントの両方がワークスペース アクセス とエンタイトルメントの両方に自動的に割り当てられるように構成されます。 エンタイトルメントは付加的であるため、ユーザーには、 コンシューマー アクセス が唯一のエンタイトルメントである場合にのみ、簡略化されたワークスペースが表示されます。グループにコンシューマアクセスよりも高い権限を持つ権限が付与されている場合、そのグループ内のどのユーザーもコンシューマエクスペリエンスのみを受け取ることはありません。

このページでは、既存の users システム グループを、 ワークスペース アクセス 権限と Databricks SQL アクセス 権限を保持する新しいグループに複製するワークフローを提供します。次に、新しくプロビジョニングされたユーザーにデフォルトで コンシューマーアクセス 権限のみが割り当てられるように、usersグループを再構成する方法について説明します。この設定では、より高いレベルのアクセスを必要とするユーザーは、ワークスペースに追加されるときに新しいグループに追加する必要があります。

コンシューマー アクセスの許可

users グループを使用してワークスペースのすべてのユーザーに作成権限を付与した場合は、次の手順を使用して、一部のユーザーにコンシューマー アクセス権限のみを付与できるようにします。

  1. ワークスペースの users システム グループを複製します

    • ワークスペースの users グループの現在のメンバー全員を含む新しいアカウントグループを作成します。
    • ワークスペース アクセスDatabricks SQL アクセス など、より高い特権のエンタイトルメントを、デフォルト users グループではなく、この新しいグループに割り当てます。
  2. usersグループから高い権限の権限を削除する : これにより、新しいユーザーをコンシューマとして追加でき、グループ権限によって自動的にアップグレードされることなく、そのユーザーを追加できます。

  3. 新しいユーザーをコンシューマーとして追加 する: コンシューマー アクセス エクスペリエンスのみをワークスペースに持つ必要があるユーザーを追加します。

Databricks SDK for Python を使用して、エンタイトルメントの管理を自動化する

次の Python スクリプトは、 users グループを複製し、適切な権限を割り当てるプロセスを自動化します。これはDatabricks SDK for Pythonを使用し、アカウントとワークスペースの両方に対して管理者権限を持ち、OAuthを使用して認証されたサービスプリンシパルが必要です。OAuth を使用してユーザーアカウントで Databricks リソースへの対話型アクセスを承認するを参照してください。

前提条件:

  • 管理者権限を持つサービスプリンシパル
  • 環境変数の設定:
    • DATABRICKS_ACCOUNT_ID (アカウントコンソールURLからのUUID)
    • DATABRICKS_WORKSPACE_ID (ワークスペースURLの数値ID)
    • DATABRICKS_CLIENT_ID (サービスプリンシパル client ID)
    • DATABRICKS_CLIENT_SECRET (サービスプリンシパル Client Secret)

スクリプト例

Python

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.cloud.databricks.com"

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)

既存のグループを複製して権限を再評価した後、usersまたはその他の任意のグループへの コンシューマアクセス権 を付与して、新しいユーザーがワークスペースに追加されたときにそのアクセス権が自動的に付与されるようにすることができます。

注記

組織のポリシーと命名規則に合わせて、グループ名と権限を調整します。変更を広範に適用する前に、必ず非本番運用環境でテストしてください。