アプリケーションのプロキシ・ロールの構成
プロキシ・ロールを使用すると、認証アカウント(ロール)が別のロールを使用してCQL文を実行できるようになります。
アプリケーションの認証とロールの割り当て
internal
ロールの認証ユーザーへの割り当ては、認証情報で指定されているユーザー名とロール名を照合することによって行われます。前述の例では、REALMを含むアプリケーションの完全なプリンシパル名がロール名と一致している必要があります。
ldap
はLDAPで認証ユーザーを検索し、グループのリストを返した後で、グループ名をロール名と照合します。LDAPでは、アプリケーション・アカウントのグループ名が、別のロールを代理できるロールと一致していなければなりません。
注: このロールには、グループの任意のメンバーを割り当てることができます。プロキシ・ロールをLDAPグループ管理とともに使用する場合は、アプリケーション・アカウントごとに単一のグループ・ロールのペアを作成します。LDAPのグループには、単一のメンバー(アプリケーション・アカウント)のみを含めます。
アプリケーション・アカウントのプライマリ・ロールを作成する場合は、Role Manager(ロール・マネージャー)によって正しいロールがそのアカウントと照合されるようにする必要があります。
プロキシ・ロールとアプリケーション・アカウントの関連付け
ユーザーがDSEに直接アクセスすることがない場合は、LOGIN、PASSWORD、SUPERUSERなど、認証スキームにバインドされていない、追加のオプションを持たないプロキシ・ロールの作成が推奨されます。そのため、権限管理オプションのスキーム・パーミッションがtrueに設定されている場合、そのロールを使用できるのは対応するアプリケーション・アカウントに限られます。
手順
-
認証スキームに基づいてアプリケーション・ロールを作成します。
- 内部スキーム:
CREATE ROLE role_name WITH LOGIN = true AND PASSWORD = 'password';
- LDAPスキーム:
CREATE ROLE LDAP_service_account WITH LOGIN = true;
ここで、LDAP_service_accountは、認証オプションのユーザー・フィルターに指定された属性と一致します。たとえば、UIDやsamAccountNameのほか、ロール管理をLDAPで使用する場合にLDAPでサービス・アカウントに割り当てられているグループ名などです。
- Kerberosスキーム:
CREATE ROLE 'user_principal_name' WITH LOGIN = true;
ここで、user_principal_nameは、大文字と小文字を区別する、完全なユーザー・プリンシパル名(jane@EXAMPLE.COMなど)と一致します。
注: 内部スキームに対して認証を行う場合は、内部で格納されているパスワードが必要です。アプリケーション・ロールには、データベース・オブジェクトに対するパーミッションは必要ありません。
- 内部スキーム:
-
loginオプションを指定せずにプロキシ・ロールを作成します。
CREATE ROLE proxy_role_name;
注: DataStaxでは、LOGIN、SUPERUSER、PASSWORD(内部で格納されているパスワード)を使用せずにプロキシ・アカウントをパーミッション・セットとして管理することを推奨しています。 -
データベース・リソースに対するパーミッションをプロキシ・ロールに割り当てます。
GRANT permission_name ON resource_name TO proxy_role_name;
注: 割り当てるパーミッションごとにGRANT文を繰り返し実行します。パーミッションとサポートされているデータベース・オブジェクトの完全なリストについては、「CQLパーミッション・マトリックス」を参照してください。 -
アプリケーション・ロールをプロキシ・ロールと関連付けます。
- 認証後にすべての要求を代理で処理することをサービス・ロールに許可します。
GRANT PROXY.LOGIN ON proxy_role_name TO service_role_name;
- 認証後に各要求を代理で処理することをサービス・ロールに許可します。
GRANT PROXY.EXECUTE ON proxy_role_name TO service_role_name;
- 認証後にすべての要求を代理で処理することをサービス・ロールに許可します。
-
アプリケーション・ロールがプロキシ・ロールを使用してコマンドを実行できるかどうかをテストします。
例
プロキシ・ロールのもう1つのユース・ケースとして、ワークフローの追跡があります。この例では、サイクリングWebアプリケーションのアプリケーション・アカウントを作成し、チーム管理およびサイクリスト経費ワークフロー用に対応するプロキシ・アカウントを作成します。
- 内部認証を使用して、サイクリング・アプリケーションのロールを作成します。
CREATE ROLE cycling_app WITH LOGIN=true AND PASSWORD='password'; GRANT EXECUTE ON INTERNAL SCHEME TO cycling_app;
注: このロールを認証スキームにバインドする必要があるのは、認証オプションのスキーム・パーミッションがtrueに設定されている場合のみです。 - 経費管理のパーミッションを持つロールを作成します。
- プロキシ・ロールを作成します。
CREATE ROLE cycling_expense_management;
- このロールにアクセス・パーミッションを割り当てます。
GRANT MODIFY ON cycling.cyclist_expenses to cycling_expense_management;
- プロキシ・ロールを作成します。
- サイクリング・チーム管理用のロールを作成します。
CREATE ROLE update_teams; GRANT MODIFY ON cycling.cyclist_name TO update_teams; GRANT MODIFY ON cycling.cyclist_teams TO update_teams; GRANT MODIFY ON cycling.cyclist_id TO update_teams;
- チーム管理ロールと経費管理ロールを使用してCQLコマンドを実行することをサイクリング・アプリケーションに許可します。
GRANT PROXY.EXECUTE ON ROLE cycling_expense_management to cycling_app; GRANT PROXY.EXECUTE ON ROLE update_teams to cycling_app;
- サイクリング・アプリケーション・ロールからコマンドの実行をテストします。
cqlsh -u cycling_app -p 'password' -e "EXECUTE AS cycling_expense_management; INSERT INTO cycling.cyclist_expenses (cyclist_name,expense_id,amount,description) VALUES ('Michael MATTHEWS',47,25,'lunch');"
挿入コマンドではエラー・メッセージのみが返されるため、クエリーが正しいロールを使用して実行されたことだけが出力に示されます。Executing queries as cycling_expense_management.