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 kapan dan mengapa harus 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 merupakan jenis akun layanan yang dikelola Google yang digunakan Bigtable untuk mengakses kunci.

Konsol

Anda tidak dapat membuat agen layanan di konsol Google Cloud. Namun, jika membuat kunci di Google Cloud Console, Anda akan diminta untuk memberikan peran Cloud KMS Encrypter/Decrypter, 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 tersebut menampilkan ID agen layanan, yang diformat seperti alamat email. Catat {i>string<i} email {i>output<i}, karena Anda akan menggunakannya di langkah selanjutnya.

    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.

Konfigurasi setelan IAM untuk kunci

Konsol

Untuk memberikan peran Cloud KMS kepada agen layanan Anda, lakukan hal berikut. Anda juga dapat memberikan izin pada tingkat kunci atau key-ring 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 Save.

gcloud

  1. Berikan peran cloudkms.cryptoKeyEncrypterDecrypter kepada 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 : wilayah yang berisi key ring
    • SERVICE_ACCOUNT_EMAIL: ID berformat email untuk agen layanan yang Anda beri akses
    • 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 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 bagian Membuat instance untuk membuat instance yang dilindungi CMEK.

Melihat kunci yang digunakan

Informasi tentang versi kunci berasal dari kolom encryption_info.

Guna 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 Instance Details, lalu lihat daftar cluster dalam instance tersebut.

  3. Di samping ID cluster, klik nama kunci di bagian Kunci enkripsi untuk melihat halaman Versions 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

Perintah akan 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 kebalikan permanen (setelah 24 jam) dari tindakan ini. Selalu nonaktifkan semua kunci untuk satu 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. Tampilkan daftar 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: wilayah 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: wilayah yang berisi key ring
    • KMS_PROJECT: project yang berisi kunci

    Mencantumkan kembali semua versi kunci akan menampilkan statusnya yang dibalik menjadi DISABLED, meskipun perlu waktu hingga 4 jam bagi Bigtable 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

    Perintah akan 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 dalam 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

    Perintah akan 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 Anda. Opsi ini tersedia selama 60 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: wilayah yang berisi key ring
    • KMS_PROJECT: project yang berisi kunci

    Perintah akan 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, dengan menyediakan semua versi yang tercantum. Dengan menggunakan contoh output, perintahnya terlihat mirip dengan berikut ini:

    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: wilayah yang berisi key ring
    • KMS_PROJECT: project yang berisi kunci

    Mencantumkan versi kunci lagi menunjukkan statusnya dibalik menjadi 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 melakukan panggilan enkripsi/dekripsi pada setiap permintaan data, melainkan mempertahankan polling 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 dalam 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 tersebut menampilkan beberapa entri log 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 detail tentang cara menafsirkan log audit.

Lihat penggunaan kunci

Cloud KMS dapat Anda gunakan untuk melihat informasi berikut tentang resource Bigtable yang dilindungi oleh kunci Anda.

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

Resource Bigtable berikut didukung:

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

Untuk informasi selengkapnya tentang 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 terlihat 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

Perintah akan 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 cadangan

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

Konsol

  1. Buka halaman instance Bigtable di Konsol Google Cloud.

    Buka daftar instance

  2. Klik nama instance untuk membuka halaman Instance Details.

  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 cadangan.

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

Berikan hal berikut:

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

Perintah akan menampilkan output yang mirip dengan berikut ini. kmsKeyVersion adalah versi kunci CMEK tempat cadangan disematkan. 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