顧客管理の暗号鍵(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 CryptoKey Encrypter/Decrypter] を選択します。
  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.
  2. CCAI CMEK サービス アカウントに Cloud KMS CryptoKey Encrypter/Decrypterのロールを付与して、サービスが鍵を使用して暗号化および復号できるようにします。

     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. \
     --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 鍵のバージョンを無効にするか、サービス アカウントの Cloud KMS CryptoKey Encrypter/Decrypter ロールを KMS 鍵から削除します。

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