隐藏 Spark 属性,使其不显示在 Spark Web UI 中,而不实现安全过滤器

问题描述 投票:0回答:2

位于 http://:4040 的应用程序 Web UI 在“环境”选项卡中列出了 Spark 属性。 将显示通过spark-defaults.conf、SparkConf 或命令行显式指定的所有值。 但是,出于安全原因,我不希望我的 Cassandra 密码显示在 Web UI 中。 是否有某种开关可以确保不显示某些 Spark 属性??

请注意,我看到一些解决方案建议实现安全过滤器并使用spark.ui.filters 设置来引用该类。 我希望避免这种复杂性。

apache-spark spark-streaming datastax
2个回答
2
投票

我认为对于以前的版本,如何从 Spark WebUI 隐藏自定义属性没有通用的解决方案。

我假设您使用的是spark 2.0或更低版本(我没有在2.0中看到下面描述的功能),因为2.0.1支持将密码预处理为“*****”。

检查问题SPARK-16796 Spark环境页面可见密码

当我们查看 apache Spark 源代码并进行一些调查时,我们可以看到一些 处理如何在 Spark Web ui 中“隐藏”属性。

SparkUI 默认情况下,环境页面附加在初始化中

attachTab(new EnvironmentTab(this))
[第 71 行]

EnvironmentPage 将属性渲染为

EnvironmentPage
作为 Web GUI 中的选项卡:

def render(request: HttpServletRequest): Seq[Node] = {
    val runtimeInformationTable = UIUtils.listingTable(
      propertyHeader, jvmRow, listener.jvmInformation, fixedWidth = true)
    val sparkPropertiesTable = UIUtils.listingTable(
      propertyHeader, propertyRow, listener.sparkProperties.map(removePass), fixedWidth = true)
    val systemPropertiesTable = UIUtils.listingTable(
      propertyHeader, propertyRow, listener.systemProperties, fixedWidth = true)
    val classpathEntriesTable = UIUtils.listingTable(
      classPathHeaders, classPathRow, listener.classpathEntries, fixedWidth = true)
    val content =
      <span>
        <h4>Runtime Information</h4> {runtimeInformationTable}
        <h4>Spark Properties</h4> {sparkPropertiesTable}
        <h4>System Properties</h4> {systemPropertiesTable}
        <h4>Classpath Entries</h4> {classpathEntriesTable}
      </span>

    UIUtils.headerSparkPage("Environment", content, parent)
  }

所有属性均在没有某种隐藏预处理的情况下呈现,除了

sparkProperties
- 具有
removePass
中提供的功能。

private def removePass(kv: (String, String)): (String, String) = {
    if (kv._1.toLowerCase.contains("password")) (kv._1, "******") else kv
}

我们可以看到每个包含“密码”的密钥(顺便说一句:在主分支中,他们还用关键字“秘密”过滤密钥检查您是否感兴趣

我现在无法测试,但你可以尝试更新 Spark。所以例如。 mergeDefaultSparkProperties()中的

SparkSubmitArguments.scala
会将
spark.cassandra.auth.password
视为spark并填充为
sparkProperties
(使用
removePass
预处理)。

最终,在 Web GUI 的环境选项卡中,此属性应显示为

****


0
投票

您需要在spark conf中使用

spark.redaction.regex
。您可以在这里查找文档: https://spark.apache.org/docs/3.5.2/configuration.html

正则表达式决定哪些 Spark 配置属性和环境 驱动程序和执行程序环境中的变量包含敏感 信息。当此正则表达式与属性键或值匹配时, 值是从环境 UI 和各种日志(如 YARN)中编辑的 和事件日志。

© www.soinside.com 2019 - 2024. All rights reserved.