ABACポリシーの作成と管理
このページでは、 Unity CatalogでABACを作成、編集、表示、削除する方法について説明します。 ポリシーの概念の概要については、 「ABAC の中心的な概念」を参照してください。
要件
すべてのポリシー操作(作成、編集、削除、表示、説明)には、セキュリティ保護可能なオブジェクトまたはオブジェクトの所有権に対するMANAGE必要です。ポリシーを作成するには、以下のものも必要です。
- Databricks Runtime 16.4 以降、またはサーバレス コンピュート。 「コンピュート要件」を参照してください。
- フィルタリングまたはマスキングのロジックには、Unity Catalog で
EXECUTEが設定されているユーザー定義関数 (UDF)、またはポリシー作成時にインラインで定義する SQL 関数を使用します。 - 対象オブジェクトに適用される管理タグ。See 管理タグ.
ポリシーを作成する
カタログエクスプローラーUI、 CREATE POLICY SQLステートメント、またはDatabricks REST APIs 、SDK、 Terraformを使用して、 を作成できます。
ポリシーを作成するには、ポリシーが添付されているセキュリティ保護可能なオブジェクト(カタログ、スキーマ、またはテーブル)に対してMANAGE権限を持っているか、セキュリティ保護可能なオブジェクトを所有している必要があり、フィルタリングまたはマスキングのロジックを実装する UDF に対してEXECUTE権限を持っている必要があります。
- Catalog Explorer
- SQL
- Python SDK
-
Databricks ワークスペースで、
カタログ をクリックします。
-
ポリシーのスコープを決定するオブジェクト (カタログ、スキーマ、テーブルなど) を選択します。
-
[ ポリシー ] タブをクリックします。
-
[新しいポリシー ] をクリックします。
-
ポリシー識別 セクションを記入してください。以下の表は、各項目をまとめたものです。
フィールド | 説明 | 例 |
|---|---|---|
名前 | ポリシーの名前。 同一のセキュリティ保護対象オブジェクトに定義されているすべてのポリシーの中で、一意である必要があります。 |
|
説明 | 任意。ポリシーの説明。監査ログに表示され、管理者がポリシーの意図を理解するのに役立ちます。 |
|
- 「原則と範囲」の セクションを完成させてください。以下の表は、各項目をまとめたものです。
フィールド | 説明 | 例 |
|---|---|---|
適用対象... | ユーザー、グループ、またはサービスプリンシパルはポリシーの対象となります。 これらのプリンシパルがスコープ内のテーブルを照会する場合、行フィルタまたは列マスクが適用されます。アカウント内のすべてのプリンシパルにポリシーを適用するには、 |
|
以下を除きます | 校長はポリシーから免除されます。 免除対象のプリンシパルは、フィルタリングやマスキングの対象とならず、完全な未修正データを見ることができます。 |
|
スコープ | ポリシーが適用される、セキュリティ保護可能なオブジェクト。このポリシーは、選択された範囲内のすべてのテーブルに対して評価を行います。カタログ、スキーマ、またはテーブルを選択してください。Databricksは、適用可能な最高レベルでポリシーを適用することを推奨します。 | カタログ |
テーブルの条件 | ポリシーが適用される範囲内のテーブルを決定します。 条件なし :ポリシーをスコープ内のすべてのテーブルに適用します。 これらのタグのいずれかに一致するテーブル : タグ キーまたはタグ キーと値のペアの指定されたリストにポリシーを適用します。 これらのいずれかに該当するテーブルは、ポリシーに合致する。 カスタム式に一致するテーブル : | これらのタグのいずれかに一致するテーブル を選択し、値 |
7. ポリシータイプ については、適用するアクセス制御の種類を選択してください。
オプション | 説明 | 使用する場合 |
|---|---|---|
行フィルター | 行フィルタポリシーを作成します。UDF各行を評価し、ブール値を返します。 UDFが | アクセス権限は各行の値によって決まります。例えば、地理的地域を含む列の値でフィルタリングする場合などです。 |
列マスク | 列マスクポリシーを作成します。UDFは列の値を入力として受け取り、元の値またはマスクされた値を返します。戻り値の型はターゲットカラムのデータ型にキャスト可能である必要があります。 | 社会保障番号、電話番号、メールアドレスなどの機密性の高いフィールドは伏せ字にする必要がありますが、同時に、本人がテーブルを照会できるようにする必要があります。 |
- 次のいくつかのセクションは、選択した ポリシー タイプ によって異なります。 選択した項目に一致するセクションを展開してください。
行フィルター
行フィルター機能の セクションで、行フィルター機能の指定方法を選択します。
- 既存のものを選択 : Unity Catalogに既に定義されているUDFを選択します。 UDF各行を評価し、ブール値を返します。 関数が
FALSEを返す行は、クエリ結果から除外されます。UDFにはEXECUTEが必要です。 - 作成 :行フィルタロジックとして使用するSQL関数を定義します。

[関数入力] セクションで、各関数の値を指定します。 各入力は、タグで一致する列、カスタム式で一致する列、または定数値のいずれかです。

列マスク
「列条件」 セクションで、マスクする列を識別する方法を選択します。
- これらのタグのいずれかに一致する列 : タグ キーのリストまたはタグ キーと値のペアを指定します。 これらのいずれかを含む列は、ポリシーによってマスクされます。
- カスタム式に一致する列 :
has_tagとhas_tag_valueを使用してブール式を作成し、より複雑な一致ロジックのためにAND、OR、およびNOTと組み合わせます。 式がTRUEと評価される列はマスクされます。

次に、一致する列に適用する マスキング機能 を選択します。
- 既存のものを選択 : Unity Catalogに既に定義されているUDFを選択します。 UDFは、元の値またはマスクされた値を返します。戻り値の型は、ターゲットカラムのデータ型にキャスト可能である必要があります。 UDFには
EXECUTE指定する必要があります。 - 作成 :列マスキングロジックとして使用するSQL関数を定義します。

[関数入力] セクションで、各追加関数の値を指定します。 各入力は、タグで一致する列、カスタム式で一致する列、または定数値のいずれかです。
この例では、定数値4を使用して社会保障番号の最後の4文字を表示します。

- 「 ポリシーの作成 」をクリックします。
詳細なドキュメントについては、 「ポリシーの作成」を参照してください。
CREATE [OR REPLACE] POLICY policy_name
ON { CATALOG catalog_name | SCHEMA schema_name | TABLE table_name }
[COMMENT description]
{ row_filter_body | column_mask_body }
行フィルター本体:
ROW FILTER function_name
TO principal [, ...]
[EXCEPT principal [, ...]]
FOR TABLES
[WHEN condition]
[MATCH COLUMNS condition [[AS] alias] [, ...]]
[USING COLUMNS (function_arg [, ...])]
列マスク本体:
COLUMN MASK function_name
TO principal [, ...]
[EXCEPT principal [, ...]]
FOR TABLES
[WHEN condition]
[MATCH COLUMNS condition [[AS] alias] [, ...]]
ON COLUMN alias
[USING COLUMNS (function_arg [, ...])]
パラメーター:
policy_name: ポリシーの名前。 同一のセキュリティ保護対象オブジェクトに定義されているすべてのポリシーの中で、一意である必要があります。ON { CATALOG | SCHEMA | TABLE }: ポリシーが適用される範囲。このポリシーは、このセキュリティ保護対象オブジェクトの子孫であるすべてのテーブルに対して評価を行います。function_name: フィルタリングまたはマスキングロジックを実装するUDFの完全修飾名。TO principal [, ...]ポリシーが適用されるユーザー、グループ、またはサービスプリンシパル。EXCEPT principal [, ...]: 校長はポリシーから免除されます。 免除対象の主要関係者は、フィルタリングやマスキングの対象とはなりません。FOR TABLESポリシーがテーブルを対象とすることを指定します。現在サポートされているセキュリティ保護可能なオブジェクトタイプはテーブルのみであり、これにはストリーミングテーブルとマテリアライズドビューも含まれます。WHEN condition: タグに基づいてポリシーを適用するテーブルを決定するブール式。 組み込み関数has_tag('tag_name')とhas_tag_value('tag_name', 'tag_value')を使用します。省略した場合、デフォルト値はTRUEになります(スコープ内のすべてのテーブルに適用されます)。MATCH COLUMNS condition [[AS] alias] [, ...]ポリシーの対象となる列を識別する列条件。各条件は、has_tag('tag_name')とhas_tag_value('tag_name', 'tag_value')から構築されたブール式であり、オプションでAND、OR、NOTと組み合わせることができます。 各条件には、ON COLUMNおよびUSING COLUMNSで使用するための別名を割り当てることができます。ポリシーには最大 3 つMATCH COLUMNS式を含めることができ、ポリシーを適用するにはすべての式が一致する必要があります。ON COLUMN alias: 列マスク ポリシーの場合、MATCH COLUMNSからのエイリアスで参照される、マスクする一致列を指定します。USING COLUMNS (function_arg [, ...]): UDFに渡された議論。各引数は、MATCH COLUMNSのエイリアスまたは定数リテラルにすることができます。
例:列マスクポリシー。prod.customersスキーマ内でpii:ssnタグが付いているすべての列をマスクし、最後の4文字のみを表示します。このポリシーはus_analystsに適用されますが、 adminsは除外されます。
CREATE FUNCTION ssn_to_last_nr (ssn STRING, nr INT) RETURNS STRING
RETURN right(ssn, nr);
CREATE POLICY mask_ssn
ON SCHEMA prod.customers
COLUMN MASK ssn_to_last_nr
TO us_analysts EXCEPT admins
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn
ON COLUMN ssn
USING COLUMNS (4);
例:行フィルタポリシー。prod.customersスキーマでsensitivity:highタグが付いたテーブルから、ヨーロッパの顧客を含む行を除外します。このポリシーはus_analystsに適用され、 geo_region列に基づいて行をフィルタリングします。
CREATE FUNCTION non_eu_region (geo_region STRING) RETURNS BOOLEAN
RETURN geo_region <> 'eu';
CREATE POLICY hide_eu_customers
ON SCHEMA prod.customers
COMMENT 'Exclude rows with European customers from sensitive tables'
ROW FILTER non_eu_region
TO us_analysts
FOR TABLES
WHEN has_tag_value('sensitivity', 'high')
MATCH COLUMNS has_tag('geo_region') AS region
USING COLUMNS (region);
詳細なドキュメントについては、 Databricks SDK for Python のドキュメントを参照してください。
この例では、米国を拠点とするアナリスト向けに、ヨーロッパの顧客を含む行を除外する行フィルタポリシーを作成します。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import (
FunctionArgument,
MatchColumn,
PolicyInfo,
PolicyType,
RowFilterOptions,
SecurableType,
)
w = WorkspaceClient()
w.policies.create_policy(PolicyInfo(
name="hide_eu_customers",
comment="Exclude rows with European customers from sensitive tables",
on_securable_type=SecurableType.SCHEMA,
on_securable_fullname="prod.customers",
for_securable_type=SecurableType.TABLE,
policy_type=PolicyType.POLICY_TYPE_ROW_FILTER,
to_principals=["us_analysts"],
match_columns=[
MatchColumn(condition="has_tag('geo_region')", alias="region"),
],
row_filter=RowFilterOptions(
function_name="prod.customers.non_eu_region",
using=[FunctionArgument(alias="region")],
),
))
この例では、 adminsグループに属する人を除く米国のアナリストの社会保障番号をマスクする列マスク ポリシーを作成します。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import (
ColumnMaskOptions,
FunctionArgument,
MatchColumn,
PolicyInfo,
PolicyType,
SecurableType,
)
w = WorkspaceClient()
w.policies.create_policy(PolicyInfo(
name="mask_ssn",
comment="Mask social security numbers",
on_securable_type=SecurableType.SCHEMA,
on_securable_fullname="prod.customers",
for_securable_type=SecurableType.TABLE,
policy_type=PolicyType.POLICY_TYPE_COLUMN_MASK,
to_principals=["us_analysts"],
except_principals=["admins"],
match_columns=[
MatchColumn(condition="has_tag_value('pii', 'ssn')", alias="ssn"),
],
column_mask=ColumnMaskOptions(
function_name="prod.customers.ssn_to_last_nr",
on_column="ssn",
using=[FunctionArgument(constant="4")],
),
))
ポリシーを編集する
- Catalog Explorer
- SQL
- Python SDK
- Databricks ワークスペースで、
カタログ をクリックします。
- ポリシーが適用されるオブジェクトを選択してください。
- [ ポリシー ] タブをクリックします。
- 編集したいポリシーを選択してください。
- 変更したい項目を更新してください。説明、プリンシパル、ポリシータイプ、条件、および機能入力マッピングを変更できます。ポリシー名およびポリシーが適用される保護対象オブジェクトは編集できません。フィールドの説明については、 「ポリシーの作成」を参照してください。
- [ ポリシーの更新 ] をクリックします。
CREATE OR REPLACE POLICYポリシー定義全体を置き換えます。変更したいフィールドだけでなく、すべての条項を指定してください。代替ポリシーは、同じ名前を持ち、同じセキュリティ保護対象オブジェクト上に存在する必要があります。
CREATE OR REPLACE POLICY mask_ssn
ON SCHEMA prod.customers
COLUMN MASK ssn_to_last_nr
TO us_analysts EXCEPT admins, compliance_team
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn
ON COLUMN ssn
USING COLUMNS (4);
SQLのCREATE OR REPLACE POLICYとは異なり、 update_policy部分更新をサポートします。update_maskを使用して、変更するフィールドを指定します。 更新されるのは、それらのフィールドのみです。update_maskが"*"であるか空の場合、 policy_infoのすべてのフィールドが適用されます。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import PolicyInfo
w = WorkspaceClient()
w.policies.update_policy(
on_securable_type="SCHEMA",
on_securable_fullname="prod.customers",
name="mask_ssn",
policy_info=PolicyInfo(
except_principals=["admins", "compliance_team"],
),
update_mask="except_principals",
)
ポリシーを削除する
- Catalog Explorer
- SQL
- Python SDK
- Databricks ワークスペースで、
カタログ をクリックします。
- ポリシーが適用されるオブジェクトを選択してください。
- [ ポリシー ] タブをクリックします。
- ポリシーを選択します。
- [ ポリシーの削除 ] をクリックします。
ポリシーを削除するには、 DROP POLICYを使用します。
DROP POLICY policy_name ON { CATALOG | SCHEMA | TABLE } securable_name
例:
DROP POLICY mask_ssn ON SCHEMA prod.customers;
DROP POLICY hide_eu_customers ON SCHEMA prod.customers;
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.policies.delete_policy(
on_securable_type="SCHEMA",
on_securable_fullname="prod.customers",
name="mask_ssn",
)
ポリシーを表示
SHOW POLICIESを使用して、セキュリティ保護可能なオブジェクトに定義されているポリシーを一覧表示します。SHOW EFFECTIVE POLICIES使用すると、テーブルに影響を与えるカタログレベルのポリシーなど、親スコープのポリシーも含めることができます。
SHOW [EFFECTIVE] POLICIES ON { CATALOG | SCHEMA | TABLE } securable_name
結果には、ポリシー名、ポリシーの種類、および各ポリシーが定義されているカタログ、スキーマ、またはテーブルが含まれます。
テーブルに適用されるポリシーを表示するのに、親カタログやスキーマに対する権限は必要ありません。これにより、テーブル管理者は、兄弟テーブルのポリシーへの読み取りアクセス権を持たなくても、適用されるルールを確認できます。
例:
SHOW EFFECTIVE POLICIES ON SCHEMA prod.customers;
ポリシー名 | ポリシータイプ | カタログ | スキーマ | Comment |
|---|---|---|---|---|
hide_eu_customers | 行フィルター | 製品 | 顧客 | |
マスク_ssn | 列マスク | 製品 | 顧客 |
ポリシーを説明する
特定のポリシーの詳細を表示するには、 DESCRIBE POLICYを使用してください。対象のセキュリティ保護可能なオブジェクトまたはオブジェクトの所有権に対してMANAGEが必要です。
{ DESC | DESCRIBE } POLICY policy_name ON { CATALOG | SCHEMA | TABLE } securable_name
結果には、ポリシーのプロパティがキーと値のペアとして表示されます。これには、名前、保護可能なオブジェクトの種類、保護可能なオブジェクトの名前、プリンシパル、条件、関数名、タイムスタンプなどが含まれます。
例:
DESCRIBE POLICY hide_eu_customers ON SCHEMA prod.customers;
情報名 | info_value |
|---|---|
名前 | hide_eu_customers |
セキュリティ保護可能なタイプ | スキーマ |
セキュア可能な | 製品の顧客 |
プリンシパルへ | 米国のアナリスト |
セキュリティ保護可能なタイプの場合 | テーブル |
列を一致させる | has_tag('geo_region') AS region |
ポリシーの種類 | 行フィルター |
関数名 | prod.顧客.non_eu_region |
列の使用 | リージョン |
監査ログ
Databricks 、管理タグと ABAC ポリシーの操作を監査ログ システム テーブルに記録します。 以下にクエリの例を示します。詳細については、 「監査ログ」を参照してください。
-- All tag assignment and deletion events from the audit log
SELECT
event_time,
action_name,
user_identity.email AS actor,
request_params.workspace_id,
request_params.metastore_id,
request_params.tag_assignment,
response.status_code,
source_ip_address
FROM system.access.audit
WHERE service_name = 'unityCatalog'
AND action_name IN (
'createEntityTagAssignment',
'deleteEntityTagAssignment'
)
ORDER BY event_time DESC;
-- All ABAC policy CRUD operations
SELECT
event_time,
action_name,
user_identity.email AS actor,
request_params.name AS policy_name,
request_params.on_securable_type,
request_params.on_securable_fullname,
request_params.policy_info,
response.status_code
FROM system.access.audit
WHERE service_name = 'unityCatalog'
AND action_name IN ('createPolicy', 'deletePolicy', 'getPolicy', 'listPolicies')
ORDER BY event_time DESC;