DataFrame行式数据源加解密

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

  1. 部署相应KMS服务,创建好所需的Primary Key。例如可以通过以下指令启动Hadoop KMS,并创建Primary Key。

    1. 编辑Hadoop配置文件。
      1
      2
      cd $HADOOP_HOME/etc/hadoop
      vi core-site.xml
      
    2. “i”进入编辑模式,在<configuration>标签中添加以下内容。
      1
      2
      3
      4
      <property>  
        <name>hadoop.security.key.provider.path</name>
        <value>kms://http@x.x.x.x:9600/kms</value>
      </property>
      
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    4. 复制core-site.xml文件给Spark。
      1
      cp $HADOOP_HOME/etc/hadoop/core-site.xml $SPARK_HOME/conf/
      
    5. 启动Hadoop KMS。
      1
      2
      cd $HADOOP_HOME/sbin
      sh kms.sh start
      
    6. 创建Key。
      1
      hadoop key create key1
      
      • 在修改core-site.xml时将第二步中的x.x.x.x修改为实际的IP地址。
      • 如果key1已经存在,在创建key1前执行hadoop key delete key1指令删除key1。

  2. “/home”目录下生成待加密的CSV数据源文件。

    1. 编辑“simple.csv”文件。
      1
      vi simple.csv
      
    2. “i”进入编辑模式,在文件中添加以下内容。
      1
      2
      3
      4
      5
      6
      name,age,job
      user1,12,Engineer
      user2,13,Engineer
      user3,14,Developer
      user4,15,Engineer
      user5,16,Engineer
      
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  3. “/opt/omnishield”目录下执行数据源加密的命令如下, 指令执行完成后将生成“/home/en”目录,并存放加密后的simple.csv数据。

    1
    spark-submit --class com.huawei.analytics.shield.utils.Encrypt --master local --conf spark.hadoop.io.compression.codecs=com.huawei.analytics.shield.crypto.CryptoCodec  --conf spark.shield.primaryKey.name=key1 --conf spark.shield.primaryKey.key1.kms.type=test.example.HadoopKeyManagementService --jars omnishield-1.0-SNAPSHOT.jar,kms.jar omnishield-1.0-SNAPSHOT.jar  -i file:///home/simple.csv -o file:///home/en -a AES/GCM/NOPadding -t csv -e encrypt
    

  4. “/opt/omnishield”目录下执行数据源解密的命令如下,指令执行完成后将生成“/home/de”目录,并存放解密后的数据。

    1
    spark-submit --class com.huawei.analytics.shield.utils.Encrypt --master local --conf spark.hadoop.io.compression.codecs=com.huawei.analytics.shield.crypto.CryptoCodec  --conf spark.shield.primaryKey.name=key1 --conf spark.shield.primaryKey.key1.kms.type=test.example.HadoopKeyManagementService --jars omnishield-1.0-SNAPSHOT.jar,kms.jar omnishield-1.0-SNAPSHOT.jar  -i file:///home/en -o file:///home/de -a AES/GCM/NOPadding -t csv -e decrypt
    
    • spark.shield.primaryKey是指定当前使用的Primary Key,该key需要提前在KMS中创建生成。
    • spark.shield.primaryKey.key1.kms.type是指定Primary Key的KMS类型,KMS需要使用者自行按照OmniShield提供的接口实现,该项的值需要指定KMS在kms.jar包中的具体类路径。
    • -i、-o是指定输入和输出的路径,可以是HDFS或者本地文件系统。
      • 当工作模式为加密时,-i指定的是数据源文件,-o指定的是待输出的加密文件夹位置。
      • 当工作模式为解密时,-i指定的已经加密文件的文件夹位置, -o指定的是待输出的解密文件夹位置。
    • -a是指定使用的加密算法,目前只支持AES/GCM/NOPadding。
    • -t是指定数据源文件格式,目前支持CSV/JSON/TXT格式。
    • -e是指定工作模式,encrypt和decrypt分别代表这加密和解密。