Databricks SQL security model and data access overview | Databricks on AWS [2021/9/14時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
Databricks SQLのセキュリティモデルは、GRANT
、REVOKE
のような標準的なSQL文を用いたきめ細かいアクセス権を設定できるようにSQLデータベースにおいて確立されているセキュリティモデルをベースとしています。以下の図では、どのようにデータのセキュリティ保護が行われるかを説明しています。
黄色のユーザーグループにはTable 1とView 1にクエリーする権限が許可されています。これらのテーブルのファイル、ディレクトリは異なるデータセットから構成されています。この例では、Table 1のデータはDataset 1とDataset 2で管理されており、View 1のデータはDataset Aに存在しています。
利用開始した際、あるいは、単体のワークスペースでのみデータがアクセスされるようなシンプルなシナリオにおいては、ファイルやディレクトリをDatabricksファイルシステム(DBFS)に直接格納することができます。これらのファイル、ディレクトリはマネージドと呼ばれます。マネージドのデータへのアクセスを管理する際には、追加の認証情報を設定する必要はありません。
しかし、通常はファイルやディレクトリはクラウドストレージに格納されます。これらのファイル、ディレクトリはアンマネージドと呼ばれます。クラウドストレージのアンマネージドのデータにアクセスするためには、Databricksはクラウドストレージの認証情報を用いてクラウドプロバイダーの認証を受ける必要があります。以下の図では、Dataset 1とDataset 2向けにCredential 1、Dataset Aに対してはCredential 2を用いて、Databricksはクラウドプロバイダーの認証を受けています。Databricks管理者は、クラウドストレージのデータにアクセスするためにDatabricksが適切な認証情報を用いるように設定します。詳細については、本書の後半にあるクラウドストレージへのアクセスの概要を参照ください。テーブル、ビューのユーザーは通常、認証情報を直接参照、使用はしません。
ユーザーとグループは、通常SCIMを用いるなどして、アイデンティティプロバイダーで管理され、Databricksと同期されます。
以下のセクションでは、Databricksのテーブルアクセスコントロール、クラウドストレージへのアクセス設定、ユーザー、グループの管理を用いてデータに対するアクセスの管理方法の概要を説明します。
テーブルアクセスコントロールの概要
Databricksのテーブルアクセスコントロールを用いることで、以下のオブジェクトのセキュリティ保護を行うことができます。これらをセキュリティ保護可能オブジェクトと呼びます。
-
CATALOG:
データカタログ全体に対するアクセスを制御します。 -
DATABASE:
データベースに対するアクセスを制御します。 -
TABLE:
マネージド、外部テーブルへのアクセスを制御します。 -
VIEW:
SQLビューへのアクセスを制御します。 -
ANY FILE:
背後のファイルシステムへのアクセスを制御します。ANY FILEへのアクセスが許可されたユーザーは、直接ファイルシステムを読み込むことで、カタログ、データベース、テーブル、ビューに設定された制約をバイパスすることができます。
Databricks管理者とオブジェクトの所有者のみがセキュリティ保護可能オブジェクトに対するアクセスを許可することができます。Databricks SQL、あるいは、Data Science & Engineeringでテーブルアクセスコントロールが有効化されたクラスターを用いてデータベース、テーブル、ビューを作成するユーザーが作成したオブジェクトの所有者となります。所有者には全ての権限が許可され、他のユーザーに権限を付与することができます。オブジェクトに所有者が存在しない場合、管理者がオブジェクトの所有者を設定することができます。以下の表は、それぞれのロールとアクセス権付与可能なオブジェクトをまとめたものです。
ロール | 許可可能なオブジェクト |
---|---|
Databricks管理者 | カタログと背後のファイルシステムに存在する全てのオブジェクト |
カタログ所有者 | カタログの全てのオブジェクト |
データベース所有者 | データベースの全てのオブジェクト |
テーブル所有者 | テーブルのみ |
詳細に関しては、Databricksにおけるデータオブジェクトのアクセス権管理を参照ください。
クラウドストレージへのアクセスの概要
注意
Databricksのマネージドテーブルを使用している場合には、クラウドストレージへのアクセスの設定は不要です。
クラウドストレージのデータをクエリーするには、Databricks管理者はIAMロールとインスタンスプロファイルを用いて、Databricks SQLからクラウドストレージへのアクセスを設定します。以下の図では、Cloud Storage 1とCloud Storage 2にアクセスするために、インスタンスプロファイルにマッピングされたIAMロールが使用されます。
以下の3つのステップでクラウドストレージへのアクセスの設定を行います。
- インスタンスプロファイルを作成するか、既存インスタンスプロファイルを再利用します。
- インスタンスプロファイルにAWSのS3バケットへのアクセスを設定します。
- クラウドストレージにアクセスできるインスタンスプロファイルをDatabricks SQLエンドポイントに設定します。
ユーザー、グループの概要
Databricks管理者は、Data Science & Engineeringワークスペースでユーザーとグループを管理します。Databricks SQLにおいては、データのアクセス権管理が容易なので、ユーザーではなくグループを用いることをお勧めします。グループのセットアップには2つの選択肢があります。
-
SCIM APIを用いてDatabricksとアイデンティティプロバイダー(IdP)を同期します。IdPを信頼できる唯一の情報源としつつも、Databricksでアイデンティティを利用できるのでこちらの選択肢をお勧めします。この図では、Azure Active DirectoryのユーザーとグループがDatabricks SQLと同期され、テーブルやビューのようなデータベースオブジェクトに対するセキュリティ保護を行うために
GRANT
文が使用されます。
-
SQL、UI、APIを用いてDatabricks上にグループを作成します。
Howto
Databricks SQLの管理者はデータオブジェクトにアクセスするために新規ワークスペースを設定したり、データオブジェクトにアクセスするように設定済みのData Science & Engineeringワークスペースを使用することができます。以下のドキュメントではクラウドストレージへのアクセスを設定し、Data Science & EngineeringのセキュリティモデルをDatabricks SQLにマッピングするための詳細な手順を説明しています。