☰
Apache Zeppelin 配置完全指南:zeppelin-env.sh 与 zeppelin-site.xml 参数详解及 SSL 安全配置
2026/10/10 2:24:53 网站建设 项目流程

Apache Zeppelin 是支持 SQL、Scala、Python 等语言的数据驱动交互式笔记本平台。本文以官方 configuration.md 文档为骨架,系统讲解 Zeppelin 的三大配置来源与优先级关系、conf/zeppelin-env.sh与conf/zeppelin-site.xml中全部核心属性的含义与默认值,并完整演示 SSL 服务端加密、客户端证书认证、凭据持久化加密与 Jetty 密码混淆等安全配置的落地步骤。读完本文,你将能够独立完成 Zeppelin 服务器地址/端口、JVM 内存、Notebook 存储后端(本地 / S3 / Azure / Git)、解释器行为、Kubernetes 运行模式等全方位调优,并安全地以 HTTPS 对外提供服务。

配置来源与优先级:环境变量 > 系统属性 > 配置文件

Zeppelin 的配置可以来自多个来源,按优先级从高到低依次为:

  1. 环境变量:定义在conf/zeppelin-env.sh(Windows 下为conf\zeppelin-env.cmd);
  2. 系统属性(System Properties,通常通过-DJVM 参数传入);
  3. 配置文件:conf/zeppelin-site.xml。

这一优先级关系不仅写在文档中,也在源码层面得到印证:zeppelin-interpreter/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java的类注释明确声明了同样的三级优先级,而在其getBoolean/getInt/getLong等取值方法中,读取顺序正是先查EnvironmentConfiguration(环境变量),再查SystemConfiguration(系统属性),最后才回落到 XML 配置文件中的值或内置默认值。也就是说,同一属性如果在多个来源中同时出现,环境变量会覆盖系统属性,系统属性会覆盖zeppelin-site.xml,三者都未设置时使用代码内建默认值。

从启动脚本看,bin/common.sh会先确认ZEPPELIN_CONF_DIR(默认${ZEPPELIN_HOME}/conf),若该目录下存在zeppelin-env.sh则执行它以加载其中的环境变量,随后将ZEPPELIN_CONF_DIR加入类路径,使zeppelin-site.xml可被ZeppelinConfiguration通过ZeppelinLocationStrategy与ClasspathLocationStrategy组合定位并解析(见ZeppelinConfiguration.loadXMLConfig)。

配置文件准备

安装包内默认提供的是模板文件而非可编辑的配置,首次使用前需要从模板复制一份:

# 在 Zeppelin 安装目录下 cp conf/zeppelin-env.sh.template conf/zeppelin-env.sh cp conf/zeppelin-site.xml.template conf/zeppelin-site.xml
  • conf/zeppelin-env.sh.template:以# export ZEPPELIN_XXX注释形式列出全部可用环境变量,取消注释并填写值即可生效;
  • conf/zeppelin-site.xml.template:以<property>形式给出所有 XML 配置项及其默认值,部分高级项(S3、Azure、Git、安全响应头等)默认被注释,按需取消注释后使用。

修改配置后需要重启 Zeppelin 服务器才能生效(见文末说明)。

服务监听、端口与 Web 应用配置

以下属性决定 Zeppelin 服务器进程的绑定地址、HTTP/HTTPS 端口、上下文路径与跨域来源:

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_ADDRzeppelin.server.addr127.0.0.1Zeppelin 服务器绑定地址。若在 WSL 或 Windows 上无法通过浏览器访问,可改为0.0.0.0,但将机器暴露在公网会带来安全风险
ZEPPELIN_PORTzeppelin.server.port8080Zeppelin 服务器端口。注意不要与 Zeppelin Web 应用开发端口(默认 9000)冲突
ZEPPELIN_SSL_PORTzeppelin.server.ssl.port8443SSL 端口(当 ssl 环境变量/属性为 true 时使用)
ZEPPELIN_SERVER_CONTEXT_PATHzeppelin.server.context.path/Web 应用的上下文路径
ZEPPELIN_ALLOWED_ORIGINSzeppelin.server.allowed.origins*允许的 REST 与 WebSocket 来源,逗号分隔,例如http://localhost:8080
ZEPPELIN_WAR_TEMPDIRzeppelin.war.tempdirwebappsJetty 临时目录位置
ZEPPELIN_SERVER_DEFAULT_DIR_ALLOWEDzeppelin.server.default.dir.allowedfalse是否允许服务器启用目录列表

源码层面,ZeppelinConfiguration.ConfVars枚举定义了这些属性的内建默认值:ZEPPELIN_ADDR("zeppelin.server.addr", "127.0.0.1")、ZEPPELIN_PORT("zeppelin.server.port", 8080)、ZEPPELIN_SSL_PORT("zeppelin.server.ssl.port", 8443)、ZEPPELIN_SERVER_CONTEXT_PATH("zeppelin.server.context.path", "/");对应的getServerAddress()、getServerPort()、getServerSslPort()、useSsl()等方法则被服务器启动逻辑直接使用(printShortInfo()会在启动日志中打印 Host、Port/SSL Port 与 Context Path)。zeppelin.site.xml.template中还提示:绑定地址设为0.0.0.0虽可解决 WSL/Windows 下的浏览器访问问题,但会带来安全风险。

ZEPPELIN_ALLOWED_ORIGINS用于 REST 与 WebSocket 的跨域控制:保持*意味着任意来源都可以发起请求,模板中的描述明确提醒这存在安全漏洞(对应 ZEPPELIN-173),生产环境建议显式列出允许的来源列表。

JVM 与进程管理配置

以下属性仅存在于zeppelin-env.sh环境变量中(对应 XML 属性为 N/A):

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_MEMN/A-Xmx1024m -XX:MaxMetaspaceSize=512mZeppelin 服务器 JVM 内存选项
ZEPPELIN_INTP_MEMN/AZEPPELIN_MEM解释器进程的 JVM 内存选项
ZEPPELIN_JAVA_OPTSN/A(空)额外的 JVM 选项,例如-Dspark.executor.memory=8g -Dspark.cores.max=16
ZEPPELIN_JMX_ENABLEzeppelin.jmx.enablefalse设为true启用 JMX
ZEPPELIN_JMX_PORTzeppelin.jmx.port9996JMX 使用的端口号

zeppelin-env.sh.template中给出的内存示例为-Xms1024m -Xmx1024m -XX:MaxMetaspaceSize=512m;ZEPPELIN_INTP_MEM默认继承ZEPPELIN_MEM,用于为独立启动的解释器进程分配堆内存。JMX 相关配置的默认值同样在ConfVars枚举中定义(zeppelin.jmx.enable为 false、zeppelin.jmx.port为 9996),启用后可通过 JMX 端口对 Zeppelin 服务器进程进行监控。

凭据持久化与加密配置

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_CREDENTIALS_PERSISTzeppelin.credentials.persisttrue将凭据持久化到 JSON 文件(credentials.json)
ZEPPELIN_CREDENTIALS_ENCRYPT_KEYzeppelin.credentials.encryptKey(空)若提供,则对 credentials.json 中的密码进行加密(否则以明文存储)

这两项配置与"存储用户凭据"章节紧密相关,详细用法见下文对应小节;其默认值persist=true、encryptKey=null同样定义在ConfVars枚举中。

Notebook 协作、版本控制与展示配置

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_NOTEBOOK_COLLABORATIVE_MODE_ENABLEzeppelin.notebook.collaborative.mode.enabletrue启用基本的协作编辑能力;单用户使用 Notebook 时不影响操作逻辑
ZEPPELIN_NOTEBOOK_VERSIONED_MODE_ENABLEzeppelin.notebook.versioned.mode.enabletrue启用/禁用 Notebook 的版本控制支持
ZEPPELIN_NOTEBOOK_HOMESCREENzeppelin.notebook.homescreen(空)在 Zeppelin 首页展示的 Notebook ID,例如2A94M5J1Z;留空则显示默认首页
ZEPPELIN_NOTEBOOK_HOMESCREEN_HIDEzeppelin.notebook.homescreen.hidefalse设为true时,将ZEPPELIN_NOTEBOOK_HOMESCREEN指定的 Notebook 从首页列表中隐藏。更多信息参见 Customize your Zeppelin homepage
ZEPPELIN_NOTEBOOK_PUBLICzeppelin.notebook.publictrue新建/导入 Notebook 时默认设为公开(仅设置owners);若为false,则还会把user加入readers与writers,使 Notebook 变为私有,其他用户除非被授权否则不可见
ZEPPELIN_NOTEBOOK_CRON_ENABLEzeppelin.notebook.cron.enablefalse启用/禁用 Notebook 的 Cron 定时调度支持
ZEPPELIN_NOTEBOOK_CRON_FOLDERSzeppelin.notebook.cron.folders(空)允许使用 Cron 的文件夹列表(逗号分隔)
ZEPPELIN_NOTE_CACHE_THRESHOLDzeppelin.note.cache.threshold50触发缓存淘汰前的 Notebook 缓存数量阈值

协作模式与版本控制默认均为开启状态,二者在ConfVars枚举中分别对应zeppelin.notebook.collaborative.mode.enable与zeppelin.notebook.versioned.mode.enable。Cron 调度的详细使用方式可参考 cron_scheduler.md;Notebook 的权限体系(owners/readers/writers)可在 notebook_authorization.md 中进一步了解。

Notebook 存储配置:本地、S3、Azure 与多存储同步

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_NOTEBOOK_DIRzeppelin.notebook.dirnotebookNotebook 目录的根目录(本地文件系统)
ZEPPELIN_NOTEBOOK_STORAGEzeppelin.notebook.storageorg.apache.zeppelin.notebook.repo.GitNotebookRepo逗号分隔的 Notebook 存储位置列表(可配置多个存储后端)
ZEPPELIN_NOTEBOOK_ONE_WAY_SYNCzeppelin.notebook.one.way.syncfalse存在多个 Notebook 存储位置时,是否将第一个视为唯一数据源(单向同步)

S3 存储

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_NOTEBOOK_S3_BUCKETzeppelin.notebook.s3.bucketzeppelinNotebook 文件保存到的 S3 Bucket
ZEPPELIN_NOTEBOOK_S3_USERzeppelin.notebook.s3.useruserS3 Bucket 中的用户名,目录结构形如bucket/user/notebook/2A94M5J1Z/note.json
ZEPPELIN_NOTEBOOK_S3_ENDPOINTzeppelin.notebook.s3.endpoints3.amazonaws.comBucket 的 Endpoint
N/Azeppelin.notebook.s3.timeout120000Bucket Endpoint 请求超时时间(毫秒)
ZEPPELIN_NOTEBOOK_S3_KMS_KEY_IDzeppelin.notebook.s3.kmsKeyID(空)用于加密 S3 中数据的 AWS KMS Key ID(可选)
ZEPPELIN_NOTEBOOK_S3_EMPzeppelin.notebook.s3.encryptionMaterialsProvider(空)自定义 S3 加密材料提供者实现类名,用于加密 S3 中的数据(可选)
ZEPPELIN_NOTEBOOK_S3_SSEzeppelin.notebook.s3.ssefalse启用服务端加密保存 Notebook 到 S3
ZEPPELIN_NOTEBOOK_S3_CANNED_ACLzeppelin.notebook.s3.cannedAcl(空)以指定的 Canned ACL 保存 Notebook 到 S3,决定 S3 权限
ZEPPELIN_NOTEBOOK_S3_PATH_STYLE_ACCESSzeppelin.notebook.s3.pathStyleAccessfalse使用 path style 访问 S3 Bucket
ZEPPELIN_NOTEBOOK_S3_SIGNEROVERRIDEzeppelin.notebook.s3.signerOverride(空)可选:覆盖控制用于签署 AWS 请求的签名算法

zeppelin-site.xml.template中对 S3 相关配置给出了更完整的注解:存储目录结构为s3://{bucket}/{username}/{notebook-id}/note.json;zeppelin.notebook.s3.timeout默认 120000 毫秒;kmsKeyID需要配合具有该密钥使用权限的 EMR 集群 EC2 角色;signerOverride在对接仅支持 AWS 签名 V2 的兼容 API(如 Ceph)时设置为S3SignerType。此外模板中还提供了阿里云 OSS、Google Cloud Storage(GCS)与 MongoDB 等存储后端的示例配置,实际可用的存储实现类包括S3NotebookRepo、GCSNotebookRepo、OSSNotebookRepo、AzureNotebookRepo、MongoNotebookRepo、VFSNotebookRepo、FileSystemNotebookRepo与默认的GitNotebookRepo,详见 notebook_storage.md。

Azure 存储

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_NOTEBOOK_AZURE_CONNECTION_STRINGzeppelin.notebook.azure.connectionString(空)Azure 存储账户连接字符串,例如DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey>
ZEPPELIN_NOTEBOOK_AZURE_SHAREzeppelin.notebook.azure.sharezeppelinNotebook 文件保存到的 Azure Share
ZEPPELIN_NOTEBOOK_AZURE_USERzeppelin.notebook.azure.useruserAzure 文件共享中的可选用户名,目录结构形如share/user/notebook/2A94M5J1Z/note.json

Git 远程存储

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_NOTEBOOK_GIT_REMOTE_URLzeppelin.notebook.git.remote.url(空)GitHub 仓库 URL,可以是 HTTP URL 或 SSH URL,例如git@github.com:apache/zeppelin.git
ZEPPELIN_NOTEBOOK_GIT_REMOTE_USERNAMEzeppelin.notebook.git.remote.usernametokenGitHub 用户名;默认为token以使用 GitHub API
ZEPPELIN_NOTEBOOK_GIT_REMOTE_ACCESS_TOKENzeppelin.notebook.git.remote.access-tokentoken用于 GitHub API 的访问令牌;若使用用户名/密码组合而非 GitHub API,则该值作为密码使用
ZEPPELIN_NOTEBOOK_GIT_REMOTE_ORIGINzeppelin.notebook.git.remote.origintokenGitHub 远程仓库名,默认应为origin

注意:上表最后一行的默认值token来自官方文档表格,而从源码ConfVars枚举(ZeppelinConfiguration.java)看,zeppelin.notebook.git.remote.origin的代码内建默认值实际为"origin"(远程仓库名),GitHub Access Token 的具体生成与配置方法见文末专门小节。

解释器相关配置

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_INTERPRETER_DIRzeppelin.interpreter.dirinterpreter解释器目录
ZEPPELIN_INTERPRETER_DEP_MVNREPOzeppelin.interpreter.dep.mvnRepohttps://repo1.maven.org/maven2/,https://repo2.maven.org/maven2/解释器附加依赖加载的远程主仓库
ZEPPELIN_INTERPRETER_OUTPUT_LIMITzeppelin.interpreter.output.limit102400超过该限制的解释器输出消息将被截断
ZEPPELIN_INTERPRETER_CONNECT_TIMEOUTzeppelin.interpreter.connect.timeout600s解释器进程连接超时;默认时间单位为毫秒
ZEPPELIN_DEP_LOCALREPOzeppelin.dep.localrepolocal-repo依赖加载器的本地仓库(例如 npm 可视化模块)

源码层面的补充信息:zeppelin.interpreter.connect.timeout的代码默认值是600000L(毫秒),且ZeppelinConfiguration.getTime()支持1s、2m、3h这类带时间单位的写法并自动换算为毫秒;zeppelin.interpreter.output.limit内建默认值为1024 * 100,即 102400 字节。模板中还提供了zeppelin.interpreter.include/zeppelin.interpreter.exclude(二者只能选其一,不能同时指定)用于过滤启用的解释器集合,以及解释器生命周期管理(TimeoutLifecycleManager及其检查间隔、超时阈值)等高级配置项。

Helium 依赖加载器配置

Helium 是 Zeppelin 的插件生态(可视化、Spell 等),其依赖下载依赖以下远程源:

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_HELIUM_NODE_INSTALLER_URLzeppelin.helium.node.installer.urlhttps://nodejs.org/dist/Helium 依赖加载器使用的远程 Node 安装源
ZEPPELIN_HELIUM_NPM_INSTALLER_URLzeppelin.helium.npm.installer.urlhttp://registry.npmjs.org/Helium 依赖加载器使用的远程 Npm 安装源
ZEPPELIN_HELIUM_YARNPKG_INSTALLER_URLzeppelin.helium.yarnpkg.installer.urlhttps://github.com/yarnpkg/yarn/releases/download/Helium 依赖加载器使用的远程 Yarn 包安装源

在需要离线安装、内网部署或使用私有镜像源的环境下,可将这些 URL 替换为内网镜像地址。ConfVars枚举中ZEPPELIN_HELIUM_REGISTRY("zeppelin.helium.registry", "helium")指向 Helium Registry 位置(默认内置helium,也可在模板中配置为外部 Registry URL)。

WebSocket 与消息大小配置

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_WEBSOCKET_MAX_TEXT_MESSAGE_SIZEzeppelin.websocket.max.text.message.size1024000WebSocket 可接收的最大文本消息大小(字符数)

值得注意的差异:官方文档表格给出的默认值为1024000,而 zeppelin-site.xml.template 与源码ConfVars枚举中的内建默认值均为10240000(约 1 千万字符)。WebSocket 是 Zeppelin 前端与服务器之间实时通信(段落执行结果推送、协作编辑等)的核心通道,该值过小会导致大结果集被截断,请按实际段落输出规模调整。

运行模式与 Kubernetes 配置

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_RUN_MODEzeppelin.run.modeauto运行模式:auto自动探测环境;local将解释器作为本地进程运行;k8s在 Kubernetes 集群上运行解释器
ZEPPELIN_K8S_PORTFORWARDzeppelin.k8s.portforwardfalse对解释器 RPC 端口做端口转发。仅在本地开发且zeppelin.k8s.mode为on时设为true,生产环境切勿开启
ZEPPELIN_K8S_CONTAINER_IMAGEzeppelin.k8s.container.imageapache/zeppelin:<版本号>解释器使用的 Docker 镜像
ZEPPELIN_K8S_SPARK_CONTAINER_IMAGEzeppelin.k8s.spark.container.imageapache/spark:latestSpark Executor 使用的 Docker 镜像
ZEPPELIN_K8S_TEMPLATE_DIRzeppelin.k8s.template.dirk8sKubernetes YAML 规格文件所在目录
ZEPPELIN_K8S_SERVICE_NAMEzeppelin.k8s.service.namezeppelin-serverZeppelin 服务器服务资源名称
ZEPPELIN_K8S_TIMEOUT_DURING_PENDINGzeppelin.k8s.timeout.during.pendingtrue启动解释器 Pod 时启用/禁用超时处理;注意可能导致无限循环

源码ConfVars中还定义了ZEPPELIN_RUN_MODE("zeppelin.run.mode", "auto"),其RUN_MODE枚举为LOCAL、K8S、DOCKER三种取值(文档表格中仅列出 auto/local/k8s,zeppelin-site.xml.template的取值描述为'auto|local|k8s|docker'),并额外提供zeppelin.k8s.namespace(默认default)等命名空间配置。zeppelin.k8s.container.image的代码默认值由当前 Zeppelin 版本动态拼接生成。仓库中 k8s 目录提供了解释器与服务器的 YAML 样例,Kubernetes 部署的整体流程可参考 kubernetes.md。

监控与其他功能开关

zeppelin-env.sh 变量zeppelin-site.xml 属性默认值说明
ZEPPELIN_METRIC_ENABLE_PROMETHEUSzeppelin.metric.enable.prometheusfalse启用/禁用/metric端点上的 Prometheus 指标输出

此外,zeppelin-site.xml.template中还有若干未列入官方表格但值得关注的功能开关:zeppelin.jobmanager.enable(默认 false,禁用 Job 页可显著节省内存并提升性能)、zeppelin.search.index.rebuild/zeppelin.search.use.disk/zeppelin.search.index.path(搜索索引是否重建、是否落盘及索引路径)、zeppelin.spark.only_yarn_cluster、zeppelin.note.file.exclude.fields(从 note 文件中排除的字段,如Paragraph.results)等,可按需在配置文件中启用。

SSL 配置

启用 SSL 需要两方面的配置:一是生成证书并更新必要的配置以启用服务端 SSL 和/或客户端证书认证,二是确保密钥库(keystore)与信任库(truststore)的路径和密码正确。

创建与配置证书

密钥库(keystore)在服务器端保存私钥与证书;信任库(truststore)保存受信任的客户端证书。生成证书与密钥库的方法可参考 Jetty 官方"Configure SSL"Howto 文档(以及 StackOverflow 上关于 Jetty SSL 配置的高票回答中的精简示例),基本步骤是使用keytool生成自签名或由 CA 签发的证书并导入密钥库。

生成后,请确保两个库的路径与密码在下列字段中正确配置。密码可以使用 Jetty Password 工具进行混淆(见下文)。在 Maven 拉取全部依赖完成 Zeppelin 构建后,Jetty 相关 jar 中即包含 Password 工具,可在 Zeppelin 构建目录下用如下命令调用(替换为对应版本):

java -cp ./zeppelin-server/target/lib/jetty-all-server-<version>.jar \ org.eclipse.jetty.util.security.Password <user> <password>

如果使用自签名证书、由不受信任的 CA 签发的证书,或者启用了客户端认证,则客户端浏览器必须为普通 HTTPS 端口和 WebSocket 端口都创建例外——方法是在浏览器中分别尝试对两个端口建立 HTTPS 连接(例如端口为 443 与 8443 时,访问https://127.0.0.1:443与https://127.0.0.1:8443)。若服务器证书由受信任的 CA 签发且未启用客户端认证,则可跳过此步骤。

配置服务端 SSL

在zeppelin-site.xml中配置以下属性以启用服务端 SSL:

<property> <name>zeppelin.server.ssl.port</name> <value>8443</value> <description>Server ssl port. (used when ssl property is set to true)</description> </property> <property> <name>zeppelin.ssl</name> <value>true</value> <description>Should SSL be used by the servers?</description> </property> <property> <name>zeppelin.ssl.keystore.path</name> <value>keystore</value> <description>Path to keystore relative to Zeppelin configuration directory</description> </property> <property> <name>zeppelin.ssl.keystore.type</name> <value>JKS</value> <description>The format of the given keystore (e.g. JKS or PKCS12)</description> </property> <property> <name>zeppelin.ssl.keystore.password</name> <value>change me</value> <description>Keystore password. Can be obfuscated by the Jetty Password tool</description> </property> <property> <name>zeppelin.ssl.key.manager.password</name> <value>change me</value> <description>Key Manager password. Defaults to keystore password. Can be obfuscated.</description> </property>

源码中的路径解析规则(ZeppelinConfiguration.getKeyStorePath()/getTrustStorePath())值得注意:如果配置的路径以/开头或属于 Windows 路径,则按绝对路径直接使用;否则按相对于配置目录(getConfDir())的路径拼接解析。而zeppelin.ssl.key.manager.password与zeppelin.ssl.truststore.password在未显式配置时,会分别回落到密钥库密码(见getKeyManagerPassword()与getTrustStorePassword())。

启用客户端证书认证

在zeppelin-site.xml中配置以下属性以启用客户端证书认证:

<property> <name>zeppelin.server.ssl.port</name> <value>8443</value> <description>Server ssl port. (used when ssl property is set to true)</description> </property> <property> <name>zeppelin.ssl.client.auth</name> <value>true</value> <description>Should client authentication be used for SSL connections?</description> </property> <property> <name>zeppelin.ssl.truststore.path</name> <value>truststore</value> <description>Path to truststore relative to Zeppelin configuration directory. Defaults to the keystore path</description> </property> <property> <name>zeppelin.ssl.truststore.type</name> <value>JKS</value> <description>The format of the given truststore (e.g. JKS or PKCS12). Defaults to the same type as the keystore type</description> </property> <property> <name>zeppelin.ssl.truststore.password</name> <value>change me</value> <description>Truststore password. Can be obfuscated by the Jetty Password tool. Defaults to the keystore password</description> </property>

源码getTrustStorePath()的实现与描述一致:未配置时默认取密钥库路径;getTrustStoreType()未配置时默认取密钥库类型。这样只需正确维护密钥库的路径、类型与密码,即可让信任库相关配置尽量少。

PEM 证书支持

除了 JKS/PKCS12 密钥库方式,Zeppelin 还支持 PEM 格式的证书配置(ConfVars中同样定义了这些属性的默认值,zeppelin-site.xml.template中以注释形式给出):

zeppelin-env.sh 变量zeppelin-site.xml 属性说明
ZEPPELIN_SSL_PEM_KEYzeppelin.ssl.pem.key指向服务器的 PEM 编码私钥文件
ZEPPELIN_SSL_PEM_KEY_PASSWORDzeppelin.ssl.pem.key.passwordPEM 编码私钥的密码
ZEPPELIN_SSL_PEM_CERTzeppelin.ssl.pem.cert指向包含 PEM 格式证书数据的文件
ZEPPELIN_SSL_PEM_CAzeppelin.ssl.pem.ca汇总文件:将客户端所涉及的各个 CA 的 PEM 编码证书简单拼接而成,用于客户端认证

存储用户凭据与加密

为避免每次重启/重新部署 Zeppelin 时都要重新输入凭据,可以通过ZEPPELIN_CREDENTIALS_PERSIST配置持久化用户凭据(写入credentials.json)。

请注意:默认情况下密码以明文存储。要加密密码,请使用ZEPPELIN_CREDENTIALS_ENCRYPT_KEY配置变量,它将使用AES-128算法对密码进行加密。可以使用任意方式生成合适的加密密钥,例如用 openssl:

openssl enc -aes-128-cbc -k secret -P -md sha1

重要安全提示:不建议将加密密钥存储在配置文件中。根据环境的安全需求,可考虑使用凭据服务器、将ZEPPELIN_CREDENTIALS_ENCRYPT_KEY设置为操作系统环境变量,或采用其他任何不将加密密钥与加密内容(credentials.json文件)放在一起的方案。

使用 Jetty Password 工具混淆密码

安全最佳实践不建议在配置中使用明文密码,Jetty 提供了 Password 工具来帮助混淆访问 KeyStore 与 TrustStore 所使用的密码。工具文档可在 Jetty 官方文档的"Configuring Security & Secure Passwords"章节找到。构建产物中的 jar 位于$ZEPPELIN_HOME/zeppelin-server/target/lib/,使用方式如下(版本号以实际构建产物为准):

java -cp $ZEPPELIN_HOME/zeppelin-server/target/lib/jetty-util-9.2.15.v20160210.jar \ org.eclipse.jetty.util.security.Password \ password 2016-12-15 10:46:47.931:INFO::main: Logging initialized @101ms password OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v MD5:5f4dcc3b5aa765d61d8327deb882cf99

工具会同时输出 OBF(混淆)与 MD5 两种形式,将配置更新为混淆后的密码:

<property> <name>zeppelin.ssl.keystore.password</name> <value>OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v</value> <description>Keystore password. Can be obfuscated by the Jetty Password tool</description> </property>

同理,密钥库密码、Key Manager 密码与信任库密码均可使用OBF:前缀的混淆值。

创建 GitHub Access Token

当使用 GitHub 跟踪 Notebook(即采用GitNotebookRepo并配置了zeppelin.notebook.git.remote.url)时,可以使用 GitHub API 进行认证。访问 GitHub 账户设置中的 Personal Access Tokens 页面创建访问令牌,将生成的值填入zeppelin.notebook.git.remote.access-token属性:

<property> <name>zeppelin.notebook.git.remote.url</name> <value>git@github.com:your-org/your-notebook-repo.git</value> <description>remote Git repository URL</description> </property> <property> <name>zeppelin.notebook.git.remote.access-token</name> <value>your_github_access_token</value> <description>remote Git repository password</description> </property>

zeppelin.notebook.git.remote.username保持默认的token即可(表示使用 GitHub API 的 token 认证模式);若采用用户名/密码组合而非 GitHub API,则该值作为密码使用。上述属性的默认值均定义在 ZeppelinConfiguration.java 的ConfVars枚举中。

生效与验证

更新上述任一配置后,必须重启 Zeppelin 服务器才能生效。重启后可通过以下方式验证:

  • 观察启动日志:ZeppelinConfiguration.printShortInfo()会打印Server Host、Server Port(启用 SSL 时打印Server SSL Port)与Context Path;
  • 启用 SSL 后使用https://<host>:8443/访问 Web 界面,并确认浏览器无证书告警(受信任 CA 场景)或已手动添加例外(自签名场景);
  • 启用 Prometheus 指标后访问/metric端点确认指标输出;
  • 修改 Notebook 存储后端后新建 Notebook,确认 note 文件按预期写入目标存储(本地notebook/目录、S3 Bucket 或 Azure Share)。

相关配置模板与源码可继续查阅:conf/zeppelin-env.sh.template、conf/zeppelin-site.xml.template、ZeppelinConfiguration.java 以及启动脚本 bin/common.sh。

  • 数据分析
  • 数据可视化
  • 大数据
  • 后端

【免费下载链接】zeppelin

Web-based notebook that enables>项目地址:https://gitcode.com/gh_mirrors/zeppelin1/zeppelin

点击查看免费下载
上一篇:RDPWrap完整指南:免费解锁Windows多用户远程桌面的终极解决方案
下一篇:告别重复操作:E7Helper自动化脚本如何重塑你的第七史诗游戏体验

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询