Key concepts | Databricks on AWS [2022/3/10時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
プレビュー
Unity Catalogはパブリックプレビューです。Unity Catalog向けのアカウントコンソールUIはプライベートプレビューです。プレビューに参加するには、Databricks担当者にお問合せください。
本書では、どのようにしてUnity Catalogがお使いのレイクハウスにセキュリティとガバナンスをもたらすのか、キーコンセプトを説明します。
アカウントコンソール
アカウントコンソールサービスは、Unity Catalogのメタストアを作成し、アカウントレベルのユーザー、グループを管理し、その他のタスクを行うことができるweb UIです。カウントコンソールサービスは、米国でホストされています。ユーザー情報といくつかのメタデータは、米国で集中管理されています。パブリックプレビュー時点では、以下のフィールドは米国に保存されます。
- ワークスペースのメタデータ
- 請求のメタデータ
- アカウントのメタデータ
- テーブル名
アカウントレベルID
Unity Catalogは、ユーザー、グループを解決し、アクセス権を強制するために、DatabircksのアカウントレベルのIDシステムを使用します。Databricksのアカウントコンソールで直接設定するか、自動でお使いのアイデンティティプロバイダー(IdP)と同期するように設定することができます。Unity Catalogでアクセスコントロールポリシーを作成する際に、これらのアカウントレベルのユーザー、グループを参照します。
Databricksではワークスペースに対してローカルなグループを追加することはできますが、これらのローカルグループをUnity Catalogで使用することはできません。ローカルグループを参照するコマンドは、グループが見つかりませんというエラーになります。
Unity Catalogのユーザーはノートブック、Databricks SQLのクエリー、Databricks SQLのデータエクスプローラー、REST APIコマンドでUnity Catalogのデータにアクセスし、ワークスペースのローカルデータと結合するためには、ワークスペースにも追加されている必要があります。
データのアクセス権
Unity Catalogでは、デフォルトでデータは保護されています。最初はユーザーはメタデータのデータにアクセスすることはできません。メタストア管理者とオブジェクトのオーナーが、Databricks SQLのデータエクスプローラー、あるいはSQLコマンドを用いてオブジェクトのアクセス権を管理することができます。
詳細は、Unity Catalogにおけるデータのアクセス権をご覧ください。
オブジェクトモデル
以下の図では、Unity Catalogにおける主要なセキュリティ保護可能なオブジェクトを示しています。
注意
外部の格納場所やストレージ認証情報などいくつかのオブジェクトはこの図には含まれていません。これらのオブジェクトはカタログと同じレベルでメタストアの中に配置されています。
メタストア
メタストアはUnity Catalogにおけるトップレベルのコンテナーです。データアセット(テーブルとビュー)とそれらへのアクセスを管理するアクセス権を格納しています。Databricksのアカウント管理者はメタストアを作成し、どのワークロードがどのメタストアを使用するのかをコントロールするためにDatabricksワークスペースをメタストアに割り当てます。
注意
Unity Catalogはビルトインのセキュリティと監査を持つ新たなメタストアを提供します。これは、以前のバージョンのDatabricksで使用されていたHiveメタストアベースのメタストアとは異なるものです。
メタストア管理者
メタストア管理者は、誰がカタログを作成できるか、誰がテーブルにクエリーを実行できるか、と言ったメタストア内のセキュリティ保護可能なオブジェクトに対するアクセス権を管理することができます。
注意
Unity Catalogのデータガバナンスモデルの詳細については、Unity Catalogにおけるデータのアクセス権をご覧ください。
必要であれば、メタストア管理者はオブジェクトオーナーを変更することで、メタストアオブジェクトに対するアクセス権管理を他のユーザー、グループに移譲することができます。メタストアを作成したアカウントレベルの管理者がオーナーとなります。オブジェクトノーオナーが、当該オブジェクトと配下のオブジェクトに対する他のユーザーのアクセス権を許可することができます。
メタストアを作成したアカウント管理者が初期のメタストア管理者になります。アカウント管理者はメタストアのオーナーを変更することで、他のユーザーにメタストア管理者を割り当てることができます。メタストアのオーナーであるかに関係なく、アカウント管理者は常にメタストアを管理することができます。
デフォルトの格納場所
それぞれのメタストアは、Amazon S3のデフォルト格納場所で設定されます。これはマネージドテーブルのデフォルト格納場所にもなります。外部テーブルは他のS3パスにデータを格納します。
それぞれのメタストアへのアクセスは、メタストア作成時に設定される一つのストレージ認証情報を用いてデフォルトが設定されます。外部テーブルへのアクセスやお使いのクラウドテナントに格納されているデータファイルの読み込みなど、他の格納場所にアクセスできるように追加のストレージ認証情報を設定することができます。ユーザーのコードは決してストレージ認証情報へのフルアクセスを持つことはありません。その代わりに、Unity Catalogがそれぞれのユーザーやアプリケーションがリクエストされたデータにアクセスできるようにスコープが限定されたトークンを生成します。
カタログ
カタログはUnity Catalogの3レベルの名前空間の最初のレイヤーであり、データアセットを整理するために使用されます。ユーザーは、USAGE
データアクセス権を割り当てられたすべてのカタログにアクセスすることができます。
スキーマ
スキーマ(データベースとも呼ばれます)は、Unity Catalogの3レベルの名前空間の2番目のレイヤーであり、テーブルとビューを整理するために用いられます。スキーマ内のテーブルやビューの一覧を表示するには、ユーザーは当該スキーマと親のカタログに対するUSAGE
権限と、対象のテーブル、ビューに対するSELECT
権限が必要となります。
テーブル
テーブルはUnity Catalogの3レベルの名前空間の3番目のレイヤーであり、データのレコードを格納しています。テーブルを作成するには、対象のスキーマに対するCREATE
とUSAGE
権限と、親のカタログに対するUSAGE
権限が必要となります。テーブルにクエリーを実行するには、対象のテーブルに対するSELECT
怪訝と、親のスキーマ、カタログに対するUSAGE
権限が必要となります。
テーブルにはマネージドと外部があります。
マネージドテーブル
マネージドテーブルは、Unity Catalogでテーブルを作成する際のデフォルトの方法となります。これらのテーブルは、それぞれのメタストアを作成する際に指定したマネージドの格納場所に格納されます。
- マネージドテーブルを作成するには、
LOCATION
句を指定せずにCREATE TABLE
コマンドを実行します。 - マネージドテーブルを削除するには、
DROP
文を使用します。
マネージドテーブルがドロップされると、背後にあるデータもお使いのクラウドテナントから削除されます。マネージドテーブルでサポートされているフォーマットはDeltaのみです。
コマンドサンプル:
CREATE TABLE <example-table>(id STRING, value STRING)
外部テーブル
外部テーブルは、マネージドの格納場所の外の格納場所にデータが格納されるテーブルであり、Unity Catalogによって完全に管理されるわけではありません。外部テーブルに対してDROP TABLE
を実行すると、Unity Catalogは背後にあるデータは削除しません。マネージドテーブルと同様に、外部テーブルに対するアクセス権を管理し、クエリーで使用することができます。外部テーブルを作成するには、CREATE TABLE
文でLOCATION
パスを指定します。外部テーブルには以下のファイルフォーマットを使用することができます。
- DELTA
- CSV
- JSON
- AVRO
- PARQUET
- ORC
- TEXT
外部テーブルの背後のクラウドストレージへのアクセスを管理するために、Unity Catalogは2つのオブジェクトタイプを導入しています。ストレージ認証情報と外部ロケーションです。
-
ストレージ認証情報は、IAMロールのようにお使いのクラウドテナントに格納されているデータにアクセスするための認証、承認のメカニズムを表しています。それぞれのストレージ認証情報は、どのユーザー、グループが認証情報にアクセスできるのかを制御するUnity Catalogのアクセスコントロールポリシーの対象となっています。
ユーザーが
USAGE
権限を持っていないストレージ認証情報を使用しようとするとリクエストは失敗し、Unity Catalogはユーザーの代わりにクラウドテナントに対する認証を試みません。 -
外部ロケーションはストレージ認証情報とクラウドストレージのパスへの参照を含むオブジェクトです。外部ロケーションは、そのパスと配下のディレクトリ、ファイルのみへのアクセスを許可します。それぞれの外部ロケーションは、どのユーザー、グループが認証情報にアクセスできるのかを制御するUnity Catalogのアクセスコントロールポリシーの対象となっています。
ユーザーが
USAGE
権限を持っていない外部ロケーションを使用しようとするとリクエストは失敗し、Unity Catalogはユーザーの代わりにクラウドテナントに対する認証を試みません。
メタストア管理者のみがストレージ認証情報と外部ロケーションを作成し、アクセスを許可することができます。
コマンドサンプル:
CREATE TABLE <example-table>
(id STRING, value STRING)
USING delta
LOCATION "s3://<your-storage-path>"
注意
ユーザーが外部テーブルを作成するには、CREATE TABLE
文で指定されるLOCATION
に対するアクセスを許可する外部ロケーション、ストレージ認証情報に対するCREATE TABLE
権限を持っている必要があります。
ビュー
ビューはUnity Catalogの3レベルの名前空間の3番目のレイヤーに存在しており、メタストアにある1つ以上のテーブル、ビューから構成される読み取り専用のオブジェクトです。ビューは、複数のスキーマ、カタログのテーブル、ビューから構成することができます。
コマンドサンプル:
CREATE VIEW main.default.experienced_employee
(id COMMENT 'Unique identification number', Name)
COMMENT 'View for experienced employees'
AS SELECT id, name
FROM all_employee
WHERE working_years > 5;
クラスターセキュリティモード
アクセスコントロールの一貫性を保証し、強力なアイソレーション保証を強制するために、Unity Catalogは計算資源に対していくつかの要件を必要とします。このため、Unity Catalogでは、クラスターのセキュリティモードというコンセプトを導入します。Unity Catalogはデフォルトでセキュリティ保護がされています。クラスターが適切なセキュリティモードで設定されていない場合、クラスターはUnity Catalogのデータにアクセスすることができません。
Data Science & Engineeringクラスター、あるいはDatabricks Machine Learningクラスターを作成する際、以下のクラスターセキュリティモードを選択することができます。
- None: アイソレーションはありません。ワークスペースのローカルテーブルのアクセスコントロールやクレディンシャルパススルーを強制しません。Unity Catalogのデータにはアクセスできません。
- Single User: 一人のユーザー(デフォルトではクラスターを作成したユーザー)のみが使用できます。他のユーザーはクラスターにアタッチすることができません。Single Userセキュリティモードのクラスターからビューにアクセスする際、ビューは当該ユーザーのアクセス権で実行されます。Single UserクラスターはPython、Scala、Rを用いたワークロードをサポートしています。initスクリプト、ライブラリのインストール、DBFS FuseマウントはSingle Userクラスターではサポートされています。自動化ジョブはSingle Userクラスターで実行すべきです。
- User Isolation: 複数ユーザーで共有できます。SQLワークロードのみがサポートされています。クラスターのユーザー間で厳密な分離を強制するために、ライブラリのインストール、initスクリプト、DBFS Fuseマウントは無効化されています。
- Table ACL only (Legacy): ワークスペースローカルのテーブルアクセスコントロールを強制しますが、Unity Catalogにはアクセスできません。
- Passthrough only (Legacy): ワークスペースローカルのクレディンシャルパススルーを強制しますが、Unity Catalogにはアクセスできません。
Unity CatalogのワークロードをサポートしているセキュリティモードはSingle UserとUser Isolationだけです。
Databricks SQLのエンドポイントは、設定が不要なUser Isolationを自動で使用します。
Unity Catalogの要件に応えられるように、セキュリティモードをSingle Userか**User Isolation*に設定することで、既存のクラスターをアップグレードすることができます。
以下の表では、それぞれのクラスターセキュリティモードでどの機能が有効化、無効化されているのかを説明しています。
注意
以下のテーブルは横に長くなっています。すべてのカラムを参照するには横にスクロールしてください。
セキュリティモード | 言語サポート | Unity Catalog | レガシーテーブルアクセスコントロール | クレディンシャルパススルー | 複数ユーザー | RDD API | DBFS Fuseマウント | initスクリプト、ライブラリインストール | Unity Catalogの動的ビュー |
---|---|---|---|---|---|---|---|---|---|
None | すべて | 𝙓 | 𝙓 | 𝙓 | ✔ | ✔ | ✔ | ✔ | 𝙓 |
Single User | すべて | ✔ | 𝙓 | 𝙓 | 𝙓 | ✔ | ✔ | ✔ | 𝙓 |
User Isolation | SQL | ✔ | ✔ | 𝙓 | ✔ | 𝙓 | 𝙓 | 𝙓 | ✔ |
Legacy table ACL | SQL、Python、Scala、R | 𝙓 | ✔ | 𝙓 | ✔ | 𝙓 | 𝙓 | ✔ | 𝙓 |
Legacy passthrough | SQL、Python、Scala、R | 𝙓 | 𝙓 | ✔ | ✔ | ✔ | ✔ | ✔ | 𝙓 |