9.3. 安全授权如何工作
Data Grid 授权通过限制用户访问来保护您的安装。
用户应用程序或客户端必须属于分配了足够权限的角色,然后才能对缓存管理器或缓存执行操作。
例如,您可以在特定的缓存实例上配置授权,以便调用 Cache.get ()
需要分配具有 read 权限的角色,而 Cache.put ()
需要具有写入权限的角色。
在这种情况下,如果具有 io
角色的用户应用程序或客户端尝试写入条目,则 Data Grid 会拒绝请求并抛出安全异常。如果具有 writer
角色的用户应用程序或客户端发送写入请求,则数据网格会验证授权,并为后续操作发布令牌。
身份
身份是类型为 java.security.Principal
的安全主体。使用 javax.security.auth.Subject
类实施的主题代表一组安全主体。换句话说,Subject 代表一个用户以及它所属的所有组。
角色的身份
Data Grid 使用角色映射器,以便安全主体对应于您分配一个或多个权限的角色。
下图演示了安全主体与角色对应:
9.3.1. 权限
授权角色有不同的权限,它们具有不同的对数据网格的访问级别。权限可让您限制用户访问缓存管理器和缓存。
9.3.1.1. 缓存管理器权限
权限 | 功能 | 描述 |
---|---|---|
配置 |
| 定义新的缓存配置。 |
LISTEN |
| 针对缓存管理器注册监听程序。 |
生命周期 |
| 停止缓存管理器。 |
创建 |
| 创建和删除容器资源,如缓存、计数器、模式和脚本。 |
MONITOR |
|
允许访问 JMX 统计信息和 |
ALL | - | 包括所有缓存管理器权限。 |
9.3.1.2. 缓存权限
权限 | 功能 | 描述 |
---|---|---|
READ |
| 从缓存检索条目。 |
写 |
放置 , | 写入、替换、删除、驱除缓存中的数据。 |
EXEC |
| 允许针对缓存执行代码。 |
LISTEN |
| 针对缓存注册监听程序。 |
BULK_READ |
| 执行批量检索操作。 |
BULK_WRITE |
| 执行批量写入操作。 |
生命周期 |
| 启动和停止缓存。 |
ADMIN |
| 允许访问底层组件和内部结构。 |
MONITOR |
|
允许访问 JMX 统计信息和 |
ALL | - | 包括所有缓存权限。 |
ALL_READ | - | 组合了 READ 和 BULK_READ 权限。 |
ALL_WRITE | - | 组合 WRITE 和 BULK_WRITE 权限。 |
9.3.2. 角色映射程序
Data Grid 包含一个 PrincipalRoleMapper
API,它将 Subject 中的安全主体映射到您可以分配给用户的授权角色。
9.3.2.1. 集群角色映射器
ClusterRoleMapper
使用持久复制缓存来动态存储默认角色和权限的 principal-to-role 映射。
默认情况下,使用 Principal 名称作为角色名称,并实施 org.infinispan.security.MutableRoleMapper
,它公开方法在运行时更改角色映射。
-
Java 类:
org.infinispan.security.mappers.ClusterRoleMapper
-
声明性配置:<
;cluster-role-mapper />
9.3.2.2. 身份角色映射器
IdentityRoleMapper
使用 Principal 名称作为角色名称。
-
Java class:
org.infinispan.security.mappers.IdentityRoleMapper
-
声明性配置:<
;identity-role-mapper />
9.3.2.3. commonName role mappers
如果主体名称是可辨识名称(DN),则 CommonNameRoleMapper
使用 Common Name (CN)作为角色名称。
例如,此 DN、cn=managers、ou=people、dc=example、dc=com
映射到 managers
角色。
-
Java class:
org.infinispan.security.mappers.CommonRoleMapper
-
声明性配置: <
;common-name-role-mapper />
9.3.2.4. 自定义角色映射器
自定义角色映射程序是 org.infinispan.security.PrincipalRoleMapper
的实现。
-
声明性配置: &
lt;custom-role-mapper class="my.custom.RoleMapper" />