애플리케이션의 키 관리
이 주제에서는 애플리케이션을 통해 열 암호화 키를 관리하는 방법에 대해 설명합니다. 또한 마스터 키를 제공하는 방법과 이러한 마스터 키를 사용하여 암호화된 데이터를 쓰고 읽는 방법에 대해 설명합니다.
마스터 키 제공
마스터 키를 제공하려면 다음을 수행하십시오.
-
EncryptionProperties팩토리를 구현하는 클래스를 설정하십시오.
parameter name: "parquet.crypto.factory.class" parameter value: "com.ibm.parquet.key.management.IBMKeyToolsFactory" -
다음 형식으로 명시적 마스터 키를 전달하십시오.
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비트)입니다.
암호화된 데이터 쓰기
암호화된 데이터를 쓰려면 다음을 수행하십시오.
-
암호화할 열과 사용할 마스터 키를 지정하십시오.
parameter name: "parquet.encryption.column.keys" parameter value: "<master key ID>:<column>,<column>;<master key ID>:<column>,..." -
푸터 키를 지정하십시오.
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 파일에 저장됩니다.
암호화된 데이터를 읽으려면 다음을 수행하십시오.
- EncryptionProperties팩토리를 구현하는 클래스를 설정하십시오.
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==") - 다음과 같은 일반 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"(으)로 설정한 파일에 대해서만 키 순환을 수행할 수 있습니다.