6.3. 保护对 Kafka 代理的访问


要建立对 Kafka 代理的安全访问,请配置并应用:

  • Kafka 资源以:

    • 使用指定验证类型创建监听程序
    • 为整个 Kafka 集群配置授权
  • KafkaUser 资源,用于通过监听程序安全地访问 Kafka 代理

配置 Kafka 资源以设置:

  • 侦听器身份验证
  • 限制访问 Kafka 监听器的网络策略
  • Kafka 授权
  • 超级用户禁止对代理的访问

身份验证独立配置每个监听程序。始终为整个 Kafka 集群配置授权。

Cluster Operator 创建监听程序并设置集群和客户端证书颁发机构(CA)证书,以便在 Kafka 集群中启用身份验证。

您可以通过安装 自己的证书 来替换 Cluster Operator 生成的证书。您还可以将 监听程序配置为使用由外部 CA (证书颁发机构)管理的 Kafka 侦听器证书。证书以 PKCS #12 格式(.p12)和 PEM (.crt)格式提供。

使用 KafkaUser 启用特定客户端用来访问 Kafka 的身份验证和授权机制。

配置 KafkaUser 资源以设置:

  • 与启用的监听程序身份验证匹配的身份验证
  • 与启用的 Kafka 授权匹配的授权
  • 用于控制客户端资源使用的配额

User Operator 根据所选的身份验证类型创建代表客户端和用于客户端身份验证的安全凭证的用户。

有关访问配置属性的更多信息,请参阅架构参考:

6.3.1. 保护 Kafka 代理

此流程显示在运行 AMQ Streams 时保护 Kafka 代理的步骤。

为 Kafka 代理实施的安全必须与需要访问的客户端实施的安全兼容。

  • kafka .spec.kafka.listeners[*].authentication 匹配 KafkaUser.spec.authentication
  • kafka.spec.authorizationKafkaUser.spec.authorization匹配

这些步骤显示,使用 mTLS 身份验证进行简单授权和侦听器的配置。有关监听器配置的更多信息,请参阅 通用KafkaListener 模式参考

另外,您可以使用 SCRAM-SHA 或 OAuth 2.0 进行 监听程序身份验证,以及 OAuth 2.0 或 OPA 用于 Kafka 授权

流程

  1. 配置 Kafka 资源。

    1. 配置 授权 属性以进行授权。
    2. 配置 监听程序 属性,以创建具有身份验证的监听程序。

      例如:

      apiVersion: kafka.strimzi.io/v1beta2
      kind: Kafka
      spec:
        kafka:
          # ...
          authorization: 
      1
      
            type: simple
            superUsers: 
      2
      
              - CN=client_1
              - user_2
              - CN=client_3
          listeners:
            - name: tls
              port: 9093
              type: internal
              tls: true
              authentication:
                type: tls 
      3
      
          # ...
        zookeeper:
          # ...
      Copy to Clipboard Toggle word wrap
      1
      2
      对 Kafka 有无限访问权限的用户主体列表。在使用 mTLS 验证时,CN 是客户端证书的通用名称。
      3
      可以为每个监听器配置监听器验证机制,并将其 指定为 mTLS、SCRAM-SHA-512 或基于令牌的 OAuth 2.0

      如果您要配置外部监听程序,配置取决于所选的连接机制。

  2. 创建或更新 Kafka 资源。

    oc apply -f <kafka_configuration_file>
    Copy to Clipboard Toggle word wrap

    Kafka 集群使用 mTLS 身份验证配置有 Kafka 代理监听程序。

    为每个 Kafka 代理 pod 创建服务。

    创建服务作为连接到 Kafka 集群的 bootstrap 地址

    在 secret <cluster _name> -cluster-ca-cert 中也创建了用于验证 kafka 代理身份的集群 CA 证书。

6.3.2. 保护用户对 Kafka 的访问

创建或修改 KafkaUser 来代表需要保护 Kafka 集群访问的客户端。

当您配置 KafkaUser 身份验证和授权机制时,请确保它们与对等的 Kafka 配置匹配:

  • KafkaUser.spec.authentication 匹配 Kafka.spec.kafka.listeners[*].authentication
  • KafkaUser.spec.authorization 匹配 Kafka.spec.kafka.authorization

此流程演示了如何使用 mTLS 验证创建用户。您还可以创建带有 SCRAM-SHA 身份验证的用户。

所需的身份验证取决于 为 Kafka 代理侦听程序配置的 身份验证类型。

注意

Kafka 用户和 Kafka 代理之间的身份验证取决于每个验证设置。例如,如果 Kafka 配置中还没有启用,则无法使用 mTLS 验证用户。

先决条件

KafkaUser 中的身份验证类型应与 Kafka 代理中配置的身份验证匹配。

流程

  1. 配置 KafkaUser 资源。

    例如:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaUser
    metadata:
      name: my-user
      labels:
        strimzi.io/cluster: my-cluster
    spec:
      authentication: 
    1
    
        type: tls
      authorization:
        type: simple 
    2
    
        acls:
          - resource:
              type: topic
              name: my-topic
              patternType: literal
            operations:
              - Describe
              - Read
          - resource:
              type: group
              name: my-group
              patternType: literal
            operations:
              - Read
    Copy to Clipboard Toggle word wrap
    1
    用户身份验证机制,定义为 mutual tlsscram-sha-512
    2
    简单授权,这需要附带 ACL 规则列表。
  2. 创建或更新 KafkaUser 资源。

    oc apply -f <user_config_file>
    Copy to Clipboard Toggle word wrap

    创建用户,以及与 KafkaUser 资源名称相同的 Secret。Secret 包含 mTLS 验证的私钥和公钥。

有关在 Kafka 代理中使用属性配置 Kafka 客户端的详情,请参考使用 监听程序设置对 Kafka 集群的客户端访问

6.3.3. 使用网络策略限制 Kafka 侦听程序的访问

您可以使用 networkPolicyPeers 属性将对监听程序的访问限制为特定的应用程序。

先决条件

  • 一个 OpenShift 集群,它支持 Ingress NetworkPolicies。
  • Cluster Operator 正在运行。

流程

  1. 打开 Kafka 资源。
  2. networkPolicyPeers 属性中,定义允许访问 Kafka 集群的应用程序 pod 或命名空间。

    例如,要配置 tls 侦听器,仅允许从带有标签 app 设置为 kafka-client 的应用程序 pod 的连接:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    spec:
      kafka:
        # ...
        listeners:
          - name: tls
            port: 9093
            type: internal
            tls: true
            authentication:
              type: tls
            networkPolicyPeers:
              - podSelector:
                  matchLabels:
                    app: kafka-client
        # ...
      zookeeper:
        # ...
    Copy to Clipboard Toggle word wrap
  3. 创建或更新资源。

    使用 oc apply:

    oc apply -f your-file
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat