KMS를 통한 키 관리
Parquet 모듈식 암호화는 임의의 키 관리 서비스(KMS) 서버에서 작동할 수 있습니다. 선택한 KMS 서버와 통신할 수 있는 사용자 정의 KMS 클라이언트 클래스가 Analytics Engine powered by Apache Spark 인스턴스에 제공되어야 합니다. 이 클래스는 KmsClient 인터페이스(Parquet 모듈식 암호화 API의 일부)를 구현해야 합니다. nalytics Engine powered by Apache Spark에는 Hashicorp Vault를 마스터 키용 KMS 서버로 사용하는 경우에 즉시 사용할 수 있는 VaultClient KmsClient가 포함되어 있습니다. 다른 KMS 시스템을 사용하거나 사용할 계획인 경우 사용자 정의 KmsClient 클래스를 개발할 수 있습니다(VaultClient 코드를 예제로 사용).
사용자 정의 KmsClient 클래스
Parquet 모듈 암호화는 사용자가 구현해야 하는 다음 두 가지 기본 기능과 함께 org.apache.parquet.crypto.keytools.KmsClient
(이)라는 간단한 인터페이스를 제공합니다.
// Wraps a key - encrypts it with the master key, encodes the result and
// potentially adds KMS-specific metadata.
public String wrapKey(byte[] keyBytes, String masterKeyIdentifier)
// Decrypts (unwraps) a key with the master key.
public byte[] unwrapKey(String wrappedKey, String masterKeyIdentifier)
또한 이 인터페이스는 KMS 매개변수 및 기타 구성을 전달하는 다음과 같은 초기화 함수를 제공합니다.
public void initialize(Configuration configuration, String kmsInstanceID, String kmsInstanceURL, String accessToken)
KmsClient 구현 방법을 학습하려면 KmsClient 구현 예를 참조하십시오.
사용자 정의 KmsClient 클래스를 개발한 후 Analytics Engine powered by Apache Spark에 제공되는 jar에 추가하고 Spark Hadoop 구성에 전체 이름을 전달하십시오. 예를 들어, 다음과 같습니다.
sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "full.name.of.YourKmsClient"
Hashicorp Vault를 통한 키 관리
Hashicorp Vault를 KMS 서버로 사용하기로 결정한 경우 사전 패키지된 VaultClient를 사용할 수 있습니다.
sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
마스터 키 작성
Vault에 대한 조치의 세부사항은 Hashicorp Vault 문서를 참조하십시오. 다음을 참조하십시오.
- 기본 경로에서 또는 사용자 정의 경로를 제공하여 전송 엔진을 사용으로 설정하십시오.
- 이름 지정된 암호화 키를 작성하십시오.
- 사용자 또는 시스템이 이러한 이름 지정된 키에 액세스하도록 허용되는 액세스 정책을 구성하십시오.
암호화된 데이터 쓰기
다음 매개변수를 전달하십시오.
"parquet.encryption.kms.client.class"
을(를)"com.ibm.parquet.key.management.VaultClient"
(으)로 설정하십시오.sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
선택사항: 사용자 정의 경로
"parquet.encryption.kms.instance.id"
를 대중교통 엔진에 설정하십시오.sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id" , "north/transit1")
"parquet.encryption.kms.instance.url"
을(를) 저장소 인스턴스의 URL로 설정하십시오.sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<hostname>:8200")
"parquet.encryption.key.access.token"
을(를) 저장소 인스턴스의 필수 키에 대한 액세스 권한을 제공하는 액세스 정책이 첨부된 유효한 액세스 토큰으로 설정하십시오.sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
토큰이 로컬 파일에 있는 경우 로드하십시오.
val token = scala.io.Source.fromFile("<token file>").mkStringsc.hadoopConfiguration.set("parquet.encryption.key.access.token" , token)
암호화되어야 하는 열과 해당 마스터 키를 지정하십시오. 바닥글 키도 지정해야 합니다. 예를 들어,
val k1 = "key1" val k2 = "key2" val k3 = "key3" 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"
매개변수를 설정하지 않으면 예외가 발생합니다.
암호화된 데이터 읽기
Hashicorp Vault 인스턴스의 ID 및 URL이 포함된 필수 메타데이터는 암호화된 Parquet 파일에 저장됩니다.
암호화된 메타데이터를 읽으려면 다음을 수행하십시오.
KMS 클라이언트를 Vault 클라이언트 구현으로 설정하십시오.
sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
관련 키에 대한 액세스를 부여하는 정책이 첨부된 액세스 정책을 제공하십시오.
sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
다음과 같은 일반 Parquet 읽기 명령을 호출하십시오.
val dataFrame = spark.read.parquet("<path to encrypted files>")
키 순환
키 순환이 필요한 경우 KMS 키 순환 조치에 대한 액세스 권한이 있는 관리자가 Hashicorp Vault 문서에 설명된 프로시저를 사용하여 Hashicorp Vault에서 마스터 키를 순환해야 합니다. 그 후에 관리자가 다음을 호출하여 Parquet 키 순환을 트리거할 수 있습니다.
public static void KeyToolkit.rotateMasterKeys(String folderPath, Configuration hadoopConfig)
Parquet 키 순환을 사용으로 설정하려면 다음 Hadoop 구성 특성이 설정되어야 합니다.
"parquet.encryption.key.access.token"
및"parquet.encryption.kms.instance.url"
매개변수는 설정을 설정해야 하며 선택적으로"parquet.encryption.kms.instance.id"
"parquet.encryption.key.material.store.internally"
매개변수를"false"
(으)로 설정해야 합니다."parquet.encryption.kms.client.class"
매개변수를"com.ibm.parquet.key.management.VaultClient"
(으)로 설정해야 함
예를 들어,
sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<hostname>:8200")sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
sc.hadoopConfiguration.set("parquet.encryption.kms.client.class","com.ibm.parquet.key.management.VaultClient")
sc.hadoopConfiguration.set("parquet.encryption.key.material.store.internally", "false")
KeyToolkit.rotateMasterKeys("<path to encrypted files>", sc.hadoopConfiguration)
상위 주제: Parquet 암호화