Bootstrap

SecurityManager 是什么?有什么作用?

前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

正文

SecurityManager 主要对账号、权限及身份认证进行设置和管理。

如果 Spark 的部署模式为 YARN ,则需要生成 secret key (密钥)并存入 Hadoop UGI 。

而在其他模式下,则需要设置环境变量 _SPARK_AUTH_SECRET (优先级更高)或 spark.authenticate.secret 属性指定 secret key (密钥)。

SecurityManager 还会给当前系统设置默认的口令认证实例。

SecurityManager 源码类注释 (3.2.0-SNAPSHOT)

/**
 * spark 中负责安全的类。 
 * 
 * 一般来说,这个类应该由SparkEnv实例化,大多数组件应该从SparkEnv访问它。
 * 
 * 有些情况下SparkEnv还没有初始化,必须直接实例化这个类。 
 * 
 * 此类实现了与“Security”文档中描述的安全特性相关的所有配置。
 * 
 * 请参阅该文档以了解此处实现的特定功能。
 * 
 * @param sparkConf Spark 的配置对象 
 * @param ioEncryptionKey IO 加密密钥字节数组
 * @param authSecretFileConf 来自配置项:spark.authenticate.secret.driver.file(Driver)或者 spark.authenticate.secret.executor.file(Executor)
 */
private[spark] class SecurityManager(
    sparkConf: SparkConf,
    val ioEncryptionKey: Option[Array[Byte]] = None,
    authSecretFileConf: ConfigEntry[Option[String]] = AUTH_SECRET_FILE)
  extends Logging with SecretKeyHolder

SecretKeyHolder 源码解读(3.2.0-SNAPSHOT)

package org.apache.spark.network.sasl;

/**
 * 用于获取与某个应用程序相关联的密钥的接口。
 */
public interface SecretKeyHolder {
  /**
   * 获取给定appId的合适的SASL用户。
   * @throws IllegalArgumentException 如果给定的appId未与SASL用户关联
   */
  String getSaslUser(String appId);

  /**
   * 获取给定appId的适当SASL密钥。
   * @throws IllegalArgumentException 如果给定的appId未与SASL密钥关联。
   */
  String getSecretKey(String appId);
}
;