注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

Granular Policy を管理する

Granular Policy を使用すると、データセットとオブジェクトに行レベルのセキュリティを設定できます。制限付きビューとオブジェクトセキュリティポリシーは、Granular Policy を使用して、ユーザーがアクセスする権限を持つ行やオブジェクトのインスタンスを特定します。

Granular Policy は、ユーザー属性、列またはプロパティ、および値を比較して、ユーザーが閲覧できるデータを決定するルールと論理演算子で構成されます。Granular Policy は柔軟で、さまざまな比較や語句に対応しています。

Granular Policy を設計する

Granular Policy を作成する前に、次の点を検討してください。

  • データへのアクセスをどのように制限しますか?
  • ポリシーで使用できるユーザー属性は何ですか?
  • ポリシーはどの列またはプロパティに依存する可能性がありますか?
  • パイプラインを通じて伝播するものの、リソースの作成時に解除できるマーキングはどれですか?
  • 新しいユーザーにどのように権限を付与しますか?

推奨事項

Granular Policy を設計する際は、次のガイドラインを推奨します。

  • シンプルにする: Granular Policy を作成する前に、適用したいポリシーを書き出します。そのポリシーに必要な最小限の条件を特定します。ポリシーが複雑になるほど、管理と検証が難しくなります。
  • ポリシー列に null がないことを確認する: ポリシー列に null 値がある行には、どのユーザーもアクセスできません。ポリシー列に null 値があると、同期や下流の処理(Phonograph の同期など)でも問題が発生します。
  • パイプラインを活用する: 現在のデータ形式やフィールドにうまく適合しないポリシーの複雑さを軽減するには、パイプラインで列を計算し、ポリシーを記述しやすくします。Granular Policy ではなく、パイプラインで複雑な処理を扱うようにします。
  • ポリシー専用の列の使用を検討する: ポリシーで参照している元データセットの列が変更されると、ポリシーの前提が崩れる可能性があります。このリスクからポリシーを保護するため、ポリシーを決定するロジックを分離し、ポリシーが参照する専用の列を作成することを検討します。
  • 属性を使用する: 属性ベースのポリシーは、多くの場合、最もシンプルな選択肢になります。属性は SSO から取得するか、ユーザーマネージャー経由で送信できます。
  • マーキングを使用: Granular Policy は、ユーザーが読み取れる行を絞り込みますが、下流の出力やエクスポートには適用されません。元データセットのマーキングは派生処理を通じて伝播し、データが下流に流れる間も保護を維持します。この2つの制御は異なる目的を持つため、通常は併用する必要があります。Granular Policy がすでにアクセスを制御しているという前提で、継承したマーキングを解除しないでください。モデルの全体像については、アクセス制御の伝播を参照してください。

ユーザー属性

Granular Policy で使用できるユーザー属性は次のとおりです。

  • ユーザーID: Foundry がユーザーごとに生成する一意の ID です。
  • ユーザー名: ログイン時にユーザーの IDプロバイダーが指定する一意の ID です。
  • グループID: ユーザーがメンバーであるすべてのグループの ID です(直接および継承によるメンバーシップ)。
  • グループ名: ユーザーがメンバーであるすべてのグループの名前です(直接および継承によるメンバーシップ)。
  • 認可済みグループID: スコープ付きセッションに関連する高度な概念です。スコープ付きセッションで Granular Policy を使用する予定がある場合は、Palantir 管理者にお問い合わせください。
  • 組織マーキングID: ユーザーがメンバーであるすべての組織のマーキングIDです(主要組織およびゲスト組織)。これらのマーキングIDは UUID であり、ri.multipass..organization. で始まる組織IDではありません。
  • マーキング ID: ユーザーが閲覧する権限を持つすべてのマーキングの ID です。
  • カスタムな属性: IDプロバイダーが Control Panel で設定した任意のカスタム属性です。

ユーザー、グループ、または組織を参照する場合、ポリシー列とポリシー定義の両方に一意の識別子 (UUID) が必要です。名前の変更に伴う問題を防ぐため、ID の代わりに名前を指定することはできません。

グループ、マーキング、または組織のメンバーシップに対して NOT 条件を使用しないでください。これらの状況で NOT 条件を使用することは設定ミスに該当します。プラットフォームは、ユーザーの権限の一部のみを含むスコープ付きトークンに対応しています。これらのトークンには、NOT 条件が確認する属性が含まれていない場合があり、その結果、条件を満たして意図した以上のアクセスが許可される可能性があります。

ポリシーの比較

Granular Policy は、次の比較の種類に対応しています。

  • 等しい: 比較の左辺と右辺の両方が単一の値(集合ではない)で、同じデータ型である必要があります。
  • 交差: 少なくとも一方が集合であり、両方が同じデータ型(またはそのデータ型の集合)である必要があります。
  • 次の部分集合: 少なくとも右辺が集合であり、両方が同じデータ型(またはそのデータ型の集合)である必要があります。
  • 次の上位集合: 少なくとも左辺が集合であり、両方が同じデータ型(またはそのデータ型の集合)である必要があります。
  • より小さい: 比較の左辺と右辺の両方が単一の値(集合ではない)で、同じデータ型である必要があります。
  • 以下: 比較の左辺と右辺の両方が単一の値(集合ではない)で、同じデータ型である必要があります。
  • 以上: 比較の左辺と右辺の両方が単一の値(集合ではない)で、同じデータ型である必要があります。
  • より大きい: 比較の左辺と右辺の両方が単一の値(集合ではない)で、同じデータ型である必要があります。

オブジェクトセキュリティポリシーは、「より小さい」および「より大きい」の比較演算子に対応していません。

ポリシーは、ユーザー属性、グループメンバーシップ、およびデータ値を埋め込めるテンプレートとして定義されます。ポリシーを利用するアプリケーションがデータをリクエストすると(Contour など)、テンプレートはクエリに変換されます。このクエリは、ユーザーの属性と権限に合致する行またはオブジェクトのみを返します。

ポリシーの制限

1つのポリシーに含められる比較は最大10個です。Granular Policy では、フィールドに対して集合と定数のどちらを比較するかに応じて、ポリシー内の各比較に重みを割り当てます。

  • フィールドに対する定数の比較には、1の重みが割り当てられます。
  • フィールドに対する集合の比較には、1,000の重みが割り当てられます。
  • マーキング条件には、3,000の重みが割り当てられます。
  • ポリシー内のすべての比較の重みの合計は、10,000未満である必要があります。

たとえば、基本的なポリシーでは次のようになります。

  • ルール (1) は、定数(ユーザーID)をフィールドと照合するため、重みは1です。
  • ルール (2) は、集合(ユーザーがメンバーであるすべてのグループ)を特定のグループと照合するため、重みは1,000です。
  • このポリシーの重みの合計は1,001です(上限の10,000を十分に下回っています)。

現在のポリシー構築時の制限は、個々のポリシー設計への制約をできるだけ控え目にするよう設計されています。重みの上限を超える可能性のあるポリシーに対しては、ほとんど保護機能がありません。

ポリシーの構築時に重みの上限に関するエラーが発生した場合は、Palantir サポートにお問い合わせください。

ポリシー管理

Granular Policy を管理する際は、次の2つの目標を考慮してください。

  • 透明性: データアクセスの管理責任者は、ポリシーと、プラットフォーム内でポリシーがデータとどのように関わるかを把握している必要があります。
  • 堅牢な変更管理: ポリシー管理は、秩序立った体系的なプロセスである必要があります。変更は必ず適用前にレビューし、管理してください。

データパイプラインの整合性を管理する

Granular Policy は、その元となるデータについていくつかの前提を導入します。そのため、Granular Policy がデータへのアクセスを正しく制御できるのは、これらの前提が成立している間だけです。前提が成立することを保証し、前提が崩れた場合にもデータの保護を維持する仕組みを構築する必要があるかどうかを、ユースケースに応じて検討してください。

この問題を解決する方法の1つは、リソースの直上流にあるパイプラインに、データに関する前提をチェックするステップを導入することです。これらのチェックには、次のようなものが考えられます。

  • 不変条件: 不変条件のリストを記述し、条件が成立しない場合は下流のビルドを強制的に失敗させます。たとえば、event_occurred_in_state の値が NY のときは常に、データセット内の state_name という別の列の値が New York であるべきだとします。このデータをユーザーに公開する前に、この条件が成立していることをトランスフォームでチェックします。
  • 統計: 統計と、それらが常に収まるべき範囲を定義します。たとえば、組織の階層構造を反映したアクセス制御を適用するために Granular Policy を使用する場合、各ユーザーは階層内で自分より下位にいる個人のデータのみを閲覧できます。ある日のビルドから翌日のビルドまでに階層の20%を超える変更があった場合は、何らかの問題があるとトランスフォームで判定するようにします。この時点で、ポリシー管理を担当するユーザーは、このデータをユーザーに公開する前に、すべてが正しいことを確認する必要があります。

これらの整合性チェックは、Granular Policy が依存する上流のデータを保護し、ポリシーが引き続き行を正しく絞り込めるようにします。ポリシーを下流の出力やエクスポートに拡張するものではありません。データが下流に流れる際にも保護を維持するには、Granular Policy と併せて、基となるデータにマーキングまたは機密情報区分に基づくアクセス制御を適用します。モデル全体については、アクセス制御の伝播を参照してください。