Apache Cassandra的认证是高度可扩展的。用户可以创建插件来添加认证方法,如Kerberos、SigV4和SAML,以便连接服务器。
不幸的是,这种支持并没有得到广泛的应用。CQL shell (CQLSH)是与Cassandra系统交互的基本工具,它没有利用这一机制。这导致用户创建自己的工具来与Cassandra数据库交互。
在Cassandra 4.1中,我们在CASSANDRA-16456中增加了对认证插件的支持,可以在CQL shell中使用任何Python认证机制。
如何工作?
每个插件都是安装在Python模块路径中的一个库。通常情况下,最简单的安装方法是使用 pip。例如,要安装sigv4版本:
$ pip install cassandra-sigv4
每个认证插件都包含一个Python类,用在客户端代码中。这些类有一个构造函数和参数。下面是PlainTextAuthProvider的一个简单例子:
class PlainTextAuthProvider(AuthProvider):
"""
An :class:`~.AuthProvider` that works with Cassandra's PasswordAuthenticator.
Example usage::
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
auth_provider = PlainTextAuthProvider(username='cassandra', password='cassandra')
cluster = Cluster(auth_provider=auth_provider)
"""
def __init__(self, username, password):
self.username = username
self.password = password
def new_authenticator(self, host):
return PlainTextAuthenticator(self.username, self.password)
要在CQLSH中使用这个,只需简单地在cqlshrc文件(默认为 ~/.cassandra/cqlshrc )中添加一个auth_provider。
auth_provider详细说明了一个module的类路径和类名。因此,如果我们有mycassandra.auth.foo.BarAuthProvider,我们要在CQLSH使用它,需要在cqlshrc中指定它:
[auth_provider]
module = mycassandra.auth.foo
class = BarAuthProvider
添加参数
要指定非加密属性,我们可以在同一节中添加名称。因此,如果BarAuthProvider有一个构造函数,它传入名为property1的参数,可以在cqlshrc中添加property1来指定它:
[auth_provider]
module = mycassandra.auth.foo
class = BarAuthProvider
property1 = value
加密参数
认证通常涉及使用加密属性。为了确保这些属性不落入坏人之手,CQLSH使用了一个名为credentials的文件(~/.cassandra/credentials)。
你可以使用这个文件将加密属性传给认证提供者。要做到这一点,在凭证文件中创建一个带有类名的小节,然后将参数作为值传入。
我们假设BarAuthProvider在其构造函数中使用secret_property2。我们可以通过下面的凭证文件来指定它:
[BarAuthProvider]
secret_property2 = secret1
可运行的例子
这有一个简单可运行的例子,我们使用PlainTextAuthProvider的插件机制,这在CQLSH的提供者已经包含了。假设用户名是user1,密码是pass1。可以通过创建一个CQLSHRC文件,用来配置CQLSH并使用它:
[auth_provider]
module = cassandra.auth
classname = PlainTextAuthProvider
为了确保我的密码是安全的,我将在**~/.cassandra/credentials**中创建一个凭证文件(只有所有者可以读取),并指定我的两个密码:
[PlainTextAuthProvider] username = user1 password = pass1
如果你执行cqlsh,它将自动获取密码和认证方法。例子如下:
$ cqlsh
[cqlsh 6.1.0 | Cassandra 4.1-SNAPSHOT | CQL spec 3.4.5 | Native protocol v5]
Use HELP for help.
user1@cqlsh >
可以持续关注相关安全增强的内容,如CASSANDRA-17501。
原文标题:Apache Cassandra 4.1 Features: Authentication Plugin Support for CQLSH
原文作者:Brian Houser
原文地址:https://cassandra.apache.org/_/blog/Apache-Cassandra-4.1-Features-Authentication-Plugin-Support-for-CQLSH.html




