Menggunakan kunci enkripsi yang dikelola pelanggan (CMEK)

Halaman ini menjelaskan cara melakukan tugas yang terkait dengan kunci enkripsi yang dikelola pelanggan (CMEK) untuk Bigtable. Untuk mengetahui informasi selengkapnya tentang CMEK secara umum, termasuk waktu dan alasan mengaktifkannya, lihat dokumentasi Cloud KMS.

Sebaiknya gunakan konsol Google Cloud untuk semua tugas pengelolaan kunci. Jika Anda berencana menggunakan Google Cloud CLI, instal gcloud CLI untuk Bigtable.

Menyiapkan kunci CMEK

Sebelum dapat membuat resource Bigtable yang dilindungi CMEK, Anda harus menyelesaikan langkah-langkah berikut untuk membuat kunci CMEK untuk setiap region tempat cluster instance akan berada:

  1. Buat (atau ambil) agen layanan Bigtable.
  2. Buat kunci CMEK.
  3. Konfigurasikan setelan IAM untuk kunci tersebut.

Membuat agen layanan Bigtable

Sebelum membuat kunci CMEK, Anda harus memiliki agen layanan Bigtable, yang digunakan Bigtable untuk mengakses kunci.

Konsol

Anda tidak dapat membuat agen layanan di konsol Google Cloud. Namun, jika Anda membuat kunci di konsol Google Cloud, Anda akan diminta untuk memberikan peran Pengenkripsi/Pendekripsi Cloud KMS, dan agen layanan akan dibuat pada saat itu jika belum ada.

gcloud

  1. Jalankan perintah gcloud services identity create untuk melihat agen layanan yang digunakan Bigtable untuk mengakses kunci CMEK atas nama Anda. Perintah ini akan membuat akun layanan jika belum ada, lalu menampilkannya.

    gcloud beta services identity create \
        --service=bigtableadmin.googleapis.com \
        --project CBT_PROJECT
    

    Ganti CBT_PROJECT dengan project yang berisi resource Bigtable Anda.

    Perintah ini akan menampilkan ID agen layanan, yang diformat seperti alamat email. Catat string email output, karena Anda akan menggunakannya di langkah berikutnya.

    Service identity created:
    service-xxx@gcp-sa-bigtable.iam.gserviceaccount.com
    

Buat kunci

Anda dapat menggunakan kunci yang dibuat langsung di Cloud KMS atau kunci yang dikelola secara eksternal yang Anda sediakan dengan Cloud External Key Manager.

  1. Di project Google Cloud tempat Anda ingin mengelola kunci:

    1. Aktifkan Cloud KMS API.

    2. Buat key ring dan kunci menggunakan salah satu opsi berikut:

      Lokasi kunci Cloud KMS harus sama dengan cluster Bigtable yang akan digunakan. Misalnya, jika Anda membuat key ring dan kunci di us-central1 (Iowa), cluster di us-central1-a, us-central1-b, dan us-central1-c dapat dilindungi oleh kunci dari key ring tersebut.

Mengonfigurasi setelan IAM untuk kunci

Konsol

Untuk memberikan peran Cloud KMS ke agen layanan Anda, lakukan hal berikut: Anda juga dapat memberikan izin di tingkat kunci atau ring kunci jika menginginkan tingkat perincian yang lebih rendah.

  1. Di konsol Google Cloud, buka halaman IAM.

    Buka halaman IAM

  2. Klik Tambahkan.

  3. Masukkan ID berformat email untuk agen layanan Bigtable Anda.

  4. Pilih peran Cloud KMS CryptoKey Encrypter/Decrypter.

  5. Klik Simpan.

gcloud

  1. Berikan peran cloudkms.cryptoKeyEncrypterDecrypter ke agen layanan Anda:

    gcloud kms keys add-iam-policy-binding KMS_KEY \
        --keyring KMS_KEYRING\
        --location KMS_LOCATION \
        --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KMS_PROJECT
    

    Berikan hal berikut:

    • KMS_KEY: nama yang Anda tetapkan ke kunci
    • KMS_KEYRING: key ring KMS yang berisi kunci
    • KMS_LOCATION : region yang berisi key ring
    • SERVICE_ACCOUNT_EMAIL: ID berformat email untuk agen layanan yang aksesnya Anda berikan
    • KMS_PROJECT: project yang berisi kunci

Membuat instance yang mendukung CMEK

Setelah kunci CMEK dibuat dan dikonfigurasi, Anda dapat membuat instance yang dilindungi CMEK. Instance Bigtable yang ada dan dilindungi oleh enkripsi default Google tidak dapat dikonversi untuk menggunakan CMEK; Anda hanya dapat memilih jenis dan kunci enkripsi pada saat pembuatan.

Ikuti langkah-langkah di Membuat instance untuk membuat instance yang dilindungi CMK.

Melihat kunci yang digunakan

Informasi tentang versi kunci berasal dari kolom encryption_info.

Untuk melihat informasi versi kunci CMEK untuk tabel, selesaikan langkah-langkah berikut:

Konsol

  1. Buka halaman instance Bigtable di konsol Google Cloud.

    Buka daftar instance

  2. Klik nama instance yang berisi tabel untuk membuka halaman Detail Instance dan melihat daftar cluster dalam instance.

  3. Di samping ID cluster, klik nama kunci di bagian Kunci enkripsi untuk melihat halaman Versi untuk kunci cluster.

gcloud

Untuk setiap cluster, Anda dapat mengonfirmasi konfigurasi CMEK-nya sebagai berikut:

    gcloud bigtable clusters describe CLUSTER_ID \
        --instance INSTANCE_ID --project CBT_PROJECT

Berikan hal berikut:

  • CLUSTER_ID: ID permanen untuk cluster
  • INSTANCE_ID: ID permanen untuk instance
  • CBT_PROJECT: project yang berisi resource Bigtable Anda

Perintah ini menampilkan output yang mirip dengan berikut ini:

    defaultStorageType: SSD
    encryptionConfig:
      kmsKeyName: projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key
    location: projects/cloud-bigtable-project/locations/us-central1-a
    name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster
    serveNodes: 1
    state: READY

Menonaktifkan kunci

Menonaktifkan versi kunci CMEK akan menangguhkan akses ke semua data yang dilindungi oleh versi kunci tersebut. Menghancurkan versi kunci adalah tindakan permanen (setelah 24 jam) dari tindakan ini. Selalu nonaktifkan semua kunci untuk instance, bukan hanya menonaktifkan kunci untuk satu atau beberapa cluster.

Konsol

Ini adalah metode yang direkomendasikan. Dengan menggunakan konsol Google Cloud, Anda dapat menonaktifkan semua versi kunci sekaligus.

Ikuti petunjuk ini untuk setiap versi kunci.

gcloud

Sebaiknya gunakan konsol Google Cloud untuk menonaktifkan kunci. Jika Anda ingin menggunakan Google Cloud CLI, jalankan perintah berikut.

  1. Mencantumkan semua versi kunci CMEK:

    gcloud kms keys versions list --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT
    

    Berikan hal berikut:

    • KMS_KEY: nama kunci CMEK
    • KMS_KEYRING: key ring KMS yang berisi kunci
    • KMS_LOCATION: region yang berisi key ring
    • KMS_PROJECT: project yang berisi kunci

    Outputnya mirip dengan hal berikut ini:

    NAME                                  STATE
    KMS_KEY_NAME/cryptoKeyVersions/1      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/2      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/3      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/4      ENABLED
    
  2. Nonaktifkan semua versi:

    for $KV in 1 2 3 4;
    do
    gcloud kms keys versions disable KV --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT;
    done
    

    Berikan hal berikut:

    • 1 2 3 4: versi yang Anda nonaktifkan
    • KMS_KEY: nama kunci CMEK
    • KMS_KEYRING: key ring KMS yang berisi kunci
    • KMS_LOCATION: region yang berisi key ring
    • KMS_PROJECT: project yang berisi kunci

    Mencantumkan semua versi kunci lagi akan menampilkan statusnya yang dibalik menjadi DISABLED, meskipun Bigtable mungkin memerlukan waktu hingga 4 jam untuk menindaklanjuti perubahan status ini.

  3. [Opsional] Untuk mengonfirmasi status CMEK yang dinonaktifkan setelah Anda menunggu 4 jam, jalankan perintah berikut:

     gcloud bigtable instances tables describe TABLE_ID \
         --instance INSTANCE_ID --view ENCRYPTION \
         --project CBT_PROJECT
    

    Berikan hal berikut:

    • TABLE_ID: ID permanen untuk tabel
    • INSTANCE_ID: ID permanen untuk instance
    • CBT_PROJECT: project yang berisi resource Bigtable Anda

    Perintah ini menampilkan output yang mirip dengan berikut ini:

    clusterStates:
      CLUSTER:
        encryptionInfo:
        - encryptionStatus:
            code: 9
            details:
            - '@type': type.googleapis.com/google.rpc.PreconditionFailure
              violations:
              - subject: KMS_KEY_NAME/cryptoKeyVersions/<int>
                type: KEY_DISABLED
            message: KMS_KEY_NAME is not enabled, current state is: DISABLED.
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/<int>
    name: projects/CBT_PROJECT/instances/INSTANCE/tables/TABLE
    
  4. [Opsional] Untuk memverifikasi bahwa cluster di instance dinonaktifkan, jalankan perintah berikut:

    gcloud bigtable clusters list --instances INSTANCE_ID
        --project CBT_PROJECT
    

    Berikan hal berikut:

    • INSTANCE_ID: ID permanen untuk instance
    • CBT_PROJECT: project yang berisi resource Bigtable Anda

    Perintah ini menampilkan output yang mirip dengan berikut ini:

    NAME              ZONE           NODES  STORAGE    STATE
    my-cluster        us-central1-a  1      SSD        DISABLED
    my-other-cluster  us-central1-b  1      SSD        DISABLED
    

Mengaktifkan kunci

Jika versi kunci telah dinonaktifkan, Anda dapat mengaktifkannya kembali untuk mendapatkan kembali akses ke resource Bigtable. Opsi ini tersedia selama 30 hari sejak versi kunci dinonaktifkan.

Konsol

Ini adalah metode yang direkomendasikan. Dengan menggunakan Konsol Google Cloud, Anda dapat mengaktifkan semua versi kunci sekaligus.

Ikuti petunjuk ini untuk setiap versi kunci.

gcloud

Sebaiknya gunakan konsol Google Cloud untuk mengaktifkan kunci. Jika Anda ingin menggunakan Google Cloud CLI, jalankan perintah berikut.

  1. Lihat daftar versi untuk mengidentifikasi semua versi kunci:

    gcloud kms keys versions list --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT
    

    Berikan hal berikut:

    • KMS_KEY: nama kunci CMEK
    • KMS_KEYRING: key ring KMS yang berisi kunci
    • KMS_LOCATION: region yang berisi key ring
    • KMS_PROJECT: project yang berisi kunci

    Perintah ini menampilkan output yang mirip dengan berikut ini:

    NAME                                  STATE
    KMS_KEY_NAME/cryptoKeyVersions/1      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/2      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/3      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/4      DISABLED
    

    Jalankan perintah kms keys versions enable, yang memberikan semua versi yang tercantum. Dengan menggunakan contoh output, perintah akan terlihat mirip dengan berikut:

    for $KV in 1 2 3 4;
    do
    gcloud kms keys versions enable KV --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT;
    done
    

    Berikan hal berikut:

    • 1 2 3 4: versi yang Anda nonaktifkan
    • KMS_KEY: nama kunci CMEK
    • KMS_KEYRING: key ring KMS yang berisi kunci
    • KMS_LOCATION: region yang berisi key ring
    • KMS_PROJECT: project yang berisi kunci

    Mencantumkan versi kunci lagi akan menampilkan statusnya yang dibalik ke ENABLED.

Melihat log audit untuk kunci Cloud KMS

Sebelum mengaktifkan log audit Akses Data Cloud KMS, Anda harus memahami Cloud Audit Logs.

Log audit Akses Data Cloud KMS menunjukkan kepada Anda saat Bigtable atau produk lain yang dikonfigurasi untuk menggunakan kunci CMEK Anda melakukan panggilan enkripsi/dekripsi ke Cloud KMS. Bigtable tidak mengeluarkan panggilan enkripsi/dekripsi pada setiap permintaan data, tetapi mempertahankan poller yang memeriksa kunci secara berkala. Hasil polling akan muncul di log audit.

Anda dapat menyiapkan dan berinteraksi dengan log audit di konsol Google Cloud:

  1. Pastikan logging diaktifkan untuk Cloud KMS API di project Anda.

  2. Buka Cloud Logging di konsol Google Cloud.

    Buka Cloud Logging

  3. Batasi entri log ke kunci Cloud KMS Anda dengan menambahkan baris berikut ke Builder kueri:

    resource.type="cloudkms_cryptokey"
    resource.labels.key_ring_id = KMS_KEYRING
    resource.labels.crypto_key_id = KMS_KEY
    

    Berikan hal berikut:

    • KMS_KEY: nama kunci CMEK
    • KMS_KEYRING: key ring KMS yang berisi kunci

    Log menampilkan beberapa entri log sekitar setiap lima menit per tabel di setiap cluster. Entri log terlihat mirip dengan contoh berikut:

    Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com
    audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-bigtable.iam.gserviceaccount.com"
    
    Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com
    audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com"
    

Lihat Memahami log audit untuk mengetahui detail tentang cara menafsirkan log audit.

Melihat penggunaan kunci

Cloud KMS memungkinkan Anda melihat informasi berikut tentang resource Bigtable yang dilindungi kunci Anda.

  • Ringkasan penggunaan kunci: Mencakup informasi tentang jumlah resource dan project yang dilindungi yang menggunakan kunci.
  • Detail penggunaan kunci: Mengidentifikasi resource yang dilindungi kunci dan resource yang bergantung pada kunci.

Resource Bigtable berikut didukung:

  • bigtableadmin.googleapis.com/Backup
  • bigtableadmin.googleapis.com/Cluster
  • bigtableadmin.googleapis.com/Table

Untuk informasi selengkapnya tentang cara melihat penggunaan kunci, lihat Melihat informasi penggunaan kunci.

Melihat status enkripsi tabel

Konsol

Anda tidak dapat melihat status enkripsi tabel di konsol Google Cloud.

gcloud

Untuk melihat detail CMEK di tabel, tetapkan view ke ENCRYPTION atau FULL. Responsnya mencakup versi kunci yang sedang digunakan dan statusnya seperti yang dilihat oleh Bigtable.

    gcloud alpha bigtable instances tables describe TABLE_ID \
        --instance INSTANCE_ID --view ENCRYPTION \
        --project CBT_PROJECT

Berikan hal berikut:

  • TABLE_ID: ID permanen untuk cluster
  • INSTANCE_ID: ID permanen untuk instance yang berisi cadangan
  • CBT_PROJECT: project yang berisi resource Bigtable Anda

Perintah ini menampilkan output yang mirip dengan berikut ini:

    clusterStates:
      my-cluster:
        encryptionInfo:
        - encryptionStatus: {}
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
      my-other-cluster:
        encryptionInfo:
        - encryptionStatus: {}
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
      name: projects/cloud-bigtable-project/instances/cmek-test-instance/tables/my-table

Melihat detail enkripsi untuk pencadangan

Cadangan tetap disematkan ke versi kunci aslinya. Rotasi versi kunci di Cloud KMS tidak memutar versi yang digunakan untuk mendekripsi pencadangan.

Konsol

  1. Buka halaman instance Bigtable di konsol Google Cloud.

    Buka daftar instance

  2. Klik nama instance untuk membuka halaman Detail Instance.

  3. Di panel navigasi sebelah kiri, klik Cadangan.

Nama kunci dan versi kunci untuk setiap cadangan tercantum di bagian Kunci yang dikelola pelanggan.

gcloud

Jalankan perintah berikut untuk melihat info enkripsi untuk pencadangan.

    gcloud alpha bigtable backups describe BACKUP_ID \
        --instance INSTANCE_ID --cluster CLUSTER_ID \
        --project CBT_PROJECT

Berikan hal berikut:

  • BACKUP_ID: ID yang ditetapkan ke cadangan
  • CLUSTER_ID: ID permanen untuk cluster
  • INSTANCE_ID: ID permanen untuk instance yang berisi cadangan
  • CBT_PROJECT: project yang berisi resource Bigtable Anda

Perintah ini menampilkan output yang mirip dengan berikut ini. kmsKeyVersion adalah versi kunci CMEK yang digunakan untuk menyematkan cadangan. Status versi kunci tidak dilaporkan.

    encryptionInfo:
      encryptionStatus:
        code: 2
        message: Status of the associated key version is not tracked.
      encryptionType: CUSTOMER_MANAGED_ENCRYPTION
      kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/3
    endTime: '2020-09-01T00:03:26.568600Z'
    expireTime: '2020-09-02T00:03:25.436473Z'
    name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster/backups/my-backup
    sizeBytes: '3780'

Langkah selanjutnya