テストとトラブルシューティング
このページでは、ポリシータグのアクセス制御をテストし、一般的なエラーをトラブルシューティングする方法について説明します
目的
このページでは、ポリシータグのアクセス制御をテストし、一般的なエラーをトラブルシューティングする方法について説明します。ポリシータグとゲートチェーンの概要については、ポリシータグの概要を参照してください。CEL条件パターンについては、CEL条件とアクセスパターンを参照してください。
目次
アクセス制御のテスト
このチュートリアルでは、はじめにのチュートリアルで使用したデータセットとaccess_levelポリシータグを使用します。
前提条件
次の役割が割り当てられたユーザーアカウントが必要です。
- 組織レベル:
Organization Viewer: ユーザーがプラットフォームとプロジェクトを表示できるようにします。 - プロジェクトレベル:
AM Admin: Explorerへのアクセス権限とSQLクエリの実行権限を付与します。
セットアップ
次のポリシータグをバインドします。
- データセットレベル:
access_level: level 1をデータセット全体に適用します。 - テーブルレベル:
access_level: level 2をテーブルchicago_calendar_fullに適用します。 - 属性レベル:
access_level: level 3をchicago_calendar_fullのbridge属性に適用します。 - ポリシータグなし:
stations_ridesテーブルにはタグがありません(データセットからlevel 1を継承します)。
ポリシータグメニューでバインドを確認します。
テスト1: level 1のみのユーザー
アクセス権限の付与UIを使用して、ユーザーにaccess_level: level 1を付与します。
次に、IAMのCEL条件を編集して、3つのレベルすべてでタグを強制します。
このCELは、すべてのレベルでlevel 1を確認します。データセットにはlevel 1があり、タグのないテーブル/属性はそれを継承するため、このユーザーは継承されたリソースにアクセスできますが、level 2またはlevel 3リソースにはアクセスできません。
テストユーザーとしてSQLモードのExplorerを開きます。
カタログの表示:
期待される結果: データセットがカタログリストに表示されます。
タグのないテーブルの読み取り(データセットからlevel 1を継承):
期待される結果: 成功。テーブルにはタグがなく、データセットからlevel 1を継承し、ユーザーのCELはすべてのレベルでlevel 1に一致します。
level 2テーブルの読み取り:
期待される結果: エラー。ユーザーはデータセットゲート(level 1)を通過しますが、テーブルゲートに失敗します(テーブルにはlevel 2があり、CELはlevel 1のみを確認します)。
テスト2: level 1 + level 2のユーザー
ユーザーにaccess_level: level 2をlevel 1に加えて付与します。
CEL条件を更新して、テーブルと属性レベルでlevel 2を含めます。
このCELは、すべての3つのレベルでタグを強制します。属性レベルでは、level 1またはlevel 2を確認しますが、bridgeにはlevel 3があるため、アクセスが拒否されます。
SELECT *でlevel 2テーブルを読み取る:
期待される結果: エラー。ユーザーはデータセットとテーブルゲートを通過しますが、SELECT *にはbridge属性が含まれており、level 3があります。CELは属性レベルでlevel 1またはlevel 2のみを許可します。
制限された属性を除外してテーブルを読み取る:
期待される結果: 成功。すべての選択された属性にはlevel 1またはlevel 2タグがあります(またはテーブルから継承されています)ため、CELに一致します。
制限された属性のみを読み取る:
期待される結果: エラー: bridgeにはlevel 3があり、CELは属性レベルでlevel 1またはlevel 2のみを許可します。
テスト3: パススルーが強制を無効にすることを示す
強制レベルとパススルーレベルの違いを理解するには、同じユーザー(level 1 + level 2)でこのCELを試してください。
属性レベルがパススルーであることに注意してください(|| Resource == "attribute")。
期待される結果: 成功、bridgeにはlevel 3があり、ユーザーにはlevel 3がない場合でも、CELは属性レベルでタグを確認しません。パススルーにより、すべての属性にアクセスできます。
このテストは、パススルーを慎重に使用する必要がある理由を示しています。属性レベルの制限が必要な場合、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サービスについてサポートが必要な場合は、ヘルプセンターでリクエストを作成してください。
ユーザーコミュニティに参加してください。

