使用安全集成进行身份验证
使用安全集成将 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
会被屏蔽。
另请参阅
- 有关如何在 StarRocks 中通过 LDAP 手动验证用户的说明,请参阅LDAP 身份验证。
- 有关如何在 StarRocks 中通过 JSON Web Token 手动验证用户的说明,请参阅JSON Web Token 身份验证。
- 有关如何在 StarRocks 中通过 OAuth 2.0 手动验证用户的说明,请参阅OAuth 2.0 身份验证。
- 有关如何验证用户群组的说明,请参阅验证用户群组。