暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Apache Cassandra 4.1特性:支持CQLSH的认证插件

原创 简单 2022-08-30
576

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

最后修改时间:2022-08-30 18:38:32
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论