UnityCatalogと権限管理
- UnityCatalogで権限設定が可能なオブジェクトは階層構造になっており、以下の図(公式ドキュメントより)のとおり、Catalogの下層にSchemaがありその下にマネージドテーブル、外部テーブル、View、Functionとなっている
- 権限はユーザー、グループまたはサービスプリンシパルに対して付与する。付与したオブジェクトの権限は下位に継承される。例えば、Catalogに対するSELECT権限を付与すると、そのCatalogのスキーマ内のテーブルを参照することができるようになる。前回述べたSnowflakeのロールの継承とは異なる概念である

- 以下は、前回Snowflakeで設定したドメイン管理用の権限設定をDatabricksのUnityCatalogの権限設定で行った場合について示している
- 管理者用グループにはカタログと外部ロケーションの全ての権限を付与。参照用グループは、カタログに対して使用権限とスキーマの使用権限及びSELECT権限を付与しており、カタログ内の全てのテーブルを参照することができる。公開用グループには、公開用スキーマ(PRODUCT_DATA)のテーブルのみ参照することができる権限を付与している

マネージドテーブルと外部テーブル
- マネージドテーブルも外部テーブルもデータはクラウドストレージ上に保存されているが、UnityCatalogを初期設定した時にメタ情報を管理するメタストアとしてクラウドストレージの資格情報を既に設定してあるため、マネージドテーブルで管理する場合には追加の資格情報は必要ない。一方で外部テーブルを利用する場合は追加のストレージ資格情報と外部ロケーションの権限が必要なる
- 上の権限設定はマネージドテーブルを前提に考えている。これはUnityCatalogでテーブルを作成するデフォルトの方式であり、マネージドテーブルを削除するとデータは30日以内にクラウドストレージ上から削除される。外部テーブルを削除した場合はデータは外部ロケーションパス上のファイルを直接削除しない限りは自動で削除はされない。外部テーブルは権限設定が煩雑になるため、直接クラウドストレージのデータにアクセスする必要がある場合のみ外部テーブルを利用するのがよいと思う
ストレージ資格情報と外部ロケーション
- UnityCatalogはファイルの読み込みや書き込みの許可を行うためにストレージ資格情報と外部ロケーションを管理する。ストレージ資格情報は、クラウドストレージとして例えばS3であるならば、S3バケットの権限を設定したIAMロールを登録する。外部ロケーションはストレージ上のパスを設定する

外部ロケーション権限でデータをロードする
- s3バケット上のファイルパス/rawに対して外部ロケーションを登録しており、管理者用グループにファイル読み書きを含む全権限を付与している。そのため、管理者用グループに属するドメイン管理者はs3バケット上のファイルを参照することができ、このデータからソーステーブル(マネージド)を作成したり、公開用のマネージドテーブルを作成することができる
- アクセス権限を付与したユーザーの権限と役割を以下に図示する

- 外部ロケーションパス上のCSVデータは以下のようなSQLやPySparkなどで取り込むことができる
COPY INTO DOMAIN.SOURCE.RAW_TBL
FROM 's3://clue-technologies-poc-domain/raw/raw_tbl.csv'
FILEFORMAT = CSV
FORMAT_OPTIONS (
'inferSchema' = 'false',
'delimiter' = ',',
'header' = 'true'
)
COPY_OPTIONS ('mergeSchema' = 'true');
クラスタとSQLウェアハウスの権限管理
- 従来(Hivemetastoreで管理していた時)には、S3などのクラウドストレージへのファイル権限はクラスタやSQLウェアハウスに対して、インスタンスプロファイルを作成して登録する必要があったが、UnityCatalogで一元管理できるので、ファイルの権限を管理するためにインスタンスプロファイルは不要となる
- 権限管理としては、SQLウェアハウスは「使用可能」と「管理可能」を選択する。「使用可能」権限を付与されたユーザーはSQLウェアハウスを任意のタイミングで開始(起動)することはできるが、停止することはできない。停止やサイズなどの設定変更を可能にしたい場合は「管理可能」を付与する必要がある
- クラスタは、「管理可能」「再起動が可能」「アタッチ可」を選択する。それぞれ、文字通りの挙動なので、適切に権限を選択して、ユーザーに付与する
その他リソースに対する権限設定
- Databricksにはその他にもワークスペースやジョブ、モデルなど様々なリソースが存在し、権限設定が可能となっている。これらを効率的に管理するには、Databricks Terraform Providerが推奨されているが、本記事の趣旨から外れるため次回の機会に紹介したい
