LDAP
轻量目录访问协议(Lightweight Directory Access Protocol 或 LDAP)是业界通行的标准协议。它允许用户通过网络访问和维护文件目录信息。但通常情况下,LDAP服务器主要用于集中式用户验证。TigerGraph支持LDAP,用户可以通过LDAP的用户名和密码直接登录TigerGraph系统。在使用LDAP验证用户账户时,GSQL服务器会联系LDAP服务器获取对应用户的信息。

支持的功能

GSQL支持任何遵循LDAPv3标准协议建立的LDAP服务器,同时也支持StartTLS/SSL连接。
当前版本不支持SASL验证。某些LDAP服务器可能要求客户端发送验证请求时提交证书,然而当前版本的GSQL的LDAP验证不支持客户端证书。

将用户从LDAP映射到GSQL

为了方便管理用户的身份和权限,TigerGraph的GSQL服务器引入了两个概念:代理用户(proxy user)和代理用户组(proxy group)

代理用户

每个代理用户对应一个LDAP用户。外部LDAP用户具体有哪些身份权限,取决于对应的代理用户拥有的权限。

代理用户组

代理用户组是一个由GSQL用户组成的组,它用于管理一组有着类似属性的LDAP用户。
当一个LDAP用户登录GSQL时,它必须满足至少一条现有的代理用户组规则。一旦满足,则该代理用户组中就会生成一个与该LDAP用户对应的代理用户。代理用户的身份权限必须至少不小于它所在的代理用户组的权限。我们可以针对某一个代理用户单独修改它的权限。如果某个代理用户组的权限有变动,则其中的所有的代理用户的权限也会跟着变动。

配置GSQL的LDAP验证

启用TigerGraph的LDAP验证有两个主要步骤:
  1. 1.
    配置LDAP连接
  2. 2.
    配置GSQL代理用户组和代理用户
为了方便优化LDAP配置参数,我们建议你掌握一些有关LDAP的基础知识,请参考:https://www.ldap.com/basic-ldap-concepts

步骤1 - 配置LDAP连接

配置和启动LDAP要用到以下三条命令:
配置 LDAP:
gadmin --configure ldap
gadmin工具会提示用户输入LDAP配置参数。
启用该配置:
gadmin config-apply
重启GSQL服务:
gadmin restart gsql -y
下面是一个实际案例:
例: gadmin --configure ldap
$ gadmin --configure ldap
# Enable LDAP authentication: default false
security.ldap.enable [False]: true
True
# Configure LDAP server hostname: default localhost
security.ldap.host [ldap.tigergraph.com]: ldap.tigergraph.com
ldap.tigergraph.com
# Configure LDAP server port: default 389
security.ldap.port [389]: 389
389
# Configure LDAP search base DN, the root node to start the LDAP search for user authentication: must specify
security.ldap.base_dn [dc=tigergraph,dc=com]: dc=tigergraph,dc=com
dc=tigergraph,dc=com
# Configure LDAP search base DN, the root node to start the LDAP search for user authentication.
security.ldap.search_filter [(objectClass=*)]:
(objectClass=*)
# Configure the username attribute name in LDAP server: default uid
security.ldap.username_attribute [uid]: uid
uid
# Configure the DN of LDAP user who has read access to the base DN specified above. Empty if everyone has read access to LDAP data: default empty
security.ldap.admin_dn [cn=Manager,dc=tigergraph,dc=com]: cn=Manager,dc=tigergraph,dc=com
cn=Manager,dc=tigergraph,dc=com
# Configure the password of the admin DN specified above. Needed only when admin_dn is specified: default empty
security.ldap.admin_password [secret]: secret
secret
# Enable SSL/StartTLS for LDAP connection [none/ssl/starttls]: default none
security.ldap.secure.protocol [starttls]: none
none
# Configure the truststore path for the certificates used in SSL: default empty
security.ldap.secure.truststore_path [/tmp/ca_server.pkcs12]:
/tmp/ca_server.pkcs12
# Configure the truststore format [JKS/PKCS12]: default JKS
security.ldap.secure.truststore_format [pkcs12]:
pkcs12
# Configure the truststore password: default changeit
security.ldap.secure.truststore_password [test]:
test
# Configure to trust all LDAP servers (unsafe): default false
security.ldap.secure.trust_all [False]: false
以下是每个配置参数的具体解释:
security.ldap.enable
若设为"true"即开启LDAP; 设为"false"即关闭LDAP.
security.ldap.host
配置LDAP服务器主机名.
security.ldap.port
配置LDAP服务器端口号.
security.ldap.base_dn
配置基础可辨识名(即Distinguished Name或Base DN), 该参数帮助GSQL在LDAP上检索用户.
security.ldap.search_filter
若配置了检索过滤器(可选),则GSQL只会按照预定的条件搜索符合要求的LDAP用户。过滤器格式必须严格符合LDAP规范(例如条件必须用括号括起来等等)。不同过滤器的比较请参阅:https://www.ldap.com/ldap-filters。官方发布的LDAP过滤器规范请参阅:https://docs.ldap.com/specs/rfc4515.txt
security.ldap.username_attribute
本参数定义了在LDAP上检索用户名时需要查找的属性名。例如,在上面的配置示例中,登录时附加了“-u john”参数,这意味着GSQL服务器会去LDAP服务器上寻找uid为john的用户,并在找到后验证身份。
security.ldap.admin_password & security.ldap.admin_dn
若LDAP服务器为非公共开放服务时,GSQL想要登录LDAP需要用到管理员DN以及对应的密码。
security.ldap.secure.protocol
本参数若设为none,则表示TigerGraph将使用非安全LDAP连接;而若要使用安全连接,则可以将其改成starttls或ssl。
security.ldap.secure.truststore_path & security.ldap.secure.truststore_password
当使用starttls或ssl时,需要配置对应的受信存储路径(truststore path)和对应密码。
security.ldap.secure.truststore_format
当前版本下,TigerGraph支持两种形式的受信存储格式:pkcs12和jks
security.ldap.secure.trust_all
若配置了该参数,则GSQL会信任所有LDAP服务器。

步骤 2 - 配置GSQL代理用户组和用户

本章节将介绍如何配置一个GSQL代理用户组,从而允许LDAP用户前来验证。
配置代理用户组
可以使用CREATE GROUP命令基于某条代理规则建立GSQL代理用户组。举个例子,假设LDAP目录中有一个属性叫做“role”,而“engineering”是“role”属性的一个值。则我们可以根据代理规则"role=engineering"创建代理用户组。一个代理用户组可以包含多条代理规则,下面便是一个实际案例。当用户登录时,GSQL服务器随即在LDAP目录中检索用户。如果该用户复合某个已有代理用户组中的某条代理规则,则系统便会为其创建一个代理用户用于登录系统。
CREATE GROUP 命令
# create a proxy group
CREATE GROUP developers PROXY "role=engineering" // Any user in LDAP with role=engineer is proxied to the group 'developers'
# grant role to proxy group
GRANT ROLE querywriter ON GRAPH computerNet TO developers
SHOW GROUP命令用于显示一个代理用户组的具体信息。DROP GROUP命令则用于删除一个组。
SHOW GROUP 和 DROP GROUP 命令
# show the current groups
SHOW GROUP
# delete a proxy group
DROP GROUP developers
只有拥有管理员或超级用户权限的账户才能创建、列出或删除一个组。

代理用户

代理用户不需要配置。只要符合某条代理规则,则对应代理用户便会自动创建。代理用户和普通用户很类似。它们的唯一的区别在于,在GSQL中不能修改代理用户的密码,同时代理用户的权限来继承于所属的代理用户组。