Tentang kunci enkripsi Apigee

Halaman ini berlaku untuk Apigee, tetapi tidak untuk Apigee Hybrid.

Lihat dokumentasi Apigee Edge.

Bagian ini menjelaskan jenis kunci enkripsi dan cara membuatnya.

Selama proses penyiapan Apigee, Anda akan membuat kunci enkripsi Cloud Key Management Service berikut:

Jenis Kunci Saat Dibuat Deskripsi
Kunci enkripsi bidang kontrol

Konsol Google Cloud:

Antarmuka command line (CLI):

Saat menggunakan data residency, Apigee menggunakan kunci ini untuk mengenkripsi data Analytics yang disimpan di BigQuery di dalam project tenant.

Mengenkripsi proxy API, Server Target, Truststore, dan Keystore, data analitik, dan apa pun yang dibagikan di seluruh runtime.

Apigee akan meminta Anda untuk memberikan dua kunci CMEK bidang kontrol. Kunci ini, dan kunci enkripsi data konsumen API.

Lokasi kunci enkripsi bidang kontrol harus cocok dengan lokasi bidang kontrol.

Kunci enkripsi data konsumen API

Konsol Google Cloud:

Antarmuka command line (CLI):

Saat menggunakan data residency, Apigee memerlukan satu kunci region, selain kunci enkripsi platform kontrol, yang digunakan untuk layanan yang hanya tersedia di satu region. Misalnya, Dataflow, dan Cloud SQL.

Lokasi kunci enkripsi data konsumen API harus berada dalam lokasi platform kontrol.

Kunci enkripsi database runtime

Konsol Google Cloud:

Antarmuka command line (CLI):

Mengenkripsi data aplikasi seperti KVM, cache, dan secret klien, yang kemudian disimpan dalam database.

Ada satu kunci enkripsi database runtime per organisasi — semua instance/region dalam organisasi memiliki kunci enkripsi database runtime yang sama.

Kunci enkripsi database runtime mendukung semua lokasi Cloud KMS yang mendukung Cloud HSM dan Cloud EKM. Google merekomendasikan penggunaan lokasi multi-region (seperti us atau europe) atau lokasi dual-region (eur5, nam4) saat Anda membuat kunci ini.

Lokasi kunci enkripsi database runtime harus berada dalam lokasi platform kontrol saat menggunakan retensi data.

Kunci enkripsi disk

Konsol Google Cloud:

Antarmuka command line (CLI):

Mengenkripsi data instance runtime sebelum ditulis ke disk.

Jenis data yang dienkripsi mencakup Key Management System (KMS); Key Value Maps (KVM); definisi, bucket, dan penghitung kuota; serta semua data yang di-cache. Data KMS mencakup produk API, developer, aplikasi developer, token OAuth (termasuk token akses, token refresh, dan kode otorisasi), serta kunci API.

Kunci ini berada di region yang sama dengan instance runtime; saat membuat kunci baru, cocokkan lokasi kunci dengan lokasi instance runtime Anda.

Setiap kombinasi instance/region memiliki kunci enkripsi disknya sendiri.

Poin utama

Perhatikan hal-hal berikut saat membuat kunci enkripsi database disk dan runtime:

  • Lokasi kunci enkripsi database runtime Apigee mendukung semua lokasi Cloud KMS yang mendukung Cloud HSM dan Cloud EKM.
  • Lokasi kunci enkripsi disk harus cocok dengan lokasi instance runtime tempat kunci digunakan.
  • Setelah ditetapkan, Anda tidak dapat mengubah lokasi salah satu kunci.
  • Semua kunci harus berada dalam gantungan kunci.
  • Kunci dari berbagai jenis harus berada dalam key ring terpisah; kunci enkripsi disk tidak boleh berada dalam key ring yang sama dengan kunci enkripsi database runtime Anda.
  • Kunci harus memiliki purpose. Jika Anda menggunakan command line untuk membuat kunci baru, tetapkan purpose ke encryption. Jika Anda menggunakan konsol Google Cloud, pilih Symmetric encrypt/decrypt untuk tujuan tersebut.
  • Kunci ditentukan oleh jalur kunci, yang menggunakan pola berikut:
    projects/PROJECT_ID/locations/KEY_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME

Mencantumkan kunci yang ada

Jika sudah membuat kunci enkripsi Cloud KMS baru untuk Apigee, Anda dapat menggunakannya, bukan membuat kunci baru selama penyiapan.

Untuk mencantumkan semua kunci KMS dalam key ring:

Jalankan perintah gcloud kms keys list:

gcloud kms keys list --keyring KEY_RING_NAME --location KEY_RING_LOCATION

Ganti kode berikut:

  • KEY_RING_NAME: nama key ring. Misalnya, my-key-ring.
  • KEY_RING_LOCATION: lokasi fisik key ring, Misalnya, us-west1.

Atau, Anda dapat melihat kunci di konsol Google Cloud.

Membuat kunci baru di command line

Anda dapat membuat ring kunci dan kunci di command line atau di konsol Google Cloud.

Setiap jenis kunci harus memiliki gantungan kuncinya sendiri. Misalnya, kunci enkripsi disk Anda dapat disimpan dalam satu key ring, tetapi kunci enkripsi database runtime Anda harus disimpan dalam key ring terpisah.

Langkah-langkah berikut menjelaskan cara membuat key ring dan kunci, serta cara memberikan akses bagi Agen Layanan Apigee untuk menggunakan kunci baru. Buat ring kunci dan kunci untuk bidang kontrol (jika menggunakan residensi data), database runtime, dan disk runtime.

  1. Buat key ring baru menggunakan perintah gcloud kms keyrings create:

    Bidang kontrol

    Jika residensi data diaktifkan, buat ring kunci untuk platform kontrol, dan ring kunci lainnya untuk region data konsumen.

    gcloud kms keyrings create CONTROL_PLANE_KEY_RING_NAME \
    --location CONTROL_PLANE_LOCATION \
    --project PROJECT_ID
    gcloud kms keyrings create CONSUMER_DATA_KEY_RING_NAME \
    --location CONSUMER_DATA_REGION \
    --project PROJECT_ID

    Ganti kode berikut:

    • CONTROL_PLANE_KEY_RING_NAME: nama key ring bidang kontrol.
    • CONTROL_PLANE_LOCATION: lokasi fisik tempat data bidang kontrol Apigee akan disimpan.
    • PROJECT_ID: project ID Google Cloud.
    • CONSUMER_DATA_KEY_RING_NAME: nama key ring data konsumen.
    • CONSUMER_DATA_REGION: sub-region dari region bidang kontrol. Anda harus menentukan CONTROL_PLANE_LOCATION dan CONSUMER_DATA_REGION.

    Database runtime

    gcloud kms keyrings create RUNTIMEDB_KEY_RING_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --project PROJECT_ID

    Ganti kode berikut:

    • RUNTIMEDB_KEY_RING_NAME: nama key ring database yang Anda buat.
    • RUNTIMEDB_KEY_LOCATION: lokasi fisik key ring database.
    • PROJECT_ID: project ID Google Cloud.

    Lokasi kunci enkripsi Apigee mendukung semua lokasi Cloud KMS yang mendukung Cloud HSM dan Cloud EKM.

    Disk runtime

    gcloud kms keyrings create RUNTIMEDISK_KEY_RING_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --project PROJECT_ID

    Ganti kode berikut:

    • RUNTIMEDISK_KEY_RING_NAME: nama key ring disk yang Anda buat.
    • RUNTIMEDISK_KEY_LOCATION: lokasi fisik key ring disk.
    • PROJECT_ID: project ID Google Cloud.

    Pastikan key ring disk ditetapkan ke lokasi yang sama dengan instance. Setiap instance dan ring kunci harus memiliki lokasinya sendiri.

    gcloud kms keyrings list \
    --location  \
    --project $PROJECT_ID

    gcloud kms keyrings describe $DISK_KEY_RING_NAME \
    --location  \
    --project $PROJECT_ID
  2. Nama ring kunci harus unik untuk organisasi Anda. Jika Anda membuat region tambahan, nama key ring untuk region tersebut tidak boleh sama dengan nama key ring yang ada.

  3. Buat kunci menggunakan perintah kms keys create:

    Bidang kontrol

    Jika residensi data diaktifkan, buat ring kunci untuk platform kontrol, dan ring kunci lainnya untuk region data konsumen.

    gcloud kms keys create CONTROL_PLANE_KEY_NAME \
    --keyring CONTROL_PLANE_KEY_RING_NAME \
    --location CONTROL_PLANE_LOCATION \
    --purpose "encryption" \
    --project PROJECT_ID
    gcloud kms keys create CONSUMER_DATA_KEY_NAME \
    --keyring CONSUMER_DATA_KEY_RING_NAME \
    --location CONSUMER_DATA_REGION \
    --purpose "encryption" \
    --project PROJECT_ID

    Ganti kode berikut:

    • CONTROL_PLANE_KEY_NAME: nama kunci bidang kontrol.
    • CONTROL_PLANE_KEY_RING_NAME: nama key ring bidang kontrol.
    • CONTROL_PLANE_LOCATION: lokasi fisik tempat data bidang kontrol Apigee akan disimpan.
    • PROJECT_ID: project ID Google Cloud.
    • CONSUMER_DATA_KEY_NAME: nama kunci data konsumen.
    • CONSUMER_DATA_KEY_RING_NAME: nama key ring data konsumen.
    • CONSUMER_DATA_REGION: sub-region dari region bidang kontrol. Anda harus menentukan CONTROL_PLANE_LOCATION dan CONSUMER_DATA_REGION.

    Database runtime

    gcloud kms keys create RUNTIMEDB_KEY_NAME \
      --keyring RUNTIMEDB_KEY_RING_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --purpose "encryption" \
      --project PROJECT_ID

    Ganti kode berikut:

    • RUNTIMEDB_KEY_NAME: nama kunci database yang Anda buat.
    • RUNTIMEDB_KEY_RING_NAME: nama key ring database yang Anda buat.
    • RUNTIMEDB_KEY_LOCATION: lokasi fisik key ring database.
    • PROJECT_ID: project ID Google Cloud.

    Disk runtime

    gcloud kms keys create RUNTIMEDISK_KEY_NAME \
      --keyring RUNTIMEDISK_KEY_RING_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --purpose "encryption" \
      --project PROJECT_ID

    Ganti kode berikut:

    • RUNTIMEDISK_KEY_NAME: nama kunci disk yang Anda buat.
    • RUNTIMEDISK_KEY_RING_NAME: nama key ring disk yang Anda buat.
    • RUNTIMEDISK_KEY_LOCATION: lokasi fisik key ring disk.
    • PROJECT_ID: project ID Google Cloud.

    Perintah ini membuat kunci dan menambahkannya ke key ring.

    Saat Anda merujuk ke kunci, gunakan ID kunci.

  4. Berikan akses bagi Agen Layanan Apigee untuk menggunakan kunci baru menggunakan perintah gcloud kms keys add-iam-policy-binding:

    Bidang kontrol

    Jika residensi data diaktifkan, buat ring kunci untuk platform kontrol, dan ring kunci lainnya untuk region data konsumen.

    gcloud kms keys add-iam-policy-binding CONTROL_PLANE_KEY_NAME \
    --location CONTROL_PLANE_LOCATION \
    --keyring CONTROL_PLANE_KEY_RING_NAME \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project PROJECT_ID
    
    gcloud kms keys add-iam-policy-binding CONSUMER_DATA_KEY_NAME \
    --location CONSUMER_DATA_REGION \
    --keyring CONSUMER_DATA_KEY_RING_NAME \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project PROJECT_ID
    

    Ganti kode berikut:

    • CONTROL_PLANE_KEY_NAME: nama kunci bidang kontrol.
    • CONTROL_PLANE_LOCATION: lokasi fisik tempat data bidang kontrol Apigee akan disimpan.
    • CONTROL_PLANE_KEY_RING_NAME: nama key ring bidang kontrol.
    • PROJECT_NUMBER: nomor project Google Cloud.
    • PROJECT_ID: project ID Google Cloud.
    • CONSUMER_DATA_KEY_NAME: nama kunci data konsumen.
    • CONSUMER_DATA_REGION: sub-region dari region bidang kontrol. Anda harus menentukan CONTROL_PLANE_LOCATION dan CONSUMER_DATA_REGION.
    • CONSUMER_DATA_KEY_RING_NAME: nama key ring data konsumen.

    Database runtime

    gcloud kms keys add-iam-policy-binding RUNTIMEDB_KEY_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --keyring RUNTIMEDB_KEY_RING_NAME \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    Ganti kode berikut:

    • RUNTIMEDB_KEY_NAME: nama kunci database yang Anda buat.
    • RUNTIMEDB_KEY_RING_NAME: nama key ring database yang Anda buat.
    • RUNTIMEDB_KEY_LOCATION: lokasi fisik key ring database.
    • PROJECT_NUMBER: nomor project Google Cloud.
    • PROJECT_ID: project ID Google Cloud.

    Disk runtime

    gcloud kms keys add-iam-policy-binding RUNTIMEDISK_KEY_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --keyring RUNTIMEDISK_KEY_RING_NAME \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    Ganti kode berikut:

    • RUNTIMEDISK_KEY_NAME: nama kunci disk yang Anda buat.
    • RUNTIMEDISK_KEY_RING_NAME: nama key ring disk yang Anda buat.
    • RUNTIMEDISK_KEY_LOCATION: lokasi fisik key ring disk.
    • PROJECT_NUMBER: nomor project Google Cloud.
    • PROJECT_ID: project ID Google Cloud.

    Perintah ini mengikat kunci ke Agen Layanan Apigee.

    Setelah permintaan ini berhasil diselesaikan, gcloud akan merespons dengan sesuatu yang mirip dengan berikut ini:

    Updated IAM policy for key [runtime].
    bindings:
    - members:
    - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwWqgEuCuwk=
    version: 1

    Jika Anda menerima error seperti berikut:

    INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

    Pastikan Anda menggunakan nomor project, bukan nama project, di alamat email akun layanan.

    Untuk memverifikasi bahwa kunci terikat dengan Agen Layanan Apigee:

    gcloud kms keys get-iam-policy $DISK_KEY_NAME \
      --keyring $DISK_KEY_RING_NAME \
      --location  \
      --project $PROJECT_ID

    gcloud kms keys describe $DISK_KEY_NAME \
      --keyring $DISK_KEY_RING_NAME \
      --location  \
      --project $PROJECT_ID

Membuat kunci baru menggunakan Konsol Google Cloud

Anda dapat membuat kunci baru menggunakan konsol, seperti yang dijelaskan dalam Membuat kunci enkripsi simetris.

Saat Anda menggunakan konsol untuk membuat kunci baru:

  • Untuk kunci enkripsi database runtime, tetapkan lokasi ke lokasi Cloud KMS yang mendukung Cloud HSM dan Cloud EKM. UI tidak mengizinkan Anda memilih lokasi lain untuk kunci, sehingga akan cocok dengan yang Anda pilih di key ring.
  • Setelah Anda membuat kunci, dapatkan jalur kunci di panel Cryptographic keys dengan mengklik More di samping kunci, lalu pilih Copy Resource Name.

Mendapatkan ID kunci

Saat merujuk ke resource Cloud Key Management Service menggunakan Cloud KMS API atau Google Cloud CLI, Anda menggunakan ID resource. Anda dapat mendapatkan ID kunci dengan perintah gcloud kms keys list:

Bidang kontrol

Jika residensi data diaktifkan, akan ada ring kunci untuk platform kontrol, dan ring kunci lainnya untuk region data konsumen.

gcloud kms keys list \
--location=CONTROL_PLANE_LOCATION \
--keyring=CONTROL_PLANE_KEY_RING_NAME \
--project=PROJECT_ID

gcloud kms keys list \
--location=CONSUMER_DATA_REGION \
--keyring=CONSUMER_DATA_KEY_RING_NAME \
--project=PROJECT_ID

ID kunci memiliki sintaksis berikut (mirip dengan jalur file):

projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME

Database runtime

gcloud kms keys list \
--location=RUNTIMEDB_KEY_LOCATION \
--keyring=RUNTIMEDB_KEY_RING_NAME \
--project=PROJECT_ID

ID kunci memiliki sintaksis berikut (mirip dengan jalur file):

projects/PROJECT_ID/locations/RUNTIMEDB_KEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME

Disk runtime

gcloud kms keys list \
  --location=RUNTIMEDISK_KEY_LOCATION \
  --keyring=RUNTIMEDISK_KEY_RING_NAME \
  --project=PROJECT_ID

ID kunci memiliki sintaksis berikut (mirip dengan jalur file):

projects/PROJECT_ID/locations/RUNTIMEDISK_KEY_LOCATION/keyRings/RUNTIMEDISK_KEY_RING_NAME/cryptoKeys/RUNTIMEDISK_KEY_NAME

Contoh:

NAME: projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

Anda juga bisa mendapatkan ID kunci di konsol Google Cloud. Untuk informasi selengkapnya, lihat Mendapatkan ID resource Cloud KMS.