Mengenkripsi disk dengan kunci enkripsi yang disediakan pelanggan


Topik ini memberikan informasi tentang cara mengenkripsi disk dengan kunci enkripsi yang disediakan pelanggan.

Untuk informasi tentang enkripsi disk, lihat Tentang enkripsi disk.

Untuk informasi tentang cara mengenkripsi disk dengan kunci enkripsi yang dikelola pelanggan (CMEK), lihat Melindungi resource dengan menggunakan kunci Cloud KMS.

Menggunakan CSEK berarti Anda menyediakan kunci enkripsi Anda sendiri dan Compute Engine menggunakan kunci Anda untuk melindungi kunci buatan Google yang digunakan untuk mengenkripsi dan mendekripsi data Anda. Hanya pengguna yang dapat memberikan kunci yang benar yang dapat menggunakan resource yang dilindungi dengan kunci enkripsi yang disediakan pelanggan (CSEK).

Google tidak menyimpan kunci Anda di servernya dan tidak dapat mengakses data yang Anda lindungi kecuali jika Anda memberikan kuncinya. Hal ini juga berarti bahwa, jika Anda lupa atau kehilangan kunci, Google tidak dapat memulihkan kunci tersebut atau memulihkan data apa pun yang dienkripsi dengannya.

Saat Anda menghapus persistent disk, Google akan menghapus kunci cipher, sehingga data menjadi tidak dapat diambil. Proses ini tidak dapat diurungkan.

Sebelum memulai

  • Baca disk, image, dan snapshot disk.
  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Python

      Untuk menggunakan contoh Python di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      REST

      Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Untuk informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud.

Pembatasan

Untuk CSEK, batasan berikut berlaku:

Batasan umum

Ketersediaan kunci enkripsi yang disediakan pelanggan bergantung pada lokasi akun penagihan Anda, bukan lokasi resource.

Kunci enkripsi yang disediakan pelanggan tidak tersedia untuk akun penagihan yang berada di negara berikut:

  • Brasil
  • India

Batasan teknis

  • Anda hanya dapat mengenkripsi persistent disk baru dengan kunci Anda sendiri. Anda tidak dapat mengenkripsi persistent disk yang sudah ada dengan kunci Anda sendiri.

  • Anda tidak dapat menggunakan kunci Anda sendiri dengan Disk SSD Lokal karena kunci dikelola oleh infrastruktur Google dan dihapus saat VM dihentikan.

  • Compute Engine tidak menyimpan kunci enkripsi dengan template instance, sehingga Anda perlu menyimpan kunci Anda sendiri di KMS untuk mengenkripsi disk di grup instance terkelola.

  • Anda tidak dapat menangguhkan instance yang memiliki disk yang dilindungi dengan CSEK.

Spesifikasi

Bagian ini menjelaskan spesifikasi enkripsi dan format CSEK.

Enkripsi

Compute Engine menggunakan kunci enkripsi Anda untuk melindungi kunci enkripsi Google dengan enkripsi AES-256.

Format kunci yang diperlukan

Andalah yang menentukan untuk membuat dan mengelola kunci. Anda harus memberikan kunci yang merupakan string 256-bit yang dienkode dalam base64 standard RFC 4648 ke Compute Engine.

Berikut adalah contoh kunci berenkode base64, yang dihasilkan dengan string "Hello from Google Cloud Platform".

SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=

Kunci ini dapat dihasilkan menggunakan skrip berikut:

read -sp "String:" ; \
    [[ ${#REPLY} == 32 ]] && \
        echo "$(echo -n "$REPLY" | base64)" || \
        (>&2 echo -e "\nERROR:Wrong Size"; false)

Penggabungan kunci RSA

Selain mengenkode kunci dalam base64, Anda juga dapat menggabungkan kunci menggunakan public key certificate RSA yang disediakan oleh Google, mengenkode kunci tersebut dalam base64, lalu menggunakannya dalam permintaan Anda.

Penggabungan RSA adalah proses di mana Anda menggunakan kunci publik untuk mengenkripsi data Anda. Setelah dienkripsi dengan kunci publik, data hanya dapat didekripsi oleh kunci pribadi yang terkait. Dalam hal ini, kunci pribadi hanya diketahui oleh layanan Google Cloud. Dengan menggabungkan kunci menggunakan sertifikat RSA, Anda memastikan bahwa hanya layanan Google Cloud yang dapat membuka kunci Anda dan menggunakannya untuk melindungi data Anda.

Untuk mengetahui informasi selengkapnya, lihat Enkripsi RSA.

Agar dapat membuat kunci yang digabungkan RSA untuk Compute Engine, lakukan langkah berikut:

  1. Gabung kunci Anda menggunakan kunci publik yang diberikan dalam sertifikat yang dikelola Compute Engine. Pastikan untuk menggabung kunci Anda menggunakan padding OAEP, bukan padding PKCS #1 v1.5.
  2. Enkode kunci yang digabungkan RSA menggunakan encoding base64 standar.

Download sertifikat publik yang dikelola oleh Compute Engine dari:

https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem

Ada banyak cara untuk menghasilkan dan menggabungkan RSA kunci Anda; menggunakan metode yang familier. Berikut ini dua contoh penggabungan RSA kunci yang dapat Anda gunakan.

Contoh 1

Petunjuk berikut menggunakan utilitas command line openssl untuk menggabungkan RSA dan mengenkode kunci.

  1. Opsional: Hasilkan kunci acak 256 bit (32 byte). Jika sudah memiliki kunci yang ingin digunakan, Anda dapat melewati langkah ini. Ada banyak cara untuk menghasilkan kunci. Contoh:

    $ head -c 32 /dev/urandom | LC_CTYPE=C tr '\n' = > mykey.txt
    
  2. Download public key certificate:

    $  curl -s -O -L https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem
  3. Ekstrak kunci publik dari sertifikat:

    $ openssl x509 -pubkey -noout -in google-cloud-csek-ingress.pem > pubkey.pem
    
  4. Gabungkan RSA kunci Anda. Pastikan untuk mengganti mykey.txt dengan file kunci Anda sendiri.

    $ openssl rsautl -oaep -encrypt -pubin -inkey pubkey.pem -in mykey.txt -out rsawrappedkey.txt
    
  5. Enkode kunci yang digabungkan RSA menggunakan base64.

    $ openssl enc -base64 -in rsawrappedkey.txt | tr -d '\n' | sed -e '$a\' > rsawrapencodedkey.txt
    

Contoh 2

Berikut adalah contoh skrip Python yang menghasilkan string acak 256 bit (32 byte) dan membuat kunci yang digabungkan RSA berenkode base64 menggunakan library kriptografi:

import argparse
import base64
import os
from typing import Optional

from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey
import requests


GOOGLE_PUBLIC_CERT_URL = (
    "https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem"
)


def get_google_public_cert_key() -> RSAPublicKey:
    """
    Downloads the Google public certificate.

    Returns:
        RSAPublicKey object with the Google public certificate.
    """
    r = requests.get(GOOGLE_PUBLIC_CERT_URL)
    r.raise_for_status()

    # Load the certificate.
    certificate = x509.load_pem_x509_certificate(r.content, default_backend())

    # Get the certicate's public key.
    public_key = certificate.public_key()

    return public_key


def wrap_rsa_key(public_key: RSAPublicKey, private_key_bytes: bytes) -> bytes:
    """
    Use the Google public key to encrypt the customer private key.

    This means that only the Google private key is capable of decrypting
    the customer private key.

    Args:
        public_key: The public key to use for encrypting.
        private_key_bytes: The private key to be encrypted.

    Returns:
        private_key_bytes encrypted using the public_key. Encoded using
        base64.
    """
    wrapped_key = public_key.encrypt(
        private_key_bytes,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA1()),
            algorithm=hashes.SHA1(),
            label=None,
        ),
    )
    encoded_wrapped_key = base64.b64encode(wrapped_key)
    return encoded_wrapped_key


def main(key_file: Optional[str]) -> None:
    """
    This script will encrypt a private key with Google public key.

    Args:
        key_file: path to a file containing your private key. If not
            provided, a new key will be generated (256 bit).
    """
    # Generate a new 256-bit private key if no key is specified.
    if not key_file:
        customer_key_bytes = os.urandom(32)
    else:
        with open(key_file, "rb") as f:
            customer_key_bytes = f.read()

    google_public_key = get_google_public_cert_key()
    wrapped_rsa_key = wrap_rsa_key(google_public_key, customer_key_bytes)

    b64_key = base64.b64encode(customer_key_bytes).decode("utf-8")

    print(f"Base-64 encoded private key: {b64_key}")
    print(f"Wrapped RSA key: {wrapped_rsa_key.decode('utf-8')}")


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
    )
    parser.add_argument("--key_file", help="File containing your binary private key.")

    args = parser.parse_args()

    main(args.key_file)

Kunci Anda sekarang siap digunakan!

Menggunakan kunci yang digabungkan RSA

Dengan Google Cloud CLI, Anda dapat memberikan kunci reguler dan kunci yang digabungkan RSA melalui cara yang sama.

Di API, gunakan properti sha256, bukan rawKey, jika Anda ingin menggunakan kunci yang digabungkan RSA.

Mengenkripsi resource dengan CSEK menggunakan alat command line

Penyiapan

Kunci enkripsi dapat digunakan melalui Google Cloud CLI.

Download dan instal gcloud.

File kunci

Saat menggunakan alat command line gcloud compute untuk menyetel kunci, Anda menyediakan kunci yang dienkode menggunakan file kunci yang berisi kunci berenkode sebagai daftar JSON. Sebuah file kunci dapat berisi beberapa kunci, sehingga Anda dapat mengelola banyak kunci di satu tempat. Atau, Anda dapat membuat file kunci tunggal untuk menangani setiap kunci secara terpisah. File kunci hanya dapat digunakan dengan gcloud CLI. Saat menggunakan REST, Anda harus menyediakan kunci secara langsung dalam permintaan.

Setiap entri dalam file kunci harus memberikan:

  • URI yang sepenuhnya memenuhi syarat ke resource yang dilindungi oleh kunci
  • Kunci yang terkait
  • Jenis kunci, raw atau rsa-encrypted

Saat Anda menggunakan file kunci dalam permintaan, alat ini akan mencari resource yang cocok dan menggunakan kunci terkaitnya. Jika tidak ditemukan resource yang cocok, permintaan akan gagal.

Contoh file kunci terlihat seperti ini:

[
  {
  "uri": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/example-disk",
  "key": "acXTX3rxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY+c=",
  "key-type": "raw"
  },
  {
  "uri": "https://www.googleapis.com/compute/v1/projects/myproject/global/snapshots/my-private-snapshot",
  "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==",
  "key-type": "rsa-encrypted"
  }
]

Praktik terbaik untuk mengelola file kunci

Jika Anda menggunakan file kunci, berikan akses ke file tersebut hanya kepada pengguna yang membutuhkannya. Pastikan untuk menetapkan izin yang sesuai pada file ini dan pertimbangkan untuk mengenkripsi file tersebut menggunakan alat tambahan:

Mengenkripsi persistent disk baru dengan CSEK

Anda dapat mengenkripsi persistent disk baru dengan menyediakan kunci selama pembuatan VM atau disk.

Konsol

  1. Buka halaman Disks.

    Buka Disks

  2. Klik Create disk dan masukkan properti untuk disk baru.

  3. Di bagian Encryption, pilih Customer-supplied key.

  4. Berikan kunci enkripsi untuk disk di kotak teks, lalu pilih Wrapped key jika kunci telah digabung dengan kunci RSA publik.

gcloud

Pada alat gcloud compute, enkripsi disk menggunakan flag --csek-key-file selama pembuatan VM. Jika Anda menggunakan kunci yang digabungkan RSA, gunakan komponen gcloud beta:

gcloud (beta) compute instances create example-instance --csek-key-file example-file.json

Untuk mengenkripsi persistent disk mandiri:

gcloud (beta) compute disks create example-disk --csek-key-file example-file.json

REST

Anda dapat mengenkripsi disk menggunakan properti diskEncryptionKey dan membuat permintaan ke API v1 untuk kunci mentah (tidak digabungkan RSA), atau ke API Beta untuk kunci yang digabungkan RSA. Sediakan salah satu properti berikut dalam permintaan Anda:

  • rawKey: jika kunci Anda dienkode base64
  • rsaEncryptedKey: jika kunci Anda digabungkan RSA dan dienkode base64

Misalnya, untuk mengenkripsi disk baru selama pembuatan VM menggunakan kunci yang digabungkan RSA:

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/instances

{
"machineType": "zones/us-central1-a/machineTypes/e2-standard-2",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-9-stretch-v20170619"
  },
  "boot": true
 }
],
...
}

Demikian pula, Anda juga dapat menggunakan REST untuk membuat persistent disk mandiri baru dan mengenkripsinya dengan kunci Anda sendiri:

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/
us-central1-a/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2F
alpha%2Fprojects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-9-stretch-v20170619

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
 "type": "zones/us-central1-a/diskTypes/pd-standard"
}

Membuat snapshot dari disk yang dienkripsi dengan CSEK

Jika Anda membuat snapshot dari disk terenkripsi, snapshot tersebut juga harus dienkripsi. Anda harus menentukan kunci untuk mengenkripsi snapshot. Anda tidak dapat mengonversi disk terenkripsi atau snapshot terenkripsi untuk menggunakan enkripsi default Compute Engine, kecuali jika Anda membuat disk image baru dan persistent disk baru.

Snapshot disk yang dienkripsi dengan CSEK selalu merupakan snapshot lengkap. Beda halnya dengan snapshot disk yang dienkripsi dengan kunci enkripsi yang dikelola pelanggan (CMEK), yang sifatnya inkremental. Harga snapshot dihitung berdasarkan ukuran total snapshot, sehingga harga snapshot lengkap mungkin lebih mahal daripada snapshot inkremental.

Untuk membuat snapshot persistent disk dari disk terenkripsi, permintaan pembuatan snapshot harus menyediakan kunci enkripsi yang digunakan untuk mengenkripsi persistent disk.

Tinjau Praktik terbaik untuk snapshot persistent disk sebelum membuat snapshot.

Konsol

  1. Buka halaman Snapshots.

    Buka Snapshots

  2. Klik Create snapshot.

  3. Pada Source disk, pilih disk terenkripsi yang ingin Anda buat snapshot-nya.

  4. Berikan kunci enkripsi untuk disk di kotak teks, lalu pilih Wrapped key jika kunci telah digabung dengan kunci RSA publik.

  5. Enkripsi snapshot baru dengan menyediakan kunci enkripsi tambahan di bagian Encryption.

REST

Untuk membuat permintaan, berikan properti sourceDiskEncryptionKey untuk mengakses persistent disk sumber. Anda harus mengenkripsi snapshot baru menggunakan properti snapshotEncryptionKey.

Buat permintaan ke API v1 untuk kunci mentah (tidak digabungkan RSA), atau ke API Beta untuk kunci yang digabungkan RSA.

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
 },
  "sourceDiskEncryptionKey": {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
 "name": "snapshot-encrypted-disk"
}

Properti sourceDiskEncryptionKey harus cocok dengan kunci yang digunakan untuk mengenkripsi persist disk. Jika tidak, permintaan akan gagal.

snapshotEncryptionKey memungkinkan Anda menyediakan kunci untuk mengenkripsi snapshot, sehingga jika snapshot itu digunakan untuk membuat persistent disk baru, kunci yang cocok harus disediakan. Kunci ini harus mengikuti format kunci sebelumnya. Anda juga dapat memilih untuk tidak menentukan properti ini dan snapshot dapat digunakan untuk membuat persistent disk baru tanpa memerlukan kunci.

Membuat image baru dari disk atau image kustom yang dienkripsi dengan CSEK

Anda dapat membuat image kustom dari persistent disk terenkripsi atau menyalin image terenkripsi. Anda tidak dapat menggunakan Konsol Google Cloud untuk menyalin image. Gunakan Google Cloud CLI atau REST untuk menyalin image.

Konsol

  1. Buka halaman Images.

    Buka Images

  2. Klik Create image.

  3. Pada Source disk, pilih disk terenkripsi yang ingin Anda buat image-nya.

  4. Di bagian Encryption, pilih solusi pengelolaan kunci enkripsi.

  5. Jika kunci telah digabungkan dengan kunci RSA publik, pilih Wrapped key.

gcloud

Ikuti petunjuk untuk membuat image, dan tambahkan flag --csek-key-file dengan jalur ke file kunci enkripsi untuk objek sumber yang dienkripsi. Gunakan komponen gcloud beta jika Anda menggunakan kunci yang digabungkan RSA:

gcloud (beta) compute images create .... --csek-key-file example-file.json

Jika ingin mengenkripsi image baru dengan kunci Anda, tambahkan kunci tersebut ke file kunci:

[
  {
  "uri": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/source-disk",
  "key": "acX3RqzxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY-c=",
  "key-type": "raw"
  },
  {
  "uri": "https://www.googleapis.com/compute/v1/projects/myproject/global/snapshots/the-new-image",
  "key": "TF0t-cSfl7CT7xRF1LTbAgi7U6XXUNC4zU_dNgx0nQc=",
  "key-type": "raw"
  }
]

REST

Permintaan pembuatan API Anda harus berisi properti kunci enkripsi untuk objek sumber. Misalnya, sertakan salah satu properti berikut, bergantung pada jenis objek sumber:

  • Persistent disk: sourceDiskEncryptionKey
  • Image: sourceImageEncryptionKey

Sertakan juga properti rawKey atau rsaEncryptedKey, bergantung pada jenis kunci. Buat permintaan ke API v1 untuk kunci mentah (tidak digabungkan RSA), atau ke API Beta untuk kunci yang digabungkan RSA. Contoh berikut mengonversi persistent disk yang dienkripsi dan digabungkan RSA menjadi image yang menggunakan kunci enkripsi yang sama.

POST https://compute.googleapis.com/compute/beta/projects/myproject/global/images

{
 "name": "image-encrypted-disk",
 "sourceDiskEncryptionKey": {
    "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
 "imageEncryptionKey": {
    "rsaEncryptedKey":  "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
    },
 "sourceDisk": "projects/myproject/zones/us-central1-a/disks/source-disks"
}

Properti imageEncryptionKey (opsional) memungkinkan Anda menyediakan kunci untuk mengenkripsi image. Jadi, saat image digunakan untuk membuat persistent disk baru, kunci yang cocok harus disediakan. Kunci ini harus mengikuti format kunci yang sama seperti yang dijelaskan di atas. Anda juga dapat memilih untuk tidak menentukan properti ini dan image dapat digunakan untuk membuat persistent disk baru tanpa memerlukan kunci.

Mengenkripsi image yang diimpor dengan CSEK

Anda dapat mengenkripsi image baru saat mengimpor image kustom secara manual ke Compute Engine. Sebelum dapat mengimpor image, Anda harus membuat dan mengompresi file disk image serta mengupload file yang dikompresi tersebut ke Cloud Storage.

Impor image Compute Engine kustom yang ingin Anda enkripsi. Tentukan URI ke file yang dikompresi, lalu tentukan jalur ke file kunci enkripsi Anda.

Konsol

  1. Buka halaman Images.

    Buka Images

  2. Klik Create image.

  3. Pada Source, pilih Cloud Storage file.

  4. Di bagian Cloud Storage file, masukkan Cloud Storage URI.

  5. Di bagian Encryption, pilih Customer-provided key dan berikan kunci enkripsi untuk mengenkripsi gambar di dalam kotak teks.

gcloud

Gunakan perintah compute images create untuk membuat image baru, dan tentukan flag --csek-key-file dengan file kunci enkripsi. Jika Anda menggunakan kunci yang digabungkan RSA, gunakan komponen gcloud beta:

gcloud (beta) compute images create [IMAGE_NAME] \
    --source-uri gs://[BUCKET_NAME]/[COMPRESSED_FILE] \
    --csek-key-file [KEY_FILE]

Ganti kode berikut:

  • [IMAGE_NAME]: nama untuk image kustom baru.
  • [BUCKET_NAME]: nama bucket Cloud Storage yang menyimpan file image terkompresi.
  • [COMPRESSED_FILE]: nama file image terkompresi.
  • [KEY_FILE]: jalur ke file kunci enkripsi di workstation lokal Anda.

REST

Untuk mengenkripsi image baru yang dibuat dari file RAW, tambahkan properti imageEncryptionKey baru ke permintaan pembuatan image, yang diikuti dengan rawKey atau rsaEncryptedKey. Buat permintaan ke API v1 untuk kunci mentah (tidak digabungkan RSA), atau ke API Beta untuk kunci yang digabungkan RSA.

POST https://compute.googleapis.com/compute/beta/projects/myproject/global/images

{
"rawDisk": {
 "source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
},
"name": "new-encrypted-image",
"sourceType": "RAW",
"imageEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
}

Membuat persistent disk dari resource yang dienkripsi dengan CSEK

Membuat disk dari snapshot yang dienkripsi dengan CSEK

Konsol

  1. Buka halaman Disks.

    Buka Disks

  2. Klik Create disk.

  3. Di bagian Source type, pilih Snapshot.

  4. Di bagian Encryption, pilih solusi pengelolaan kunci enkripsi.

  5. Jika kunci telah digabungkan dengan kunci RSA publik, pilih Wrapped key.

gcloud

Pada alat gcloud compute, berikan kunci enkripsi untuk snapshot menggunakan flag --csek-key-file saat Anda membuat disk. Jika Anda menggunakan kunci yang digabungkan RSA, gunakan komponen gcloud beta:

gcloud (beta) compute disks create ... --source-snapshot example-snapshot --csek-key-file example-file.json

REST

Untuk menggunakan snapshot terenkripsi, berikan sourceSnapshotEncryptionKey dalam permintaan Anda, diikuti dengan rawKey atau rsaEncryptedKey. Buat permintaan ke API v1 untuk kunci mentah (tidak digabungkan RSA), atau ke API Beta untuk kunci yang digabungkan RSA. Misalnya, ke persistent disk mandiri baru menggunakan snapshot terenkripsi:

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks

{
"name": "disk-from-encrypted-snapshot",
"sourceSnapshot": "global/snapshots/encrypted-snapshot",
"sourceSnapshotEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
}

Membuat disk dari image yang dienkripsi dengan CSEK

Konsol

  1. Buka halaman Disks.

    Buka Disks

  2. Klik Create disk.

  3. Di bagian Source type, pilih Image.

  4. Di bagian Encryption, pilih solusi pengelolaan kunci enkripsi.

  5. Jika kunci telah digabungkan dengan kunci RSA publik, pilih Wrapped key.

gcloud

Pada alat gcloud compute, berikan kunci enkripsi untuk image menggunakan flag --csek-key-file saat Anda membuat disk. Jika Anda menggunakan kunci yang digabungkan RSA, gunakan komponen gcloud beta:

gcloud (beta) compute disks create ... --image example-image --csek-key-file example-file.json

REST

Untuk menggunakan image terenkripsi, berikan sourceImageEncryptionKey, diikuti dengan rawKey atau rsaEncryptedKey. Buat permintaan ke API v1 untuk kunci mentah (tidak digabungkan RSA), atau ke API Beta untuk kunci yang digabungkan RSA.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks

{
"name": "disk-from-encrypted-image",
"sourceImageEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
"sourceImage": "global/images/encrypted-image"
}

Memasang disk yang dienkripsi dengan CSEK ke VM baru

Konsol

  1. Buka halaman Create an instance.

    Buka Create an instance

  2. Di bagian Boot disk, klik Change, dan lakukan hal berikut:

    1. Di halaman Boot disk, klik tab Existing disks.
    2. Dari daftar Disk, pilih disk terenkripsi yang sudah ada untuk dipasang ke VM.
    3. Masukkan kunci enkripsi di kotak teks, lalu pilih Wrapped key jika kunci telah digabungkan dengan kunci RSA publik.

    4. Klik Select.

  3. Lanjutkan dengan proses pembuatan VM.

gcloud

Untuk membuat VM dan memasang disk terenkripsi, buat file kunci dan berikan kunci tersebut menggunakan flag --csek-key-file saat Anda membuat VM. Jika Anda menggunakan kunci yang digabungkan RSA, gunakan komponen gcloud beta:

gcloud (beta) compute instances create example-instance \
    --disk name=example-disk,boot=yes \
    --csek-key-file example-file.json

REST

Buat VM menggunakan Compute Engine API dan masukkan rawKey atau rsaEncryptedKey bersama spesifikasi disk. Buat permintaan ke API v1 untuk kunci mentah (tidak digabungkan RSA), atau ke API Beta untuk kunci yang digabungkan RSA.

Berikut adalah cuplikan contoh spesifikasi disk:

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/myproject/zones/us-central1-f/disks/encrypted-disk",
  "diskEncryptionKey": {
    "rawKey": "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0="
  }
 }
]

Memulai atau memulai ulang VM yang memiliki disk terenkripsi dengan CSEK

Untuk mengetahui detail tentang cara menghentikan atau memulai VM yang memiliki disk terenkripsi, baca Memulai ulang VM dengan disk terenkripsi.

Menggunakan command line untuk membuat resource campuran

Jika Anda ingin mencampur resource yang dienkripsi pelanggan dengan resource yang terenkripsi standar dalam satu permintaan dengan Google Cloud CLI, Anda dapat menggunakan flag --csek-key-file dengan file kunci dan --no-require-csek-key-create dalam permintaan Anda. Dengan menyediakan kedua flag, gcloud CLI membuat resource yang dienkripsi pelanggan yang secara eksplisit ditentukan dalam file kunci Anda, dan juga membuat resource standar yang Anda tentukan.

Misalnya, anggaplah sebuah file kunci berisi baris kode berikut:

[
  {
  "uri": "https://www.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks/example-disk",
  "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==",
  "key-type": "rsa-encrypted"
  }
]

Jika Anda ingin membuat VM dengan disk yang dienkripsi pelanggan menggunakan file kunci, dan secara bersamaan membuat VM dengan disk terenkripsi standar dalam permintaan yang sama, Anda dapat melakukannya seperti berikut:

gcloud beta compute instances create example-disk example-disk-2 \
    --csek-key-file mykeyfile.json --no-require-csek-key-create

Biasanya, pembuatan example-disk-2 tidak dapat dilakukan jika Anda menentukan flag --csek-key-file karena disk tidak ditentukan secara eksplisit dalam file kunci. Dengan menambahkan --no-require-csek-key-create, kedua disk akan dibuat, satu dienkripsi menggunakan file kunci, dan satu lagi dienkripsi menggunakan enkripsi Google.

Menghapus CSEK dari persistent disk

Anda dapat mendekripsi isi disk yang dienkripsi pelanggan dan membuat disk baru yang menggunakan enkripsi default Compute Engine.

  1. Buat image disk yang dienkripsi dan tentukan enkripsi otomatis untuk image baru.
  2. Gunakan image baru untuk membuat persistent disk baru.

Persistent disk baru yang Anda buat akan menggunakan enkripsi default Compute Engine untuk melindungi isi disk. Snapshot apa pun yang Anda buat dari disk tersebut juga harus menggunakan enkripsi default.