0 / 0
영어 버전 문서로 돌아가기

KMS를 통한 키 관리

마지막 업데이트 날짜: 2024년 10월 04일
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 문서를 참조하십시오. 다음을 참조하십시오.

  1. 기본 경로에서 또는 사용자 정의 경로를 제공하여 전송 엔진을 사용으로 설정하십시오.
  2. 이름 지정된 암호화 키를 작성하십시오.
  3. 사용자 또는 시스템이 이러한 이름 지정된 키에 액세스하도록 허용되는 액세스 정책을 구성하십시오.

암호화된 데이터 쓰기

  1. 다음 매개변수를 전달하십시오.

    • "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) 
      
  2. 암호화되어야 하는 열과 해당 마스터 키를 지정하십시오. 바닥글 키도 지정해야 합니다. 예를 들어,

    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 파일에 저장됩니다.

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

  1. KMS 클라이언트를 Vault 클라이언트 구현으로 설정하십시오.

    sc.hadoopConfiguration.set("parquet.ecnryption.kms.client.class", "com.ibm.parquet.key.management.VaultClient")
    
  2. 관련 키에 대한 액세스를 부여하는 정책이 첨부된 액세스 정책을 제공하십시오.

    sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")
    
  3. 다음과 같은 일반 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 암호화