4.5.3.2. 将 Red Hat Single Sign-On Authorization Services 映射到 Kafka 授权模型
Kafka 授权模型用作定义控制对 Kafka 访问的红帽单点登录角色和资源的基础。
要为用户帐户或服务帐户授予 Kafka 权限,请首先为 Kafka 代理在 Red Hat Single Sign-On 中创建 OAuth 客户端规格。然后,在客户端上指定红帽单点登录授权服务规则。通常,代表代理的 OAuth 客户端的客户端 ID 是 kafka
(AMQ Streams 提供 的示例文件 使用 kafka
作为 OAuth 客户端 ID)。
如果您有多个 Kafka 集群,您可以在所有这些集群中使用单个 OAuth 客户端(kafka
)。这为您提供了一个统一空间,用于定义和管理授权规则。但是,您也可以使用不同的 OAuth 客户端 ID(如 my-cluster-kafka
或 cluster-dev-kafka
),并为每个客户端配置中为每个集群定义授权规则。
kafka
客户端定义必须在红帽单点管理控制台中启用 Authorization Enabled 选项。
所有权限都存在于 kafka
客户端范围内。如果您为不同的 Kafka 集群配置了不同的 OAuth 客户端 ID,它们各自需要一组独立的权限,即使它们属于同一红帽单点登录域。
当 Kafka 客户端使用 OAUTHBEARER 身份验证时,Red Hat Single Sign-On 授权器(KeycloakRBACAuthorizer
)使用当前会话的访问令牌来检索 Red Hat Single Sign-On 服务器中的授权列表。若要检索授权,授权者将评估红帽单点登录授权服务策略和权限。
Kafka 权限的授权范围
初始红帽单点登录配置通常涉及上传授权范围,以创建在每个 Kafka 资源类型上执行的所有可能操作的列表。此步骤仅执行一次,然后再定义任何权限。您可以手动添加授权范围,而不是上传它们。
授权范围必须包含所有可能的 Kafka 权限,而不考虑资源类型:
-
create
-
写
-
读
-
删除
-
describe
-
更改
-
DescribeConfig
-
AlterConfig
-
ClusterAction
-
IdempotentWrite
如果您确定不需要权限(如 IdempotentWrite
),您可以从授权范围列表中省略它。但是,该权限将无法在 Kafka 资源上作为目标。
权限检查的资源模式
在执行权限检查时,资源模式用于与目标资源进行模式匹配。常规模式格式为 RESOURCE-TYPE:PATTERN-NAME
。
资源类型镜像 Kafka 授权模型。模式允许两个匹配选项:
-
精确匹配(当模式不以 * 结尾
时
) -
前缀匹配(模式以 * 结尾
时
)
资源模式示例
Topic:my-topic Topic:orders-* Group:orders-* Cluster:*
此外,常规模式格式可以加上 kafka-cluster:CLUSTER-NAME
前缀,后面添加一个逗号,其中 CLUSTER-NAME 是指 Kafka 自定义资源中的 metadata.name
。
具有集群前缀的资源的模式示例
kafka-cluster:my-cluster,Topic:* kafka-cluster:*,Group:b_*
当缺少 kafka-cluster
前缀时,会假定为 kafka-cluster:*
。
在定义资源时,您可以将它与与资源相关的可能授权范围列表关联。设置任何对目标资源类型有用的操作。
虽然您可以向任何资源添加任何授权范围,但只有资源类型支持的范围才会被视为访问控制。
应用访问权限的策略
策略用于将权限定向到一个或多个用户帐户或服务帐户。目标可指:
- 特定用户或服务帐户
- 域角色或客户端角色
- 用户组
- 与客户端 IP 地址匹配的 JavaScript 规则
策略被赋予唯一名称,并可以重复利用以将多个权限作为多个资源的目标。
授予访问权限
使用细粒度权限将策略、资源和授权范围提取到一起,从而授予用户访问权限。
每个权限的名称应明确定义它授予哪些用户的权限。例如,开发团队 B 可以从以 x 开头的主题中读取
内容。
其它资源
- 有关如何通过 Red Hat Single Sign-On Authorization Services 配置权限的详情请参考 第 4.5.4 节 “试用红帽单点登录授权服务”。