Key Protect를 통한 키 관리
이 주제에서는 IBM® Key Protect for IBM Cloud®(Key Protect)를 사용한 열 암호화 키 관리에 대해 설명합니다. 또한 Key Protect 인스턴스를 작성하고 마스터 키를 제공하는 방법과 이러한 마스터 키를 사용하여 암호화된 데이터를 쓰고 읽는 방법에 대해 설명합니다.
Key Protect 인스턴스 및 마스터 키 작성
Key Protect 인스턴스 및 마스터 키를 작성하려면 다음을 수행하십시오.
-
Key Protect 서비스 인스턴스를 작성하십시오. 서비스 프로비저닝을 참조하십시오.
-
이 인스턴스에서 고객 루트 키를 작성하십시오. 고객 루트 키는 열 암호화를 위한 마스터 키 역할을 합니다. 루트 키 작성을 참조하십시오.
기존 루트 키를 사용하려는 경우 해당 키를 가져올 수 있습니다. 루트 키 가져오기를 참조하십시오.
-
IBM IAM 서비스를 사용하여 마스터 키에 대한 사용자 액세스 권한을 구성하십시오. 마스터 키에 대한 액세스 부여를 참조하십시오.
암호화된 데이터 쓰기
암호화된 데이터를 쓰려면 다음을 수행하십시오.
-
다음 매개변수를 IBM Analytics Engine Serverless에 전달하십시오.
"parquet.crypto.factory.class": EncryptionProperties팩토리를 구현하는 클래스입니다."com.ibm.parquet.key.management.IBMKeyToolsFactory"로 설정하십시오.sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")"parquet.encryption.kms.instance.id": KeyProtect 인스턴스의 ID입니다. 예:sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id" , "27861a9a-6779-4026-bca4-01e59acf0767")"parquet.encryption.kms.instance.url": KeyProtect 인스턴스의 URL입니다. 예:sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<region>.kms.cloud.ibm.com")"parquet.encryption.key.access.token": KeyProtect 인스턴스의 필수 키에 대한 액세스 권한이 있는 유효한 IAM 토큰입니다. 예:토큰을 로컬 파일에 보관하면 이를 로드할 수 있습니다.sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>")val token = scala.io.Source.fromFile("<token file>").mkString sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , token)
-
암호화해야 하는 열을 마스터 키와 함께 지정하십시오. 푸터 키도 지정해야 합니다. Key Protect를 통한 키 관리에서 마스터 키 ID는 IBM Cloud 서비스 창에서 찾을 수 있는 Key Protect CRK(고객 루트 키)의 ID입니다. 예를 들어, 다음과 같습니다.
val k1 = "d1ae3fc2-6b7d-4a03-abb6-644e02933734" val k2 = "c4a21521-2a78-4968-a7c2-57c481f58d5c" val k3 = "a4ae4bc2-9d78-8748-f8a2-17f584d48c5b" 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"매개변수를 설정하지 않은 경우 예외가 발생합니다.
암호화된 데이터 읽기
KeyProtect 인스턴스의 ID와 URL을 포함한 필수 메타데이터가 암호화된 Parquet 파일에 저장됩니다.
암호화된 메타데이터를 읽으려면 다음을 수행하십시오.
- EncryptionProperties팩토리를 구현하는 클래스를 설정하십시오.
sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory") - 관련 키의 IAM 액세스 토큰을 제공하십시오.
sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>") - 다음과 같은 일반 parquet 읽기 명령을 호출하십시오.
val dataFrame = spark.read.parquet("<path to encrypted files>")
키 순환
키 회전이 필요한 경우 관리자는 수동으로 키 회전에 설명된 절차를 사용하여 Key Protect 에서 마스터 키를 회전해야 합니다. 그런 다음 관리자는 다음을 호출하여 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.KeyProtectClient"(으)로 설정해야 함 -
"parquet.crypto.factory.class"매개변수를"com.ibm.parquet.key.management.IBMKeyToolsFactory"로 설정해야 합니다.예를 들어, 다음과 같습니다.
sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>") sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<region>.kms.cloud.ibm.com") sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id", "27861a9a-6779-4026-bca4-01e59acf0767") sc.hadoopConfiguration.set("parquet.encryption.key.material.store.internally", "false") sc.hadoopConfiguration.set("parquet.encryption.kms.client.class" "com.ibm.parquet.key.management.KeyProtectClient") sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory") KeyToolkit.rotateMasterKeys("<path to encrypted files>", sc.hadoopConfiguration)