第 8 章 使用基于角色的访问控制进行安全授权


基于角色的访问控制(RBAC)功能使用不同的权限级别来限制用户与网格交互。

注意

有关创建用户并配置特定于远程或嵌入式缓存的授权的详情,请参考:

8.1. Data Grid 用户角色和权限

Data Grid 包括多个角色,为用户提供访问缓存和数据网格资源的权限。

角色权限描述

admin

ALL

具有所有权限的超级用户,包括控制缓存管理器生命周期。

deployer

ALL_READ、ALL_WRITE、LISTEN、EXEC、MONITOR、CREATE

除了 应用程序 权限外,还可创建和删除 Data Grid 资源。

application

ALL_READ, ALL_WRITE, LISTEN, EXEC, MONITOR

观察者 权限外,还具有对 Data Grid 资源的读写访问权限。也可以侦听事件并执行服务器任务和脚本。

observer

ALL_READ, MONITOR

除了监控权限外,还具有对 Data Grid 资源 的读取访问权限。

monitor

MONITOR

可以通过 JMX 和 指标端点 查看统计信息。

8.1.1. 权限

用户角色是具有不同访问级别的权限集。

表 8.1. 缓存管理器权限

权限

功能

描述

配置

defineConfiguration

定义新的缓存配置。

LISTEN

addListener

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

生命周期

stop

停止缓存管理器。

CREATE

createCache, removeCache

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

MONITOR

getStats

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

ALL

-

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

表 8.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 权限。

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 启用集群角色映射程序和集群权限映射程序。要将不同的实现用于角色映射,您必须配置角色映射程序。

流程

  1. 打开 Data Grid 配置以进行编辑。
  2. 在 Cache Manager 配置中,将角色映射器声明为安全授权的一部分。
  3. 保存对配置的更改。
角色映射器配置

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 用户。

流程

  1. 创建与 Data Grid 的 CLI 连接。
  2. 使用 用户角色 grant 命令为用户分配角色,例如:

    user roles grant --roles=deployer katie

验证

使用用户角色 ls 命令,列出您向用户授予的角色

user roles ls katie
["deployer"]

8.1.4.3. 集群角色映射程序名称重写器

默认情况下,映射是使用主体名称和角色之间的严格字符串等效性来执行。在执行查找前,可以将集群角色映射器配置为应用到主体名称的转换。

流程

  1. 打开 Data Grid 配置以进行编辑。
  2. 为集群角色映射器指定一个名称 rewriter,作为 Cache Manager 配置中的安全授权的一部分。
  3. 保存对配置的更改。

主体名称可能具有不同的表单,具体取决于安全域类型:

  • 属性和令牌域可能会返回简单字符串
  • 信任和 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"

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.