第 8 章 使用基于角色的访问控制进行安全授权
基于角色的访问控制(RBAC)功能使用不同的权限级别来限制用户与网格交互。
有关创建用户并配置特定于远程或嵌入式缓存的授权的详情,请参考:
8.1. Data Grid 用户角色和权限
Data Grid 包括多个角色,为用户提供访问缓存和数据网格资源的权限。
角色 | 权限 | 描述 |
---|---|---|
| ALL | 具有所有权限的超级用户,包括控制缓存管理器生命周期。 |
| ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR、CREATE |
除了 |
| ALL_READ, ALL_WRITE, LISTEN, EXEC, MONITOR |
除 |
| ALL_READ, MONITOR |
除了监控权限外,还具有对 Data Grid |
| MONITOR |
可以通过 JMX 和 |
8.1.1. 权限
用户角色是具有不同访问级别的权限集。
权限 | 功能 | 描述 |
配置 |
| 定义新的缓存配置。 |
LISTEN |
| 针对缓存管理器注册监听程序。 |
生命周期 |
| 停止缓存管理器。 |
CREATE |
| 创建和删除容器资源,如缓存、计数器、模式和脚本。 |
MONITOR |
|
允许访问 JMX 统计信息和 |
ALL | - | 包括所有缓存管理器权限。 |
权限 | 功能 | 描述 |
READ |
| 从缓存检索条目。 |
写 |
放置 , | 写入、替换、删除、驱除缓存中的数据。 |
EXEC |
| 允许针对缓存执行代码。 |
LISTEN |
| 针对缓存注册监听程序。 |
BULK_READ |
| 执行批量检索操作。 |
BULK_WRITE |
| 执行批量写入操作。 |
生命周期 |
| 启动和停止缓存。 |
ADMIN |
| 允许访问底层组件和内部结构。 |
MONITOR |
|
允许访问 JMX 统计信息和 |
ALL | - | 包括所有缓存权限。 |
ALL_READ | - | 组合了 READ 和 BULK_READ 权限。 |
ALL_WRITE | - | 组合 WRITE 和 BULK_WRITE 权限。 |
8.1.2. 角色和权限映射器
Data Grid 将用户实施为主体的集合。主体代表单独的用户身份,如用户名或用户所属的组。在内部,它们使用 javax.security.auth.Subject
类实现。
要启用授权,主体必须映射到角色名称,然后扩展到一组权限。
Data Grid 包括 PrincipalRoleMapper
API,用于将安全主体与角色关联,以及用于将角色与特定权限关联的 RolePermissionMapper
API。
Data Grid 提供以下角色和权限映射程序实现:
- 集群角色映射器
- 在集群 registry 中存储角色映射的主体。
- 集群权限映射器
- 在集群 registry 中存储权限映射的角色。允许您动态修改用户角色和权限。
- 身份角色映射器
- 使用主体名称作为角色名称。主体名称的类型或格式取决于源。例如,在 LDAP 目录中,主体名称可以是可辨识名称(DN)。
- 通用名称角色映射器
-
使用 Common Name (CN)作为角色名称。您可以将此角色映射程序与 LDAP 目录或包含可辨识名称(DN)的客户端证书一起使用;例如
cn=managers,ou=people,dc=example,dc=com
映射到managers
角色。
默认情况下,principal-to-role 映射仅应用于代表组的主体。通过将 authorization.group-only-mapping
配置属性设置为 false
,可以将 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. 创建新角色
创建新角色并设置权限。
流程
使用用户角色
create 命令创建角色
,例如:user roles create --permissions=ALL_READ,ALL_WRITE simple
验证
使用用户角色 ls 命令,列出您向用户授予的角色
。
user roles ls ["observer","application","admin","monitor","simple","deployer"]
描述 使用用户角色的角色 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 连接。
使用
用户角色 grant 命令为用户分配角色
,例如:user roles grant --roles=deployer katie
验证
使用用户角色 ls 命令,列出您向用户授予的角色
。
user roles ls katie ["deployer"]
8.1.4.3. 集群角色映射程序名称重写器
默认情况下,映射是使用主体名称和角色之间的严格字符串等效性来执行。在执行查找前,可以将集群角色映射器配置为应用到主体名称的转换。
流程
- 打开 Data Grid 配置以进行编辑。
- 为集群角色映射器指定一个名称 rewriter,作为 Cache Manager 配置中的安全授权的一部分。
- 保存对配置的更改。
主体名称可能具有不同的表单,具体取决于安全域类型:
- 属性和令牌域可能会返回简单字符串
- 信任和 LDAP 域可能会返回 X.500 风格的可分辨名称
-
Kerberos 域可以返回
user@domain
风格名称
使用以下转换器之一,名称可以规范化为通用形式:
8.1.4.3.1. case Principal Transformer
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 Principal Transformer
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"
其他资源