当前位置 博文首页 > Shockang的博客:SecurityManager 是什么?有什么作用?

    Shockang的博客:SecurityManager 是什么?有什么作用?

    作者:[db:作者] 时间:2021-08-24 09:55

    前言

    本文隶属于专栏《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);
    }
    
    cs