4.5.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 服务器端点。
-
OAuth 2.0 身份验证必须使用
maxSecondsWithoutReauthentication
选项进行配置,才能启用重新身份验证。
流程
- 访问 Red Hat Single Sign-On Admin 控制台,或使用 Red Hat Single Sign-On Admin CLI 为您在设置 OAuth 2.0 身份验证时创建的 Kafka 代理客户端启用授权服务。
- 使用授权服务为客户端定义资源、授权范围、策略和权限。
- 通过为用户和组分配角色和组,将权限绑定至用户和组。
通过在
编辑器
中更新 Kafka 代理配置(Kafka.spec.kafka),将 Kafka
代理配置为使用 Red Hat Single Sign-On 授权。oc edit kafka my-cluster
将 Kafka 代理
kafka
配置配置为使用keycloak
授权,并可以访问授权服务器和授权服务。例如:
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: kafka: # ... authorization: type: keycloak 1 tokenEndpointUri: <https://<auth-server-address>/auth/realms/external/protocol/openid-connect/token> 2 clientId: kafka 3 delegateToKafkaAcls: false 4 disableTlsHostnameVerification: false 5 superUsers: 6 - CN=fred - sam - CN=edward tlsTrustedCertificates: 7 - secretName: oauth-server-cert certificate: ca.crt grantsRefreshPeriodSeconds: 60 8 grantsRefreshPoolSize: 5 9 #...
- 1
- 类型
keycloak
启用红帽单点登录授权。 - 2
- 红帽单点登录令牌端点的 URI。对于生产环境,始终使用 HTTPs。当您配置基于令牌的
oauth
身份验证时,您可以将jwksEndpointUri
指定为本地 JWT 验证的 URI。tokenEndpointUri
URI 的主机名必须相同。 - 3
- 启用了授权服务的 Red Hat Single Sign-On 中的 OAuth 2.0 客户端定义的客户端 ID。通常,
kafka
用作 ID。 - 4
- (可选)如果 Red Hat Single Sign-On Authorization Services 策略拒绝访问,则会向 Kafka
AclAuthorizer
委派授权。默认为false
。 - 5
- (可选)禁用 TLS 主机名验证。默认为
false
。 - 6
- (可选)指定的 超级用户.
- 7
- (可选)用于 TLS 连接到授权服务器的受信任证书。
- 8
- (可选)两个连续的时间允许刷新运行。这是活跃会话的最大时间,用于检测 Red Hat Single Sign-On 上用户的任何权限更改。默认值为 60。
- 9
- (可选)用于(并行)活动会话授权的线程数量。默认值为 5。
- 保存并退出编辑器,然后等待滚动更新完成。
检查日志中的更新,或者查看 pod 状态转换:
oc logs -f ${POD_NAME} -c kafka oc get pod -w
滚动更新将代理配置为使用 OAuth 2.0 授权。
- 以具有特定角色的客户端或用户访问 Kafka 代理,确保他们具有必要的访问权限,或者没有他们应该拥有的访问权限,来验证配置的权限。