验证用户组
在 StarRocks 中启用组提供程序,以验证和授权来自外部身份验证系统的用户组。
从 v3.5.0 版本开始,StarRocks 支持组提供程序从外部身份验证系统收集组信息,以进行用户组管理。
概述
为了深化其与外部用户身份验证和授权系统(例如 LDAP、OpenID Connect、OAuth 2.0 和 Apache Ranger)的集成,StarRocks 支持收集用户组信息,以获得更好的集体用户管理体验。
通过组提供程序,您可以从外部用户系统获取组信息用于不同的目的。组信息是独立的,可以灵活地集成到身份验证、授权或其他流程中,而无需与任何特定的工作流程紧密耦合。
组提供程序本质上是用户和组之间的映射。任何需要组信息的过程都可以根据需要查询此映射。
工作流程
以下流程图以 LDAP 和 Apache Ranger 为例,说明了组提供程序的工作流程。
创建组提供程序
StarRocks 支持三种类型的组提供程序
- LDAP 组提供程序:在您的 LDAP 服务中搜索用户并将其与组匹配
- Unix 组提供程序:在您的操作系统中搜索用户并将其与组匹配
- 文件组提供程序:搜索用户并将其与文件定义的组匹配
语法
-- LDAP group provider
CREATE GROUP PROVIDER <group_provider_name>
PROPERTIES (
"type" = "ldap",
ldap_info,
ldap_search_group_arg,
ldap_search_attr,
[ldap_cache_attr]
)
ldap_info ::=
"ldap_conn_url" = "",
"ldap_bind_root_dn" = "",
"ldap_bind_root_pwd" = "",
"ldap_bind_base_dn" = "",
["ldap_conn_timeout" = "",]
["ldap_conn_read_timeout" = ""]
["ldap_ssl_conn_allow_insecure" = ""]
["ldap_ssl_conn_trust_store_path" = ""]
["ldap_ssl_conn_trust_store_pwd" = ""]
ldap_search_group_arg ::=
{ "ldap_group_dn" = ""
| "ldap_group_filter" = "" },
"ldap_group_identifier_attr" = ""
ldap_search_user_arg ::=
"ldap_group_member_attr" = "",
"ldap_user_search_attr" = ""
ldap_cache_arg ::=
"ldap_cache_refresh_interval" = ""
-- Unix group provider
CREATE GROUP PROVIDER <group_provider_name>
PROPERTIES (
"type" = "unix"
)
-- File group provider
CREATE GROUP PROVIDER <group_provider_name>
PROPERTIES (
"type" = "file",
"group_file_url" = ""
)
参数
type
要创建的组提供程序的类型。有效值
ldap
:创建 LDAP 组提供程序。设置此值时,您需要指定ldap_info
、ldap_search_group_arg
、ldap_search_user_arg
,以及可选的ldap_cache_arg
。unix
:创建 Unix 组提供程序。file
:创建文件组提供程序。设置此值时,您需要指定group_file_url
。
ldap_info
用于连接到您的 LDAP 服务的信息。
ldap_conn_url
您的 LDAP 服务的 URL。格式:ldap://<ldap_server_host>:<ldap_server_port>)
。
ldap_bind_root_dn
您的 LDAP 服务的管理员 Distinguished Name (DN)。
ldap_bind_root_pwd
您的 LDAP 服务的管理员密码。
ldap_bind_base_dn
集群搜索的 LDAP 用户的基本 DN。
ldap_conn_timeout
连接到您的 LDAP 服务的超时时长。
ldap_conn_read_timeout
可选。连接到您的 LDAP 服务中的读取操作的超时时长。
ldap_ssl_conn_allow_insecure
可选。是否允许与 LDAP 服务器的非加密连接。默认值:true
。将此值设置为 false
表示需要 SSL 加密才能访问 LDAP。
ldap_ssl_conn_trust_store_path
可选。存储 LDAP 服务器的 SSL CA 证书的本地路径。支持 pem 和 jks 格式。如果证书由受信任的组织颁发,则无需设置此项。
ldap_ssl_conn_trust_store_pwd
可选。用于访问 LDAP 服务器本地存储的 SSL CA 证书的密码。pem 格式的证书不需要密码。只有 jsk 格式的证书才需要。
ldap_search_group_arg
用于控制 StarRocks 如何搜索组的参数。
您只能指定 ldap_group_dn
或 ldap_group_filter
。不支持同时指定两者。
ldap_group_dn
要搜索的组的 DN。将使用此 DN 直接查询该组。示例:"cn=ldapgroup1,ou=Group,dc=starrocks,dc=com;cn=ldapgroup2,ou=Group,dc=starrocks,dc=com"
。
ldap_group_filter
LDAP 服务器可以识别的自定义组过滤器。它将直接发送到您的 LDAP 服务器以搜索组。示例:(&(objectClass=groupOfNames)(cn=testgroup))
。
ldap_group_identifier_attr
用作组名称标识符的属性。
ldap_search_user_arg
用于控制 StarRocks 如何识别组中用户的参数。
ldap_group_member_attr
表示组成员的属性。有效值:member
和 memberUid
。
ldap_user_search_attr
指定如何从成员属性值中提取用户标识符。您可以显式定义属性(例如,cn
或 uid
)或使用正则表达式。
ldap_cache_arg
用于定义 LDAP 组信息缓存行为的参数。
ldap_cache_refresh_interval
可选。StarRocks 自动刷新缓存的 LDAP 组信息的间隔。单位:秒。默认值:900
。
group_file_url
定义用户组的文件 URL 或相对路径(在 fe/conf
下)。
组文件包含组及其成员的列表。您可以在每行定义一个组,其中组名和成员用冒号分隔。多个用户用逗号分隔。示例:group_name:user_1,user_2,user_3
。
示例
假设 LDAP 服务器包含以下组和成员信息。
-- Group information
# testgroup, Group, starrocks.com
dn: cn=testgroup,ou=Group,dc=starrocks,dc=com
objectClass: groupOfNames
cn: testgroup
member: uid=test,ou=people,dc=starrocks,dc=com
member: uid=tom,ou=people,dc=starrocks,dc=com
-- User information
# test, People, starrocks.com
dn: cn=test,ou=People,dc=starrocks,dc=com
objectClass: inetOrgPerson
cn: test
uid: test
sn: FTE
userPassword::
为 testgroup
中的成员创建组提供程序 ldap_group_provider
CREATE GROUP PROVIDER ldap_group_provider
PROPERTIES(
"type"="ldap",
"ldap_conn_url"="ldap://xxxx:xxx",
"ldap_bind_root_dn"="cn=admin,dc=starrocks,dc=com",
"ldap_bind_root_pwd"="123456",
"ldap_bind_base_dn"="dc=starrocks,dc=com",
"ldap_group_filter"="(&(objectClass=groupOfNames)(cn=testgroup))",
"ldap_group_identifier_attr"="cn",
"ldap_group_member_attr"="member",
"ldap_user_search_attr"="uid=([^,]+)"
)
上面的示例使用 ldap_group_filter
搜索具有 groupOfNames
objectClass 和 cn
为 testgroup
的组。因此,在 ldap_group_identifier_attr
中指定 cn
来标识组。ldap_group_member_attr
设置为 member
,以便在 groupOfNames
objectClass 中使用 member
属性来标识成员。ldap_user_search_attr
设置为表达式 uid=([^,]+)
,用于标识 member
属性中的用户。
将组提供程序与安全集成结合
创建组提供程序后,您可以将其与安全集成结合,以允许组提供程序指定的用户登录 StarRocks。有关创建安全集成的更多信息,请参阅使用安全集成进行身份验证。
语法
ALTER SECURITY INTEGRATION <security_integration_name> SET
(
"group_provider" = "",
"permitted_groups" = ""
)
参数
group_provider
要与安全集成结合的组提供程序的名称。多个组提供程序用逗号分隔。设置后,StarRocks 将在每次登录时记录每个指定提供程序下的用户组信息。
permitted_groups
可选。允许其成员登录 StarRocks 的组的名称。多个组用逗号分隔。确保指定的组可以被组合的组提供程序检索。
示例
ALTER SECURITY INTEGRATION LDAP SET
(
"group_provider"="ldap_group_provider",
"permitted_groups"="testgroup"
);
将组提供程序与外部授权系统(Apache Ranger)结合
在安全集成中配置关联的组提供程序后,StarRocks 将在登录时记录用户的组信息。然后,此组信息将自动包含在与 Ranger 的授权过程中,无需额外的配置。
有关将 StarRocks 与 Ranger 集成的更多说明,请参阅使用 Apache Ranger 管理权限。