4.5. 配置数据网格授权


授权限制了使用 Data Grid 和 access 数据执行操作的功能。您可以使用具有不同权限级别的角色分配用户。

4.5.1. Data Grid Authorization

借助 Data Grid,您可以配置授权来保护缓存管理器和缓存实例。当用户应用程序或客户端试图对安全缓存管理器和缓存执行操作时,它们必须提供一个有足够权限的角色来执行该操作。

例如,您可以在特定的缓存实例上配置授权,以便调用 Cache.get () 需要分配具有 read 权限的角色,而 Cache.put () 需要具有写入权限的角色。

在这种情况下,如果具有 reader 角色的用户应用程序或客户端尝试编写条目,则 Data Grid 会拒绝请求并抛出安全异常。如果具有 writer 角色的用户应用程序或客户端发送写入请求,则数据网格会验证授权,并为后续操作发布令牌。

身份到角色映射

身份是类型为 java.security.Principal 的安全主体。使用 javax.security.auth.Subject 类实施的主题代表一组安全主体。换句话说,Subject 代表一个用户以及它所属的所有组。

Data Grid 使用角色映射器,以便安全主体与代表一个或多个权限的角色对应。

下图演示了安全主体如何映射到角色:

4.5.1.1. 权限

通过限制您可以执行的操作来控制对缓存管理器和缓存的访问权限。权限也可以应用到指定缓存等特定实体。

Expand
表 4.1. 缓存管理器权限
权限功能描述

配置

defineConfiguration

定义新的缓存配置。

LISTEN

addListener

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

生命周期

stop

停止缓存管理器。

ALL

-

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

Expand
表 4.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

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

ALL

-

包括所有缓存权限。

ALL_READ

-

组合了 READ 和 BULK_READ 权限。

ALL_WRITE

-

组合 WRITE 和 BULK_WRITE 权限。

合并权限

您可能需要组合权限,以便它们很有用。例如,要允许"supervisors"运行流操作,但限制"标准"用户仅放置并获得,您可以定义以下映射:

<role name="standard" permission="READ WRITE" />
<role name="supervisors" permission="READ WRITE EXEC BULK"/>
Copy to Clipboard Toggle word wrap

4.5.1.2. 角色映射程序

Data Grid 包括了一个 PrincipalRoleMapper API,它将 Subject 中的安全主体映射到授权角色。默认有两个角色映射器:

IdentityRoleMapper

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

  • Java class: org.infinispan.security.mappers.IdentityRoleMapper
  • 声明性配置:&lt ;identity-role-mapper />
CommonNameRoleMapper

如果主体名称是可辨识名称(DN),则使用 Common Name (CN)作为角色名称。例如,cn=managers,ou=people,dc=example,dc=com DN 映射到 managers 角色。

  • Java class: org.infinispan.security.mappers.CommonRoleMapper
  • 声明性配置: &lt ;common-name-role-mapper />

您还可以使用实现 org.infinispan.security.PrincipalRoleMapper 接口的自定义角色映射程序。要以声明性方式配置自定义角色映射程序,请使用: &lt ;custom-role-mapper class="my.custom.RoleMapper" />

4.5.2. 声明性配置授权

infinispan.xml 文件中配置授权。

流程

  1. cache-container 中配置全局授权设置,用于指定角色映射器,并定义一组角色和权限。
  2. 配置缓存授权,以根据用户角色限制访问权限。

    <infinispan>
       <cache-container default-cache="secured" name="secured">
          <security>
             <authorization> 
    1
    
                <identity-role-mapper /> 
    2
    
                <role name="admin" permissions="ALL" /> 
    3
    
                <role name="reader" permissions="READ" />
                <role name="writer" permissions="WRITE" />
                <role name="supervisor" permissions="READ WRITE EXEC"/>
             </authorization>
          </security>
          <local-cache name="secured">
             <security>
                <authorization/> 
    4
    
             </security>
          </local-cache>
       </cache-container>
    </infinispan>
    Copy to Clipboard Toggle word wrap
    1
    为 Cache Manager 启用 Data Grid 授权。
    2
    指定 PrincipalRoleMapper 的实现,它将 Principals 映射到角色。
    3
    定义角色及其关联的权限。
    4
    隐式添加全局配置中的所有角色。

    如果您不想将所有角色应用到缓存,请明确定义授权缓存的角色,如下所示:

    <infinispan>
       <cache-container default-cache="secured" name="secured">
          <security>
             <authorization>
                <identity-role-mapper />
                <role name="admin" permissions="ALL" />
                <role name="reader" permissions="READ" />
                <role name="writer" permissions="WRITE" />
                <role name="supervisor" permissions="READ WRITE EXEC"/>
             </authorization>
          </security>
          <local-cache name="secured">
             <security>
                <authorization roles="admin supervisor reader"/> 
    1
    
             </security>
          </local-cache>
       </cache-container>
    
    </infinispan>
    Copy to Clipboard Toggle word wrap
    1
    定义缓存的授权角色。在本例中,只有 writer 角色的用户没有授权"secured"缓存。Data Grid 拒绝来自这些用户的任何访问请求。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat