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.authorization与KafkaUser.spec.authorization匹配
这些步骤显示,使用 mTLS 身份验证进行简单授权和侦听器的配置。有关监听器配置的更多信息,请参阅 通用KafkaListener 模式参考。
另外,您可以使用 SCRAM-SHA 或 OAuth 2.0 进行 监听程序身份验证,以及 OAuth 2.0 或 OPA 用于 Kafka 授权。
流程
配置
Kafka资源。-
配置
授权属性以进行授权。 配置
监听程序属性,以创建具有身份验证的监听程序。例如:
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: tls3 # ... zookeeper: # ...- 1
- 2
- 对 Kafka 有无限访问权限的用户主体列表。在使用 mTLS 验证时,CN 是客户端证书的通用名称。
- 3
- 可以为每个监听器配置监听器验证机制,并将其 指定为 mTLS、SCRAM-SHA-512 或基于令牌的 OAuth 2.0。
如果您要配置外部监听程序,配置取决于所选的连接机制。
-
配置
创建或更新
Kafka资源。oc apply -f <kafka_configuration_file>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 验证用户。
先决条件
- 使用 mTLS 身份验证和 TLS 加密,运行带有 Kafka 代理监听程序 的 Kafka 集群。
- 正在运行的用户 Operator (通常使用 Entity Operator 部署)。
KafkaUser 中的身份验证类型应与 Kafka 代理中配置的身份验证匹配。
流程
配置
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: simple2 acls: - resource: type: topic name: my-topic patternType: literal operations: - Describe - Read - resource: type: group name: my-group patternType: literal operations: - Read创建或更新
KafkaUser资源。oc apply -f <user_config_file>创建用户,以及与
KafkaUser资源名称相同的 Secret。Secret 包含 mTLS 验证的私钥和公钥。
有关在 Kafka 代理中使用属性配置 Kafka 客户端的详情,请参考使用 监听程序设置对 Kafka 集群的客户端访问。
6.3.3. 使用网络策略限制 Kafka 侦听程序的访问 复制链接链接已复制到粘贴板!
您可以使用 networkPolicyPeers 属性将对监听程序的访问限制为特定的应用程序。
先决条件
- 一个 OpenShift 集群,它支持 Ingress NetworkPolicies。
- Cluster Operator 正在运行。
流程
-
打开
Kafka资源。 在
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: # ...创建或更新资源。
使用
oc apply:oc apply -f your-file