4.11.2. 配置 OAuth 2.0 授权支持

这个步骤描述了如何使用 Red Hat Single Sign-On Authorization Services 将 Kafka 代理配置为使用 OAuth 2.0 授权服务。

开始前

考虑您需要或希望限制某些用户的访问权限。您可以使用红帽单点登录 角色客户端 和用户 组合在红帽单点登录中配置访问权限。

通常,组用于根据组织部门或地理位置匹配用户。和 角色用于根据用户的功能匹配用户。

通过红帽单点登录,您可以将用户和组存储在 LDAP 中,而客户端和角色则无法以这种方式存储。存储和用户数据访问可能是您选择配置授权策略的一个因素。

注意

无论 Kafka 代理中实施的授权如何,超级用户 始终都对 Kafka 代理具有未经约束的访问权限。

先决条件

  • AMQ Streams 必须配置为使用 OAuth 2.0 和 Red Hat Single Sign-On 基于 令牌的身份验证。设置授权时,您可以使用相同的 Red Hat Single Sign-On 服务器端点。
  • 您需要了解如何管理红帽单点登录授权服务的策略和权限,如红帽 单点登录文档 中所述。

流程

  1. 访问 Red Hat Single Sign-On Admin 控制台,或使用 Red Hat Single Sign-On Admin CLI 为您在设置 OAuth 2.0 身份验证时创建的 Kafka 代理客户端启用授权服务。
  2. 使用授权服务为客户端定义资源、授权范围、策略和权限。
  3. 通过为用户和组分配角色和组,将权限绑定至用户和组。
  4. 将 Kafka 代理配置为使用 Red Hat Single Sign-On 授权。

    在 Kafka server.properties 配置文件中添加以下内容以在 Kafka 中安装授权器:

    authorizer.class.name=io.strimzi.kafka.oauth.server.authorizer.KeycloakRBACAuthorizer
    principal.builder.class=io.strimzi.kafka.oauth.server.authorizer.JwtKafkaPrincipalBuilder
  5. 添加 Kafka 代理的配置,以访问授权服务器和授权服务。

    在此,我们演示了添加为 server.properties 附加属性的示例配置,但也可以使用大写或大写命名惯例将其定义为环境变量。

    strimzi.authorization.token.endpoint.uri="https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/token" 1
    strimzi.authorization.client.id="kafka" 2
    1
    红帽单点登录的 OAuth 2.0 令牌端点 URL。对于生产环境,始终使用 HTTPs。
    2
    启用了授权服务的 Red Hat Single Sign-On 中的 OAuth 2.0 客户端定义的客户端 ID。通常,kafka 用作 ID。
  6. (可选)添加特定 Kafka 集群的配置。

    例如:

    strimzi.authorization.kafka.cluster.name="kafka-cluster" 1
    1
    特定 Kafka 集群的名称。名称用于目标权限,从而能够管理同一红帽单点登录域中的多个集群。默认值为 kafka-cluster
  7. (可选)提交到简单授权。

    例如:

    strimzi.authorization.delegate.to.kafka.acl="false" 1
    1
    如果 Red Hat Single Sign-On Authorization Services 策略拒绝访问,请将访问权限委派给 Kafka AclAuthorizer。默认值为 false
  8. (可选)添加 TLS 连接到授权服务器的配置。

    例如:

    strimzi.authorization.ssl.truststore.location=<path-to-truststore> 1
    strimzi.authorization.ssl.truststore.password=<my-truststore-password> 2
    strimzi.authorization.ssl.truststore.type=JKS 3
    strimzi.authorization.ssl.secure.random.implementation=SHA1PRNG 4
    strimzi.authorization.ssl.endpoint.identification.algorithm=HTTPS 5
    1
    包含证书的信任存储的路径。
    2
    信任存储的密码。
    3
    truststore 类型。如果没有设置,则使用默认的 Java 密钥存储类型。
    4
    随机数字生成器实施.如果没有设置,则使用 Java 平台 SDK 默认。
    5
    主机名验证.如果设置为空字符串,则主机名验证将关闭。如果没有设置,则默认值为 HTTPS,它会强制对服务器证书进行主机名验证。
  9. (可选)从授权服务器配置 授权刷新。通过枚举活动令牌并请求每个帐户的最新授权来授予刷新作业。

    例如:

    strimzi.authorization.grants.refresh.period.seconds="120" 1
    strimzi.authorization.grants.refresh.pool.size="10" 2
    1
    指定授权服务器授权列表刷新的频率(默认为每分钟刷新一次)。要为调试目的关闭刷新,请将 设为 "0"
    2
    指定授权刷新作业使用的线程池的大小(并行程度)。默认值为 "5"
  10. 以具有特定角色的客户端或用户访问 Kafka 代理,确保他们具有必要的访问权限,或者没有他们应该拥有的访问权限,来验证配置的权限。