ScalarDB Analytics でユーザーを認証と認可する
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
ScalarDB Analytics は、リソースレベルのアクセス制御でユーザーを認証と認可することができます。カタログ、データソース、ネームスペース、テーブルに対してユーザーを作成し、権限を付与または取り消すことができます。権限をグループ化するためにロールを作成し、ユーザーにロールを付与することもできます。このガイドでは、ScalarDB Analytics で認証と認可を使用する方法について説明します。
認証
ScalarDB Analytics は、設定された認証バックエンドに対してユーザー名とパスワードを検証してユーザーを認証します。認証に成功すると、サーバーはアクセストークンを発行し、クライアントは後続のリクエストでこのトークンを使用します。各ユーザーは一度に1つのアクティブなアクセストークンのみを持つことができます。再度認証すると、以前のトークンは無効化されます。
認証バックエンド
ScalarDB Analytics は、以下の認証バックエンドをサポートしています:
- Internal: ユーザー認証情報を ScalarDB Analytics 内で直接管理します。ユーザーは
user registerCLI コマンドを使用して登録され、パスワードは (ハッシュ化されて) ScalarDB Analytics メタデータデータベースに格納されます。これがデフォルトバックエンドです。 - ScalarDB Cluster: 認証情報の検証を外部の ScalarDB Cluster インスタンスに委任します。ユーザーが初回ログインする際、ScalarDB Analytics は対応するユーザーレコードを自動的に作成します (just-in-time プロビジョニング)。このバックエンドでは、ユーザーライフサイクルが ScalarDB Cluster で管理されるため、
user registerおよびuser unregisterコマンドは使用できません。
認証バックエンドは、scalar.db.analytics.server.auth.password.backend サーバープロパティを使用して設定できます。詳細については、設定を参照してください。
ユーザー
ユーザーは、ScalarDB Analytics で認証を行い、割り当てられた権限に基づいて操作を実行できるエンティティです。ユーザーは、ユーザー名とパスワードで ScalarDB Analytics にログインし、必要な権限を持っている場合に操作を実行できます。
認証と認可は、2つのタイプのユーザーをサポートしています:
- スーパーユーザー: このタイプのユーザーは、すべ ての権限を持ちます。スーパーユーザーのみが、カタログを作成し、ユーザーとロールを管理できます。
- 通常のユーザー: このタイプのユーザーは、最初は権限を持っていないため、スーパーユーザーまたはカタログレベルの管理者権限を持つユーザーによって権限を付与される必要があります。
初期管理ユーザー
認証と認可を有効にすると、ScalarDB Analytics は初期管理ユーザーを作成し、そのユーザーに組み込みのスーパーユーザーロールを割り当てます。動作は認証バックエンドによって異なります。
Internal バックエンド
サーバーの起動時に、ScalarDB Analytics は scalar.db.analytics.server.auth.initial_admin_username で指定されたユーザーを、scalar.db.analytics.server.auth.password.internal.initial_admin_password で指定されたパスワードで作成し、そのユーザーに SUPERADMIN ロールを割り当てます。この割り当ては、SUPERADMIN ロールにまだ割り当てられているユーザーがいない場合にのみ実行されます。このユーザーでログインして、必要に応じて他のユーザーを作成できます。
ScalarDB Cluster バックエンド
サーバーは起動時にユーザーを作成しません。代わりに、scalar.db.analytics.server.auth.initial_admin_username で指定されたユーザーが初回ログインする際、ScalarDB Analytics は just-in-time プロビジョニングを通じてそのユーザーを自動的に登録し、SUPERADMIN ロールを割り当てます。この割り当ては、SUPERADMIN ロールにまだ割り当てられているユーザーがいない場合にのみ実行されます。他のユーザーも初回ログイン時にプロビジョニングされますが、SUPERADMIN ロールは割り当てられません。
ユーザー管理
Internal バックエンドを使用する場合は、CLI を使用してユーザーを登録・削除できます:
scalardb-analytics-cli user register -u alice -p
scalardb-analytics-cli user unregister -u alice
以下のコマンドは、認証バックエンドに関係なく使用できます:
scalardb-analytics-cli user list
scalardb-analytics-cli user describe -u alice
認可
ScalarDB Analytics は、ロールと権限を通じてリソースレベルのアクセス制御を提供します。このセクションでは、ロール、権限、アクセス制御の管理方法について説明します。
ロール
ロールは、ユーザーに付与できる権限の名前付きコレクションです。ロールを使用することで、各ユーザーに個別の権限を付与するのではなく、複数のユーザーの権限を便利に管理できます。
スーパーユーザーのみが、ロールを作成、削除、または一覧表示できます。スーパーユーザーのみが、ユーザーにロールを割り当てたり、ロール割り当てを削除したりできます。
SUPERADMIN ロール
SUPERADMIN は、サーバーの起動時に自動的に作成される組み込みロールです。SUPERADMIN ロールに割り当てられたユーザーは、すべてのアクセス制御チェックをバイパスし、任意の操作を実行できます。API レスポンスでは、SUPERADMIN ロールに割り当てられたユーザーは is_superuser オプションが true に設定されて表されます。
ロール管理
以下の CLI コマンドを使用してロールを管理できます:
scalardb-analytics-cli role create -n analyst
scalardb-analytics-cli role delete -n analyst
scalardb-analytics-cli role list
scalardb-analytics-cli role grant -r analyst -u alice
scalardb-analytics-cli role revoke -r analyst -u alice
権限
ScalarDB Analytics は、リソースレベルのアクセス制御を使用します。権限は特定のリソースに対して付与され、そのリソースタイプに関連する操作に適用されます。CLI を通じて権限を付与または取り消す際、リソースタイプをサブコマンドとして指定し、権限レベルを -p オプションで指定します。
有効な -p 値は、リソースタイプによって異なります:
- Catalog:
read、write、またはadmin - Data source:
readまたはadmin - Namespace:
read - Table:
read
以下の権限が使用できます:
| 権限 | リソースタイプ | -p 値 | 説明 |
|---|---|---|---|
CATALOG_READ | Catalog | read | カタログメタデータを読み取る。 |
CATALOG_WRITE | Catalog | write | カタログ内のリソースを作成または変更する (例: データソースの登録)。 |
CATALOG_ADMIN | Catalog | admin | カタログを削除し、カタログ内のリソースに対する権限を管理する。 |
DATA_SOURCE_READ | Data source | read | データソースメタデータを読み取る。 |
DATA_SOURCE_ADMIN | Data source | admin | データソースを削除する。 |
NAMESPACE_READ | Namespace | read | ネームスペースメタデータを読み取る。 |
TABLE_READ | Table | read | テーブルメタデータを読み取る。 |
リソース階層
ScalarDB Analytics のリソースは階層で構成されています。階層のより上位レベルで付与された権限は、そのレベル以下のすべてのリソースに適用されます。
System (SUPERADMIN のみ)
└── Catalog
└── Data source
└── Namespace
└── Table
上位レベルで付与された権限は、そのレベル以下のすべてのリソースに伝播されます。たとえば、カタログに対して CATALOG_READ を付与すると、そのカタログ内のすべてのデータソース、ネームスペース、テーブルのメタデータを読み取ることができます。ただし、各操作に必要な具体的な権限は個別に定義されています。詳細については、各タイプの操作に必要な権限を参照してください。
直接付与とロールベース付与
権限は、2つの方法で付与できます:
- 直接付与: 特定のユーザーに対して、特定のリソースに対する権限を直接付与します。
- ロールベース付与: 特定のリソースに対してロールに権限を付与します。そのロールに割り当てられたすべてのユーザーが権限を受け取ります。
ユーザーの有効な権限は、直接付与されたすべての権限と、割り当てられたロールからのすべての権限の和集合です。