隐藏 spark 属性 不在 spark web UI 中显示而不实施安全过滤器
Hide a spark property from displaying in the spark web UI without implementing a security filter
位于 http://:4040 的应用程序 Web UI 在“环境”选项卡中列出了 Spark 属性。所有通过 spark-defaults.conf、SparkConf 或命令行明确指定的值都会出现。 但是,出于安全原因,我不希望我的 Cassandra 密码显示在网络上 UI。 是否有某种开关可以确保不显示某些 spark 属性? ?
请注意,我看到一些解决方案建议实施安全过滤器并使用 spark.ui.filters 设置来引用 class。我希望避免这种复杂性。
我认为没有通用的解决方案如何从以前版本的 spark WebUI 中隐藏您的自定义 属性。
我假设您使用的是 spark 2.0 或更低版本(我没有在 2.0 中看到下面描述的功能),因为 2.0.1 支持将密码预处理为“*****”。
检查问题 SPARK-16796 Visible passwords on Spark environment page
当我们查看 apache spark 源代码 并进行一些调查时,我们可以看到一些 processing 如何 "hide" 属性 在火花网 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
}
因为我们可以看到包含 "password" 的每个键(顺便说一句:在 master 分支中,他们还使用关键字 "secret" [=24= 过滤键])
我现在无法测试,但你可以尝试更新 spark。所以例如。 mergeDefaultSparkProperties()
中的 SparkSubmitArguments.scala 会将 spark.cassandra.auth.password
视为 spark 并填充为 sparkProperties
(使用 removePass
预处理)。
一天结束时,在 web gui 的环境选项卡中,此 属性 应该显示为 ****
。
位于 http://:4040 的应用程序 Web UI 在“环境”选项卡中列出了 Spark 属性。所有通过 spark-defaults.conf、SparkConf 或命令行明确指定的值都会出现。 但是,出于安全原因,我不希望我的 Cassandra 密码显示在网络上 UI。 是否有某种开关可以确保不显示某些 spark 属性? ?
请注意,我看到一些解决方案建议实施安全过滤器并使用 spark.ui.filters 设置来引用 class。我希望避免这种复杂性。
我认为没有通用的解决方案如何从以前版本的 spark WebUI 中隐藏您的自定义 属性。
我假设您使用的是 spark 2.0 或更低版本(我没有在 2.0 中看到下面描述的功能),因为 2.0.1 支持将密码预处理为“*****”。
检查问题 SPARK-16796 Visible passwords on Spark environment page
当我们查看 apache spark 源代码 并进行一些调查时,我们可以看到一些 processing 如何 "hide" 属性 在火花网 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
}
因为我们可以看到包含 "password" 的每个键(顺便说一句:在 master 分支中,他们还使用关键字 "secret" [=24= 过滤键])
我现在无法测试,但你可以尝试更新 spark。所以例如。 mergeDefaultSparkProperties()
中的 SparkSubmitArguments.scala 会将 spark.cassandra.auth.password
视为 spark 并填充为 sparkProperties
(使用 removePass
预处理)。
一天结束时,在 web gui 的环境选项卡中,此 属性 应该显示为 ****
。