Kunci enkripsi yang dikelola pelanggan (Customer-Managed Encryption Key/CMEK)

Secara default, Gemini Data Analytics mengenkripsi konten pelanggan dalam penyimpanan. Analisis Data Gemini menangani enkripsi untuk Anda tanpa tindakan tambahan dari Anda. Opsi ini disebut Enkripsi default Google.

Jika ingin mengontrol kunci enkripsi, Anda dapat menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) di Cloud KMS dengan layanan yang terintegrasi dengan CMEK, termasuk Gemini Data Analytics. Dengan menggunakan kunci Cloud KMS, Anda dapat mengontrol tingkat perlindungan, lokasi, jadwal rotasi, izin penggunaan dan akses, serta batasan kriptografisnya. Dengan Cloud KMS, Anda juga dapat melihat log audit dan mengontrol siklus proses kunci. Bukan Google yang memiliki dan mengelola kunci enkripsi kunci (KEK) simetris yang melindungi data Anda. Andalah yang mengontrol dan mengelola kunci ini di Cloud KMS.

Setelah Anda menyiapkan resource dengan CMEK, pengalaman mengakses resource Gemini Data Analytics Anda akan serupa dengan menggunakan enkripsi default Google. Untuk mengetahui informasi selengkapnya tentang opsi enkripsi, lihat Kunci enkripsi yang dikelola pelanggan (CMEK).

Halaman ini menjelaskan cara menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) untuk melindungi data yang digunakan oleh Conversational Analytics API dengan sumber data Looker. Conversational Analytics API adalah produk dalam layanan Gemini Data Analytics (geminidataanalytics.googleapis.com).

CMEK untuk resource Conversational Analytics API

Saat Anda mengonfigurasi CMEK untuk resource Conversational Analytics API, kunci Cloud KMS yang ditentukan akan mengenkripsi data sensitif dalam penyimpanan. Anda dapat mengonfigurasi CMEK untuk resource DataAgent dan Conversation secara terpisah.

Anda hanya dapat mengonfigurasi CMEK pada saat pembuatan resource. Untuk menggunakan CMEK, Anda harus menentukan kolom kms_key saat membuat resource DataAgent atau Conversation. Anda tidak dapat menambahkan atau mengubah kunci Cloud KMS pada resource yang ada.

Yang dilindungi oleh CMEK

CMEK untuk Conversational Analytics API melindungi data berikut dalam penyimpanan:

  • Resource DataAgent: Semua konten inti pelanggan dalam kolom staging_context, published_context, dan last_published_context data_analytics_agent. Hal ini mencakup kolom seperti system_instruction dan example_queries.
  • Conversation resource: Semua pesan dan histori status.

Data berikut tidak dienkripsi dengan kunci CMEK pelanggan. Sebagai gantinya, data ini dilindungi oleh enkripsi default Google:

  • Resource DataAgent: Kolom metadata termasuk name, display_name, description, labels, create_time, update_time, delete_time, purge_time, dan kms_key
  • Sumber daya Conversation: Kolom metadata termasuk name, agents, labels, create_time, last_used_time, dan kms_key

Batasan

CMEK untuk Conversational Analytics API memiliki batasan berikut:

  • CMEK harus dikonfigurasi saat resource dibuat. Tidak dapat ditambahkan ke atau diubah pada resource yang ada.
  • Kunci Cloud KMS dan resource Conversational Analytics API harus berada di lokasi yang sama. Wilayah global tidak didukung.
  • Untuk resource Conversational Analytics API, CMEK didukung di region us-east4.
  • Untuk resource Conversational Analytics API, CMEK hanya didukung untuk sumber data Looker.
  • Anda hanya dapat menggunakan satu CMEK per project per region untuk semua resource Conversation dalam project dan region tersebut.

Sebelum memulai

Sebelum Anda dapat menggunakan CMEK dengan Conversational Analytics API, selesaikan langkah-langkah berikut:

  1. Aktifkan API yang diperlukan di Google Cloud konsol atau Google Cloud CLI.

    Konsol

    Aktifkan API berikut di konsol Google Cloud untuk project Google Cloud Anda.

    Mengaktifkan Gemini Data Analytics API

    Mengaktifkan Gemini for Google Cloud API

    Aktifkan Cloud Key Management Service API

    gcloud

    Dengan Google Cloud CLI, jalankan perintah gcloud services enable berikut untuk mengaktifkan Gemini Data Analytics API, Gemini for Google Cloud API, dan Cloud Key Management Service API.

    gcloud services enable geminidataanalytics.googleapis.com --project=project_id
    gcloud services enable cloudaicompanion.googleapis.com --project=project_id
    gcloud services enable cloudkms.googleapis.com --project=project_id
    

    Pada perintah gcloud CLI contoh sebelumnya, ganti project_id dengan project ID Google Cloud Anda.

  2. Tambahkan project Anda ke daftar yang diizinkan.

    Project Google Cloud Anda harus ditambahkan ke daftar yang diizinkan untuk menggunakan CMEK dengan Gemini Data Analytics. Untuk meminta agar project Anda ditambahkan ke daftar yang diizinkan, kirimkan project ID Anda melalui formulir Daftar yang Diizinkan CMEK GDA. Penambahan project Anda ke daftar yang diizinkan memerlukan waktu sekitar satu hingga dua hari kerja untuk diselesaikan.

  3. Buat key ring dan kunci Cloud KMS di lokasi yang sama dengan resource Conversational Analytics API Anda. Untuk mengetahui informasi selengkapnya, lihat Membuat kunci.

  4. Buat agen layanan yang dikelola Google, yang juga dikenal sebagai akun layanan per produk per project (P4SA), jika belum ada. Agen layanan ini diperlukan untuk mengizinkan layanan yang terlibat dalam melindungi resource Conversational Analytics API Anda dengan CMEK mengakses kunci Cloud KMS Anda.

    Jalankan perintah gcloud berikut untuk membuat agen layanan:

    gcloud beta services identity create --service=geminidataanalytics.googleapis.com --project PROJECT_ID
    gcloud beta services identity create --service=cloudaicompanion.googleapis.com --project PROJECT_ID
    
    Ganti PROJECT_ID dengan project ID Google Cloud Anda.

  5. Berikan peran Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) di Identity and Access Management (IAM) kepada kedua agen layanan yang Anda buat pada langkah sebelumnya untuk memungkinkan layanan Gemini Data Analytics menggunakan kunci Cloud KMS Anda untuk mengenkripsi dan mendekripsi data Conversational Analytics API Anda.

    Berikan izin kepada agen layanan Analisis Data Gemini:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
      --location KEY_LOCATION \
      --keyring KEY_RING_NAME \
      --member
    serviceAccount:service-PROJECT_NUMBER@gcp-sa-geminidataanalytics.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project KMS_PROJECT_ID
    

    Berikan izin kepada agen layanan Gemini untuk Google Cloud API:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
      --location KEY_LOCATION \
      --keyring KEY_RING_NAME \
      --member
    serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudaicompanion.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project KMS_PROJECT_ID
    

    Dalam contoh kode sebelumnya, ganti nilai contoh sebagai berikut:

    • KEY_NAME: Nama kunci Cloud KMS Anda.
    • KEY_LOCATION: Region key ring Anda (misalnya, us-east4).
    • KEY_RING_NAME: Nama key ring Anda.
    • PROJECT_NUMBER: Nomor Google Cloud project tempat Anda membuat resource API.
    • KMS_PROJECT_ID: Project ID tempat kunci dibuat. Project ini dapat sama dengan project tempat Anda membuat resource API.

Melindungi resource dengan CMEK

Bagian ini menunjukkan cara melindungi resource DataAgent atau Conversation baru dengan CMEK menggunakan REST API untuk menentukan kunci Cloud KMS di kolom kms_key selama pembuatan resource.

Anda hanya dapat mengaktifkan CMEK saat membuat resource DataAgent atau Conversation.

Kunci CMEK harus berada di region yang sama dengan resource yang dilindunginya. Untuk mengetahui informasi selengkapnya, lihat Batasan.

Melindungi resource DataAgent dengan CMEK

Untuk melindungi resource DataAgent baru dengan CMEK, tentukan kunci Cloud KMS di kolom kms_key saat Anda membuat agen data.

Python SDK

Contoh berikut menunjukkan cara menentukan kunci Cloud KMS saat Anda membuat resource DataAgent dengan Python SDK. Untuk contoh permintaan create yang lengkap, lihat Membangun agen data menggunakan Python SDK.

# Define the KMS key.
billing_project = "BILLING_PROJECT_ID"
key_ring = "KEY_RING_NAME"
key_name = "KEY_NAME"
key_project = "KMS_PROJECT_ID" # Project where the key was created
location = "LOCATION" # Region of your key ring

if key_project == "":
  key_project = billing_project

kms_key_data_agent = f"projects/{key_project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{key_name}"

data_agent = geminidataanalytics.DataAgent()
data_agent.data_analytics_agent.published_context = published_context
data_agent.kms_key = kms_key_data_agent

Dalam contoh sebelumnya, ganti nilai sebagai berikut:

  • BILLING_PROJECT_ID: Project ID penagihan Anda.
  • KEY_RING_NAME: Nama key ring Cloud KMS Anda.
  • KEY_NAME: Nama kunci Cloud KMS Anda.
  • KMS_PROJECT_ID: Project ID tempat kunci dibuat. Jika dibiarkan kosong, billing_project akan digunakan.
  • LOCATION: Region key ring Anda.

HTTP

Contoh berikut menunjukkan cara menentukan kunci Cloud KMS di isi permintaan saat Anda membuat resource DataAgent dengan HTTP dan Python. Untuk contoh permintaan create lengkap, lihat Membangun agen data menggunakan HTTP dan Python.

data_agent_payload = {
      "name": f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}",
      "description": "This is the description of data_agent_1.",
      # If using CMEK, include the kms_key field.
      "kms_key": f"projects/{key_project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{key_name}",
      "data_analytics_agent": {
          "published_context": {
              "datasource_references": looker_data_source,
              "system_instruction": system_instruction,
          }
      }
  }

Dalam contoh sebelumnya, ganti nilai sebagai berikut:

  • KMS_PROJECT_ID: Project ID tempat kunci dibuat.
  • LOCATION: Region key ring Anda.
  • KEY_RING_NAME: Nama key ring Cloud KMS Anda.
  • KEY_NAME: Nama kunci Cloud KMS Anda.

Melindungi resource Conversation dengan CMEK

Untuk melindungi resource Conversation baru dengan CMEK, tentukan kunci Cloud KMS di kolom kms_key saat Anda membuat percakapan.

Python SDK

Contoh berikut menunjukkan cara menentukan kunci Cloud KMS saat Anda membuat resource Conversation dengan Python SDK. Untuk contoh permintaan create yang lengkap, lihat Membangun agen data menggunakan Python SDK.

# Define the KMS key.
billing_project = "BILLING_PROJECT_ID"
key_ring = "KEY_RING_NAME"
key_name = "KEY_NAME"
key_project = "KMS_PROJECT_ID" # Project where the key was created
location = "LOCATION" # Region of your key ring

if key_project == "":
  key_project = billing_project

kms_key_conversation = f"projects/{key_project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{key_name}"

conversation = geminidataanalytics.Conversation()
conversation.agents = [f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}"]
conversation.kms_key = kms_key_conversation

Dalam contoh sebelumnya, ganti nilai sebagai berikut:

  • BILLING_PROJECT_ID: Project ID penagihan Anda.
  • KEY_RING_NAME: Nama key ring Cloud KMS Anda.
  • KEY_NAME: Nama kunci Cloud KMS Anda.
  • KMS_PROJECT_ID: Project ID tempat kunci dibuat. Jika dibiarkan kosong, billing_project akan digunakan.
  • LOCATION: Region key ring Anda.

HTTP

Contoh berikut menunjukkan cara menentukan kunci Cloud KMS di isi permintaan saat Anda membuat resource Conversation dengan HTTP dan Python. Untuk contoh permintaan create lengkap, lihat Membangun agen data menggunakan HTTP dan Python.

conversation_payload = {
    "agents": [
        f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}"
    ],
    "name": f"projects/{billing_project}/locations/{location}/conversations/{conversation_id}",
    # If using CMEK, include the kms_key field.
    "kms_key": f"projects/{key_project}/locations/{location}/keyRings/{key_ring_name}/cryptoKeys/{key_name}"
}

Dalam contoh sebelumnya, ganti nilai sebagai berikut:

  • KMS_PROJECT_ID: Project ID tempat kunci dibuat.
  • LOCATION: Region key ring Anda.
  • KEY_RING_NAME: Nama key ring Cloud KMS Anda.
  • KEY_NAME: Nama kunci Cloud KMS Anda.

Pemecahan masalah

Bagian ini membahas masalah umum dan pertimbangan penting saat Anda menggunakan CMEK dengan Conversational Analytics API.

Perubahan status utama

Jika versi kunci Cloud KMS yang melindungi resource Conversational Analytics API menjadi tidak tersedia, Anda akan kehilangan akses ke data yang dienkripsi oleh kunci tersebut. Jika Anda mencoba mengakses data yang dilindungi saat kunci tidak tersedia, seperti dengan membaca konteks resource DataAgent atau mengakses histori Conversation, permintaan akan gagal. Error yang ditampilkan bergantung pada alasan kunci tidak tersedia:

  • Jika versi kunci dinonaktifkan atau dihancurkan, operasi biasanya gagal dengan error FAILED_PRECONDITION.
  • Jika peran IAM cloudkms.cryptoKeyEncrypterDecrypter dicabut dari agen layanan gcp-sa-geminidataanalytics atau gcp-sa-cloudaicompanion, operasi biasanya gagal dengan error PERMISSION_DENIED atau NOT_FOUND.

Meskipun kunci tidak tersedia, Anda tetap dapat melakukan operasi yang tidak memerlukan dekripsi konten, seperti menghapus resource DataAgent atau Conversation.

Untuk memulihkan akses ke data terenkripsi, aktifkan kembali kunci dan pastikan agen layanan memiliki izin IAM yang diperlukan, seperti yang dijelaskan di bagian Sebelum memulai.

Kuota Cloud KMS dan Conversational Analytics API

Saat Anda menggunakan CMEK di Conversational Analytics API, project Anda dapat memakai kuota permintaan kriptografis Cloud KMS. Misalnya, membaca resource DataAgent atau mengakses histori Conversation yang dilindungi oleh CMEK memerlukan Cloud KMS untuk mendekripsi data.

Operasi enkripsi dan dekripsi yang menggunakan kunci CMEK memengaruhi kuota Cloud KMS dengan cara berikut:

  • Untuk kunci software CMEK yang dihasilkan di Cloud KMS, tidak ada kuota Cloud KMS yang digunakan.
  • Untuk kunci hardware CMEK—terkadang disebut kunci Cloud HSM —operasi enkripsi dan dekripsi akan mengurangi kuota Cloud HSM dalam project yang berisi kunci tersebut.
  • Untuk kunci eksternal CMEK—terkadang disebut kunci Cloud EKM —operasi enkripsi dan dekripsi akan mengurangi kuota Cloud EKM dalam project yang berisi kunci tersebut.

Untuk informasi selengkapnya, lihat kuota Cloud KMS.

Langkah berikutnya