RapidMiner Identity (RMID)
RMIDはRapidMiner Goが利用する認証/認可サービスです。
設定
RMIDには2つのレベルの設定があります。
- Springプロファイル
- 環境変数
RMIDはSpring Bootアプリケーションなので、docker-compose-services.ymlの SPRING_PROFILES_ACTIVE環境変数使用して設定します。これはアクティブspringプロファイルのコンマ区切りのリストです。
利用可能なプロファイル
Springプロファイル | 詳細 |
---|---|
db-postgresql | RMIDはPostgreSQLデータベースを使用します |
is-db | DBをIDPとして使用します |
is-auth0 | Auth0 IDPを使用します |
is-ldap | LDAP IDPを使用します |
is-saml | SAML IDPを使用します |
on-prem | オンプレミスインストレーション |
デフォルト値はdb-postgresql,is-db,on-premです。これはデフォルトデータベースはPostgreSQL、デフォルトIDPは内部データベース、アプリケーションはオンプレミスで稼働している事を示しています。
環境変数の使用
プロファイルに加えて、環境変数を指定する事もできます。環境変数はプロファイルのデフォルト値を上書きします。
デフォルト環境変数の一覧
環境変数名 | 詳細 |
---|---|
DB_HOST | DBのdockerサービス (デフォルトはrapidminer-automodel-db) |
BASE_URL | フロントエンドで利用される外部ベースURL – 例: http://localhost:30000 |
AUTH_SECRET | AMやRMIDなどのサービス間で利用される秘密キー |
RMID_FRONTEND_TRACKING_ENABLED | イベントトラッキングサービスの有効化 (内部分析) |
TOKEN_MAX_AGE | 認証トークンの有効期限 (秒で指定、デフォルトは1日) |
_JAVA_OPTIONS | JVMに渡されるJavaオプション。メモリ設定などに使用します。 |
データベース
RMIDは専用のデータベースがあります。デフォルトのdockerの設定ではこれはRapidMiner Goのデータベースと同じコンテナ/データベースインスタンス(rapidminer-automodel-db)に存在しますが、個別にデータベースインスタンスに配置する事もできます。サポートされたデータベースプロファイルはdb-postgresqlのみです。
IDP (Identity Provider)
RMIDはユーザーの認証に様々なidentity providers (IDP)を使用する事ができます。
利用可能なIDPとそれに対応するspringプロファイルをご確認ください。
IDP | Springプロファイル | プロトコル | ログインUI/メソッド |
---|---|---|---|
DB | is-db | N/A | ユーザー名/パスワードを入力するフォーム, HTTP POST |
Auth0 | is-auth0 | OAuth2 password grant | ユーザー名/パスワードを入力するフォーム, HTTP POST |
LDAP capable 3rd party IDP | is-ldap | LDAP | ユーザー名/パスワードを入力するフォーム, HTTP POST |
SAML capable 3rd party IDP | is-saml | SAML | SAMLプロバイダへリダイレクトするハイパーリンク |
複数のIDPを切り替える事ができます。その場合、RMIDは成功するまでそれらの全てで認証しようとします。
使用方法
RMIDのログイン画面には/rmid/authでアクセスする事ができます。
ログインタイプは利用するIDPにより異なります。IDPがDB, LDAP, AUTH0の場合はユーザー名/パスワードを入力するフォーム、SAMLの場合はSAMP IDPへリダイレクトするリンクがログイン画面に表示されます。SAMLと他のIDPをどちらも利用する場合はRMID_FRONTEND_LOGINTYPE: LOGINTYPE_DUALの環境変数を利用してデュアルログインタイプを設定する必要があります。この設定を行うとログイン画面にはログインフォームとリンクの両方が表示されます。
ログインに成功するとページは自動的にRapidMiner Goにリダイレクトされます。ログアウトすると再度RMIDにリダイレクトされます。
管理
RMID Administration appには/rmid/adminからアクセスする事ができます。デフォルトのユーザー名/パスワードはadmin/changeitです。
ユーザー
RMID_USERSテーブルにはユーザー毎にエントリーが存在し、 プロファイルテーブルには設定したIDPのエントリーが存在します。RMID_USERSテーブルにはユーザーのdisplayNameとRapidMiner Goに関連するフィールドが含まれます。
activeフィールドのスイッチをオフにするとユーザーは無効化されます。この操作を行うとユーザーは5分でRapidMiner Goを含むRMIDを利用する全てのサービスからログアウトされます。ログアウトの時間は設定で変更する事ができます。
ユーザープロファイル
プロファイルテーブルには特定のIDPから取得したユーザーデータが含まれます。
ローカルユーザーはadmin appで作成、更新され、RMID_PROFILE_LOCALテーブルに保存されます。外部プロファイルはread-onlyで、そのコンテンツは外部IDPのユーザー情報に応じてログイン時に作成、更新されます。
例えば、is-auth0, is-saml プロファイルがactiveな場合、RMID_PROFILE_LOCAL, RMID_PROFILE_SAML テーブルにはそれらのIDPから取得したユーザーデータが含まれます。
この場合、Admin appのUser viewには3つのフォームが含まれます。
- ユーザーテーブル用の1つの編集可能なフォーム(displayName, active, acceptEula)
- samlとauth0プロファイル用の2つのread-onlyフォーム
IDP | プロファイルテーブル | Adminオペレーション | 表示名 |
---|---|---|---|
DB | RMID_PROFILE_LOCAL | CRUD | username |
Auth0 | RMID_PROFILE_AUTH0 | R | Auth0 nickname |
SAML | RMID_PROFILE_SAML | R | SAML name assertion |
LDAP | RMID_PROFILE_LDAP | R | LDAP username |
以下はIDPとプロファイルテーブルのリストです。
例: Auth0がIDPに設定されている場合、 Auth0のクレデンシャルでサインインしたユーザーはRMID_USERSテーブルにエントリーを作成します。必要に応じて、RMID_PROFILE_AUTH0テーブルにもエントリーを作成します。Auth0 nicknameはプロファイルテーブルに保存され、RMID_USERS displayNameフィールドにコピーされます。IDP側に変更があった場合はログイン時にnicknameとdisplayNameが更新されます。SAMLの場合はデフォルト表示名のマッピングが変更されます。
グループ、ロール、権限
RMIDはサービスを以下のカテゴリで管理してロールベースの承認システムを定義します。
ユーザー ↔ グループ ↔ ロール ↔ 権限
各カテゴリは多対多の関係です。
ユーザーは付与された権限に応じてAPIエンドポイントとURLにアクセスする事ができます。権限はシステムに事前に定義されており、read-onlyです。また、権限はユーザーに直接付与されるのではなく、ロールに対して付与されます。ロールは事前に定義された権限のセットです。ロールはグループに付与されユーザーはグループに割り当てられます。
例えば、ユーザーにadmin権限を付与したければ、そのユーザーをRMID_ADMINグループに割り当てます。このグループにはデフォルトでADMINロールが付与されており、ADMINロールには’rmid:admin’権限が付与されています。
このシステムでは細かく振る舞いを制御する事ができます。
グループは組織階層を反映させたり、データサイエンスプロジェクトのニーズに合わせて自由に作成する事ができます。