跳到主要内容
版本: 最新版本-3.5

验证用户组

在 StarRocks 中启用组提供程序,以验证和授权来自外部身份验证系统的用户组。

从 v3.5.0 版本开始,StarRocks 支持组提供程序从外部身份验证系统收集组信息,以进行用户组管理。

概述

为了深化其与外部用户身份验证和授权系统(例如 LDAP、OpenID Connect、OAuth 2.0 和 Apache Ranger)的集成,StarRocks 支持收集用户组信息,以获得更好的集体用户管理体验。

通过组提供程序,您可以从外部用户系统获取组信息用于不同的目的。组信息是独立的,可以灵活地集成到身份验证、授权或其他流程中,而无需与任何特定的工作流程紧密耦合。

组提供程序本质上是用户和组之间的映射。任何需要组信息的过程都可以根据需要查询此映射。

工作流程

以下流程图以 LDAP 和 Apache Ranger 为例,说明了组提供程序的工作流程。

Group Provider

创建组提供程序

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_infoldap_search_group_argldap_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_dnldap_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

表示组成员的属性。有效值:membermemberUid

ldap_user_search_attr

指定如何从成员属性值中提取用户标识符。您可以显式定义属性(例如,cnuid)或使用正则表达式。

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 和 cntestgroup 的组。因此,在 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 管理权限