Kunci enkripsi yang dikelola pelanggan (CMEK)

Saat Anda menggunakan Managed Service untuk Apache Spark, data cluster dan tugas disimpan di persistent disk yang terkait dengan VM Compute Engine di cluster Anda dan di bucket staging Cloud Storage. Secara default, data persistent disk dan bucket ini dienkripsi menggunakan kunci enkripsi data (DEK) dan kunci enkripsi kunci (KEK) yang dibuat oleh Google.

Jika ingin mengontrol dan mengelola kunci enkripsi kunci (KEK), Anda dapat menggunakan Kunci Enkripsi yang Dikelola Pelanggan (CMEK) (Google akan terus mengontrol kunci enkripsi data (DEK)). Untuk mengetahui informasi selengkapnya tentang kunci enkripsi data Google, lihat Enkripsi Saat Nonaktif.

Enkripsi data cluster CMEK

Anda dapat menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) untuk mengenkripsi data cluster berikut:

  • Data pada persistent disk yang terpasang ke VM cluster Managed Service untuk Apache Spark
  • Data argumen tugas yang dikirimkan ke cluster Anda, seperti string kueri yang dikirimkan dengan tugas Spark SQL
  • Metadata cluster, output driver tugas, dan data lainnya yang ditulis ke cluster Managed Service untuk Apache Spark bucket staging

Sebelum memulai

  1. Login ke akun Anda. Google Cloud Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instal Google Cloud CLI.

  6. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  7. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instal Google Cloud CLI.

  12. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  13. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init

Membuat kunci

Untuk melindungi resource Managed Service untuk Apache Spark dengan CMEK, Anda dapat mengotomatiskan pembuatan kunci atau membuat kunci secara manual.

Pembuatan kunci otomatis

Gunakan Autokey untuk mengotomatiskan penyediaan CMEK dan penetapan. Autokey membuat key ring dan kunci sesuai permintaan saat resource dibuat. Agen layanan menggunakan kunci dalam operasi enkripsi dan dekripsi. Jika diperlukan, Autokey akan membuat agen dan memberikan peran Identity and Access Management (IAM) (IAM) yang diperlukan kepada mereka. Untuk mengetahui informasi selengkapnya, lihat Ringkasan Autokey.

Pembuatan kunci manual

Ikuti langkah-langkah berikut untuk membuat kunci secara manual untuk enkripsi data cluster CMEK:

  1. Buat satu atau beberapa kunci menggunakan Cloud KMS. Nama resource, yang juga disebut ID resource kunci, yang Anda gunakan pada langkah berikutnya, dibuat sebagai berikut:

    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
    Kunci (CMEK) harus berada di lokasi yang sama dengan resource terenkripsi. Misalnya, CMEK yang digunakan untuk mengenkripsi resource di region us-central1 juga harus berada di region us-central1.

  2. Untuk memastikan bahwa setiap akun layanan berikut, akun layanan Agen Layanan Compute Engine, akun layanan Agen Layanan Cloud Storage, dan akun layanan Agen Layanan Managed Service untuk Apache Spark, memiliki izin yang diperlukan untuk melindungi resource dengan menggunakan kunci Cloud KMS, minta administrator Anda untuk memberikan peran IAM Pengenkripsi/Pendekripsi CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) ke setiap akun layanan berikut, akun layanan Agen Layanan Compute Engine, akun layanan Agen Layanan Cloud Storage, dan akun layanan Agen Layanan Managed Service untuk Apache Spark, di project Anda.

    Contoh penetapan peran Pengenkripsi/Pendekripsi CryptoKey Cloud KMS ke akun layanan Agen Layanan Managed Service untuk Apache Spark menggunakan Google Cloud CLI:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Ganti kode berikut:

    KMS_PROJECT_ID: ID project Anda yang berisi kunci Cloud KMS. Google Cloud

    PROJECT_NUMBER: nomor project (bukan project ID) project Anda yang menjalankan resource Managed Service untuk Apache Spark. Google Cloud

  3. Jika peran Agen Layanan Managed Service untuk Apache Spark tidak terlampir ke akun layanan Agen Layanan Managed Service untuk Apache Spark, tambahkan izin serviceusage.services.use ke peran kustom yang terlampir ke akun layanan Agen Layanan Managed Service untuk Apache Spark.

Membuat cluster dengan CMEK

Teruskan ID resource kunci Anda saat Anda membuat cluster Managed Service untuk Apache Spark.

gcloud CLI

  • Untuk mengenkripsi data persistent disk cluster menggunakan kunci Anda, teruskan ID resource kunci Anda ke flag --gce-pd-kms-key saat Anda membuat cluster.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --gce-pd-kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \
        other arguments ...
        

    Anda dapat memverifikasi setelan kunci dari alat command line gcloud.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
        

    Cuplikan output perintah:

    ...
    configBucket: dataproc- ...
      encryptionConfig:
        gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    ...
        
  • Untuk mengenkripsi data persistent disk cluster dan data argumen tugas menggunakan kunci Anda, teruskan ID resource kunci ke flag --kms-key saat Anda membuat cluster. Lihat [Cluster.EncryptionConfig.kmsKey](/dataproc/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key) untuk mengetahui daftar jenis tugas dan argumen yang dienkripsi dengan flag `--kms-key`.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \
        other arguments ...
          

    Anda dapat memverifikasi setelan kunci dengan perintah gcloud CLI dataproc clusters describe. ID resource kunci ditetapkan pada gcePdKmsKeyName dan kmsKey untuk menggunakan kunci Anda dengan enkripsi data persistent disk cluster dan argumen tugas.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
          

    Cuplikan output perintah:

    ...
    configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
        
  • Untuk mengenkripsi metadata cluster, driver tugas, dan data output lainnya yang ditulis ke bucket staging Managed Service untuk Apache Spark di Cloud Storage:
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --bucket=CMEK_BUCKET_NAME \
        other arguments ...
            

    Anda juga dapat meneruskan bucket yang mendukung CMEK ke perintah `gcloud dataproc jobs submit` jika tugas Anda menggunakan argumen bucket, seperti yang ditunjukkan dalam contoh `cmek-bucket` berikut:

    gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \
        --region=region \
        --cluster=cluster-name \
        -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
          

REST API

  • Untuk mengenkripsi data persistent disk VM cluster menggunakan kunci Anda, sertakan ClusterConfig.EncryptionConfig.gcePdKmsKeyName kolom sebagai bagian dari cluster.create permintaan.

    Anda dapat memverifikasi setelan kunci dengan perintah gcloud CLI dataproc clusters describe.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
        

    Cuplikan output perintah:

    ...
    configBucket: dataproc- ...
      encryptionConfig:
        gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
        
  • Untuk mengenkripsi data persistent disk VM cluster dan data argumen tugas menggunakan kunci Anda, sertakan kolom Cluster.EncryptionConfig.kmsKey sebagai bagian dari cluster.create. Lihat Cluster.EncryptionConfig.kmsKey untuk mengetahui daftar jenis tugas dan argumen yang dienkripsi dengan kolom --kms-key.

    Anda dapat memverifikasi setelan kunci dengan perintah gcloud CLI dataproc clusters describe. ID resource kunci ditetapkan pada gcePdKmsKeyName dan kmsKey untuk menggunakan kunci Anda dengan enkripsi data persistent disk cluster dan argumen tugas.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
        

    Cuplikan output perintah:

    ...
    configBucket: dataproc- ...
      encryptionConfig:
        gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
        kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
        
  • Untuk mengenkripsi metadata cluster, driver tugas, dan data output lainnya yang ditulis ke bucket staging Managed Service untuk Apache Spark di Cloud Storage:
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --bucket=CMEK_BUCKET_NAME \
        other arguments ...
        

    Anda juga dapat meneruskan bucket yang mendukung CMEK ke perintah `gcloud dataproc jobs submit` jika tugas Anda menggunakan argumen bucket, seperti yang ditunjukkan dalam contoh `cmek-bucket` berikut:

    gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \
        --region=region \
        --cluster=cluster-name \
        -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
          

Menggunakan CMEK dengan data template alur kerja

Data argumen tugas template alur kerja Managed Service untuk Apache Spark, seperti string kueri tugas Spark SQL, dapat dienkripsi menggunakan CMEK. Ikuti langkah 1, 2, dan 3 di bagian ini untuk menggunakan CMEK dengan template alur kerja Managed Service untuk Apache Spark. Lihat WorkflowTemplate.EncryptionConfig.kmsKey untuk mengetahui daftar jenis tugas dan argumen template alur kerja yang dienkripsi menggunakan CMEK saat fitur ini diaktifkan.

  1. Buat kunci menggunakan Cloud KMS. Nama resource kunci, yang Anda gunakan pada langkah berikutnya, dibuat sebagai berikut:
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. Untuk mengaktifkan akun layanan Managed Service untuk Apache Spark agar dapat menggunakan kunci Anda:

    1. Tetapkan peran CryptoKey Encrypter/Decrypter Cloud KMS ke akun layanan Agen Layanan Managed Service untuk Apache Spark. Anda dapat menggunakan gcloud CLI untuk menetapkan peran:

       gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
       --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter
      

      Ganti kode berikut:

      KMS_PROJECT_ID: ID project Anda yang menjalankan Cloud KMS. Google Cloud Project ini juga dapat menjadi project yang menjalankan resource Managed Service untuk Apache Spark.

      PROJECT_NUMBER: nomor project (bukan project ID) project Anda yang menjalankan resource Managed Service untuk Apache Spark. Google Cloud

    2. Aktifkan Cloud KMS API di project yang menjalankan resource Managed Service untuk Apache Spark.

    3. Jika peran Agen Layanan Managed Service untuk Apache Spark tidak terlampir ke akun layanan Agen Layanan Managed Service untuk Apache Spark, tambahkan izin serviceusage.services.use ke peran kustom yang terlampir ke akun layanan Agen Layanan Managed Service untuk Apache Spark. Jika peran Agen Layanan Managed Service untuk Apache Spark terlampir ke akun layanan Agen Layanan Managed Service untuk Apache Spark, Anda dapat melewati langkah ini.

  3. Anda dapat menggunakan gcloud CLI atau Dataproc API untuk menetapkan kunci yang Anda buat di Langkah 1 pada alur kerja. Setelah kunci ditetapkan pada alur kerja, semua argumen dan kueri tugas alur kerja akan dienkripsi menggunakan kunci untuk salah satu jenis tugas dan argumen yang tercantum di WorkflowTemplate.EncryptionConfig.kmsKey.

    gcloud CLI

    Teruskan ID resource kunci Anda ke flag --kms-key saat Anda membuat template alur kerja dengan perintah gcloud dataproc workflow-templates create.

    Contoh:

    gcloud dataproc workflow-templates create my-template-name \
        --region=region \
        --kms-key='projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name' \
        other arguments ...
    
    Anda dapat memverifikasi setelan kunci dari alat command line gcloud.
    gcloud dataproc workflow-templates describe TEMPLATE_NAME \
        --region=REGION
    
    ...
    id: my-template-name
    encryptionConfig:
    kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
    

    REST API

    Gunakan WorkflowTemplate.EncryptionConfig.kmsKey sebagai bagian dari permintaan workflowTemplates.create.

    Anda dapat memverifikasi setelan kunci dengan mengeluarkan permintaan workflowTemplates.get. JSON yang ditampilkan berisi kmsKey:

    ...
    "id": "my-template-name",
    "encryptionConfig": {
      "kmsKey": "projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name"
    },
    

Cloud External Key Manager

Cloud External Key Manager (Cloud EKM) memungkinkan Anda melindungi data Managed Service untuk Apache Spark menggunakan kunci yang dikelola oleh partner pengelolaan kunci eksternal yang didukung. Langkah-langkah yang Anda ikuti untuk menggunakan Cloud EKM di Managed Service untuk Apache Spark sama dengan langkah-langkah yang Anda gunakan untuk menyiapkan kunci CMEK, dengan perbedaan berikut: kunci Anda mengarah ke URI untuk kunci yang dikelola secara eksternal (lihat Ringkasan Cloud EKM).

Error Cloud EKM

Saat Anda menggunakan Cloud EKM, upaya untuk membuat cluster dapat gagal karena error yang terkait dengan input, Cloud EKM, sistem partner pengelolaan kunci eksternal, atau komunikasi antara Cloud EKM dan sistem eksternal. Jika Anda menggunakan REST API atau konsol, error akan dicatat di Cloud Logging. Google Cloud Anda dapat memeriksa error cluster yang gagal dari tab Lihat Log.