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

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

備考

ベータ版

この機能は ベータ版です。

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

ABACを有効にする

ABAC ベータ版は、ワークスペース レベルで有効になります。Databricks は、共有カタログにアクセスする各ワークスペースでも ABAC が有効になっていない限り、共有カタログへの読み取り操作に ABAC を適用できません。

ABAC ベータ版を有効にするには、次の手順を実行します。

  1. ワークスペース管理者として、Databricks ワークスペースの上部バーでユーザー名をクリックします。
  2. メニューから「 プレビュー 」を選択します。
  3. 「属性ベースのアクセス制御 」トグルを 「オン」 に設定します。

コンピュートの要件

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

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

ポリシーの割り当て

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

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

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

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

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

コンピュートの要件

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

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

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

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

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

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

  5. [全般] に、ポリシーの名前と説明を入力します。

  6. プリンシパル では:

    • [ 適用先] で、ポリシーが管理するプリンシパルを検索して選択します。
    • [除外] で、ポリシーから除外するプリンシパルを検索して選択します。たとえば、ポリシーが適用されるグループに属するユーザーを除外できます。

    ABACはポリシーを記入しました。

  7. 「タイプとターゲット 」で、次の操作を行います。

    • [ポリシーの種類 ] で、[ 行フィルター ] または [列マスク ] を選択します。
    • [ポリシー ターゲット ] で、ポリシーの範囲を選択します。これは、カタログ全体やスキーマなどの広範なスコープにすることも、その中の特定のテーブルや列などのより狭いスコープにすることもできます。
    • [テーブル レベルの条件 ] で、このポリシーを適用するテーブルに一致する条件を指定します。たとえば、 hasTag("tag")hasTagValue("tag", "value")などです。
  8. [関数] で、このポリシーで使用する関数を選択し、必要なパラメーターを入力します。

    ABAC が行フィルター ポリシーに入力されました。

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

警告

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

ポリシーの編集

必要な権限: オブジェクトまたはオブジェクトの所有者に対する 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 つの列のみに一致するようにします。たとえば、複数の条件を組み合わせて一致を絞り込むことができます。

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

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