Konfigurasi Keamanan Dataproc

Saat membuat cluster Dataproc, Anda dapat mengaktifkan Hadoop Secure Mode melalui Kerberos untuk menyediakan multi-tenancy melalui autentikasi, isolasi, dan enkripsi pengguna di dalam cluster Dataproc.

Autentikasi Pengguna dan Layanan Google Cloud Platform Lainnya. Autentikasi per pengguna melalui Kerberos hanya berlaku dalam cluster. Interaksi dengan layanan Google Cloud lainnya, seperti Cloud Storage, terus diautentikasi sebagai akun layanan untuk cluster.

Mengaktifkan Mode Aman Hadoop melalui Kerberos

Mengaktifkan Kerberos dan Mode Aman Hadoop untuk cluster akan menyertakan distribusi Kerberos MIT dan mengonfigurasi Apache Hadoop YARN, HDFS, Hive, Spark, dan komponen terkait untuk menggunakannya untuk autentikasi.

Mengaktifkan Kerberos akan membuat Key Distribution Center (KDC) di cluster, yang berisi akun utama layanan dan akun utama root. Akun utama root adalah akun dengan izin administrator ke KDC dalam cluster. KDC juga dapat berisi akun utama pengguna standar atau terhubung melalui kepercayaan lintas-realm ke KDC lain yang berisi akun utama pengguna.

Membuat cluster Kerberos

Anda dapat menggunakan Google Cloud CLI, Dataproc API, atau konsol Google Cloud untuk mengaktifkan Kerberos di cluster yang menggunakan image Dataproc versi 1.3 dan yang lebih baru.

Perintah gcloud

Untuk mengonfigurasi cluster Dataproc Kerberos baru secara otomatis (versi image 1.3 dan yang lebih baru), gunakan perintah gcloud dataproc clusters create.

gcloud dataproc clusters create cluster-name \
    --image-version=2.0 \
    --enable-kerberos

Properti cluster: Daripada menggunakan flag --enable-kerberos seperti yang ditunjukkan di atas, Anda dapat mengonfigurasi Kerberos secara otomatis dengan meneruskan flag --properties "dataproc:kerberos.beta.automatic-config.enable=true" ke perintah pembuatan cluster (lihat Properti layanan Dataproc).

REST API

Cluster Kerberos dapat dibuat melalui ClusterConfig.SecurityConfig.KerberosConfig sebagai bagian dari permintaan clusters.create. Anda harus menetapkan enableKerberos ke true.

Konsol

Anda dapat mengonfigurasi Kerberos secara otomatis di cluster baru dengan memilih "Aktifkan" dari bagian Kerberos dan Hadoop Secure Mode di panel Kelola keamanan di halaman Buat cluster Dataproc di konsol Google Cloud.

Membuat cluster Kerberos dengan Sandi Prinsip Root Anda Sendiri

Ikuti langkah-langkah di bawah ini untuk menyiapkan cluster Kerberos yang menggunakan sandi akun utama root Anda.

Menyiapkan sandi akun utama root Kerberos

Akun utama Kerberos adalah akun dengan izin administrator ke KDC dalam cluster. Untuk memberikan sandi dengan aman untuk akun utama root Kerberos, pengguna dapat mengenkripsinya dengan kunci Key Management Service (KMS), lalu menyimpannya di bucket Google Cloud Storage yang dapat diakses oleh akun layanan cluster. Akun layanan cluster harus diberi peran IAM cloudkms.cryptoKeyDecrypter.

  1. Berikan peran Pengenkripsi/Pendekripsi CryptoKey Cloud KMS ke akun layanan cluster:

    gcloud projects add-iam-policy-binding project-id \
        --member serviceAccount:project-number-compute@developer.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyDecrypter
    

  2. Buat key ring:

    gcloud kms keyrings create my-keyring --location global
    

  3. Buat kunci di key ring:

    gcloud kms keys create my-key \
        --location global \
        --keyring my-keyring \
        --purpose encryption
    

  4. Enkripsi sandi akun utama root Kerberos Anda:

    echo "my-password" | \
      gcloud kms encrypt \
        --location=global \
        --keyring=my-keyring \
        --key=my-key \
        --plaintext-file=- \
        --ciphertext-file=kerberos-root-principal-password.encrypted
    

    1. Upload sandi terenkripsi ke bucket Cloud Storage di project Anda.
      1. Contoh:
        gcloud storage cp kerberos-root-principal-password.encrypted gs://my-bucket
        

Membuat cluster

Anda dapat menggunakan perintah gcloud atau Dataproc API untuk mengaktifkan Kerberos di cluster dengan sandi akun utama root Anda sendiri.

Perintah gcloud

Untuk membuat cluster Dataproc Kerberos (versi image 1.3 dan yang lebih baru), gunakan perintah gcloud dataproc clusters create.

gcloud dataproc clusters create cluster-name \
    --region=region \
    --image-version=2.0 \
    --kerberos-root-principal-password-uri=gs://my-bucket/kerberos-root-principal-password.encrypted \
    --kerberos-kms-key=projects/project-id/locations/global/keyRings/my-keyring/cryptoKeys/my-key

Gunakan file konfigurasi YAML (atau JSON). Daripada meneruskan flag kerberos-* ke perintah gcloud seperti yang ditunjukkan di atas, Anda dapat menempatkan setelan kerberos dalam file konfigurasi YAML (atau JSON), lalu mereferensikan file konfigurasi untuk membuat cluster kerberos.

  1. Buat file konfigurasi (lihat Sertifikat SSL, Setelan Kerberos Tambahan, dan Kepercayaan lintas-realm untuk setelan konfigurasi tambahan yang dapat disertakan dalam file):
    root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted
    kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
  2. Gunakan perintah gcloud berikut untuk membuat cluster kerberos:
    gcloud dataproc clusters create cluster-name \
        --region=region \
        --kerberos-config-file=local path to config-file \
        --image-version=2.0
    

Pertimbangan Keamanan. Dataproc menghapus bentuk sandi yang didekripsi setelah menambahkan akun utama root ke KDC. Untuk tujuan keamanan, setelah membuat cluster, Anda dapat memutuskan untuk menghapus file sandi dan kunci yang digunakan untuk mendekripsi secret, serta menghapus akun layanan dari peran kmsKeyDecrypter. Jangan lakukan ini jika Anda berencana menskalakan cluster, yang memerlukan file dan kunci sandi, serta peran akun layanan.

REST API

Cluster Kerberos dapat dibuat melalui ClusterConfig.SecurityConfig.KerberosConfig sebagai bagian dari permintaan clusters.create. Tetapkan enableKerberos ke true dan tetapkan kolom rootPrincipalPasswordUri dan kmsKeyUri.

Konsol

Saat membuat cluster dengan versi image 1.3+, pilih "Enable" dari bagian Kerberos dan Hadoop Secure Mode di panel Manage security di halaman Dataproc Create a cluster di konsol Google Cloud, lalu lengkapi opsi keamanan (dibahas di bagian berikut).

Login OS

Pengelolaan KDC di cluster dapat dilakukan dengan perintah kadmin menggunakan akun utama pengguna Kerberos root atau menggunakan sudo kadmin.local. Aktifkan Login OS untuk mengontrol siapa yang dapat menjalankan perintah superuser.

Sertifikat SSL

Sebagai bagian dari pengaktifan Hadoop Secure Mode, Dataproc membuat sertifikat yang ditandatangani sendiri untuk mengaktifkan enkripsi SSL cluster. Sebagai alternatif, Anda dapat memberikan sertifikat untuk enkripsi SSL cluster dengan menambahkan setelan berikut ke file konfigurasi saat membuat cluster kerberos:

  • ssl:keystore_password_uri: Lokasi di Cloud Storage untuk file yang dienkripsi dengan KMS yang berisi sandi ke file keystore.
  • ssl:key_password_uri: Lokasi di Cloud Storage untuk file yang dienkripsi dengan KMS yang berisi sandi untuk kunci dalam file keystore.
  • ssl:keystore_uri: Lokasi file keystore di Cloud Storage yang berisi sertifikat karakter pengganti dan kunci pribadi yang digunakan oleh node cluster.
  • ssl:truststore_password_uri: Lokasi di Cloud Storage untuk file yang dienkripsi dengan KMS yang berisi sandi ke file truststore.
  • ssl:truststore_uri: Lokasi file trust store di Cloud Storage yang berisi sertifikat tepercaya.

Contoh file konfigurasi:

root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted
kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
ssl:
  key_password_uri: gs://bucket/key_password.encrypted
  keystore_password_uri: gs://bucket/keystore_password.encrypted
  keystore_uri: gs://bucket/keystore.jks
  truststore_password_uri: gs://bucket/truststore_password.encrypted
  truststore_uri: gs://bucket/truststore.jks

Setelan Kerberos Tambahan

Untuk menentukan realm Kerberos, buat cluster kerberos dengan properti berikut yang ditambahkan di file konfigurasi Kerberos:

  • realm: Nama realm Kerberos di cluster.

Jika properti ini tidak ditetapkan, domain nama host (dalam huruf besar) akan menjadi realm.

Untuk menentukan kunci master database KDC, buat cluster kerberos dengan properti berikut yang ditambahkan di file konfigurasi Kerberos:

  • kdc_db_key_uri: Lokasi di Cloud Storage untuk file yang dienkripsi KMS yang berisi kunci master database KDC.

Jika properti ini tidak ditetapkan, Dataproc akan membuat kunci master.

Untuk menentukan masa aktif maksimum tiket pemberian tiket (dalam jam), buat cluster kerberos dengan properti berikut yang ditambahkan di file konfigurasi Kerberos:

  • tgt_lifetime_hours: Masa berlaku maksimum tiket pemberian tiket dalam jam.

Jika properti ini tidak ditetapkan, Dataproc akan menetapkan masa berlaku tiket pemberian tiket menjadi 10 jam.

Kepercayaan lintas-lingkup

KDC di cluster pada awalnya hanya berisi akun utama administrator root dan akun utama layanan. Anda dapat menambahkan akun utama pengguna secara manual atau menetapkan kepercayaan lintas-lingkungan dengan KDC eksternal atau server Active Directory yang menyimpan akun utama pengguna. Cloud VPN atau Cloud Interconnect direkomendasikan untuk terhubung ke KDC/Active Directory lokal.

Untuk membuat cluster kerberos yang mendukung kepercayaan lintas-realm, tambahkan setelan yang tercantum di bawah ke file konfigurasi Kerberos saat Anda membuat cluster kerberos. Enkripsi sandi bersama dengan KMS dan simpan di bucket Cloud Storage yang dapat diakses oleh akun layanan cluster.

  • cross_realm_trust:admin_server: nama host/alamat server admin jarak jauh.
  • cross_realm_trust:kdc: nama host/alamat KDC jarak jauh.
  • cross_realm_trust:realm: nama realm jarak jauh yang akan dipercaya.
  • cross_realm_trust:shared_password_uri: Lokasi sandi bersama terenkripsi KMS di Cloud Storage.

Contoh file konfigurasi:

root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted
kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
cross_realm_trust:
  admin_server: admin.remote.realm
  kdc: kdc.remote.realm
  realm: REMOTE.REALM
  shared_password_uri: gs://bucket/shared_password.encrypted

Untuk mengaktifkan kepercayaan lintas-realm ke KDC jarak jauh:

  1. Tambahkan kode berikut di file /etc/krb5.conf di KDC jarak jauh:

    [realms]
    DATAPROC.REALM = {
      kdc = MASTER-NAME-OR-ADDRESS
      admin_server = MASTER-NAME-OR-ADDRESS
    }

  2. Buat pengguna kepercayaan:

    kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
    

  3. Jika diminta, masukkan sandi pengguna. Sandi harus cocok dengan isi file sandi bersama terenkripsi

Untuk mengaktifkan kepercayaan lintas-realm dengan Active Directory, jalankan perintah berikut di PowerShell sebagai Administrator:

  1. Buat definisi KDC di Active Directory.

    ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
    

  2. Buat kepercayaan di Active Directory.

    netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
    
    Sandi harus cocok dengan konten file sandi bersama terenkripsi.

Akun utama dataproc

Saat Anda mengirimkan tugas melalui jobs API Dataproc ke cluster kerberos Dataproc, tugas tersebut akan berjalan sebagai akun utama Kerberos dataproc dari realm kerberos cluster.

Multi-tenancy didukung dalam cluster kerberos Dataproc jika Anda mengirimkan tugas secara langsung, ke cluster, misalnya melalui SSH. Namun, jika tugas membaca atau menulis ke layanan Google Cloud lainnya, seperti Cloud Storage, tugas tersebut akan bertindak sebagai akun layanan cluster.

Properti Cluster Default dan Kustom

Mode aman Hadoop dikonfigurasi dengan properti dalam file konfigurasi. Dataproc menetapkan nilai default untuk properti ini.

Anda dapat mengganti properti default saat membuat cluster dengan flag --properties gcloud dataproc clusters create atau dengan memanggil API clusters.create dan menetapkan properti SoftwareConfig (lihat contoh properti cluster).

Mode Ketersediaan Tinggi

Dalam mode Ketersediaan Tinggi (HA), cluster kerberos akan memiliki 3 KDC: satu di setiap master. KDC yang berjalan di master "pertama" ($CLUSTER_NAME-m-0) akan menjadi KDC Master dan juga berfungsi sebagai Server Admin. Database Master KDC akan disinkronkan ke dua KDC replika dengan interval 5 menit melalui tugas cron, dan 3 KDC akan menyalurkan traffic baca.

Kerberos secara native tidak mendukung replikasi real-time atau failover otomatis jika KDC master tidak aktif. Untuk melakukan failover manual:

  1. Di semua komputer KDC, di /etc/krb5.conf, ubah admin_server menjadi FQDN Master yang baru (Nama Domain yang Sepenuhnya Memenuhi Syarat). Hapus Master lama dari daftar KDC.
  2. Di Master KDC baru, siapkan tugas cron untuk menyebarkan database.
  3. Di Master KDC baru, mulai ulang proses admin_server (krb5-admin-server).
  4. Di semua mesin KDC, mulai ulang proses KDC (krb5-kdc).

Konfigurasi Jaringan

Untuk memastikan node pekerja dapat berkomunikasi dengan KDC dan Server Admin Kerberos yang berjalan di master, pastikan aturan firewall VPC mengizinkan traffic TCP dan UDP masuk di port 88 dan traffic TCP masuk di port 749 di master. Dalam mode High-Availability, pastikan aturan firewall VPC mengizinkan traffic TCP masuk di port 754 pada master untuk mengizinkan penyebaran perubahan yang dilakukan ke KDC master. Kerberos memerlukan DNS terbalik yang disiapkan dengan benar. Selain itu, untuk kanonisasi akun utama layanan berbasis host, pastikan DNS terbalik disiapkan dengan benar untuk jaringan cluster.

Untuk Informasi Selengkapnya

Lihat Dokumentasi Kerberos MIT.