第8章 ロールベースアクセス制御によるセキュリティー承認
ロールベースアクセス制御 (RBAC) 機能では、さまざまなパーミッションレベルを使用して、Data Grid とのユーザーの対話を制限します。
リモートキャッシュまたは組み込みキャッシュに固有のユーザーの作成と承認の設定に関する詳細は、以下を参照してください。
8.1. Data Grid のユーザーロールと権限
Data Grid には、キャッシュや Data Grid のリソースにアクセスするための権限をユーザーに提供するロールがいくつかあります。
Role | パーミッション | 説明 |
---|---|---|
| すべて | Cache Manager ライフサイクルの制御など、すべてのパーミッションを持つスーパーユーザー。 |
| ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR、CREATE |
|
| ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR |
|
| ALL_READ、MONITOR |
|
| MONITOR |
JMX および |
8.1.1. パーミッション
ユーザーロールは、さまざまなアクセスレベルを持つパーミッションのセットです。
パーミッション | 機能 | 説明 |
設定 |
| 新しいキャッシュ設定を定義します。 |
LISTEN |
| Cache Manager に対してリスナーを登録します。 |
ライフサイクル |
| Cache Manager を停止します。 |
CREATE |
| キャッシュ、カウンター、スキーマ、スクリプトなどのコンテナーリソースを作成および削除することができます。 |
MONITOR |
|
JMX 統計および |
すべて | - | すべての Cache Manager のアクセス許可が含まれます。 |
パーミッション | 機能 | 説明 |
READ |
| キャッシュからエントリーを取得します。 |
WRITE |
| キャッシュ内のデータの書き込み、置換、削除、エビクト。 |
EXEC |
| キャッシュに対するコードの実行を許可します。 |
LISTEN |
| キャッシュに対してリスナーを登録します。 |
BULK_READ |
| 一括取得操作を実行します。 |
BULK_WRITE |
| 一括書き込み操作を実行します。 |
ライフサイクル |
| キャッシュを開始および停止します。 |
ADMIN |
| 基盤となるコンポーネントと内部構造へのアクセスを許可します。 |
MONITOR |
|
JMX 統計および |
すべて | - | すべてのキャッシュパーミッションが含まれます。 |
ALL_READ | - | READ パーミッションと BULK_READ パーミッションを組み合わせます。 |
ALL_WRITE | - | WRITE パーミッションと BULK_WRITE パーミッションを組み合わせます。 |
8.1.2. ロールとパーミッションマッパー
Data Grid は、ユーザーをプリンシパルのコレクションとして実装します。プリンシパルは、ユーザー名などの個々のユーザー ID、またはユーザーが属するグループのいずれかを表します。内部的には、これらは javax.security.auth.Subject
クラスで実装されます。
承認を有効にするには、プリンシパルをロール名にマップし、その後、ロール名を一連のパーミッションに展開する必要があります。
Data Grid には、セキュリティープリンシパルをロールに関連付ける PrincipalRoleMapper
API と、ロールを特定のパーミッションに関連付ける RolePermissionMapper
API が含まれています。
Data Grid は以下のロールおよびパーミッションのマッパーの実装を提供します。
- クラスターロールマッパー
- クラスターレジストリーにロールマッピングのプリンシパルを保存します。
- クラスターパーミッションマッパー
- ロールとパーミッションのマッピングをクラスターレジストリーに保存します。ユーザーのロールとパーミッションを動的に変更できます。
- ID ロールマッパー
- ロール名としてプリンシパル名を使用します。プリンシパル名のタイプまたはフォーマットはソースに依存します。たとえば、LDAP ディレクトリーでは、プリンシパル名を識別名 (DN) にすることができます。
- コモンネームロールマッパー
-
ロール名としてコモンネーム (CN) を使用します。このロールマッパーは、識別名 (DN) を含む LDAP ディレクトリーまたはクライアント証明書で使用できます。たとえば、
cn=managers,ou=people,dc=example,dc=com
は、managers
ロールにマッピングされます。
デフォルトでは、プリンシパルとロールのマッピングは、グループを表すプリンシパルにのみ適用されます。ユーザープリンシパルのマッピングも実行するように Data Grid を設定できます。
8.1.2.1. Data Grid でのロールとパーミッションへのユーザーのマッピング
LDAP サーバーから DN のコレクションとして取得された次のユーザーを考えてみましょう。
CN=myapplication,OU=applications,DC=mycompany CN=dataprocessors,OU=groups,DC=mycompany CN=finance,OU=groups,DC=mycompany
コモンネームロールマッパー を使用すると、ユーザーは次のロールにマッピングされます。
dataprocessors finance
Data Grid には次のロール定義があります。
dataprocessors: ALL_WRITE ALL_READ finance: LISTEN
ユーザーには次のパーミッションが与えられます。
ALL_WRITE ALL_READ LISTEN
8.1.3. ロールマッパーの設定
Data Grid は、デフォルトでクラスターロールマッパーとクラスターパーミッションマッパーを有効にします。ロールマッピングに別の実装を使用するには、ロールマッパーを設定する必要があります。
手順
- Data Grid 設定を開いて編集します。
- ロールマッパーを、Cache Manager 設定のセキュリティー許可の一部として宣言します。
- 変更を設定に保存します。
ロールマッパーの設定
XML
<cache-container> <security> <authorization> <common-name-role-mapper /> </authorization> </security> </cache-container>
JSON
{ "infinispan" : { "cache-container" : { "security" : { "authorization" : { "common-name-role-mapper": {} } } } } }
YAML
infinispan: cacheContainer: security: authorization: commonNameRoleMapper: ~
関連情報
8.1.4. クラスターのロールと権限マッパーの設定
クラスターロールマッパーは、プリンシパルとロール間の動的なマッピングを維持します。クラスター権限マッパーは、動的なロール定義セットを維持します。どちらの場合も、マッピングはクラスターレジストリーに保存され、ランタイム時に CLI または REST API を使用して操作できます。
前提条件
-
Data Grid に
ADMIN
権限がある。 - Data Grid CLI を起動している。
- 実行中の Data Grid クラスターに接続している。
8.1.4.1. 新しいロールの作成
新しいロールを作成し、権限を設定します。
手順
user roles create
コマンドを使用してロールを作成します。以下に例を示します。user roles create --permissions=ALL_READ,ALL_WRITE simple
検証
user roles ls
コマンドでユーザーに付与したロールを一覧表示します。
user roles ls ["observer","application","admin","monitor","simple","deployer"]
user roles describe
コマンドを使用してロールを説明します。
user roles describe simple { "name" : "simple", "permissions" : [ "ALL_READ","ALL_WRITE" ] }
8.1.4.2. ユーザーへのロール付与
ユーザーにロールを割り当て、キャッシュ操作や Data Grid のリソースとのやり取りを行う権限を付与します。
同じロールを複数のユーザーに割り当て、それらの権限を一元管理する場合は、ユーザーではなくグループにロールを付与します。
前提条件
-
Data Grid に
ADMIN
権限がある。 - Data Grid ユーザーを作成すること。
手順
- Data Grid への CLI 接続を作成します。
user roles grant
コマンドでユーザーにロールを割り当てます。以下に例を示します。user roles grant --roles=deployer katie
検証
user roles ls
コマンドでユーザーに付与したロールを一覧表示します。
user roles ls katie ["deployer"]
8.1.4.3. クラスターロールマッパー名リライター
デフォルトでは、プリンシパル名とロール間の厳密な文字列等価性を使用してマッピングが実行されます。ルックアップを実行する前に、プリンシパル名にトランスフォーメーションを適用するようにクラスターロールマッパーを設定することができます。
手順
- Data Grid 設定を開いて編集します。
- Cache Manager 設定のセキュリティー認可の一環として、クラスターロールマッパーの名前リライターを指定します。
- 変更を設定に保存します。
プリンシパル名の形式は、セキュリティーレルムの種類に応じて異なります。
- プロパティーとトークンレルムは、単純な文字列を返す場合があります
- 信頼と LDAP レルムは X.500 形式の識別名を返す場合があります
-
Kerberos レルムは
user@domain
形式の名前を返す場合があります
次のいずれかのトランスフォーマーを使用して、名前を共通形式に正規化できます。
8.1.4.3.1. ケースプリンシパルトランスフォーマー
XML
<cache-container> <security> <authorization> <cluster-role-mapper> <name-rewriter> <case-principal-transformer uppercase="false"/> </name-rewriter> </cluster-role-mapper> </authorization> </security> </cache-container>
JSON
{ "cache-container": { "security": { "authorization": { "cluster-role-mapper": { "name-rewriter": { "case-principal-transformer": {} } } } } } }
YAML
cacheContainer: security: authorization: clusterRoleMapper: nameRewriter: casePrincipalTransformer: uppercase: false
8.1.4.3.2. Regex プリンシパルトランスフォーマー
XML
<cache-container> <security> <authorization> <cluster-role-mapper> <name-rewriter> <regex-principal-transformer pattern="cn=([^,]+),.*" replacement="$1"/> </name-rewriter> </cluster-role-mapper> </authorization> </security> </cache-container>
JSON
{ "cache-container": { "security": { "authorization": { "cluster-role-mapper": { "name-rewriter": { "regex-principal-transformer": { "pattern": "cn=([^,]+),.*", "replacement": "$1" } } } } } } }
YAML
cacheContainer: security: authorization: clusterRoleMapper: nameRewriter: regexPrincipalTransformer: pattern: "cn=([^,]+),.*" replacement: "$1"
関連情報