顧客管理の暗号鍵(CMEK)の使用

Google Cloud では、デフォルトで、Google が管理する暗号鍵を使用して、自動的に保存されているデータを暗号化します。データを保護する鍵に関連する具体的なコンプライアンス要件や規制要件がある場合は、顧客管理の暗号鍵(CMEK)をトレーニング ジョブに使用できます。

AI Platform Training で CMEK を使用する具体的なメリットについては、このガイドの以降のセクションをご覧ください。CMEK 全般についての詳細は、Cloud Key Management Service のドキュメントをご覧ください。

このガイドでは、CMEK を AI Platform Training に使用するメリットと CMEK を使用するためのトレーニング ジョブの構成方法について説明します。

AI Platform Training の CMEK について

このセクションでは、トレーニング ジョブ用に CMEK を構成する前に理解する必要がある AI Platform Training の基本事項について説明します。

CMEK のメリット

一般に、CMEK は、データの暗号化に使用する鍵を完全に制御する必要がある場合によく利用されます。CMEK を使用すると、Cloud KMS 内で鍵を管理できます。たとえば、Cloud KMS API を使用して、鍵のローテーションや無効化を行うことが可能です。CMEK の一般的な用途や使用する理由などの詳細については、Cloud KMS のドキュメントをご覧ください。

トレーニング ジョブを実行すると、AI Platform Training によって管理される 1 つ以上の仮想マシン(VM)インスタンスでコードが実行されます。AI Platform Training で CMEK を有効にすると、Google が管理する鍵ではなく、指定した鍵が VM のブートディスクのデータの暗号化に使用されます。CMEK 鍵により、次の種類のデータが暗号化されます。

  • VM 上のトレーニング コードのコピー。
  • トレーニング コードによって読み込まれるデータ。
  • トレーニング コードによってローカル ディスクに保存されるすべての一時データ。

CMEK 鍵は、ジョブの名前やリージョンなど、トレーニング ジョブに関連付けられているメタデータは暗号化しません。トレーニング ジョブに関連付けられたメタデータは、常に Google のデフォルトの暗号化メカニズムを使用して暗号化されます。

他の Google Cloud プロダクトで CMEK を使用する

CMEK を AI Platform Training 用に構成しても、AI Platform Training と一緒に使用する他の Google Cloud プロダクト用の CMEK は自動的には構成されません。他の Google Cloud プロダクトで CMEK を使用してデータを暗号化するには、別途構成が必要になります。次に例を示します。

制限事項

次のような場合は、AI Platform Training で CMEK を使用できません。

  • TPU を使用するトレーニング ジョブでは CMEK を使用できません。
  • 2017 年以前に AI Platform Training と Prediction API の使用を開始した場合、CMEK でトレーニング ジョブを送信すると、互換性のない以前の認証メカニズムを示すエラーが発生することがあります。この場合は、新しい Google Cloud プロジェクトを作成するか、別のプロジェクトを選択して AI Platform Training ジョブを実行します。

トレーニング ジョブ用に CMEK を構成する

以降のセクションでは、Cloud Key Management Service でキーリングと鍵を作成し、鍵に対する AI Platform Training の暗号化と復号の権限を付与して、CMEK を使用するトレーニング ジョブを作成します。

始める前に

このガイドでは、トレーニング用の CMEK を構成するため、2 つの独立した Google Cloud プロジェクトを使用することを前提としています。

  • 暗号鍵を管理するためのプロジェクト(「Cloud KMS プロジェクト」)。
  • AI Platform Training へのアクセス、Cloud Storage でのトレーニング データや出力の管理、用途に応じて他の Google Cloud プロダクトとやり取りを行うためのプロジェクト(「AI Platform プロジェクト」)。

このおすすめの設定は、職掌分散をサポートしています。

あるいは、このガイド全体で 1 つの Google Cloud プロジェクトだけを使用することもできます。そのようにするには、以降に出てくる Cloud KMS プロジェクトに関係するタスクと、AI Platform プロジェクトに関係するタスクのすべてに同じプロジェクトを使用します。

Cloud KMS プロジェクトの設定

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Cloud KMS API を有効にします。

    API を有効にする

AI Platform プロジェクトの設定

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. AI Platform Training & Prediction API を有効にします。

    API を有効にする

gcloud コマンドライン ツールの設定

このガイドの一部の手順では gcloud ツールは必須となり、それ以外の手順ではオプションの手段になります。 Cloud SDK をインストールして初期化します。

キーリングと鍵の作成

対称鍵の作成に関する Cloud KMS ガイドに従って、キーリングと鍵を作成します。キーリングを作成する際、AI Platform Training をサポートするリージョンキーリングのロケーションとして指定します。AI Platform Training では、トレーニング ジョブと鍵が同じリージョンを使用する場合にのみ CMEK がサポートされます。デュアル リージョン、マルチ リージョン、グローバル ロケーションをキーリングに指定することはできません。

キーリングと鍵は Cloud KMS プロジェクトで作成します。

AI Platform Training 権限の付与

トレーニング ジョブに CMEK を使用するには、鍵を使用してデータの暗号化や復号を行う権限を AI Platform Training に付与する必要があります。AI Platform Training では、Google が管理するサービス アカウントを使用してトレーニング ジョブを実行します。このサービス アカウントは、次の形式のメールアドレスにより識別されます。

service-AI_PLATFORM_PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com

AI Platform プロジェクトに適切なサービス アカウントを見つけるには、Google Cloud Console の [IAM] ページに移動し、AI_PLATFORM_PROJECT_NUMBER 変数を置き換えて、AI Platform プロジェクトのプロジェクト番号を使用してこのメールアドレス形式と一致するメンバーを見つます。このサービス アカウントは、Google Cloud ML Engine Service Agent という名前でもあります。

[IAM] ページに移動

このサービス アカウントのメールアドレスをメモし、以降の、CMEK 鍵を使用したデータの暗号化と復号の権限を付与する手順で使用します。権限を付与するには、Google Cloud Console か、gcloud コマンドライン ツールを使用します。

Cloud Console

  1. Cloud Console で [暗号鍵] ページに移動し、Cloud KMS プロジェクトを選択します。

    [暗号鍵] ページに移動

  2. このガイドの前のセクションで作成したキーリングの名前をクリックして [キーリングの詳細] ページに移動します。

  3. このガイドの前のセクションで作成した鍵のチェック ボックスをオンにします。鍵の名前が付いた情報パネルがまだ開いていない場合は、[情報パネルを表示] をクリックします。

  4. 情報パネルで、[メンバーを追加] をクリックして、[KEY_NAME」にメンバーを追加します] ダイアログを開きます。このダイアログで、次の操作を行います。

    1. [新しいメンバー] ボックスに、前のセクションでメモしたサービス アカウントのメールアドレス(service-AI_PLATFORM_PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com)を入力します。
    2. [ロールを選択] プルダウン リストで [Cloud KMS] をクリックし、続いて [Cloud KMS 暗号鍵の暗号化 / 復号] ロールを選択します。

    3. [保存] をクリックします。

gcloud

次のコマンドを実行します。

gcloud kms keys add-iam-policy-binding KEY_NAME \
  --keyring=KEY_RING_NAME \
  --location=REGION \
  --project=KMS_PROJECT_ID \
  --member=serviceAccount:service-AI_PLATFORM_PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com \
  --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

このコマンドで、プレースホルダは次のように置き換えます。

  • KEY_NAME: このガイドの前のセクションで作成したキーの名前。
  • KEY_RING_NAME: このガイドの前のセクションで作成したキーリング。
  • REGION: キーリングを作成したリージョン。
  • KMS_PROJECT_ID: Cloud KMS プロジェクトの ID。
  • AI_PLATFORM_PROJECT_NUMBER: 前のセクションでサービス アカウントのメールアドレスの一部としてメモした AI Platform プロジェクトのプロジェクト番号。

カスタム サービス アカウントを使用したトレーニング

トレーニングにカスタム サービス アカウントを使用する場合は、カスタム サービス アカウントに roles/cloudkms.cryptoKeyEncrypterDecrypter ロールも付与してください。

これを行うには、前の手順を繰り返します。ただし、AI Platform Training の Google が管理するサービス アカウントのメールアドレスの代わりに、カスタム サービス アカウントのメールアドレスを使用します。

CMEK を使用したトレーニング ジョブの作成

これまでのセクションで、AI Platform Training に CMEK 鍵を使用してデータを暗号化および復号する権限を付与しました。次は、この鍵を使用して一時データを暗号化するトレーニング ジョブを作成します。トレーニング ジョブを作成する際は、ジョブの trainingInput フィールドに encryptionConfig フィールドを指定します。

gcloud ツールを使用してこれを行う方法の例を、次に示します。現在、Cloud Console では CMEK を使用したトレーニング ジョブを作成できません。

この例では、trainer という名前のディレクトリに、task モジュール名で、トレーニング アプリケーションが置かれていると想定しています。

  1. 次の内容を含む config.yaml 構成ファイルを作成します。

    trainingInput:
      encryptionConfig:
        kmsKeyName: projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    

    構成ファイルの、各プレースホルダは次のように置き換えます。

    • KMS_PROJECT_ID: Cloud KMS プロジェクトの ID。
    • KEY_RING_NAME: キーリングの名前。
    • KEY_NAME: キーの名前。
  2. トレーニング ジョブを作成するには、次のコマンドを実行します。

    gcloud ai-platform jobs submit training JOB_ID \
      --config=config.yaml \
      --job-dir=JOB_DIR \
      --module-name=trainer.task \
      --package-path=trainer \
      --python-version=3.7 \
      --region=REGION \
      --runtime-version=2.1 \
      --scale-tier=basic
    

    このコマンドで、プレースホルダは次のように置き換えます。

    • JOB_ID: ジョブに付ける名前。
    • JOB_DIR: トレーニング アプリケーションがアップロードされる Cloud Storage ディレクトリへのパス。出力の保存など、トレーニング中でも、トレーニング ジョブによるこのディレクトリの使用が可能です。便宜上、AI Platform プロジェクトの Cloud Storage バケット内のディレクトリを選択します。

    • REGION: キーリングを作成したリージョンと、トレーニング ジョブを作成する予定のリージョン。

    正常な場合は、次の出力が表示されます。

    Job [JOB_ID] submitted successfully.
    Your job is still active. You may view the status of your job with the command
    
      $ gcloud ai-platform jobs describe JOB_ID
    
    or continue streaming the logs with the command
    
      $ gcloud ai-platform jobs stream-logs JOB_ID
    jobId: JOB_ID
    state: QUEUED
    

    以上でトレーニング ジョブをモニタリングできるようになりました。

regionencryptionConfig フィールド以外にも、ニーズに合わせてトレーニング ジョブの構成をカスタマイズできます。トレーニングにカスタム コンテナを使用することも可能です。

次のステップ