为 Cassandra 配置身份验证

本主题介绍如何为 Cassandra 节点之间以及客户端与 Cassandra 节点之间的通信配置身份验证。

如何在运行时平面中为 Cassandra 配置身份验证

Cassandra 在客户端机器和数据库集群之间以及集群内的节点之间提供安全通信。启用加密可确保传输中的数据不会遭到破解并安全传输。在 Apigee Hybrid 中,默认情况下将为 Cassandra 节点之间以及客户端和 Cassandra 节点之间的任何通信启用 TLS。

您可以配置使用用户名/密码组合进行身份验证,方法是直接将组合放置在替换文件中,或者将组合添加到 Kubernetes Secret 中,如本主题中所述。

关于 Cassandra 用户身份验证

混合平台使用 Cassandra 作为运行时平面数据的后端数据存储区。默认情况下,与 Cassandra 的任何客户端通信都需要身份验证。有多个客户用户与 Cassandra 进行通信。系统会为这些用户提供默认密码。如需了解更改默认密码所需的步骤,请参阅在替换文件中更改默认密码

这些用户(包括默认用户)如下所述:

  1. DML 用户:在客户端通信中,用于读取 Cassandra 数据和将数据写入 Cassandra(KMS、KVM、Cache、Quota)。
  2. DDL 用户:被 MART 用于任何数据定义任务,例如键空间创建、更新和删除。
  3. 管理员用户:用于在 Cassandra 集群上执行的任何管理活动。
  4. 默认 Cassandra 用户:启用身份验证时,Cassandra 会创建名为 cassandra 的默认用户。
  5. JMX 用户:用于向 Cassandra JMX 接口进行身份验证并与其进行通信。
  6. Jolokia 用户:用于向 Cassandra JMX API 进行身份验证并与其进行通信。

默认 Cassandra 用户简介

创建 Apigee Hybrid 集群并启用 Cassandra 身份验证后,初始用户账号是默认 Cassandra 用户,由用户名 cassandra 标识。默认 cassandra 用户充当超级用户,负责添加用户角色和修改数据库架构等任务。

Apigee Hybrid apigee-cassandra-user-setup 作业利用默认 cassandra 用户建立新角色并更新与此默认用户关联的密码。在初始安装 Apigee Hybrid 实例、实例后续升级以及区域扩展过程中预配新实例期间,会执行 apigee-cassandra-user-setup 作业。

执行 Apigee Hybrid apigee-cassandra-user-setup 作业时,该作业需要能够在全新安装或升级过程中更新和修改数据库级配置。当 apigee-cassandra-user-setup 作业设置新的 Cassandra pod 时,默认 cassandra 用户是唯一保证存在的用户。如果没有具有超级用户访问权限的已知用户,Apigee Hybrid 升级和区域扩展将无法正常运行。

默认 cassandra 用户密码在初始使用后作为额外的安全措施的一部分会更改。这意味着,即使默认 cassandra 用户仍处于启用状态,新密码也必须是已知才能使用默认 cassandra 用户。在新安装和区域扩展过程中,除 apigee-cassandra-user-setup 作业之外,任何其他组件都不会使用默认 cassandra 用户。

在替换文件中更改默认密码

作为安全性最佳实践,建议您更改 Cassandra 的默认密码。您可以在 overrides.yaml 文件中执行此操作。添加以下配置,根据需要更改默认密码,然后将更改应用到集群。

cassandra:
   auth:
     default:  ## the password for the new default user (static username: cassandra)
       password: "NEW_PASSWORD"
     admin: ## the password for the admin user (static username: admin_user)
       password: "NEW_PASSWORD"
     ddl: ## the password for the DDL User (static username: ddl_user)
       password: "NEW_PASSWORD"
     dml: ## the password for the DML User (static username: dml_user)
       password: "NEW_PASSWORD"
     jmx:
       username: "jmxuser" ## the username for the JMX User
       password: "NEW_PASSWORD" ## the password for the JMX User
     jolokia:
       username: "jolokiauser" ## the username to access jolokia interface
       password: "NEW_PASSWORD" ## the password for jolokia user

请注意以下事项:

  • 不支持证书授权机构 (CA) 轮替。
  • 不支持使用密码生成的服务器证书。

在 Kubernetes Secret 中设置用户名和密码

本部分介绍如何配置 Cassandra 以使用 Kubernetes Secret 进行身份验证。

创建 Secret

请使用以下模板配置 Kubernetes Secret。将模板保存到 YAML 文件并修改所需的属性,例如 my-secret.yaml。请注意,如果您使用此选项,则必须提供用户名及其密码。

apiVersion: v1
kind: Secret
metadata:
  name: SECRET_NAME
  namespace: APIGEE_NAMESPACE
type: Opaque
data:
  default.password: DEFAULT_PASSWORD   #base64-encoded string
  admin.user: ADMIN_USERNAME   #base64-encoded string
  admin.password: ADMIN_PASSWORD   #base64-encoded string
  dml.user: DML_USERNAME   #base64-encoded string
  dml.password: DML_PASSWORD   #base64-encoded string
  ddl.user: DDL_USERNAME   #base64-encoded string
  ddl.password: DDL_PASSWORD   #base64-encoded string
  jmx.user: JMX_USERNAME   #base64-encoded string
  jmx.password: JMX_PASSWORD   #base64-encoded string
  jolokia.user: JOLOKIA_USERNAME   #base64-encoded string
  jolokia.password: JOLOKIA_PASSWORD   #base64-encoded string
  

其中,SECRET_NAME 是您为 Secret 选择的名称,APIGEE_NAMESPACE 是在其中部署 Apigee pod 的命名空间(默认为 apigee),每个 _USERNAME_PASSWORD 是每位用户的用户名和密码。请注意,用户名和密码必须采用 Base64 编码。

将 Secret 应用到集群。例如:

kubectl apply -f SECRET_FILE

将 Secret 添加到替换文件:

cassandra:
  auth:
    secret: SECRET_NAME

将更新后的 Cassandra 覆盖应用于集群:

$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --datastore

检查 Cassandra 日志

在 Cassandra 启动后立即检查日志。下面的日志显示了 Cassandra 客户端连接已加密。

kubectl logs apigee-cassandra-2 -n apigee -f

INFO  00:44:36 Starting listening for CQL clients on /10.0.2.12:9042 (encrypted)...
INFO  00:44:36 Binding thrift service to /10.0.2.12:9160
INFO  00:44:36 enabling encrypted thrift connections between client and server
INFO  00:44:36 Listening for thrift clients...