第 1 章 配置数据网格授权
授权限制了使用 Data Grid 和 access 数据执行操作的功能。您可以使用具有不同权限级别的角色分配用户。
1.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 使用角色映射器,以便安全主体与代表一个或多个权限的角色对应。
下图演示了安全主体如何映射到角色:
1.1.1. 权限
通过限制您可以执行的操作来控制对缓存管理器和缓存的访问权限。权限也可以应用到指定缓存等特定实体。
权限 | 功能 | 描述 |
---|---|---|
配置 |
| 定义新的缓存配置。 |
LISTEN |
| 针对缓存管理器注册监听程序。 |
生命周期 |
| 停止缓存管理器。 |
ALL | - | 包括所有缓存管理器权限。 |
权限 | 功能 | 描述 |
---|---|---|
|
| 从缓存检索条目。 |
写 |
放置 , | 写入、替换、删除、驱除缓存中的数据。 |
EXEC |
| 允许针对缓存执行代码。 |
LISTEN |
| 针对缓存注册监听程序。 |
BULK_READ |
| 执行批量检索操作。 |
BULK_WRITE |
| 执行批量写入操作。 |
生命周期 |
| 启动和停止缓存。 |
ADMIN |
| 允许访问底层组件和内部结构。 |
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"/>
1.1.2. 角色映射程序
Data Grid 包括了一个 PrincipalRoleMapper
API,它将 Subject 中的安全主体映射到授权角色。默认有两个角色映射器:
- IdentityRoleMapper
使用 Principal 名称作为角色名称。
-
Java 类:
org.infinispan.security.mappers.IdentityRoleMapper
-
声明性配置:<
;identity-role-mapper />
-
Java 类:
- CommonNameRoleMapper
如果主体名称是可辨识名称(DN),则使用 Common Name (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" />