애플리케이션의 키 관리

이 주제에서는 애플리케이션을 통해 열 암호화 키를 관리하는 방법에 대해 설명합니다. 또한 마스터 키를 제공하는 방법과 이러한 마스터 키를 사용하여 암호화된 데이터를 쓰고 읽는 방법에 대해 설명합니다.

마스터 키 제공

마스터 키를 제공하려면 다음을 수행하십시오.

  1. EncryptionProperties팩토리를 구현하는 클래스를 설정하십시오.

    parameter name: "parquet.crypto.factory.class"
    parameter value: "com.ibm.parquet.key.management.IBMKeyToolsFactory"
    
  2. 다음 형식으로 명시적 마스터 키를 전달하십시오.

    parameter name: "parquet.encryption.key.list"
    parameter value: "<master key ID>:<master key (base64)> , <master key ID>:<master key (base64)>.."
    

    예를 들어, 다음과 같습니다.

    sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")
    sc.hadoopConfiguration.set("parquet.encryption.key.list" , "k1:iKwfmI5rDf7HwVBcqeNE6w== , k2:LjxH/aXxMduX6IQcwQgOlw== , k3:rnZHCxhUHr79Y6zvQnxSEQ==")
    

    base64 인코딩 전의 마스터 키의 길이는 16, 24 또는 32바이트(128, 192 또는 256비트)입니다.

암호화된 데이터 쓰기

암호화된 데이터를 쓰려면 다음을 수행하십시오.

  1. 암호화할 열과 사용할 마스터 키를 지정하십시오.

    parameter name:  "parquet.encryption.column.keys"
    parameter value: "<master key ID>:<column>,<column>;<master key ID>:<column>,..."
    
  2. 푸터 키를 지정하십시오.

    parameter name:  "parquet.encryption.footer.key"
    parameter value:  "<master key ID>"
    

    예를 들어, 다음과 같습니다.

    dataFrame.write
    .option("parquet.encryption.footer.key" , "k1")
    .option("parquet.encryption.column.keys" , "k2:SSN,Address;k3:CreditCard")
    .parquet("<path to encrypted files>")
    

    참고: "parquet.encryption.column.keys" 매개변수 또는 "parquet.encryption.footer.key" 매개변수를 설정하지 않은 경우 예외가 발생합니다.

암호화된 데이터 읽기

필수 메타데이터는 암호화된 Parquet 파일에 저장됩니다.

암호화된 데이터를 읽으려면 다음을 수행하십시오.

  1. EncryptionProperties팩토리를 구현하는 클래스를 설정하십시오.
    sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")
    
  2. 암호화 키를 제공하십시오.
    sc.hadoopConfiguration.set("parquet.encryption.key.list" , "k1:iKwfmI5rDf7HwVBcqeNE6w== , k2:LjxH/aXxMduX6IQcwQgOlw== , k3:rnZHCxhUHr79Y6zvQnxSEQ==")
    
  3. 다음과 같은 일반 parquet 읽기 명령을 호출하십시오.
    val dataFrame = spark.read.parquet("<path to encrypted files>")
    

키 순환

키 순환이 필요한 경우 다음 Hadoop 구성 특성을 설정해야 합니다.

  • 매개변수 "parquet.encryption.key.list", "parquet.encryption.new.key.list"
  • "parquet.encryption.key.material.store.internally" 매개변수를 "false"(으)로 설정해야 함
  • "parquet.encryption.kms.client.class" 매개변수를 "com.ibm.parquet.key.management.InMemoryKMS"(으)로 설정해야 함
  • "parquet.crypto.factory.class" 매개변수를 "com.ibm.parquet.key.management.IBMKeyToolsFactory"(으)로 설정해야 함

예를 들어, 다음과 같습니다.

sc.hadoopConfiguration.set("parquet.encryption.key.list", OLD_KEYS)
sc.hadoopConfiguration.set("parquet.encryption.new.key.list", NEW_KEYS)
sc.hadoopConfiguration.set("parquet.encryption.key.material.store.internally", "false")
sc.hadoopConfiguration.set("parquet.encryption.kms.client.class", "com.ibm.parquet.key.management.InMemoryKMS")
sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")

KeyToolkit.rotateMasterKeys("<path to encrypted files>", sc.hadoopConfiguration)

참고: "parquet.encryption.key.material.store.internally" 매개변수를 "false"(으)로 설정한 파일에 대해서만 키 순환을 수행할 수 있습니다.