默认情况下,Cassandra 安装时未启用身份验证。这意味着任何人都可以访问 Cassandra。您可以在安装 Edge 后启用身份验证,也可以在安装过程 中启用身份验证。
您可以使用 Cassandra CREATE/ALTER/DROP ROLES 语句添加、移除和修改角色。如需了解详情,请参阅以下内容:
一些一般注意事项
- 启用 Cassandra 身份验证后,Cassandra 会自动创建一个默认超级用户 cassandra(密码为 cassandra)。这是一个广为人知的超级用户,您不应将此用户用于生产环境。此外,通过此超级用户进行身份验证需要仲裁一致性。因此,通过此用户进行身份验证的所有 Cassandra 连接都需要更严格的一致性,从而导致性能较慢且容错能力较差。
- 典型的工作流将涉及在 Cassandra 中启用身份验证,同时通过配置文件传递自定义用户名和密码。这将创建自定义用户和密码,您可以安全地使用它们来满足您的需求,并且通过此类用户进行身份验证没有仲裁一致性限制。
- 请注意,即使已创建自定义用户,Cassandra 仍会创建默认的 cassandra 超级用户,并且您的 Cassandra 集群可通过该超级用户访问。在 Apigee 中全面成功启用 Cassandra 身份验证后,您通常应使用 ALTER ROLE 命令将此 cassandra 用户的密码更改为默认密码 cassandra 以外的其他密码。请记录此密码以供日后参考。
- 您不应更改 edge-* 组件用于身份验证的角色的密码,因为这会立即导致服务中断。相反,您应该创建一个全新的用户,修改 edge-* 组件以使用新用户,并在完成后使用 DROP ROLE 命令删除旧用户。
- 如需更改 edge-* 组件用于 Cassandra 身份验证的角色,请按以下步骤操作:
- 按照启用身份验证部分中的步骤创建新用户。请注意,如果您的集群中已启用身份验证,并且您已更改 cassandra 用户的密码,则需要通过
CASS_EXISTING_USERNAME和CASS_EXISTING_PASSWORD传递现有用户的用户名/密码组合。 - 完成后,通过 cqlsh 验证您是否能够通过旧用户和新用户连接到 Cassandra。
- 按照更新连接到 Cassandra 的 Edge 组件中的说明,将所有 edge-* 组件指向新创建的用户,以连接到 Cassandra。
- 最后,当所有组件都使用新用户与 Cassandra 通信时,您可以使用
DROP ROLE命令删除旧用户。请注意,不应删除默认的 cassandra 角色。您可以删除任何未被 edge-* 组件用于与 Cassandra 通信的自定义创建的角色。
- 按照启用身份验证部分中的步骤创建新用户。请注意,如果您的集群中已启用身份验证,并且您已更改 cassandra 用户的密码,则需要通过
- 请务必在用于安装或升级 Edge 组件的 配置文件 中更新功能性 Cassandra 用户名和密码。这将消除或最大限度地减少 Edge 操作期间的任何中断。
在 安装期间启用 Cassandra 身份验证
您可以在安装时启用 Cassandra 身份验证。
如需在安装时启用 Cassandra 身份验证,请在所有 Cassandra 节点的配置文件中添加 CASS_AUTH
属性:
CASS_AUTH=y # The default value is n.
以下 Edge 组件会访问 Cassandra:
- 管理服务器
- 消息处理器
- 路由器
- Qpid 服务器
- Postgres 服务器
安装这些组件时,您必须在 配置文件中设置用户名和密码:
CASS_USERNAME=cassandra_username CASS_PASSWORD=cassandra_password
您可以在安装 Cassandra 后更改 Cassandra 凭据。但是,如果您已安装管理服务器、消息处理器、路由器、Qpid 服务器或 Postgres 服务器,则还必须更新这些组件以使用新凭据。
如需在安装 Cassandra 后更改 Cassandra 凭据,请执行以下操作:
- 使用
cqlsh工具和默认 凭据登录到任何一个 Cassandra 节点。您只需在一个节点上更改密码,该密码就会广播到环中的所有 Cassandra 节点:/opt/apigee/apigee-cassandra/bin/cqlsh cassIP 9042 -u cassandra_username -p cassandra_password
其中:
- cassIP 是 Cassandra 节点的 IP 地址。
- 9042 是默认的 Cassandra 端口。
- 在 cqlsh> 提示符下执行以下命令以更新密码:
ALTER ROLE <username> WITH PASSWORD='
'; - 退出
cqlsh工具,如以下示例所示:exit
- 如果您尚未 安装管理服务器、消息处理器、
路由器、Qpid 服务器或 Postgres 服务器,请在
配置文件中设置以下属性,然后安装这些组件:
CASS_USERNAME=cassandra_username CASS_PASSWORD=new_cassandra_password
- 如果您已 安装管理服务器、消息 处理器、路由器、Qpid 服务器或 Postgres 服务器,请参阅 重置 Edge 密码,了解如何更新这些 组件以使用新密码。
在安装后启用 Cassandra 身份验证
如需在安装后启用身份验证,请执行以下操作:
- 使用 Cassandra 用户名和 密码更新所有连接到 Cassandra 的 Edge 组件。
- 在所有 Cassandra 节点上启用身份验证,并在任何一个节点上设置 Cassandra 用户名和密码。您只需在一个 Cassandra 节点上更改 凭据,这些凭据就会广播到环中的所有 Cassandra 节点。
更新连接到 Cassandra 的 Edge 组件
使用以下过程更新所有使用新凭据与 Cassandra 通信的 Edge 组件。请注意,您需要在实际更新 Cassandra 凭据之前执行此步骤:
- 在管理服务器节点上,运行以下命令:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server store_cassandra_credentials -u cassandra_username -p cassandra_password
您也可以选择将包含新用户名和密码的文件传递给该命令:
apigee-service edge-management-server store_cassandra_credentials -f configFile
其中,configFile 包含以下内容:
CASS_USERNAME=cassandra_username # Default is cassandra CASS_PASSWORD='cassandra_password' # Default is cassandra; wrap in single quotes if it includes special chars
此命令会自动重启管理服务器。
- 对于以下每项服务,重复第 1 步:
- 所有消息处理器
- 所有路由器
- 所有 Qpid 服务器 (edge-qpid-server)
- Postgres 服务器 (edge-postgres-server)
为每项服务重复第 1 步时,请将上述命令中的
edge-management-server替换为相应的服务名称。例如,当您为 路由器服务执行该步骤时,请使用以下命令:/opt/apigee/apigee-service/bin/apigee-service edge-router store_cassandra_credentials -u cassandra -p cassandra
启用身份验证
使用以下过程启用 Cassandra 身份验证并设置用户名和 密码:
- 创建一个静默配置文件,其中包含以下内容:
# Specify IP address or DNS name of cassandra node IP1=192.168.1.1 IP2=192.168.1.2 IP3=192.168.1.3 # Must resolve to IP address or DNS name of host HOSTIP=$(hostname -i) # Set to ‘y’ to enable Cassandra authentication. CASS_AUTH=y # Possible values are ‘y/n’ # Cassandra username. If it does not exist, this user would be created as a SUPERUSER CASS_USERNAME=cassandra_username # Default value is cassandra - don't use for production # Cassandra Password. If CASS_USERNAME does not exist, create SUPERUSER with this as password CASS_PASSWORD=cassandra_password # Default value is cassandra - don't use for production # Space-separated IP/DNS names of the Cassandra hosts CASS_HOSTS="$IP1:1,1 $IP2:1,1 $IP3:1,1" # Username of an existing C* user. Only needed if you have disabled or changed details of the default cassandra user(‘cassandra’) CASS_EXISTING_USERNAME=existing_cassandra_username # Password of an existing C* user. Only needed if you have disabled or change password of the default cassandra user(‘cassandra’) CASS_EXISTING_PASSWORD=existing_cassandra_password # Cassandra port CASS_PORT=9042 # The default port is 9042.
登录到第一个 Cassandra 节点并执行以下命令:
apigee-service apigee-cassandra enable_cassandra_authentication -f CONFIG
您也可以选择将属性作为命令实参传递给脚本,如以下 示例所示:
CASS_AUTH=y HOSTIP=$(hostname -i) CASS_PORT=9042 CASS_EXISTING_USERNAME=existing_cassandra_username CASS_EXISTING_PASSWORD=existing_cassandra_password CASS_USERNAME=cassandra_username CASS_PASSWORD=cassandra_password CASS_HOSTS="192.168.1.1:1,1 192.168.1.2:1,1 192.168.1.3:1,1" apigee-service apigee-cassandra enable_cassandra_authentication
注意 :
- 对于默认 Cassandra 凭据,上述命令会启用 Cassandra 身份验证并重启 Cassandra。
- 对于非默认凭据,该命令还会更改复制因子、创建一
个超级用户,并对
system_auth keyspace运行修复。
- 在所有 Cassandra 节点上重复第 1 步和第 2 步。