1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Databricksの属性ベースのアクセス制御(ABAC)

Posted at

こちらのアップデートです。

Unity Catalogの属性ベースのアクセス制御(ABAC)がベータになりました
Databricksでは、Unity Catalogで属性ベースのアクセス制御(ABAC)をサポートし、カタログ、スキーマ、テーブルに対して動的でタグに基づくアクセスポリシーを可能にしました。ABACでは、機密性、リージョン、ビジネスドメインのようなデータの属性に基づいたきめ細かいアクセス制御を強制するために、タグとユーザー定義関数(UDF)を使用します。

ABACを用いることで、スケーラブルなポリシーを一度定義して、膨大なデータ資産セットに対して適用することができます。ポリシーはオブジェクトの階層構造を継承し、行レベルフィルターや列マスキングのロジックを含めることができます。これによって、ガバナンスをシンプルにし、ポリシー管理を集中化し、セキュリティ体制を改善します。Unity Catalogの属性ベースのアクセス管理(ABAC)をご覧ください。

1年待ちましたがついに。

注意
執筆時点ではベータ版です。

ABACとは

ABAC(Attribute-Based Access Control) は、Databricksが提供する新たなデータガバナンス機能です。従来のように「このユーザーにはこのテーブルの権限を与える」というロールベースの個別管理ではなく、データに付けたタグに基づいて自動的にアクセス制御を行う仕組みです。

ABACの基本構造

┌─────────────────────────────────────────────────────────┐
│                    ABAC システム                          │
├─────────────────────────────────────────────────────────┤
│  1. 管理タグ(データの属性)                                │
│     ├─ 機密レベル: high, medium, low                      │
│     ├─ 地域: EMEA, APAC, Americas                        │
│     └─ 部門: sales, marketing, finance                   │
│                                                         │
│  2. ポリシー(アクセスルール)                               │
│     ├─ 行フィルタポリシー                                   │
│     └─ 列マスクポリシー                                    │
│                                                         │
│  3. UDF(ユーザー定義関数)                                 │
│     └─ 複雑な制御ロジックを実装                             │
└─────────────────────────────────────────────────────────┘

階層的な適用レベル

レベル 適用範囲 特徴
カタログレベル 全スキーマ・テーブル 最も広範囲、管理効率が高い
スキーマレベル 該当スキーマ内のテーブル 中程度の粒度
テーブルレベル 個別テーブル 最も細かい制御

メリット、嬉しさ

1. スケーラビリティ

従来のアプローチでは、1000個のテーブルがあれば1000回の権限設定が必要でした。ABACなら1つのポリシーで数百〜数千のテーブルを一括管理できます。

従来: テーブル1つ × 権限設定1つ = 1000回の作業
ABAC: ポリシー1つ × タグ設定 = 数分の作業

2. 柔軟性

新しい要件が出てきても、タグやポリシーを更新するだけで対応完了。個別のテーブル権限を変更する必要がありません。

3. 一元化されたガバナンス

複数のカタログ・スキーマにまたがるデータも、統一したルールで管理できます。バラバラだった権限管理が一箇所に集約されます。

4. 動的なセキュリティ強化

ユーザーの属性やデータの内容に応じて、リアルタイムでアクセス制御が変化します。機密データは自動的に保護されます。

5. 完全な監査可能性

すべてのデータアクセスが監査ログに自動記録され、コンプライアンス要件も簡単にクリアできます。

ウォークスルー

チュートリアルに沿って操作します。

有効化

アカウントコンソールのプレビューでTag Policies、ワークスペースのプレビューでAttribute Based Access Controlをオンにします。

Screenshot 2025-06-10 at 16.18.28.png

Screenshot 2025-06-10 at 16.13.19.png

タグポリシーの作成

カタログエクスプローラにアクセスすると、タグポリシーが追加されています。タグポリシーで、使用するタグのキーと許容する値を定義します。

Screenshot 2025-06-10 at 16.20.39.png

以下のように個人特定情報のタグを作成します。

Screenshot 2025-06-10 at 16.21.42.png
Screenshot 2025-06-10 at 16.21.59.png

テーブルの作成

ダミーデータを含むテーブルを作成します。

%sql
-- カタログを作成(存在しない場合)
CREATE CATALOG IF NOT EXISTS abac;
USE CATALOG abac;

-- スキーマを作成
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;

-- テーブルを作成
CREATE TABLE IF NOT EXISTS profiles (
    First_Name STRING,
    Last_Name STRING,
    Phone_Number STRING,
    Address STRING,
    SSN STRING
)
USING DELTA;

-- データを挿入
INSERT INTO profiles (First_Name, Last_Name, Phone_Number, Address, SSN)
VALUES
('John', 'Doe', '123-456-7890', '123 Main St, NY', '123-45-6789'),
('Jane', 'Smith', '234-567-8901', '456 Oak St, CA', '234-56-7890'),
('Alice', 'Johnson', '345-678-9012', '789 Pine St, TX', '345-67-8901'),
('Bob', 'Brown', '456-789-0123', '321 Maple St, FL', '456-78-9012'),
('Charlie', 'Davis', '567-890-1234', '654 Cedar St, IL', '567-89-0123'),
('Emily', 'White', '678-901-2345', '987 Birch St, WA', '678-90-1234'),
('Frank', 'Miller', '789-012-3456', '741 Spruce St, WA', '789-01-2345'),
('Grace', 'Wilson', '890-123-4567', '852 Elm St, NV', '890-12-3456'),
('Hank', 'Moore', '901-234-5678', '963 Walnut St, CO', '901-23-4567'),
('Ivy', 'Taylor', '012-345-6789', '159 Aspen St, AZ', '012-34-5678'),
('Liam', 'Connor', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333'),
('Sophie', 'Dubois', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444'),
('Hans', 'Müller', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555'),
('Elena', 'Rossi', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666'),
('Johan', 'Andersson', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777');

Screenshot 2025-06-10 at 16.26.15.png

こちらにEUの住所が含まれていることを覚えておいてください。
Screenshot 2025-06-10 at 16.25.34.png

タグの設定

上で定義したタグを対象のカラムに設定します。

%sql
-- SSN列にガバナンスタグを追加
ALTER TABLE abac.customers.profiles
ALTER COLUMN SSN
SET TAGS ('pii' = 'ssn');

-- Address列にガバナンスタグを追加
ALTER TABLE abac.customers.profiles
ALTER COLUMN Address
SET TAGS ('pii' = 'address');

カタログエクスプローラ上にもタグが表示されます。

Screenshot 2025-06-10 at 16.26.51.png

UDFの作成

次のステップで行フィルターポリシーを適用する際に使用する、検索用の関数を定義します。

%sql
-- 住所がEUにないかどうかを判定
CREATE OR REPLACE FUNCTION abac.customers.is_not_eu_address(address STRING)
RETURNS BOOLEAN
RETURN (
    SELECT CASE
        WHEN LOWER(address) LIKE '%eu%'
          OR LOWER(address) LIKE '%e.u.%'
          OR LOWER(address) LIKE '%europe%'
        THEN FALSE
        ELSE TRUE
    END
);

行フィルターポリシーの定義

今回はテーブルレベルでアクセス制御をかけます。上で作成したprofilesテーブルにアクセスし、Policiesタブを開いて、新しいポリシーをクリックします。

Screenshot 2025-06-10 at 16.28.06.png

ポリシー名、説明文、適用対象のプリンシパル(ユーザー、グループ、サービスプリンシパル)、ポリシーの種類(行フィルター)、上で定義した行フィルター関数を指定します。

Screenshot 2025-06-10 at 16.29.53.png
Screenshot 2025-06-10 at 16.30.09.png

そして、列が次の場合でタグpiiを指定します。これによって、行フィルター関数を適用する条件にタグを加えることができます。

Screenshot 2025-06-10 at 16.30.31.png

Screenshot 2025-06-10 at 16.30.47.png

動作確認

上記テーブルを参照します。

%sql
SELECT DISTINCT * FROM abac.customers.profiles

EUの行が除外されています。

First_Name Last_Name Phone_Number Address SSN
Grace Wilson 890-123-4567 852 Elm St, NV 890-12-3456
Alice Johnson 345-678-9012 789 Pine St, TX 345-67-8901
Ivy Taylor 012-345-6789 159 Aspen St, AZ 012-34-5678
Frank Miller 789-012-3456 741 Spruce St, WA 789-01-2345
Jane Smith 234-567-8901 456 Oak St, CA 234-56-7890
John Doe 123-456-7890 123 Main St, NY 123-45-6789
Charlie Davis 567-890-1234 654 Cedar St, IL 567-89-0123
Emily White 678-901-2345 987 Birch St, WA 678-90-1234
Hank Moore 901-234-5678 963 Walnut St, CO 901-23-4567
Bob Brown 456-789-0123 321 Maple St, FL 456-78-9012

今回は、テーブルレベルでのポリシーの適用でしたが、カタログレベルで適用することでタグが付与されているすべてのカラムに対して一括でポリシーを適用することもできます。

注意点

ベータ版の制限事項

制限項目 内容 対策
列削除問題 MODIFY権限があるユーザーが管理タグ付き列を削除可能 権限管理の見直しが必要
ワークスペース依存 ベータ有効化されていないワークスペースでは無効 全ワークスペースでの有効化を推奨
Delta Sharing制限 共有時にポリシーが適用されない 共有前の事前確認が重要
ビュー未対応 ビューではABAC利用不可 テーブル直接アクセスでの設計が必要

運用上の推奨事項

  1. 最上位レベルでの定義

    • カタログレベルでポリシー定義を推奨
    • 管理効率とコスト削減を両立
  2. 重複ポリシーの回避

    • 1つの列・行には1つのポリシーのみ
    • 複数適用でアクセス不能になる可能性
  3. 段階的導入

    • 小規模なテストから開始
    • 徐々に適用範囲を拡大
  4. 監査ログの活用

    • 定期的なアクセスパターン確認
    • 異常なアクセスの早期発見

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?