ZooKeeper 访问控制
本节介绍将 ZooKeeper 访问控制列表 (ACL) 与 Solr 配合使用。
有关 ZooKeeper ACL 的信息,请参阅 ZooKeeper ACL 文档。
关于 ZooKeeper ACL
SolrCloud 使用 ZooKeeper 进行共享信息和协调。
本节介绍如何配置 Solr 以向其创建的 ZooKeeper 内容添加更严格的 ACL,以及如何告知 Solr 有关访问 ZooKeeper 中内容所需凭据的信息。如果您希望在 ZooKeeper 节点中使用 ACL,则必须激活此功能;默认情况下,Solr 行为在任何地方都是开放不安全的 ACL,并且不使用任何凭据。
存储在 ZooKeeper 中的内容对于 SolrCloud 集群的操作至关重要。开放访问 ZooKeeper 上的 SolrCloud 内容可能会导致各种问题。例如
-
更改配置可能会导致 Solr 出现故障或以意外的方式运行。
-
将集群状态信息更改为错误或不一致的内容很可能会导致 SolrCloud 集群出现奇怪的行为。
-
添加由 Overseer 执行的删除集合作业将导致从集群中删除数据。
如果你向不信任的实体授予对 ZooKeeper 集群的访问权限,或者你想降低由于以下原因导致的不良行为的风险,则可能需要使用 Solr 启用 ZooKeeper ACL,例如
-
进入系统的恶意软件。
-
使用相同 ZooKeeper 集群的其他系统(“坏事”可能是意外发生的)。
如果你认为 ZooKeeper 中有一些内容不是每个人都应该知道的,你甚至可能想要限制读取访问权限。或者,你可能只是在需要了解的基础上进行工作。
保护 ZooKeeper 本身可能意味着许多不同的内容。本节介绍如何保护 ZooKeeper 中的 Solr 内容。ZooKeeper 内容基本上持久存在于磁盘上和(部分)ZooKeeper 进程的内存中。本节不介绍如何在存储或 ZooKeeper 进程级别保护 ZooKeeper 数据 - 这是 ZooKeeper 要处理的问题。
但此内容还可以通过 ZooKeeper API 对“外部”可用。外部进程可以连接到 ZooKeeper 并创建/更新/删除/读取内容。例如,SolrCloud 集群中的 Solr 节点想要创建/更新/删除/读取,而 SolrJ 客户端想要从集群中读取。创建/更新内容的外部进程负责在内容上设置 ACL。ACL 描述了谁有权读取、更新、删除、创建等。ZooKeeper 中的每条信息(znode/内容)都有自己的一组 ACL,并且无法继承或共享。Solr 中的默认行为是在其创建的所有内容上添加一个 ACL - 一个 ACL 允许任何人执行任何操作(在 ZooKeeper 术语中,这称为“开放不安全 ACL”)。
Solr 到 Zookeeper ACL 工作流
-
Solr 对 Zookeeper 的凭据和 ACL 通过 3 个接口进行控制:
ZkCredentialsInjector
、ZkCredentialsProvider
和ZkACLProvider
。 -
实现这 3 个接口的类通过使用
solr.xml
中定义的属性名称通过系统属性传递给 Solr(有关详细信息,请参阅 配置 solr.xml)。以下为默认属性名称:zkCredentialsInjector
、zkACLProvider
和zkCredentialsProvider
。有关详细信息,请参阅以下部分。 -
数据流如下:凭据源 →
ZkCredentialsInjector
→ZkCredentialsProvider/ZkACLProvider
→ Zookeeper。
ZkCredentialsInjector
从某个源获取凭据,然后将凭据注入到 ZkCredentialsProvider
和 ZkACLProvider
中。此处的“源”可以是系统属性、文件、秘密管理器或任何其他本地或远程源。
-
支持两组角色
-
ALL
用户:允许执行所有操作的用户(对应于所有CREATE
、READ
、WRITE
、DELETE
和ADMIN
)。 -
READ
用户:只读用户,仅允许执行读取操作。
-
-
我们始终通过限制为两个用户(一个管理员用户和一个只读用户)来保护对内容的访问权限,并且我们始终使用对应于此管理员用户的凭据进行连接,这样我们基本上可以对我们自己创建的内容/znode 执行任何操作。
您可以将只读凭据授予 SolrCloud 集群的“客户端”,例如,供 SolrJ 客户端使用。他们将能够读取运行正常 SolrJ 客户端所需的任何内容,但他们将无法修改 ZooKeeper 中的任何内容。
如何启用 ACL
-
我们希望能够
-
控制 Solr 用于其 ZooKeeper 连接的凭据。凭据用于获取在 ZooKeeper 中执行操作的权限。
-
控制 Solr 将添加到其在 ZooKeeper 中创建的 znode(ZooKeeper 文件/文件夹)中的 ACL。
-
从“外部”控制它,以便您不必修改和/或重新编译 Solr 代码以启用此功能。
-
Solr 节点、客户端和工具(例如 ZkCLI)始终使用名为 SolrZkClient
的 Java 类来处理其 ZooKeeper 相关内容。此处描述的解决方案的实现完全是关于更改 SolrZkClient
。如果您在应用程序中使用 SolrZkClient
,那么以下描述也适用于您的应用程序。
-
控制凭据和 ACL 的操作分 3 步完成:设置一个
ZkCredentialsInjector
,它从某个来源读取凭据,然后将其注入到 Solr 用于连接到 Zookeeper 的ZkCredentialsProvider
中。ZkACLProvider 使用相同的凭据来设置 ACL。
在提供一些可直接使用的示例之前,我们将详细描述这 3 个步骤。
-
设置
ZkCredentialsInjector
。 -
设置
ZkCredentialsProvider
。 -
设置
ZkACLProvider
。
设置凭据注入器
-
凭据注入器从外部来源获取凭据并将其注入到 Solr 中。
-
您可以通过将
solr.xml
中<solrcloud>
部分的zkCredentialsInjector
属性配置为实现ZkCredentialsInjector
接口的类(位于类路径中)的名称来控制要注入哪些凭据。
Solr 发行版中的server/solr/solr.xml
文件定义了 `zkCredentialsInjector`,以便在定义了同名的zkCredentialsInjector
系统属性时(例如,通过取消对solr.in.sh/.cmd
中的SOLR_ZK_CREDS_AND_ACLS
环境变量定义的注释 - 见下文),它将采用该属性的值,如果没有定义,则默认为DefaultZkCredentialsInjector
实现。
-
开箱即用的凭据注入器实现
-
Solr 随附以下
ZkCredentialsInjectors
-
org.apache.solr.common.cloud.DefaultZkCredentialsInjector
:其getCredentials()
方法返回长度为零的列表,或“未使用凭据”。这是默认值。 -
org.apache.solr.common.cloud.VMParamsZkCredentialsInjector
:用户名和密码由系统属性名称定义:zkDigestUsername
和zkDigestPassword
。如果同时提供了用户名和密码,则这组凭证将添加到getCredentials()
返回的凭证列表中。-
如果上述一组凭证未添加到列表中,则此实现将回退到默认行为,并使用
DefaultZkCredentialsInjector
中的(空)凭证列表。 -
或者,您可以设置
zkDigestCredentialsFile
系统属性,以从文件中加载zkDigestUsername
和zkDigestPassword
,而不是将凭证公开为系统属性。所提供的文件必须是 Java 属性文件,并且包含zkDigestUsername
和zkDigestPassword
属性。 -
用法(参见页面后半部分的完整示例)
-
-
-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD # Or using a Java property file containing the credentials: -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector -DzkDigestCredentialsFile=SOLR_HOME_DIR/server/etc/zookeepercredentials.properties
-
您可以通过实现
ZkCredentialsInjector
并通过使用zkCredentialsInjector
名称的系统属性传递它来创建自己的凭证注入器。
-DzkCredentialsInjector=fully.qualified.class.CustomInjectorClassName
注入凭证后,它们将在 ZkCredentialsProvider
中使用。
设置凭证提供程序
ZkCredentialsProvider
从 ZkCredentialsInjector
获取凭证,并使用它们连接到 Zookeeper。
-
您可以通过将
solr.xml
中<solrcloud>
部分的zkCredentialsProvider
属性配置为实现ZkCredentialsProvider
接口的类(在类路径上)的名称来控制将使用哪些凭证。
Solr 发行版中的server/solr/solr.xml
文件定义了zkCredentialsProvider
,以便在定义该zkCredentialsProvider
系统属性(例如,通过取消注释solr.in.sh/.cmd
中的SOLR_ZK_CREDS_AND_ACLS
环境变量定义 - 参见下文)时采用该值,或者如果没有定义,则默认为DefaultZkCredentialsProvider
实现。
开箱即用的凭证实现
您始终可以进行自己的实现,但 Solr 随附两个实现
-
无凭据
org.apache.solr.common.cloud.DefaultZkCredentialsProvider
:其 getCredentials()
返回长度为零的列表,或“无凭据使用”。这是默认值。
-
基于
digest
方案的 credentialsProvider
org.apache.solr.common.cloud.DigestZkCredentialsProvider
:使用的方案为 digest
,它从指定的 ZkCredentialsInjector
获取 ALL
用户凭据(perms=all)。
如果未定义具有 ALL
用户(同时提供用户名和密码)的 ZkCredentialsInjector
,它将回退到默认行为并使用 DefaultZkCredentialsProvider
中的(空)凭据列表。
设置 ACL 提供程序
-
通过将
<solrcloud>
部分中的zkACLProvider
属性配置为实现ZkACLProvider
接口的类(在类路径上)的名称,来控制将添加哪些 ACLsolr.xml
。
Solr 发行版中的server/solr/solr.xml
文件定义了zkACLProvider
,以便在定义了zkACLProvider
同名系统属性时采用其值(例如,通过取消注释solr.in.sh/.cmd
中的SOLR_ZK_CREDS_AND_ACLS
环境变量定义 - 见下文),或者如果没有定义,则默认为DefaultZkACLProvider
实现。
开箱即用的 ACL 实现
您始终可以进行自己的实现,但 Solr 随附
-
org.apache.solr.common.cloud.DefaultZkACLProvider
:它为所有zNodePath
返回长度为 1 的列表。列表中的单个 ACL 条目为“open-unsafe”。这是默认值。 -
org.apache.solr.common.cloud.DigestZkACLProvider
:这使您可以使用已定义的ZkCredentialsInjector
定义 ACL。其getACLsToAdd()
实现仅将管理员 ACL 应用于由SecurityAwareZkACLProvider
(/security.json
和/security/*
)定义的预定义敏感路径,并将管理员和用户 ACL 应用于其余内容。all
和read
用户通过本页前面描述的ZkCredentialsInjector
注入。 -
org.apache.solr.common.cloud.SaslZkACLProvider
:需要 SASL 身份验证。在使用 SASL 时,为系统属性solr.authorization.superuser
(默认值:solr
)中指定的用户授予所有权限,并为其他人授予读取权限。专为已经设置且不会修改配置的设置而设计,或者通过 Solr API 控制配置更改。此提供程序将有助于在 kerberos 环境中进行管理。在这样的环境中,管理员希望 Solr 使用 SASL 向 ZooKeeper 进行身份验证,因为这是通过 Kerberos 向 ZooKeeper 进行身份验证的唯一方法。 -
如果上述 ACL 均未添加到列表中,则默认情况下将使用
DefaultZkACLProvider
的(空)ACL 列表。
示例
以下示例适用于 digest
方案。
<str name="zkCredentialsInjector">${zkCredentialsInjector:org.apache.solr.common.cloud.DefaultZkCredentialsInjector}</str>
通过系统属性
-
ZK 凭据通过系统属性通过
DzkDigestUsername
、DzkDigestPassword
、DzkDigestReadonlyUsername
和DzkDigestReadonlyPassword
属性名称传递。
*nix
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
-DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
-DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
-DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
-DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
Windows
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
-DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
-DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
-DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
-DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
通过文件
-
创建 Java 属性文件,例如名为
zookeepercredentials.properties
,其中包含以下格式的凭据
zkDigestUsername=admin-user zkDigestPassword=CHANGEME-ADMIN-PASSWORD zkDigestReadonlyUsername=readonly-user zkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
-
通过系统属性传递文件路径
*nix
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
-DzkDigestCredentialsFile=SOLR_HOME_DIR/server/etc/zookeepercredentials.properties"
SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
-DzkDigestCredentialsFile=SOLR_HOME_DIR/server/etc/zookeepercredentials.properties"
Windows
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
-DzkDigestCredentialsFile=SOLR_HOME_DIR/server/etc/zookeepercredentials.properties
set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
-DzkDigestCredentialsFile=SOLR_HOME_DIR/server/etc/zookeepercredentials.properties
通过自定义凭据注入器
-
或者,您可以通过实现
ZkCredentialsInjector
来创建自己的凭据注入器,并通过系统属性使用 DzkCredentialsInjector 变量名传递它。
*nix
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
-DzkCredentialsInjector=fully.qualified.class.CustomInjectorClassName"
SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
-DzkCredentialsInjector=fully.qualified.class.CustomInjectorClassName
Windows
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
-DzkCredentialsInjector=fully.qualified.class.CustomInjectorClassName
set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
-DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
-DzkCredentialsInjector=fully.qualified.class.CustomInjectorClassName
Solr 脚本中的 ZooKeeper ACL
有两个脚本会影响 ZooKeeper ACL
-
*nix 系统:
bin/solr
和server/scripts/cloud-scripts/zkcli.sh
-
Windows 系统:
bin/solr.cmd
和server/scripts/cloud-scripts/zkcli.bat
solr.in.* 和 zkcli.* 文件都需要使用相同的密码进行更新,才能正常工作。内容可能看起来是冗余的,但脚本在操作期间不会相互参考。 |
这些 Solr 脚本可以通过设置适当的系统属性来启用 ZooKeeper ACL 的使用。
-
使用 VMParamsZkCredentialsInjector 的示例
取消以下内容的注释,并用您选择用于启用以下文件中的参数和 ACL 凭据提供程序的密码替换密码
*nix
# Settings for ZK ACL
#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
# -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
# -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
# -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
# -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
#SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
# Settings for ZK ACL
#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
# -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
# -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
# -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
# -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
Windows
REM Settings for ZK ACL
REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
REM -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
REM -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
REM -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
REM -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
REM set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
REM Settings for ZK ACL
REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
REM -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
REM -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
REM -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
REM -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
更改 ACL 方案
在 Solr 集群运行期间,您可能会决定从非安全的 ZooKeeper 迁移到安全实例。更改 solr.xml 中配置的 zkACLProvider
将确保新创建的节点是安全的,但不会保护已存在的数据。
要修改所有现有的 ACL,您可以使用 Solr 的 ZkCLI 中的 updateacls
命令。首先取消 server/scripts/cloud-scripts/zkcli.sh(或 Windows 上的 zkcli.bat)中 SOLR_ZK_CREDS_AND_ACLS
环境变量定义的注释,并按照上文 Solr 脚本中的 ZooKeeper ACL 中所述填写管理员用户和只读用户的密码。
然后针对您的操作系统运行以下适当的命令
*nix
$ ./server/scripts/cloud-scripts/zkcli.sh -cmd updateacls /zk-path
Windows
C:\\ server\scripts\cloud-scripts\zkcli.bat cmd updateacls /zk-path
仅在 SolrCloud 集群停止时才应更改 ZooKeeper 中的 ACL。在 Solr 运行时尝试这样做可能会导致状态不一致,并且某些节点变得不可访问。
zkcli.sh/.bat 中 SOLR_ZK_CREDS_AND_ACLS 环境变量中包含的 VM 属性 zkCredentialsInjector
、zkACLProvider
和 zkCredentialsProvider
控制转换
-
凭据注入器读取凭据并将其传递给凭据提供程序。如果省略,该进程将不使用任何凭据(适用于非安全配置)。
-
凭据提供程序使用在节点上具有管理员权限的用户的凭据。如果省略,该进程将不使用任何凭据(适用于非安全配置)。
-
ACL 提供程序将用于计算新的 ACL。如果省略,该进程将对所有用户设置所有权限,从而移除任何现有的安全性。
zkcli.sh/.bat 中取消注释的 SOLR_ZK_CREDS_AND_ACLS
环境变量将凭据和 ACL 提供程序设置为本页前面所述的 VMParamsZkCredentialsInjector
、DigestZkCredentialsProvider
和 DigestZkACLProvider
实现。