ロールについて
ロールを定義し、パーミッションを構成して、データベース・リソースへの認証ユーザーのアクセスを管理します。
ロールベース・アクセス制御(RBAC)は、DSE Unified Authentication(DSE統合認証)の有効化を完了するまで使用できません。
ロールはデータベース・リソースであり、割り当てられている他のデータベース・リソースにアクセスする権限を付与します。また、ロールは、内部認証スキームを使用する場合の認証における個々のユーザーでもあります。DSE権限管理が有効になっている環境でCQLコマンドを実行するには、ユーザーはログイン権限があるロールを少なくとも1つ持っている必要があります。
ロールの割り当てを理解する
- 内部:個々のユーザーにプライマリ・ロールを使用し、1対1のマッピングです。ロールは、認証ユーザー名とロール名を照合して割り当てられます。
ロールをネストしてパーミッションを管理します。
GRANT role_name TO role_name
を使用すると、最初のロールのパーミッションがすべて2番目のロールにも付与されます。 - ldap:LDAPグループ・メンバーシップを使用し、1対多のマッピングです。DSE Role Manager(DSEロール・マネージャー)は、LDAP内のユーザーを検索し、グループのリストを返します。ユーザーには、グループ名に一致するすべてのロールが割り当てられます。個々のユーザーのロールは不要で、ユーザーのDSEロールはLDAPグループ・メンバーシップの変更に応じて自動的に変更されます。
各グループのパーミッションを管理します。LDAPモードを選択している場合、ネストされたロールは無効になります。
GRANT role_name TO role_name
を使用すると、エラーが発生します。
パッケージ・インストールInstaller-Servicesインストール |
/etc/dse/dse.yaml |
tarボール・インストールInstaller-No Servicesインストール |
installation_location/resources/dse/conf/dse.yaml |
ロールを管理するには、CQL CREATE ROLE、ALTER ROLE、DROP ROLEの各コマンドを使用します。
ロールの管理
データベース・オブジェクトへのアクセスを管理するためにロールを作成する手順は、2段階のプロセスで構成されています。まず、CREATE ROLEを実行し、次にGRANTを実行してリソースのパーミッションを付与します。
(CREATE | ALTER | DROP ) role_name
[WITH (LOGIN = true | SUPERUSER = true | password = 'password')];
- SUPERUSER:(デフォルト:false)ルート・アカウントに相当するALL CQLコマンドを実行します。
DataStaxでは、スーパーユーザー・ステータスを付与するユーザー数を限定し、内部スキームでスーパーユーザー認証を管理することを推奨しています。LDAPグループ管理(role_management_options.mode: ldap)を使用する場合、意図しないロール割り当てを防止するために、authentication_options.scheme_permissions: trueを設定し、スーパーユーザー・ロールを内部スキームにバインドします(「認証スキームへのロールのバインド」を参照)。
- LOGIN:(デフォルト:false)CQL要求を実行する場合に必須です。
割り当て可能なパーミッション・セットとしてロールを使用してパーミッションを管理する場合、パーミッション・セット・ロールではログインは不要です。
- PASSWORD:(デフォルト:null)ロールのbcryptソルト付きハッシュ・パスワードを
system_auth
キースペースに格納します。パスワードを持つロールは、内部スキームに対して認証可能な個々のユーザーを表します(LOGIN = trueも必要です)。
LIST ROLES [of role_name];
ロールを作成、変更、および削除するためのパーミッション
パーミッション | データベース・リソース | 説明 |
---|---|---|
ALTER | ALL ROLES | ROLE role_name | すべてのロールまたは指定したロールに対するロールを変更(ALTER ROLE)します。 |
CREATE | ALL ROLES | ROLE role_name | 任意の名前を持つロールを作成(CREATE ROLE)するか、または特定の名前を持つロールのみを作成し、新しいロールにAUTHORIZEを自動的に付与します。 |
DESCRIBE | ALL ROLES | ROLE role_name | すべてのロール、他のロールに付与されているロールのみ、または指定したロールに対するLIST権限。 |
DROP | ALL ROLES | ROLE role_name | 任意のロールに対するロールを削除(DROP ROLE)するか、または指定したロールを削除するためのパーミッション。 |
アクセス制御を管理するためのパーミッション
パーミッションを管理するには、そのロールがGRANTまたはREVOKEコマンドを使用でき、ターゲット・ロールとリソースの両方に対するAUTHORIZE
パーミッションを持っている必要があります。
GRANT AUTHORIZE on resource_name to management_role;
GRANT AUTHORIZE on target_role to management_role;
GRANT AUTHORIZE on proxy_role to management_role;
GRANT AUTHORIZE on application_role to management_role
ここで、AUTHORIZEは他のロールのパーミッションを管理するためにGRANTおよびREVOKEパーミッションをロールに付与し、resource_nameは任意のデータベース・リソースです。「データベース・リソース」を参照してください。
- 新しいロールを作成するには、すべてのロールに対するCREATEパーミッションが必要です。ロールを作成するために使用されるロールは、ロールの権限管理(AUTHORIZE)を行うためのパーミッションを自動的に取得します。
- GRANT/REVOKEを実行するには、ターゲットのロールおよびデータベース・リソースに対するAUTHORIZEパーミッションが必要です。
- あるロールが変更できるのは、そのロール以外のロールです。ALTERパーミッションを持つユーザーが、自身のアカウントをSUPERUSERにしたり、より上位のパーミッションを持つロールを作成したりすることはできません。
すべてのデータベース・オブジェクトへのアクセスを管理するためのロール
任意のデータベース・オブジェクトへのアクセスを割り当てることができるロール管理者:
CREATE ROLE IF NOT EXISTS role_admin;
// role management
GRANT ALL PERMISSIONS on ALL ROLES to role_admin;
GRANT AUTHORIZE on ALL AUTHENTICATION SCHEMES to role_admin;
GRANT AUTHORIZE on PROXY
// data objects
GRANT AUTHORIZE on ALL KEYSPACES to role_admin;
// client tools
GRANT AUTHORIZE on ALL MBEANS to role_admin;
GRANT AUTHORIZE on ALL REMOTE CALLS to role_admin;
GRANT AUTHORIZE on ALL SEARCH INDICES to role_admin;
GRANT AUTHORIZE on ALL FUNCTIONS to role_admin;