顧客管理の暗号鍵(CMEK)

デフォルトでは、Dialogflow CX はお客様のコンテンツを保存時に暗号化します。暗号化は Dialogflow CX が行うため、ユーザー側での操作は必要ありません。このオプションは、Google のデフォルトの暗号化と呼ばれます。Google のデフォルトの暗号化では、Google 独自の暗号化データに使用されているのと同じ堅牢な鍵管理システムが使用されます。このシステムには、鍵の厳格なアクセス制御と監査が含まれます。

暗号鍵を管理する場合は、Cloud KMS の顧客管理の暗号鍵(CMEK)を、Dialogflow CX などの CMEK 統合サービスで使用できます。Cloud KMS 鍵を使用すると、保護レベル、ロケーション、ローテーション スケジュール、使用とアクセスの権限、暗号境界を制御できます。Cloud KMS を使用すると、監査ログを表示し、鍵のライフサイクルを管理することもできます。データを保護する対称鍵暗号鍵(KEK)は Google が所有して管理するのではなく、ユーザーが Cloud KMS でこれらの鍵の制御と管理を行います。

CMEK を使用してリソースを設定した後は、Dialogflow CX リソースへのアクセスは、Google のデフォルトの暗号化を使用する場合と同様です。暗号化オプションの詳細については、顧客管理の暗号鍵(CMEK)をご覧ください。

保護対象データ

すべての Dialogflow CX エージェントの保存データは、CMEK で保護できます。

制限事項

  • 鍵のローテーションはサポートされていますが、データの再暗号化はサポートされていません。以前に暗号化されたデータを新しい鍵バージョンで再暗号化することはサポートされていません。
  • 次のリージョンはサポートされていません。
    • global
  • プロジェクトのロケーションごとに 1 つの鍵を使用する必要があります。
  • CMEK を有効にしてエージェントを復元するには、Cloud Storage オプションを選択する必要があります。
  • CMEK 統合されていないプロジェクトの既存のリソースを、CMEK 統合に遡及的に統合することはできません。代わりに、CMEK 用の新しいプロジェクトでリソースをエクスポートして復元します。
  • Vertex AI Agent Builder には、Cloud Key Management Service の制限事項がいくつかあります。

キーの作成

鍵を作成するには、Cloud KMS を使用します。手順については、対称鍵の作成をご覧ください。鍵を作成または選択するときは、次の構成を必ず行ってください。

  • エージェントに使用するロケーションを選択します。ロケーションが一致しないと、リクエストが失敗します。

Dialogflow サービス アカウントを特定する

Dialogflow サービス アカウントを特定するには:

  1. 会話エージェント コンソールを開きます。
  2. プロジェクトを選択します。
  3. エージェントを選択します。
  4. ナビゲーション メニューで [設定] をクリックし、[セキュリティ] タブに移動します。
  5. [セキュリティ設定を管理する] をクリックして、CCAI コンソールにリダイレクトします。
  6. CCAI コンソールで、[CMEK] タブに移動します。
  7. [サービス アカウントを確認または作成] をクリックします。
  8. 表示されたサービス アカウント名(service-665989447347@gcp-sa-ccai-cmek.IAM.gserviceaccount.com など)をメモします。

サービス アカウントに権限を付与する

サービス アカウントに権限を付与するには:

  1. Cloud KMS ページに移動します。
  2. 作成したキーリングを選択します。
  3. そのキーリング内で作成した鍵を選択します。
  4. [権限] タブに移動します。
  5. [アクセス権を付与] をクリックします。
  6. [新しいプリンシパル] フィールドに、前の手順で特定した Dialogflow サービス アカウントを入力します。
  7. [ロールを選択] リストで、[Cloud KMS 暗号鍵の暗号化/復号] を選択します。
  8. [保存] をクリックします。

鍵のリソース名をコピーする

鍵のリソース名をコピーする手順は次のとおりです。

  1. KMS 鍵の詳細ページに移動します。
  2. [アクション] メニューをクリックして、[リソース名をコピー] を選択します。

この操作を行うと、KMS 鍵のフルパス(projects/<var>PROJECT_ID</var>/locations/<var>LOCATION_ID</var>/keyRings/<var>KEY_RING</var>/cryptoKeys/<var>KEY_ID</var> など)がコピーされます。

Dialogflow で CMEK を有効にする

Dialogflow で CMEK を有効にするには:

  1. CCAI コンソールの [CMEK] タブに戻ります。
  2. コピーした鍵のリソース名を、CMEK を有効にするロケーションの [] フィールドに貼り付けます。
  3. [保存] をクリックします。

これにより、選択したロケーションの CMEK を有効にする長時間実行オペレーション(LRO)が開始されます。このプロセスには 2 ~ 3 分かかります。

鍵を使用するようにエージェントを構成する

エージェントを作成するときに、そのロケーションと、そのロケーションに Google-managed encryption key を使用するか CMEK を使用するかを指定します。

CLI を使用して CMEK を設定する

または、次のコマンドを使用して CMEK を設定することもできます。これは、複数のリージョンに設定する場合に役立ちます。

  1. Google Cloud CLI を使用して、プロジェクトの CCAI CMEK サービス アカウントを作成します。詳細については、gcloud services identity のドキュメントをご覧ください。

     gcloud beta services identity create --service=dialogflow.googleapis.com --project=PROJECT_ID

    サービス アカウントが作成されます。作成レスポンスでは返されませんが、次の形式になります。

     service-PROJECT_NUMBER@gcp-sa-ccai-cmek.iam.gserviceaccount.com
  2. CCAI CMEK サービス アカウントに Cloud KMS 暗号鍵の暗号化/復号のロールを付与して、サービスが鍵を使用して暗号化と復号を行えるようにします。

     gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
     --project=PROJECT_ID \
     --location=LOCATION_ID \
     --keyring=KMS_KEY_RING \
     --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-ccai-cmek.iam.gserviceaccount.com \
     --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

API を使用してキーを構成し、設定を確認する

  1. Dialogflow CX のロケーションのキーを構成するには、InitializeEncryptionSpec API を呼び出して、次の変数を指定します。

    • PROJECT_ID: Google Cloud プロジェクト ID。
    • LOCATION_ID: Dialogflow CX で CMEK を有効にするために選択したロケーション。
    • KMS_KEY_RING: KMS 鍵が作成されたキーリング。キーリング内のロケーション(projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KMS_KEY_RING など)は、CMEK を有効にするロケーションと一致する必要があります。
    • KMS_KEY_ID: 選択したロケーションで Dialogflow CX データの暗号化と復号に使用される KMS 鍵の名前。

    次に例を示します。

     curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json; charset=utf-8" \
        -d "{ encryption_spec: { kms_key: 'projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KMS_KEY_RING/cryptoKeys/KMS_KEY_ID' } }" \
        "https://LOCATION_ID-dialogflow.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION_ID/encryptionSpec:initialize"

    JSON レスポンスは次の例のようになります。

     {
       "name": "projects/PROJECT_ID/locations/LOCATION_ID/operations/OPERATION_ID"
     }
  2. 長時間実行オペレーション(LRO)の結果を取得するには、GetOperation API を呼び出します。

    次に例を示します。

     curl -X GET \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        "https://LOCATION_ID-dialogflow.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION_ID/operations/OPERATION_ID"
  3. ロケーション用に構成された暗号鍵を取得するには、GetEncryptionSpec API を呼び出します。

    次に例を示します。

     curl -X GET \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        "https://LOCATION_ID-dialogflow.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION_ID/encryptionSpec"

鍵を取り消す

鍵に対する Dialogflow CX のアクセス権を取り消すには、KMS 鍵のバージョンを無効にするか、KMS 鍵からサービス アカウントの Cloud KMS CryptoKey の暗号化/復号ロールを削除します。

鍵を取り消すと、暗号化されたデータに Dialogflow CX からアクセスできなくなり、鍵の権限が復元されるまでサービスは動作しなくなります。