Key Protect による鍵の管理
このトピックでは、IBM® Key Protect for IBM Cloud® (Key Protect) を使用して列の暗号鍵を管理する方法について説明します。 Key Protect インスタンスを作成してマスター鍵を指定する方法と、それらのマスター鍵を使用して暗号化データの書き込み/読み取りを行う方法について説明します。
Key Protect インスタンスおよびマスター鍵の作成
Key Protect インスタンスおよびマスター鍵を作成するには、次のようにします。
-
Key Protect サービス・インスタンスを作成します。 サービスのプロビジョニングを参照してください。
-
このインスタンス内にカスタマー・ルート鍵を作成します。 カスタマー・ルート鍵が、列の暗号化に使用するマスター鍵として機能します。 ルート鍵の作成を参照してください。
既存のルート鍵を使用する場合は、それらをインポートできます。 ルート鍵のインポートを参照してください。
-
IBM IAM サービスを使用して、マスター鍵に対するユーザー・アクセス権限を構成します。 マスター鍵へのアクセス権限の付与を参照してください。
暗号化データの書き込み
暗号化データを書き込むには、次のようにします:
-
以下のパラメーターを IBM Analytics Engine サーバーレスに渡します。
"parquet.crypto.factory.class": EncryptionPropertiesFactory を実装するクラス。"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 は Key Protect の CRK (カスタマー・ルート鍵) の ID であり、IBM Cloud のサービス・ウィンドウで確認できます。 以下に例を示します。
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 の read コマンドを呼び出します。
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)