第8章 ユーザーロールとパーミッションの設定
承認は、ユーザーがキャッシュにアクセスしたり、Data Grid リソースとやり取りしたりする前に、特定の権限を持つ必要があるセキュリティー機能です。読み取り専用アクセスから完全なスーパーユーザー特権まで、さまざまなレベルのパーミッションを提供するロールをユーザーに割り当てます。
8.1. セキュリティー−認証
Data Grid の認証は、ユーザーアクセスを制限することでデプロイメントを保護します。
ユーザーアプリケーションまたはクライアントは、Cache Manager またはキャッシュで操作を実行する前に、十分なパーミッションが割り当てられたロールに属している必要があります。
たとえば、特定のキャッシュインスタンスで承認を設定して、Cache.get()
を呼び出すには、読み取り権限を持つロールを ID に割り当てる必要があり、Cache.put()
を呼び出すには書き込み権限を持つロールが必要になるようにします。
このシナリオでは、io
ロールが割り当てられたユーザーアプリケーションまたはクライアントがエントリーの書き込みを試みると、Data Grid はリクエストを拒否し、セキュリティー例外を出力します。writer
ロールのあるユーザーアプリケーションまたはクライアントが書き込みリクエストを送信する場合、Data Grid は承認を検証し、後続の操作のためにトークンを発行します。
アイデンティティー
アイデンティティーは java.security.Principal
タイプのセキュリティープリンシパルです。javax.security.auth.Subject
クラスで実装されたサブジェクトは、セキュリティープリンシパルのグループを表します。つまり、サブジェクトはユーザーとそれが属するすべてのグループを表します。
ロールのアイデンティティー
Data Grid はロールマッパーを使用するため、セキュリティープリンシパルが 1 つ以上のパーミッションを割り当てるロールに対応します。
以下の図は、セキュリティープリンシパルがロールにどのように対応するかを示しています。
8.1.1. ユーザーロールとパーミッション
Data Grid には、データにアクセスして Data Grid リソースと対話するためのパーミッションをユーザーに付与するデフォルトのロールのセットが含まれています。
ClusterRoleMapper
は、Data Grid がセキュリティープリンシパルを承認ロールに関連付けるために使用するデフォルトのメカニズムです。
ClusterRoleMapper
は、プリンシパル名をロール名に一致させます。admin
という名前のユーザーは admin
パーミッションを自動的に取得し、deployer
という名前のユーザーは deployer
パーミッションを取得する、というようになります。
ロール | パーミッション | 説明 |
---|---|---|
| ALL | Cache Manager ライフサイクルの制御など、すべてのパーミッションを持つスーパーユーザー。 |
| ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR、CREATE |
|
| ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR |
|
| ALL_READ、MONITOR |
|
| MONITOR |
JMX および |
8.1.2. パーミッション
承認ロールには、Data Grid へのアクセスレベルが異なるさまざまなパーミッションがあります。パーミッションを使用すると、Cache Manager とキャッシュの両方へのユーザーアクセスを制限できます。
8.1.2.1. Cache Manager のパーミッション
パーミッション | 機能 | 説明 |
---|---|---|
設定 |
| 新しいキャッシュ設定を定義します。 |
LISTEN |
| キャッシュマネージャーに対してリスナーを登録します。 |
ライフサイクル |
| キャッシュマネージャーを停止します。 |
CREATE |
| キャッシュ、カウンター、スキーマ、スクリプトなどのコンテナーリソースを作成および削除することができます。 |
MONITOR |
|
JMX 統計および |
ALL | - | すべてのキャッシュマネージャーのアクセス許可が含まれます。 |
8.1.2.2. キャッシュ権限
パーミッション | 機能 | 説明 |
---|---|---|
READ |
| キャッシュからエントリーを取得します。 |
WRITE |
| キャッシュ内のデータの書き込み、置換、削除、エビクト。 |
EXEC |
| キャッシュに対するコードの実行を許可します。 |
LISTEN |
| キャッシュに対してリスナーを登録します。 |
BULK_READ |
| 一括取得操作を実行します。 |
BULK_WRITE |
| 一括書き込み操作を実行します。 |
ライフサイクル |
| キャッシュを開始および停止します。 |
ADMIN |
| 基盤となるコンポーネントと内部構造へのアクセスを許可します。 |
MONITOR |
|
JMX 統計および |
ALL | - | すべてのキャッシュパーミッションが含まれます。 |
ALL_READ | - | READ パーミッションと BULK_READ パーミッションを組み合わせます。 |
ALL_WRITE | - | WRITE パーミッションと BULK_WRITE パーミッションを組み合わせます。 |
8.1.3. ロールマッパー
Data Grid には、サブジェクトのセキュリティープリンシパルをユーザーに割り当てる承認ロールにマップする PrincipalRoleMapper
API が含まれています。
8.1.3.1. クラスターのロールマッパー
ClusterRoleMapper
は永続的にレプリケートされたキャッシュを使用して、デフォルトのロールおよびパーミッションのプリンシパルからロールへのマッピングを動的に保存します。
デフォルトでは、プリンシパル名をロール名として使用し、実行時にロールマッピングを変更するメソッドを公開する org.infinispan.security.MutableRoleMapper
を実装します。
-
Java クラス:
org.infinispan.security.mappers.ClusterRoleMapper
-
宣言型設定:
<cluster-role-mapper />
8.1.3.2. ID ロールマッパー
IdentityRoleMapper
は、プリンシパル名をロール名として使用します。
-
Java クラス:
org.infinispan.security.mappers.IdentityRoleMapper
-
宣言型設定:
<identity-role-mapper />
8.1.3.3. CommonName ロールマッパー
CommonNameRoleMapper
は、プリンシパル名が識別名 (DN) の場合は Common Name (CN) をロール名として使用します。
たとえば、この DN (cn=managers,ou=people,dc=example,dc=com
) は managers
ロールにマッピングします。
-
Java クラス:
org.infinispan.security.mappers.CommonRoleMapper
-
宣言型設定:
<common-name-role-mapper />
8.1.3.4. カスタムロールマッパー
カスタムロールマッパーは org.infinispan.security.PrincipalRoleMapper
の実装です。
-
宣言型設定:
<custom-role-mapper class="my.custom.RoleMapper" />