メインコンテンツまでスキップ

属性ベースのアクセス制御 (ABAC) ポリシーの作成と管理

備考

プレビュー

この機能は パブリック プレビュー段階です。

このページでは、Unity Catalog で行フィルターと列マスクのポリシーを構成する方法について説明します。詳細については、 属性ベースのアクセス制御 (ABAC) とポリシーについては、 属性ベースのアクセス制御 (ABAC)Unity Catalogを参照してください。オブジェクトにタグを適用するには、「 管理タグ」 および「 Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。

コンピュートの要件

ABAC ポリシーを使用するには、次のコンピュート構成のいずれかを使用する必要があります。

古いランタイムを実行している標準および専用のコンピュートは、ABAC によって保護されたテーブルにアクセスできません。 一時的な回避策として、特定のグループにのみ適用するように ABAC を設定できます。そのグループに制限したいユーザーを追加します。グループに属していないユーザーでもテーブルにアクセスできます。

ポリシーの割り当て

以下に、さまざまなセキュリティ保護可能なオブジェクトに作成できる ABAC ポリシーの数を示します。

  • カタログ : カタログごとに 10 ポリシー
  • スキーマ : スキーマごとに 10 個のポリシー
  • : 表ごとに 5 つのポリシー

オブジェクトに対するポリシーの作成

行フィルターまたは列マスクポリシーを作成するには、次のものが必要です。

  • 適用する行フィルターまたは列マスクのロジックを実装する、 EXECUTE権限を持つUnity Catalog内の既存の ユーザー定義関数 ( UDF )
    ベスト プラクティス、制限事項、および UDF の例については、 「ABAC ポリシーの UDF のベスト プラクティス」を参照してください。
  • MANAGE オブジェクトまたはオブジェクトの所有権について。

コンピュートの要件

  • Databricks Runtime 16.4 以降またはサーバレス コンピュートでコンピュートを使用する必要があります。

古いランタイムを実行しているコンピュートは、ABAC によって保護されたテーブルにアクセスできません。 一時的な回避策として、特定のグループにのみ適用されるように ABAC を設定できます。そのグループに制限するユーザーを追加します。グループに属さないユーザーでも、テーブルにアクセスできます。

  1. Databricks ワークスペースで、データアイコン。 カタログ をクリックします。

  2. ポリシーのスコープを決定するオブジェクト (カタログ、スキーマ、テーブルなど) を選択します。

  3. [ ポリシー ] タブをクリックします。

  4. [新しいポリシー ] をクリックします。

  5. 一般的 に :

    • [名前] に、ポリシーの名前を入力します。
    • [説明] に、ポリシーの説明を入力します。
    • [適用先...] では、ポリシーを適用するプリンシパルを検索して選択します。
    • [Except for...] では、ポリシーから除外するプリンシパルを追加します。
    • [スコープ] では、ポリシーを適用するカタログ、スキーマ、およびテーブルを選択します。

    一般セクションの ABAC 行フィルター ポリシー設定の例。

  6. 目的 については、列をマスクするか行を非表示にするかを選択します。

  7. [条件] セクションと [関数パラメーター] セクションで、ポリシーで列をマスクしたり行を非表示にしたりする方法を構成します。 これを行うには、マスク関数と、その関数を適用する条件を指定します。

    条件セクションの ABAC 行フィルター ポリシー設定の例。

    「機能」セクションの ABAC 行��フィルターのポリシー設定の例。

  8. ポリシーの作成 」をクリックします。

警告

タグデータはプレーンテキストとして保存され、グローバルに複製できます。リソースのセキュリティを損なう可能性のあるタグ名、値、または記述子は使用しないでください。たとえば、個人情報や機密情報を含むタグ名、値、または記述子は使用しないでください。

ポリシーの編集

必要な権限: オブジェクトまたはオブジェクトの所有者に対する MANAGE

  1. Databricks ワークスペースで、データアイコン。 カタログ をクリックします。
  2. ポリシーのスコープを決定するオブジェクト (カタログ、スキーマ、テーブルなど) を選択します。
  3. [ ポリシー ] タブをクリックします。
  4. ポリシーを選択し、編集します。
  5. [ ポリシーの更新 ] をクリックします。

ポリシーを削除する

必要な権限: オブジェクトまたはオブジェクトの所有者に対する MANAGE

  1. Databricks ワークスペースで、データアイコン。 カタログ をクリックします。
  2. ポリシーのスコープを決定するオブジェクト (カタログ、スキーマ、テーブルなど) を選択します。
  3. [ ポリシー ] タブをクリックします。
  4. ポリシーを選択します。
  5. [ ポリシーの削除 ] をクリックします。

複数のフィルターまたはマスクのトラブルシューティング

ABAC では、テーブルごとに 1 つの行フィルターと列ごとに 1 つの列マスクの制限が適用されます。これにより、複数のフィルターやマスクが相互作用した場合に不明確な結果が発生するのを防ぎます。

Databricks は、ポリシー評価中に複数のフィルターまたはマスクを検出すると、 INVALID_PARAMETER_VALUE.UC_ABAC_MULTIPLE_ROW_FILTERSまたはCOLUMN_MASKS_FEATURE_NOT_SUPPORTED.MULTIPLE_MASKSエラーをスローします。この動作は仕様によるもので、競合が解決されるまでテーブルへのアクセスをブロックします。

複数の行のフィルタまたはマスクがどのように発生するかを理解する

複数のフィルターまたはマスクは、いくつかの方法で発生する可能性があります。

  • 単一のポリシーで複数のフィルターまたはマスクが生成されます。
    これは、複数の列がポリシー条件に一致する場合に発生する可能性があります。たとえば、次のポリシーは、 region=EMEAタグが付けられた列に基づいて行フィルターを定義します。

    SQL
    CREATE OR REPLACE POLICY region_filter_policy
    ON TABLE my_catalog.my_schema.customer_data
    ROW FILTER my_catalog.my_schema.filter_by_region
    TO `account users`
    FOR TABLES
    MATCH COLUMNS
    hasTagValue('region', 'EMEA') AS region_cols
    USING COLUMNS (region_cols);

    customer_dataテーブルにregion=EMEAタグが付けられた列が複数ある場合、この単一のポリシーによって、一致する列ごとに 1 つの行フィルターが生成されます。Databricks がポリシーを評価すると、複数の行フィルターが検出され、エラーがスローされます。

  • 複数のポリシーが同じテーブルまたは列にフィルターまたはマスクを定義します。複数の ABAC ポリシーが同じテーブルまたは列に適用される場合、Databricks は複数の有効なフィルターまたはマスクを検出します。

  • テーブルまたは列には、フィルターまたはマスクが手動で既に適用されています。テーブルまたは列に、手動で適用された (ABAC 以外の) 行フィルターまたは列マスクと、1 つ以上の ABAC 定義のフィルターまたはマスクの両方が含まれている場合にも、競合が発生する可能性があります。

エラーを解決する方法

複数行フィルターのエラーは、次のいずれかの方法で解決できます。

  • ポリシーの列の一致を調整しますMATCH COLUMNS句をより具体的に更新し、1 つの列のみに一致するようにします。たとえば、複数の条件を組み合わせて一致を絞り込むことができます。

  • 管理タグを調整する : どの列にポリシーをトリガーする管理タグがあるかを確認します。 行フィルターにこれらのタグを含めない場合は、削除または変更してください。

  • ポリシーを再構築する : 複数の列に一致する可能性のある条件に頼るのではなく、明示的に列をターゲットにした個別のポリシーを作成することを検討してください。これにより、行フィルターをトリガーする列をより詳細に制御できるようになります。