For AI agents: the complete documentation index is available at https://docs.dataplatform.ovh.net/ja/llms.txt, the full documentation bundle is available at https://docs.dataplatform.ovh.net/ja/llms-full.txt, and this page is available as Markdown at https://docs.dataplatform.ovh.net/ja/lakehouse-manager-policy-tags-testing.md.
  • 🇯🇵 日本語
  • テストとトラブルシューティング

    このページでは、ポリシータグのアクセス制御をテストし、一般的なエラーをトラブルシューティングする方法について説明します

    目的

    このページでは、ポリシータグのアクセス制御をテストし、一般的なエラーをトラブルシューティングする方法について説明します。ポリシータグとゲートチェーンの概要については、ポリシータグの概要を参照してください。CEL条件パターンについては、CEL条件とアクセスパターンを参照してください。

    目次

    1. アクセス制御のテスト
    2. トラブルシューティングと一般的なエラー

    アクセス制御のテスト

    このチュートリアルでは、はじめにのチュートリアルで使用したデータセットとaccess_levelポリシータグを使用します。

    アクセス制御のテスト — アクセス権限の付与

    前提条件

    次の役割が割り当てられたユーザーアカウントが必要です。

    1. 組織レベル: Organization Viewer: ユーザーがプラットフォームとプロジェクトを表示できるようにします。
    2. プロジェクトレベル: AM Admin: Explorerへのアクセス権限とSQLクエリの実行権限を付与します。

    セットアップ

    次のポリシータグをバインドします。

    • データセットレベル: access_level: level 1をデータセット全体に適用します。
    • テーブルレベル: access_level: level 2をテーブルchicago_calendar_fullに適用します。
    • 属性レベル: access_level: level 3chicago_calendar_fullbridge属性に適用します。
    • ポリシータグなし: stations_ridesテーブルにはタグがありません(データセットからlevel 1を継承します)。
    セットアップ — アクセス権限の付与

    ポリシータグメニューでバインドを確認します。

    セットアップ — アクセス権限の付与 (2)

    テスト1: level 1のみのユーザー

    アクセス権限の付与UIを使用して、ユーザーにaccess_level: level 1を付与します。

    テスト1: `level 1`のみのユーザー — アクセス権限の付与

    次に、IAMのCEL条件を編集して、3つのレベルすべてでタグを強制します。

    Service == "adac" && (
      (PolicyTags.access_level == "level 1" && Resource == "dataset")
      || (PolicyTags.access_level == "level 1" && Resource == "table")
      || (PolicyTags.access_level == "level 1" && Resource == "attribute")
    )

    このCELは、すべてのレベルでlevel 1を確認します。データセットにはlevel 1があり、タグのないテーブル/属性はそれを継承するため、このユーザーは継承されたリソースにアクセスできますが、level 2またはlevel 3リソースにはアクセスできません。

    テストユーザーとしてSQLモードのExplorerを開きます。

    カタログの表示:

    SHOW CATALOGS

    期待される結果: データセットがカタログリストに表示されます。

    テスト1: `level 1`のみのユーザー — カタログの表示

    タグのないテーブルの読み取り(データセットからlevel 1を継承):

    SELECT * FROM stations_rides

    期待される結果: 成功。テーブルにはタグがなく、データセットからlevel 1を継承し、ユーザーのCELはすべてのレベルでlevel 1に一致します。

    テスト1: `level 1`のみのユーザー — テーブルの読み取り

    level 2テーブルの読み取り:

    SELECT * FROM chicago_calendar_full

    期待される結果: エラー。ユーザーはデータセットゲート(level 1)を通過しますが、テーブルゲートに失敗します(テーブルにはlevel 2があり、CELはlevel 1のみを確認します)。

    テスト1: `level 1`のみのユーザー — エラー

    テスト2: level 1 + level 2のユーザー

    ユーザーにaccess_level: level 2level 1に加えて付与します。

    テスト2: `level 1` + `level 2`のユーザー — アクセス権限の付与

    CEL条件を更新して、テーブルと属性レベルでlevel 2を含めます。

    Service == "adac" && (
      (PolicyTags.access_level == "level 1" && Resource == "dataset")
      || (PolicyTags.access_level in ["level 1", "level 2"] && Resource == "table")
      || (PolicyTags.access_level in ["level 1", "level 2"] && Resource == "attribute")
    )

    このCELは、すべての3つのレベルでタグを強制します。属性レベルでは、level 1またはlevel 2を確認しますが、bridgeにはlevel 3があるため、アクセスが拒否されます。

    SELECT *でlevel 2テーブルを読み取る:

    SELECT * FROM chicago_calendar_full

    期待される結果: エラー。ユーザーはデータセットとテーブルゲートを通過しますが、SELECT *にはbridge属性が含まれており、level 3があります。CELは属性レベルでlevel 1またはlevel 2のみを許可します。

    テスト2: `level 1` + `level 2`のユーザー — エラー

    制限された属性を除外してテーブルを読み取る:

    SELECT date, public_holiday, christmas_holidays, weekend, sport_holidays, summer_holidays, month, week_day_label, autumn_holidays, spring_holidays, temperature, cloud_cover, humidity, week_day, wind_speed FROM chicago_calendar_full

    期待される結果: 成功。すべての選択された属性にはlevel 1またはlevel 2タグがあります(またはテーブルから継承されています)ため、CELに一致します。

    テスト2: `level 1` + `level 2`のユーザー — テーブルの読み取り

    制限された属性のみを読み取る:

    SELECT bridge FROM chicago_calendar_full

    期待される結果: エラー: bridgeにはlevel 3があり、CELは属性レベルでlevel 1またはlevel 2のみを許可します。

    テスト2: `level 1` + `level 2`のユーザー — 属性の読み取り

    テスト3: パススルーが強制を無効にすることを示す

    強制レベルとパススルーレベルの違いを理解するには、同じユーザー(level 1 + level 2)でこのCELを試してください。

    Service == "adac" && (
      (PolicyTags.access_level == "level 1" && Resource == "dataset")
      || (PolicyTags.access_level in ["level 1", "level 2"] && Resource == "table")
      || Resource == "attribute"
    )

    属性レベルがパススルーであることに注意してください(|| Resource == "attribute")。

    SELECT bridge FROM chicago_calendar_full

    期待される結果: 成功bridgeにはlevel 3があり、ユーザーにはlevel 3がない場合でも、CELは属性レベルでタグを確認しません。パススルーにより、すべての属性にアクセスできます。

    Warning

    このテストは、パススルーを慎重に使用する必要がある理由を示しています。属性レベルの制限が必要な場合、CELはResource == "attribute"でタグを確認する必要があります

    さらにテストする

    次のバリエーションを試してください。

    • ユーザーにlevel 3を付与し(CELを更新してすべてのレベルでlevel 3を含める)、SELECT *chicago_calendar_fullで動作することを確認します。
    • ユーザーのCELからlevel 1を削除し、データセットゲートがlevel 1を必要とするため、level 2テーブルでさえ何もアクセスできないことを確認します。
    • level 2のみのテーブル(level 1なし)にアクセスし、ゲートチェーンがデータセットレベルでブロックすることを確認します。

    トラブルシューティングと一般的なエラー

    正しいタグを持っているにもかかわらず、ユーザーがテーブルにアクセスできない

    最も一般的な原因: CEL条件にリソースのスコープが欠けている。Grant Access UIはResource制約なしでCELを生成するため、タグチェックはゲートチェーンのすべてのレベルで実行されます。タグがテーブルのみにある場合(データセットにはない場合)、データセットレベルのチェックに失敗します。

    修正方法: IAMのCEL条件を編集してリソースのスコープを含めます。手動でCEL条件を記述するを参照してください。

    ユーザーはテーブルレベルのタグを持っているが、アクセスが拒否される

    原因: ゲートチェーンは累積的です。ユーザーはデータセットレベルのタグも満たす必要があります。テーブルタグのみを持っているだけでは十分ではありません。まずデータセットゲートを通過する必要があります。

    修正方法: ユーザーのCELがチェーンのすべてのレベルをカバーするようにします。または、ユーザーにデータセットレベルのタグも付与します。

    SELECT *に失敗するが、特定の列を選択するのは問題ない

    原因: テーブルの1つ以上の属性に、ユーザーが持っていない上位レベルのポリシータグが付いています。SELECT *はすべての属性を含むため、制限付き属性のゲートに失敗します。

    修正方法: ユーザーがアクセスできる列を明示的にリストし、制限付き属性を除外します。または、ユーザーに必要な属性レベルのタグを付与します。

    ユーザーはSHOW CATALOGSでデータセットを見ることができるが、テーブルをクエリすることはできない

    原因: データセットレベルのゲートは通過するかもしれませんが、データセット内のすべてのテーブルにユーザーが持っていないタグが付いている可能性があります。

    修正方法: ユーザーがデータセットとターゲットテーブル(複数)の両方に一致するタグを持っていることを確認します。タグのないテーブルはデータセットのタグを継承することを忘れないでください。

    CEL条件にPolicyTags.<key>を使用するが、リソースにそのようなタグがない

    原因: CELがPolicyTags.sensitivity == "high"をチェックし、リソースにsensitivityタグがない場合、チェックに失敗します(属性が存在しません)。

    修正方法: has(PolicyTags.sensitivity)を使用して最初に存在を確認するか、Resource ==を使用してチェックを特定のリソースレベルにスコープします。

    さらに詳しく

    当社のソリューションを実装するためのトレーニングや技術的なアシスタンスが必要な場合は、営業担当者にお問い合わせください、またはこのリンクをクリックして見積もりを受け取り、当社のプロフェッショナルサービスの専門家にプロジェクトのカスタム分析を依頼してください。

    Data Platformを構築するチームと直接質問し、フィードバックを共有し、交流するには、専用のDiscordチャネルにアクセスしてください。

    OVHcloudサービスについてサポートが必要な場合は、ヘルプセンターでリクエストを作成してください。

    ユーザーコミュニティに参加してください。