2
0

More than 1 year has passed since last update.

【Azure Databricks】複数ワークスペースを分離しつつ Unity Catalog で一括管理したい

Posted at

はじめに

先日、Azure Databricks で複数のワークスペースをチーム毎に分けて使用する、という環境の構築を行いました。その際に、 Unity Catalog を用いてワークスペースを一括で管理しつつ、ユーザーは自身の属するワークスペースのみにアクセスできるという条件が必要でした。

この記事では、実際に Unity Catalog で環境を管理できるようになるまで、どのような手順で進めたかを解説します。

想定する環境

DBenv.png

それぞれ別のワークスペースを利用するグループが複数あり、それらを同一の Unity Catalog で管理したいとします。

別のグループのワークスペースやテーブルにはアクセスできないよう分離する必要があります。ここでは、ワークスペース毎にカタログを作成し、それ以下にのみグループ内ユーザーがアクセス可能という構成で進めようと思います。

Azure 上ではリソースグループにまとめてから IAM を利用して許可を与えれば良いのですが、Unity Catalogの方でも独立してユーザーを追加し、アクセス権限を与える必要があります。

必要なリソース

  • Databricks ワークスペース * N (グループ数)
  • Azure Databricks 用のアクセス コネクタ * N
    • 各ワークスペースと対応づけられるように命名+リソースグループに割り振るのが望ましい
    • 対応するストレージに対する「ストレージ BLOB データ共同作成者」のロールを与えておく
  • Blob Storage アカウント * N + 1
    • ルートテーブル用に最低1つ必要で、ストレージを厳密に分割する場合さらにワークスペースと同数必要
    • ケースによっては同じストレージを使ったり、コンテナ毎に分割するのもアリかもしれない
    • Gen2 として使うので「ブロックBLOB」「階層型名前空間」を設定
  • Azure Databricks SCIM Provisioning Connector * 1
    • 「 Azure Active Directory 」から「エンタープライズアプリケーション」内で検索すると出てくる
    • onmicrosoft のユーザーが利用する場合はほぼ必須となる

Unity Catalog を構成する

メタストアを作成する

メタストアの作成には、カタログの置き場所となるGen2コンテナとDatabricks用のアクセスコネクタが必要になります。最初に1セット作っておきましょう。

Gen2 の URL は、Azure 上でコピーできるものではなく以下の書式に従って入力する必要があります。

abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>

アクセスコネクタは、以下の画面でIDを確認することができます。
01_connecter.png

最初に、Databricks のアカウントを管理する画面に入るためにワークスペースのうち一つにログインします。

右上にあるユーザー名をクリックしたら、「アカウントを管理」をクリックすると Databricks の管理画面(アカウントコンソール)に入ることができます。
01_console.png

「データ」の画面に入り、「メタストアを作成」を選択すると設定項目が開きます。コネクタ ID とストレージの URL を入力します。
01_createmeta.png
01_metastore.png

その次の画面で、割り当てるワークスペースを選択します。

カタログを作成する

ワークスペースにログインして、「データ」のメニューを開きます。 Unity Catalog の割り当てが完了していれば、「 main 」などのカタログが表示されています。
01_catalog.png

カタログ毎に別々のストレージを使う場合は、同数のアクセスコネクタを作成し、接続するストレージをマネージドテーブルの場所として指定する必要があります。
データ画面にある「ストレージ資格情報」を開き、「資格情報の作成」から、名前(任意だがストレージ名と同じで良い)とコネクタの ID を入力します。
01_external.png
01_credential.png

その次に、 「外部のロケーション」を開き、ストレージ名とストレージのパスを入力して、先ほど作成した資格情報を選択します。
01_location.png
01_entercredential.png

「カタログを作成」ボタンを押して名前とロケーション情報を入力すると新たにカタログが作成されます。
01_createcatalog.png

ここで、「ワークスペース」のタブに移動して「全てのワークスペースがアクセス可能」のチェックを外し、現在作業中のワークスペースのみを選択します。
01_checkworkspace.png

これによって、該当のカタログが同じワークスペースからしか見えなくなります。

ワークスペースを追加する

後からワークスペースを追加する場合は、アカウントコンソールから該当のメタストアを選択し、「ワークスペース」タブを開きます。

すでに割り当てられているワークスペースが表示されていますが、ここで「ワークスペースに割り当て」をクリックすると、ワークスペースを追加することができます。
01_assignspace.png

ユーザーを追加する

ワークスペースとカタログの準備ができても、ユーザーをワークスペースに招待しなければ利用することはできません。

メールで招待リンクを送る方法もありますが、テナント下に onmicrosoft ユーザーを作成して利用する場合はそうもいかないため、以下の方法によって Azure AD とユーザー情報を同期する方法が必要となります。

Azure AD とユーザーを同期する

アカウントコンソールから「設定」>「ユーザープロビジョニングを設定」を開きます。
そこでSCIMトークンを生成し、URLと一緒にコピーしておきます。
01_setup.png
01_generatetoken.png

次に Azure Portal から Azure Active Directory の画面を開き、「エンタープライズアプリケーション」を選択します。
01_aad.png

「Azure Databricks SCIM プロビジョニング コネクタ」を作成していない場合はここから検索して作成します。
01_connecter.png
01_searchconnecter.png

コネクタの画面から「プロビジョニング」を選択し、モードを「自動」に切り替えた上で先ほどコピーしたURLとトークンを貼り付けます。その後「テスト接続」を行い、正常に接続が出来ることを確認します。
01_provisioning.png

次に、「ユーザーとグループ」からワークスペースに招待するユーザーを追加します。なお、Active Directory のプランが無料だとグループ単位での追加ができません。
01_adduser.png

これで AAD のユーザーを Unity Catalog と同期できるようになりますが、反映されるまでしばらく待つ必要があります。

ユーザーをワークスペースに割り当てる

アカウントコンソールから「ユーザー」を選択し、「グループ」タブを開きます。

管理をしやすくするために、グループとワークスペースを対応させたいところですが、先述のようにグループを同期できない場合はこちらで作成する必要があります。
01_group.png

グループを作成後、「ワークスペース」タブに移動し、ワークスペース名を選択してから、「権限」でアクセス可能なグループを追加します。
01_permissions.png
01_addpermissions.png

これでユーザーがワークスペースにアクセスできるようになりましたが、カタログへのアクセスは許可されていない状況なので、ワークスペースから権限の編集を行ってください。
01_data.png
01_grant.png

基本的に当該カタログへの「USE」は必要になりますが、それ以下の部分に対しては、例えば新規スキーマの作成を認めるかなどユースケースにより変化すると思いますので、以下を参考に適切な権限を割り振る必要があります。

まとめ

以上の通り、Unity Catalog を活用する場合、ワークスペース以外にも作成するリソースが増える他、権限についてもAzureのものとは別に設定する必要が出てきます。

しかし、今回のようにワークスペースを分離する必要があった場合でも権限を一貫して設定出来たり、複数のデータベースを一か所で管理することができたりとメリットも多いため、特に大規模な Databricks 環境を組む際は是非とも利用できるようにしておきたいですね。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0