Spark on Yarn应用级远程证明

  1. 在virtCCA机密虚拟机内添加用于做IMA度量的用户。

    1
    useradd attest
    

  2. 在virtCCA机密虚机内配置IMA度量策略。

    1. 打开“policy”文件。
      1
      vi policy
      
    2. “i”进入编辑模式,在文件中添加以下内容。
      1
      measure func=FILE_CHECK mask=MAY_READ fowner=1001
      
      • 10011中attest用户的ID,policy中fowner指定的ID需根据实际情况修改,可通过cat /etc/passwd | grep attest查看用户ID。
      • func=FILE_CHECK表示IMA度量的对象为文件。
      • mask=MAY_READ表示IMA度量的触发动作为读取操作。
      • fowner=1001表示被度量的文件的属主ID为1001。
      • 3条参数规则结合在一起时表示:当属主为1001的文件被读取时将触发IMA度量。
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  3. 在virtCCA机密虚机内生效IMA度量策略。

    1
    cat policy > /sys/kernel/security/ima/policy
    

  4. 在virtCCA机密虚机内配置IMA度量用户的环境变量。

    1. 打开“/etc/profile”文件。
      1
      vi /etc/profile
      
    2. “i”进入编辑模式,在文件中添加以下内容。
      1
      export IMA_USER=attest
      

      IMA_USER用户名称是1新建的用户。

    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  5. 在Yarn的ResourceManager节点提交Spark作业并进行远程证明,如可以通过如下指令启动Spark example中计算Pi值的作业。

    1
    spark-submit --master yarn  --class org.apache.spark.examples.SparkPi --num-executors 1  --executor-cores 1 --executor-memory 1G --conf spark.remote.attestation.enable=true  --conf spark.remote.attestation.agent.class=rats.RatsTLSRemoteAttestationAgent --conf spark.network.timeout=1200 --conf spark.yarn.max.executor.failures=1 --conf spark.yarn.maxAppAttempts=1  --conf spark.executor.extraClassPath=omnishield-1.0-SNAPSHOT.jar:rats-tls-demo-1.0.jar --driver-class-path omnishield-1.0-SNAPSHOT.jar:rats-tls-demo-1.0.jar  --jars "omnishield-1.0-SNAPSHOT.jar,rats-tls-demo-1.0.jar" /usr/local/spark/examples/jars/spark-examples_2.12-3.3.1.jar
    
    • rats-tls-demo-1.0.jar是spark.remote.attestation.agent.class指定的类所在的JAR包,需使用者自行实现。本步骤中以Virtcca rats-tls为例完成演示,具体实现细节和部署步骤请参见OmniShield对接Virtcca rats-tls
    • spark.remote.attestation.enable是OmniShield机密大数据中新增的配置,用于配置启动Executor时是否需要进行远程证明。true表示配置启动Executor时需要远程证明,false表示配置启动Executor时不需要远程证明。
    • spark.remote.attestation.agent.class是OmniShield机密大数据中新增的配置,用于配置Executor在开启远程证明后进行远程证明的类的名称,使用者需要根据实际业务自行对接。
    • spark.yarn.max.executor.failures=1和spark.yarn.maxAppAttempts=1是Spark的配置, 用于设置Spark on Yarn Executor启动失败后的重试次数。当远程证明不通过时Spark Executor会启动失败,通过以上2项配置可以控制Executor的重启次数。