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. 缓存管理器权限

权限功能描述

配置

defineConfiguration

定义新的缓存配置。

LISTEN

addListener

针对缓存管理器注册监听程序。

生命周期

stop

停止缓存管理器。

创建

createCache, removeCache

创建和删除容器资源,如缓存、计数器、模式和脚本。

MONITOR

getStats

允许访问 JMX 统计信息和 指标端点

ALL

-

包括所有缓存管理器权限。

9.3.1.2. 缓存权限

权限功能描述

READ

Get包含

从缓存检索条目。

放置 , put IfAbsent,replace,remove,eviction

写入、替换、删除、驱除缓存中的数据。

EXEC

distexec,stream

允许针对缓存执行代码。

LISTEN

addListener

针对缓存注册监听程序。

BULK_READ

keySet,values,entrySet,query

执行批量检索操作。

BULK_WRITE

清除,putAll

执行批量写入操作。

生命周期

启动,stop

启动和停止缓存。

ADMIN

getVersion,addInterceptor*, removeInterceptor,getInterceptorChain,getEvictionManager,getComponentRegistry,getDistributionManager,getAuthorizationManager,evict,getRpcManager,getCacheConfiguration,getCacheManager, getInvocationContextContainer,setAvailability,getDataContainer,getStats,getXAResource

允许访问底层组件和内部结构。

MONITOR

getStats

允许访问 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
  • 声明性配置:&lt ;cluster-role-mapper />

9.3.2.2. 身份角色映射器

IdentityRoleMapper 使用 Principal 名称作为角色名称。

  • Java class: org.infinispan.security.mappers.IdentityRoleMapper
  • 声明性配置:&lt ;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
  • 声明性配置: &lt ;common-name-role-mapper />

9.3.2.4. 自定义角色映射器

自定义角色映射程序是 org.infinispan.security.PrincipalRoleMapper 的实现。

  • 声明性配置: & lt;custom-role-mapper class="my.custom.RoleMapper" />