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

使用安全集成进行身份验证

使用安全集成将 StarRocks 与外部身份验证系统集成。

通过在 StarRocks 集群中创建安全集成,您可以允许外部身份验证服务访问 StarRocks。 使用安全集成,您无需在 StarRocks 中手动创建用户。 当用户尝试使用外部身份登录时,StarRocks 将根据 authentication_chain 中的配置使用相应的安全集成来验证用户身份。 身份验证成功并且允许用户登录后,StarRocks 会在会话中为用户创建一个虚拟用户以执行后续操作。

请注意,如果您使用安全集成来配置外部身份验证方法,则还必须将 StarRocks 与 Apache Ranger 集成以启用外部授权。 目前,不支持将安全集成与 StarRocks 本地授权集成。

您还可以为 StarRocks 启用群组提供程序,以访问外部身份验证系统中的群组信息,从而允许在 StarRocks 中创建、验证和授权用户群组。

在特定情况下,也支持手动创建和管理具有外部身份验证服务的用户。 有关更多说明,您可以参考另请参阅

创建安全集成

目前,StarRocks 的安全集成支持以下身份验证系统

  • LDAP
  • JSON Web Token (JWT)
  • OAuth 2.0
注意

创建安全集成时,StarRocks 不提供连接检查。

使用 LDAP 创建安全集成

语法

CREATE SECURITY INTEGRATION <security_integration_name> 
PROPERTIES (
"type" = "authentication_ldap_simple",
"authentication_ldap_simple_server_host" = "",
"authentication_ldap_simple_server_port" = "",
"authentication_ldap_simple_bind_base_dn" = "",
"authentication_ldap_simple_user_search_attr" = ""
"authentication_ldap_simple_bind_root_dn" = "",
"authentication_ldap_simple_bind_root_pwd" = "",
"authentication_ldap_simple_ssl_conn_allow_insecure" = "{true | false}",
"authentication_ldap_simple_ssl_conn_trust_store_path" = "",
"authentication_ldap_simple_ssl_conn_trust_store_pwd" = "",
"comment" = ""
)

参数

security_integration_name
  • 是否必须:是
  • 描述:安全集成的名称。
    注意
    安全集成名称是全局唯一的。 您不能将此参数指定为 native
type
  • 是否必须:是
  • 描述:安全集成的类型。 将其指定为 authentication_ldap_simple
authentication_ldap_simple_server_host
  • 是否必须:否
  • 描述:LDAP 服务的 IP 地址。 默认值:127.0.0.1
authentication_ldap_simple_server_port
  • 是否必须:否
  • 描述:LDAP 服务的端口。 默认值:389
authentication_ldap_simple_bind_base_dn
  • 是否必须:是
  • 描述:集群搜索的 LDAP 用户的基本可分辨名称 (DN)。
authentication_ldap_simple_user_search_attr
  • 是否必须:是
  • 描述:用于登录 LDAP 服务的用户的属性,例如 uid
authentication_ldap_simple_bind_root_dn
  • 是否必须:是
  • 描述:LDAP 服务的管理员 DN。
authentication_ldap_simple_bind_root_pwd
  • 是否必须:是
  • 描述:LDAP 服务的管理员密码。
authentication_ldap_simple_ssl_conn_allow_insecure
  • 是否必须:否
  • 描述:是否允许与 LDAP 服务器建立非加密连接。 默认值:true。 将此值设置为 false 表示需要 SSL 加密才能访问 LDAP。
authentication_ldap_simple_ssl_conn_trust_store_path
  • 是否必须:否
  • 描述:用于存储 LDAP 服务器的 SSL CA 证书的本地路径。 支持 pem 和 jks 格式。 如果证书是由受信任的组织颁发的,则无需设置此项。
ldap_ssl_conn_trust_store_pwd
  • 是否必须:否
  • 描述:用于访问 LDAP 服务器的本地存储的 SSL CA 证书的密码。 pem 格式的证书不需要密码。 只有 jsk 格式的证书需要。
group_provider
  • 是否必须:否
  • 描述:要与安全集成组合的群组提供程序名称。 多个群组提供程序用逗号分隔。 设置后,StarRocks 将在每次登录时记录指定提供程序下用户的群组信息。 自 v3.5 起支持。 有关启用群组提供程序的详细说明,请参阅验证用户群组
permitted_groups
  • 是否必须:否
  • 描述:允许其成员登录 StarRocks 的群组名称。 多个群组用逗号分隔。 确保指定的群组可以通过组合群组提供程序检索。 自 v3.5 起支持。
comment
  • 是否必须:否
  • 描述:安全集成的描述。

使用 JWT 创建安全集成

语法

CREATE SECURITY INTEGRATION <security_integration_name> 
PROPERTIES (
"type" = "jwt",
"jwks_url" = "",
"principal_field" = "",
"required_issuer" = "",
"required_audience" = ""
"comment" = ""
)

参数

security_integration_name
  • 是否必须:是
  • 描述:安全集成的名称。
    注意
    安全集成名称是全局唯一的。 您不能将此参数指定为 native
type
  • 是否必须:是
  • 描述:安全集成的类型。 将其指定为 jwt
jwks_url
  • 是否必须:是
  • 描述:JSON Web Key Set (JWKS) 服务的 URL 或 fe/conf 目录下本地文件的路径。
principal_field
  • 是否必须:是
  • 描述:用于标识 JWT 中指示主题 (sub) 的字段的字符串。 默认值为 sub。 此字段的值必须与登录 StarRocks 的用户名相同。
required_issuer
  • 是否必须:否
  • 描述:用于标识 JWT 中颁发者 (iss) 的字符串列表。 仅当列表中的一个值与 JWT 颁发者匹配时,JWT 才被认为是有效的。
required_audience
  • 是否必须:否
  • 描述:用于标识 JWT 中受众 (aud) 的字符串列表。 仅当列表中的一个值与 JWT 受众匹配时,JWT 才被认为是有效的。
comment
  • 是否必须:否
  • 描述:安全集成的描述。

使用 OAuth 2.0 创建安全集成

语法

CREATE SECURITY INTEGRATION <security_integration_name> 
PROPERTIES (
"type" = "authentication_oauth2",
"auth_server_url" = "",
"token_server_url" = "",
"client_id" = "",
"client_secret" = "",
"redirect_url" = "",
"jwks_url" = "",
"principal_field" = "",
"required_issuer" = "",
"required_audience" = ""
"comment" = ""
)

参数

security_integration_name
  • 是否必须:是
  • 描述:安全集成的名称。
    注意
    安全集成名称是全局唯一的。 您不能将此参数指定为 native
auth_server_url
  • 是否必须:是
  • 描述:授权 URL。 用户浏览器将被重定向到的 URL,以便开始 OAuth 2.0 授权过程。
token_server_url
  • 是否必须:是
  • 描述:授权服务器上 StarRocks 获取访问令牌的端点的 URL。
client_id
  • 是否必须:是
  • 描述:StarRocks 客户端的公共标识符。
client_secret
  • 是否必须:是
  • 描述:用于授权 StarRocks 客户端与授权服务器的密钥。
redirect_url
  • 是否必须:是
  • 描述:在 OAuth 2.0 身份验证成功后,用户的浏览器将被重定向到的 URL。 授权码将发送到此 URL。 在大多数情况下,需要将其配置为 http://<starrocks_fe_url>:<fe_http_port>/api/oauth2
type
  • 是否必须:是
  • 描述:安全集成的类型。 将其指定为 authentication_oauth2
jwks_url
  • 是否必须:是
  • 描述:JSON Web Key Set (JWKS) 服务的 URL 或 fe/conf 目录下本地文件的路径。
principal_field
  • 是否必须:是
  • 描述:用于标识 JWT 中指示主题 (sub) 的字段的字符串。 默认值为 sub。 此字段的值必须与登录 StarRocks 的用户名相同。
required_issuer
  • 是否必须:否
  • 描述:用于标识 JWT 中颁发者 (iss) 的字符串列表。 仅当列表中的一个值与 JWT 颁发者匹配时,JWT 才被认为是有效的。
required_audience
  • 是否必须:否
  • 描述:用于标识 JWT 中受众 (aud) 的字符串列表。 仅当列表中的一个值与 JWT 受众匹配时,JWT 才被认为是有效的。
comment
  • 是否必须:否
  • 描述:安全集成的描述。

配置身份验证链

创建安全集成后,它将作为新的身份验证方法添加到 StarRocks 集群。 您必须通过 FE 动态配置项 authentication_chain 设置身份验证方法的顺序来启用安全集成。

ADMIN SET FRONTEND CONFIG (
"authentication_chain" = "<security_integration_name>[... ,]"
);
注意
  • StarRocks 优先为本地用户进行本地身份验证。 如果不存在具有相同用户名的本地用户,则按照 authentication_chain 配置的顺序执行身份验证。 如果使用本地身份验证方法登录失败,则集群将尝试指定顺序中的下一种身份验证方法。
  • 您可以在 authentication_chain 中指定多个安全集成,但 OAuth 2.0 安全集成除外。 您不能指定多个 OAuth 2.0 安全集成,也不能将一个 OAuth 2.0 安全集成与其他安全集成一起指定。

您可以使用以下语句检查 authentication_chain 的值

ADMIN SHOW FRONTEND CONFIG LIKE 'authentication_chain';

管理安全集成

修改安全集成

您可以使用以下语句修改现有安全集成的配置

ALTER SECURITY INTEGRATION <security_integration_name> SET
(
"key"="value"[, ...]
)
注意

您无法更改安全集成的 type

删除安全集成

您可以使用以下语句删除现有安全集成

DROP SECURITY INTEGRATION <security_integration_name>

查看安全集成

您可以使用以下语句查看集群中的所有安全集成

SHOW SECURITY INTEGRATIONS;

示例

SHOW SECURITY INTEGRATIONS;
+--------+--------+---------+
| Name | Type | Comment |
+--------+--------+---------+
| LDAP1 | LDAP | NULL |
+--------+--------+---------+
参数描述
名称安全集成的名称。
类型安全集成的类型。
注释安全集成的描述。 如果未为安全集成指定描述,则返回 NULL

您可以使用以下语句检查安全集成的详细信息

SHOW CREATE SECURITY INTEGRATION <integration_name>

示例

SHOW CREATE SECURITY INTEGRATION LDAP1;

+----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Security Integration | Create Security Integration |
+----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| LDAP1 | CREATE SECURITY INTEGRATION LDAP1
PROPERTIES (
"type" = "authentication_ldap_simple",
"authentication_ldap_simple_server_host" = "",
"authentication_ldap_simple_server_port" = "",
"authentication_ldap_simple_bind_base_dn" = "",
"authentication_ldap_simple_user_search_attr" = ""
"authentication_ldap_simple_bind_root_dn" = "",
"authentication_ldap_simple_bind_root_pwd" = "",
"authentication_ldap_simple_ssl_conn_allow_insecure" = "{true | false}",
"authentication_ldap_simple_ssl_conn_trust_store_path" = "",
"authentication_ldap_simple_ssl_conn_trust_store_pwd" = "",
"comment" = ""
)|
+----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
注意

执行 SHOW CREATE SECURITY INTEGRATION 时,ldap_bind_root_pwd 会被屏蔽。

另请参阅