ロールについて

ロールを定義し、パーミッションを構成して、データベース・リソースへの認証ユーザーのアクセスを管理します。

ロールベース・アクセス制御(RBAC)は、DSE Unified Authentication(DSE統合認証)の有効化を完了するまで使用できません。

ロールはデータベース・リソースであり、割り当てられている他のデータベース・リソースにアクセスする権限を付与します。また、ロールは、内部認証スキームを使用する場合の認証における個々のユーザーでもあります。DSE権限管理が有効になっている環境でCQLコマンドを実行するには、ユーザーはログイン権限があるロールを少なくとも1つ持っている必要があります。

ロールの割り当てを理解する

DSE Role Manager(DSEロール・マネージャー)モードは、認証ユーザーにどのようにロールを割り当てるかに影響します。
  • 内部:個々のユーザーにプライマリ・ロールを使用し、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を使用すると、エラーが発生します。

注: 割り当て方法を構成するには、dse.yamlrole_management_optionsモードを設定します。
dse.yamlファイルの場所は、インストールのタイプによって異なります。

パッケージ・インストールInstaller-Servicesインストール

/etc/dse/dse.yaml

tarボール・インストールInstaller-No Servicesインストール

installation_location/resources/dse/conf/dse.yaml

ロールを管理するには、CQL CREATE ROLEALTER ROLEDROP ROLEの各コマンドを使用します。

ロールの管理

データベース・オブジェクトへのアクセスを管理するためにロールを作成する手順は、2段階のプロセスで構成されています。まず、CREATE ROLEを実行し、次にGRANTを実行してリソースのパーミッションを付与します。

ロールを管理するには、以下の構文に従いCQLCREATE ROLEALTER ROLEDROP ROLEの各コマンドを使用します。
(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も必要です)。
describeパーミッションを持つすべてのロール、またはあるロールに割り当てられているすべてのロールを表示するには、LIST ROLESコマンドを使用します。
LIST ROLES [of role_name];
注: SUPERUSERロール、またはCREATE、ALTER、DROPパーミッションを持つロールのみがロールを管理できます。

ロールを作成、変更、および削除するためのパーミッション

ロールを管理するには、以下のパーミッションが必要です。
表 1. ロール管理パーミッション
パーミッション データベース・リソース 説明
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;