ユーザーアクセスをきめ細かく制御する
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
ScalarDB Cluster は、属性ベースのアクセス制御 (ABAC) と呼ばれるメカニズムを使用して、ユーザーをきめ細かく認証できます。このページでは、ScalarDB Cluster で ABAC を使用する方法について説明します。
ABAC とは?
ABAC は ScalarDB Cluster のきめ細かいアクセス制御メカニズムであり、単純な認証によって実行されるテーブルレベルのアクセス制御だけでなく、レコードレベルのアクセス制御を可能にします。ABAC を使用すると、ユーザーは、ユーザーの属性とレコードの属性が一致する場合にのみ、特定のレコードにアクセスできます。たとえば、機密性の高いレコードへのアクセスを、必要な権限を持つユーザーのみに制限できます。このメカニズムは、複数のアプリケーションが同じテーブルを共有しているが、それぞれの権限に基づいて異なるセグメントにアクセスする必要がある場合にも役立ちます。
ABAC を使用する理由
エンタープライズデータベースでは、多くの場合、行レベルのセキュリティまたは同様の代替手段が提供され、データベーステーブル内の行へのアクセスを制御できます。ただし、システムが複数のデータベースで構成されている場合は、各データベースを1つずつ同じ方法で設定する必要があります。異なる種類のデータベースを使用する場合は、各データベースの機能の違いを理解した上で各データベースを設定する必要があります。このような設定は負担が大きすぎ、エラーが発生しやすくなります。ABAC を使用すると、ScalarDB で複数のデータベースを管理する場合でも、1回設定するだけで済みます。
ほとんどのデータベースの行レベルのセキュリティ機能では、ストアドプロシージャなどの関数を使用してマッチングロジックを実装する必要があります。これにより、必要なロジックを実現するために大量のコードを記述することになり、負担が大きくなることがあります。対照的に、ABAC では、タグと呼ばれる属性を使用してマッチングロジックを設定できます。ABAC では、これらのタグを定義してユーザーとレコードに割り当てるだけでよいため、コーディングの必要がありません。タグは、柔軟かつ簡単な方法でマッチングロジックを指定できる複数のコンポーネン トで構成されています。
コンポーネント
ABAC には、タグやポリシーなどのいくつかのコンポーネントがあります。
タグ
タグは、レベル、コンパートメント、グループの3つのコンポーネントで構成される単一の属性であり、ユーザーやデータに割り当てることができます。ユーザーに割り当てられたタグは ユーザータグ と呼ばれ、データに割り当てられたタグは データタグ と呼ばれます。
レベル
レベルコンポーネントはデータの機密性を示します。すべてのユーザータグとデータタグにはレベルが必要です。たとえば、ユーザーは 機密、機密性の高い、非常に機密性の高い などのレベルを定義できます。
各レベルについて、スーパーユーザーは次の属性を定義します。
| 属性 | 説明 |
|---|---|
| 短い名前 | レベルの短い識別子。この名前は最大30文字まで含めることができます。 |
| 長い名前 | レベルの長く説明的な名前。 |
| レベル番号 | レベルのランクを表す数値。 |
スーパーユーザーは各レベル (および他のタグコンポーネント) の長い名前と短い名前の両方を定義しますが、ABAC の下で行を取得する際に表示されるのは短い名前のみです。ユーザーがタグを操作する際には、コンポーネントの短い名前のみを使用する必要があります。
コンパートメント
コンパートメントコンポーネントはオプションであり、コンパートメントは互いに独立しています。通常、1つ以上のコンパートメントが定義され、データを異なるカテゴリに分類します。コンパートメントは、特定のデータタイプ、知識領域、地理的地域、または特別な承認が必要なプロジェクトを表すことがあります。たとえば、HR、Finance、Accounting などです。
各コ ンパートメントについて、スーパーユーザーは次の属性を定義します。
| 属性 | 説明 |
|---|---|
| 短い名前 | コンパートメントの短い識別子。この名前は最大30文字まで含めることができます。 |
| 長い名前 | コンパートメントの長く説明的な名前。 |
グループ
グループコンポーネントもオプションであり、コンパートメントと似ていますが、1つの重要な違いがあります。グループは親子関係を持つことができます。通常、1つ以上のグループが定義され、データを整理します。グループは、組織構造や地域ごとにデータをセグメント化するために最もよく使用されます。たとえば、EU には子グループ France と Italy があり、North America には子グループ US と Canada があります。
各グループについて、スーパーユーザーは次の属性を定義します。
| 属性 | 説明 |
|---|---|
| 短い名前 | グループの短い識別子。この名前は最大30文字まで含めることができます。 |
| 長い名前 | グループの長く説明的な名前。 |
タグ構文
タグは、レベル、コンパートメント、およびグループで構成され る文字列として表されます。タグの構文は次のとおりです。
LEVEL:COMPARTMENT1,...,COMPARTMENTn:GROUP1,...,GROUPn
コロン (:) はコンポーネント間の区切り文字として使用されます。末尾の区切り文字は省略可能です。
たとえば、レベルが SENSITIVE、コンパートメントが HR と FINANCIAL、グループが EU と NA のタグは次のようになります。
SENSITIVE:HR,FINANCIAL:EU,NA
コンパートメントやグループがない場合、タグは次のようになります。
SENSITIVE
コンパ ートメントがあり、グループがない場合、タグは次のようになります。
SENSITIVE:HR,FINANCIAL
グループがあり、コンパートメントがない場合、タグは次のようになります。
SENSITIVE::EU,NA
ポリシー
ABAC ポリシーは、アクセス制御の動作を定義するメタデータを格納するコンテナです。このコンテナには、ポリシー名と、保護されたテーブルに ABAC が追加する列の名前 (データタグ列) が指定されます。この列には、テーブル内の各行に割り当てられたデータタグが格納されます。
スーパーユーザーは、固有の名前を持つ複数のポリシーを作成できます。各ポリシーには1つのデータタグ列しか持つことができず、データタグ列の名前はすべてのポリシーで一意である必 要があります。
データタグ列は非表示の列であり、デフォルトでは表示されません。データタグ列を操作するには、クエリに明示的に含める必要があります。
名前空間ポリシーとテーブルポリシー
名前空間ポリシーは、名前空間に適用される ABAC ポリシーです。名前空間に名前空間ポリシーがある場合、その名前空間のすべてのテーブルは適用されたポリシーを使用します。同様に、テーブルポリシーはテーブルに適用される ABAC ポリシーです。
名前空間またはテーブルポリシーが作成されると、データタグ列は自動的に名前空間内のすべてのテーブルまたは指定されたテーブルに追加されます。さらに、名前空間に名前空間ポリシーが既にある場合、その名前空間に後で追加されたテーブルにもデータタグ列が自動的に追加されます。
ユーザーおよびデータタグを使用してユーザーアクセスを制御する
ABAC は 、ユーザーおよびデータのタグを定義し、それらが一致するかどうかを確認することでユーザーアクセスを制御します。
ABAC ポリシーがデータへのアクセスを制御するために使用する2つの主要なコンポーネントがあります。
- ユーザータグ: ユーザータグは、ユーザーの機密性レベルと、タグ付けされたデータへのアクセスを制約するコンパートメントおよびグループを定義します。
- データタグ: 各行に割り当てられたデータタグは、その行の機密性レベルを示し、ユーザーがその行にアクセスするために認可される必要があるコンパートメントおよびグループを含みます。
ABAC で保護されたデータにアクセスするには、ユーザーはポリシーで定義されたタグに基づいて適切な認可を持っている必要があります。
ユーザータグ
各 ABAC ユーザーには、次のコンポーネントを含む認可が設定されています。
- 最大レベル
- 認可されたコンパートメントのセット
- 認可されたグループのセット
- 各コンパートメントおよびグループごとに、読み取り専用アクセスまたは読み取り/書き込みアクセスの指定