Gerenciamento de chave pelo Key Protect
Este tópico descreve como gerenciar chaves de criptografia de coluna usando o IBM® Key Protect for IBM Cloud® (Key Protect). Ele explica como criar uma instância do Key Protect, fornecer chaves mestras e gravar e ler dados criptografados usando essas chaves.
Criando uma instância do Key Protect e chaves mestras
Para criar uma instância do Key Protect e chaves mestras:
-
Crie uma instância de serviço do Key Protect. Consulte Provisionando o serviço
-
Crie chaves raiz do cliente nessa instância. As chaves raiz do cliente funcionam como chaves mestras para criptografia de coluna. Consulte Criando chaves raiz.
Se você desejar usar as chaves raiz existentes, será possível importá-las. Consulte Importando chaves raiz.
-
Configure os direitos de acesso de usuário para as chaves mestras usando o serviço IBM IAM. Consulte Concedendo acesso a chaves mestras..
Gravando dados criptografados
Para gravar dados criptografados:
-
Passe os parâmetros a seguir para o IBM Analytics Engine Serverless:
"parquet.crypto.factory.class": a classe implementa EncryptionPropertiesFactory. Configure para"com.ibm.parquet.key.management.IBMKeyToolsFactory".sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory")"parquet.encryption.kms.instance.id": o ID da instância KeyProtect, por exemplo:sc.hadoopConfiguration.set("parquet.encryption.kms.instance.id" , "27861a9a-6779-4026-bca4-01e59acf0767")"parquet.encryption.kms.instance.url": a URL da instância KeyProtect, por exemplo:sc.hadoopConfiguration.set("parquet.encryption.kms.instance.url" , "https://<region>.kms.cloud.ibm.com")"parquet.encryption.key.access.token": um token IAM válido com direitos de acesso às chaves necessárias na instância KeyProtect, por exemplo:Se você mantiver o token em um arquivo local, ele poderá ser carregado.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)
-
Especifique quais colunas precisam ser criptografadas e com quais chaves mestras. Também se deve especificar a chave de rodapé. No gerenciamento de chave pelo Key Protect, os IDs da chave mestra são os IDs das CRKs (chaves raiz do cliente) do Key Protect, que podem ser localizados na janela de serviço do IBM Cloud. Por exemplo:
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>")Nota: se o parâmetro
"parquet.encryption.column.keys"ou o parâmetro"parquet.encryption.footer.key"não for configurado, uma exceção será lançada.
Lendo dados criptografados
Os metadados necessários, incluindo o ID e URL da instância do KeyProtect, são armazenados nos arquivos Parquet criptografados.
Para ler os metadados criptografados:
- Configure a classe implementa EncryptionPropertiesFactory:
sc.hadoopConfiguration.set("parquet.crypto.factory.class","com.ibm.parquet.key.management.IBMKeyToolsFactory") - Forneça o token de acesso do IAM para as chaves relevantes:
sc.hadoopConfiguration.set("parquet.encryption.key.access.token" , "<token string>") - Chame os comandos de leitura regulares do parquet, como:
val dataFrame = spark.read.parquet("<path to encrypted files>")
Rotação de chaves
Se a rotação de chave for necessária, o administrador terá que girar as chaves mestras no Key Protect usando o procedimento descrito em Chaves de rotação manual Em seguida, o administrador poderá acionar a rotação de chaves do Parquet chamando:
public static void KeyToolkit.rotateMasterKeys(String folderPath, Configuration hadoopConfig)
Para ativar a rotação de chave do Parquet, as propriedades de configuração do Hadoop a seguir devem ser configuradas:
-
Os parâmetros
"parquet.encryption.key.access.token","parquet.encryption.kms.instance.url","parquet.encryption.kms.instance.id" -
O parâmetro
"parquet.encryption.key.material.store.internally"deve ser configurado como"false" -
O parâmetro
"parquet.encryption.kms.client.class"deve ser configurado como"com.ibm.parquet.key.management.KeyProtectClient" -
O parâmetro
"parquet.crypto.factory.class"deve ser configurado como"com.ibm.parquet.key.management.IBMKeyToolsFactory"..Por exemplo:
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)