6.7. 使用基于 OPA 策略的授权
开源策略代理(OPA)是一个开源策略引擎。您可以将 OPA 与 Apache Kafka 的 Streams 集成,以作为基于策略的授权机制,允许在 Kafka 代理上进行客户端操作。
从客户端发出请求时,OPA 将根据为 Kafka 访问定义的策略评估请求,然后允许或拒绝请求。
红帽不支持 OPA 服务器。
其他资源
6.7.1. 定义 OPA 策略
在将 OPA 与 Apache Kafka 的 Streams 集成之前,请考虑如何定义策略以提供精细的访问控制。
您可以为 Kafka 集群、消费者组和主题定义访问控制。例如,您可以定义一个授权策略,允许从制作者客户端写入到特定代理主题的访问。
为此,策略可能会指定:
- 与制作者客户端关联的用户主体和主机地址
- 客户端允许的操作
-
策略适用的 资源类型 (
topic
)和资源名称
允许或拒绝决策将写入到策略中,并根据提供的请求和客户端识别数据提供响应。
在我们的示例中,生成者客户端必须满足策略才能写入该主题。
6.7.2. 连接到 OPA
要启用 Kafka 访问 OPA 策略引擎以查询访问控制策略,您可以在您的 Kafka server.properties
文件中配置自定义 OPA authorizer 插件 (kafka-authorizer-opa-VERSION.jar
)。
客户端发出请求时,OPA 策略引擎将通过指定的 URL 地址和 REST 端点来查询 OPA 策略引擎,该端点必须是定义的策略的名称。
该插件提供了客户端请求的详细信息 - 用户主体、操作和资源 - 以 JSON 格式针对策略进行检查。详细信息将包括客户端的唯一身份;例如,使用 TLS 身份验证时将区分名称与客户端证书进行区分。
OPA 使用数据向插件提供响应 - true 或 false - 允许或拒绝请求。
6.7.3. 配置 OPA 授权支持
这个步骤描述了如何将 Kafka 代理配置为使用 OPA 授权。
开始前
考虑某些用户所需的访问权限或希望限制某些用户。您可以使用 用户和 Kafka 资源 的组合来定义 OPA 策略。
可以设置 OPA 从 LDAP 数据源加载用户信息。
无论在 Kafka 代理上实现的授权是什么,超级用户始终对 Kafka 代理具有不受限制的访问。
先决条件
- 每个主机上安装了 Apache Kafka 的流,且配置文件可用。
- OPA 服务器必须可用于连接。
- Kafka 的 OPA 授权器插件。
流程
编写授权客户端请求对 Kafka 代理执行操作所需的 OPA 策略。
请参阅 定义 OPA 策略。
现在,将 Kafka 代理配置为使用 OPA。
请参阅 连接到 OPA。
确保插件文件包含在 Kafka 类路径中。
在 Kafka
server.properties
配置文件中添加以下内容以启用 OPA 插件:authorizer.class.name: com.bisnode.kafka.authorization.OpaAuthorizer
在 Kafka 代理的
server.properties
中添加其他配置来访问 OPA 策略引擎和策略。例如:
opa.authorizer.url=https://OPA-ADDRESS/allow 1 opa.authorizer.allow.on.error=false 2 opa.authorizer.cache.initial.capacity=50000 3 opa.authorizer.cache.maximum.size=50000 4 opa.authorizer.cache.expire.after.seconds=600000 5 super.users=User:alice;User:bob 6
- 1
- (必需)授权器插件将查询的策略的 OAuth 2.0 令牌端点 URL。在本例中,策略称为
allow
。 - 2
- 标志指定在授权器插件无法与 OPA 策略引擎连接时,默认是否允许或拒绝客户端访问。
- 3
- 本地缓存的初始容量(以字节为单位)。使用缓存,以便插件不必查询每个请求的 OPA 策略引擎。
- 4
- 本地缓存的最大容量(以字节为单位)。
- 5
- 本地缓存的时间(以毫秒为单位),方法是从 OPA 策略引擎重新加载。
- 6
- 被视为超级用户的用户主体列表,以便在不查询 Open Policy Agent 策略的情况下始终允许它们。
有关身份验证和授权选项的信息,请参阅 Open Policy Agent 网站。
- 通过使用具有正确授权的客户端访问 Kafka 代理来验证配置的权限。