---
title: Spark on Yarn应用级远程证明
description: "使用OmniShield机密大数据特性执行Spark引擎业务，需通过启动Spark提交任务执行。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0718.html
sourcePath: /source/zh/kunpengboostkithistory/2400/bds/kunpengbds_omniruntime_20_0718.html
indexId: 9dc6255c0df9f72b6ebd557fcf0d535a30e6e77b5dddb9595b3652783392d21478
---
# Spark on Yarn应用级远程证明

使用OmniShield机密大数据特性执行Spark引擎业务，需通过启动Spark提交任务执行。

为满足国内数据安全合规要求，Spark on YARN现已实现应用级远程证明能力，在原有集群认证机制基础上新增国密合规的可信验证功能，确保从应用提交到资源调度的全生命周期可信执行，为分布式计算作业提供硬件级的安全保障。

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

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

  a. 打开“policy”文件。
    1 vi policy

  b. 按“i”进入编辑模式，在文件中添加以下内容。
    1 measure func=FILE_CHECK mask=MAY_READ fowner=1001

    1001是1中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度量。

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
3. 在virtCCA机密虚拟机内生效IMA度量策略。
  1 cat policy > /sys/kernel/security/ima/policy

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

  a. 打开“/etc/profile”文件。
    1 vi /etc/profile

  b. 按“i”进入编辑模式，在文件中添加以下内容。
    1 export IMA_USER=attest

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

  c. 按“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(https://gitee.com/kunpengcompute/boostkit-bigdata/tree/main/omnishield/src/test/scala/com/huawei/analytics/shield/ra/example/README.md)。 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的重启次数。
