第1章 Data Grid 承認の設定
承認によって、Data Grid で操作を実行してデータにアクセスする機能を制限します。ユーザーに、さまざまなパーミッションレベルを持つロールを割り当てます。
1.1. Data Grid 承認
Data Grid を使用すると、キャッシュマネージャーとキャッシュインスタンスをセキュリティー保護するための承認を設定できます。ユーザーアプリケーションまたはクライアントが、セキュリティー保護されたキャッシュマネージャーおよびキャッシュに対して操作を実行しようとする場合、その操作を実行するための十分なパーミッションを持つロールをアイデンティティーに提供する必要があります。
たとえば、特定のキャッシュインスタンスで承認を設定して、Cache.get()
を呼び出すには、読み取り権限を持つロールをアイデンティティーに割り当てる必要があり、Cache.put()
を呼び出すには書き込み権限を持つロールが必要になるようにします。
このシナリオでは、reader
ロールが割り当てられたユーザーアプリケーションまたはクライアントがエントリーの書き込みを試みると、Data Grid はリクエストを拒否し、セキュリティー例外を出力します。writer
ロールのあるユーザーアプリケーションまたはクライアントが書き込みリクエストを送信する場合、Data Grid は承認を検証し、後続の操作のためにトークンを発行します。
アイデンティティーからロールへのマッピング
アイデンティティーは java.security.Principal
タイプのセキュリティープリンシパルです。javax.security.auth.Subject
クラスで実装されたサブジェクトは、セキュリティープリンシパルのグループを表します。つまり、サブジェクトはユーザーとそれが属するすべてのグループを表します。
Data Grid はロールマッパーを使用して、セキュリティープリンシパルが 1 つ以上のパーミッションを表すロールに対応するようにします。
次の図は、セキュリティープリンシパルがどのようにロールにマッピングされるかを示しています。
1.1.1. パーミッション
パーミッションは、実行できるアクションを制限することによって、キャッシュマネージャーとキャッシュへのアクセスを制御します。パーミッションは、名前付きキャッシュなどの特定のエンティティーに適用することもできます。
パーミッション | 機能 | 説明 |
---|---|---|
設定 |
| 新しいキャッシュ設定を定義します。 |
LISTEN |
| キャッシュマネージャーに対してリスナーを登録します。 |
ライフサイクル |
| キャッシュマネージャーを停止します。 |
ALL | - | すべてのキャッシュマネージャーのアクセス許可が含まれます。 |
パーミッション | 機能 | 説明 |
---|---|---|
|
| キャッシュからエントリーを取得します。 |
WRITE |
| キャッシュ内のデータの書き込み、置換、削除、エビクト。 |
EXEC |
| キャッシュに対するコードの実行を許可します。 |
LISTEN |
| キャッシュに対してリスナーを登録します。 |
BULK_READ |
| 一括取得操作を実行します。 |
BULK_WRITE |
| 一括書き込み操作を実行します。 |
ライフサイクル |
| キャッシュを開始および停止します。 |
ADMIN |
| 基盤となるコンポーネントと内部構造へのアクセスを許可します。 |
ALL | - | すべてのキャッシュパーミッションが含まれます。 |
ALL_READ | - | READ パーミッションと BULK_READ パーミッションを組み合わせます。 |
ALL_WRITE | - | WRITE パーミッションと BULK_WRITE パーミッションを組み合わせます。 |
パーミッションの組み合わせ
使いやすいようにパーミッションを組み合わせることが必要になる場合があります。たとえば、"supervisors" にはストリーム操作の実行を許可し、"standard" ユーザーについては puts と gets しか実行できないように制限するには、次のマッピングを定義できます。
<role name="standard" permission="READ WRITE" /> <role name="supervisors" permission="READ WRITE EXEC BULK"/>
1.1.2. ロールマッパー
Data Grid には、サブジェクトのセキュリティープリンシパルを承認ロールにマッピングする PrincipalRoleMapper
API が含まれています。デフォルトで使用できるロールマッパーが 2 つあります。
- IdentityRoleMapper
ロール名としてプリンシパル名を使用します。
-
Java クラス:
org.infinispan.security.mappers.IdentityRoleMapper
-
宣言型設定:
<identity-role-mapper />
-
Java クラス:
- CommonNameRoleMapper
プリンシパル名が識別名 (DN) の場合は、共通名 (CN) をロール名として使用します。たとえば
、cn=managers,ou=people,dc=example,dc=com
DN はmanagers
ロールにマッピングされます。-
Java クラス:
org.infinispan.security.mappers.CommonRoleMapper
-
宣言型設定:
<common-name-role-mapper />
-
Java クラス:
org.infinispan.security.PrincipalRoleMapper
インターフェイスを実装するカスタムロールマッパーを使用することもできます。カスタムロールマッパーを宣言的に設定するには、<custom-role-mapper class="my.custom.RoleMapper"/>
を使用します。