Saat membuat cluster Managed Service untuk Apache Spark, Anda dapat mengaktifkan Mode Aman Hadoop melalui Kerberos untuk menyediakan multi-tenancy melalui autentikasi, isolasi, dan enkripsi pengguna di dalam cluster Managed Service untuk Apache Spark.
Autentikasi Pengguna dan Layanan Google Cloud Platform Lainnya. Autentikasi per pengguna menggunakan Kerberos hanya berlaku dalam cluster. Interaksi dengan layanan lain Google Cloud , seperti Cloud Storage, akan terus diautentikasi sebagai akun layanan untuk cluster.
Mengaktifkan Mode Aman Hadoop menggunakan Kerberos
Mengaktifkan Mode Aman Kerberos dan Hadoop untuk cluster akan menyertakan distribusi Kerberos MIT dan mengonfigurasi Apache Hadoop YARN, HDFS, Hive, Spark, dan komponen terkait untuk menggunakannya dalam autentikasi.
Mengaktifkan Kerberos akan membuat Key Distribution Center (KDC) on-cluster , yang berisi akun utama layanan dan akun utama root. Akun utama root adalah akun dengan izin administrator ke KDC on-cluster. Akun ini 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, Managed Service untuk Apache Spark API, atau Google Cloud konsol untuk mengaktifkan Kerberos di cluster yang menggunakan Managed Service untuk Apache Spark versi image 1.3 dan yang lebih baru.
Perintah gcloud
Untuk mengonfigurasi cluster Managed Service untuk Apache Spark Kerberos baru secara otomatis (versi image
1.3 dan yang lebih baru), gunakan gcloud dataproc clusters create
perintah.
gcloud dataproc clusters create cluster-name \ --image-version=2.0 \ --enable-kerberos
Properti cluster: Daripada menggunakan flag --enable-kerberos
seperti yang ditunjukkan dalam contoh sebelumnya, Anda dapat mengonfigurasi
Kerberos secara otomatis dengan meneruskan
flag --properties "dataproc:kerberos.beta.automatic-config.enable=true"
ke perintah pembuatan cluster
(lihat
Properti Managed Service untuk Apache Spark).
REST API
Cluster Kerberos dapat dibuat melalui
ClusterConfig.SecurityConfig.KerberosConfig
sebagai bagian dari
clusters.create. Anda harus menetapkan enableKerberos ke true.
Konsol
Anda dapat mengonfigurasi Kerberos secara otomatis di cluster baru dengan memilih "Enable" dari bagian Kerberos and Hadoop Secure Mode pada panel Manage security di halaman Create a cluster Managed Service untuk Apache Spark di Google Cloud konsol.
Membuat cluster Kerberos dengan sandi akun utama root Anda sendiri
Siapkan sandi akun utama root Kerberos Anda, lalu buat cluster.
Menyiapkan sandi akun utama root Kerberos Anda
Akun utama root Kerberos adalah akun dengan izin administrator ke KDC on-cluster. Untuk memberikan sandi akun utama root Kerberos dengan aman, 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
cloudkms.cryptoKeyDecrypter peran IAM.
Berikan peran CryptoKey Encrypter/Decrypter 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
Buat key ring:
gcloud kms keyrings create my-keyring --location global
Buat kunci di key ring:
gcloud kms keys create my-key \ --location global \ --keyring my-keyring \ --purpose encryption
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
- Upload sandi terenkripsi ke a
bucket Cloud Storage di project Anda.
- Contoh:
gcloud storage cp kerberos-root-principal-password.encrypted gs://my-bucket
- Contoh:
- Upload sandi terenkripsi ke a
bucket Cloud Storage di project Anda.
Membuat cluster
Anda dapat menggunakan perintah gcloud atau Managed Service untuk Apache Spark API untuk mengaktifkan Kerberos di cluster dengan sandi akun utama root Anda sendiri.
Perintah gcloud
Untuk membuat cluster Managed Service untuk Apache Spark 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.
- 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
- Gunakan perintah
gcloudberikut 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. Managed Service untuk Apache Spark akan menghapus 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 hal ini jika Anda berencana untuk meningkatkan skala cluster, yang memerlukan file sandi dan kunci, serta peran akun layanan.
REST API
Cluster Kerberos dapat dibuat melalui
ClusterConfig.SecurityConfig.KerberosConfig
sebagai bagian dari
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 and Hadoop Secure Mode pada panel Manage security di halaman Create a cluster Managed Service untuk Apache Spark di Google Cloud konsol, lalu lengkapi opsi keamanan (dibahas di bagian berikut).
Login OS
Pengelolaan KDC on-cluster dapat dilakukan dengan perintah kadmin menggunakan akun utama pengguna root Kerberos atau menggunakan sudo kadmin.local.
Aktifkan Login OS
untuk mengontrol siapa yang dapat menjalankan perintah superuser.
Sertifikat SSL
Sebagai bagian dari pengaktifan Mode Aman Hadoop, Managed Service untuk Apache Spark akan 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 Anda membuat cluster kerberos:
ssl:keystore_password_uri: Lokasi di Cloud Storage dari file terenkripsi KMS yang berisi sandi ke file keystore.ssl:key_password_uri: Lokasi di Cloud Storage dari file terenkripsi KMS yang berisi sandi ke kunci dalam file keystore.ssl:keystore_uri: Lokasi di Cloud Storage dari file keystore yang berisi sertifikat karakter pengganti dan kunci pribadi yang digunakan oleh node cluster.ssl:truststore_password_uri: Lokasi di Cloud Storage dari file terenkripsi KMS yang berisi sandi ke file truststore.ssl:truststore_uri: Lokasi di Cloud Storage dari file trust store 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 dalam file konfigurasi Kerberos :
realm: Nama realm Kerberos on-cluster.
Jika properti ini tidak ditetapkan, domain hostname (dalam huruf besar) akan menjadi realm.
Untuk menentukan kunci master database KDC, buat cluster kerberos dengan properti berikut yang ditambahkan dalam file konfigurasi Kerberos :
kdc_db_key_uri: Lokasi di Cloud Storage dari file terenkripsi KMS yang berisi kunci master database KDC.
Jika properti ini tidak ditetapkan, Managed Service untuk Apache Spark akan membuat kunci master.
Untuk menentukan masa berlaku maksimum tiket autentikasi (dalam jam), buat cluster kerberos dengan properti berikut yang ditambahkan dalam file konfigurasi Kerberos:
tgt_lifetime_hours: Masa berlaku maksimum tiket autentikasi dalam jam.
Jika properti ini tidak ditetapkan, Managed Service untuk Apache Spark akan menetapkan masa berlaku tiket autentikasi menjadi 10 jam.
Kepercayaan lintas realm
KDC di cluster awalnya hanya berisi akun utama administrator root dan akun utama layanan. Anda dapat menambahkan akun utama pengguna secara manual atau menetapkan kepercayaan lintas realm dengan KDC eksternal atau server Active Directory yang berisi 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 berikut 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: hostname atau alamat server admin jarak jauhcross_realm_trust:kdc: hostname atau alamat KDC jarak jauhcross_realm_trust:realm: nama realm jarak jauh yang akan dipercayacross_realm_trust:shared_password_uri: Lokasi di Cloud Storage dari sandi bersama terenkripsi KMS
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, ikuti langkah-langkah berikut:
Tambahkan kode berikut di file
/etc/krb5.confdi KDC jarak jauh:[realms] DATAPROC.REALM = { kdc = MASTER-NAME-OR-ADDRESS admin_server = MASTER-NAME-OR-ADDRESS }
Buat pengguna kepercayaan:
kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
Jika diminta, masukkan sandi pengguna. Sandi harus cocok dengan konten file sandi bersama terenkripsi
Untuk mengaktifkan kepercayaan lintas realm dengan Active Directory, jalankan perintah berikut di PowerShell sebagai Administrator:
Buat definisi KDC di Active Directory.
ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
Buat kepercayaan di Active Directory.
Sandi harus cocok dengan konten file sandi bersama terenkripsi.netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
Akun utama dataproc
Saat Anda mengirimkan tugas menggunakan Managed Service untuk Apache Spark
jobs API
ke cluster kerberos Managed Service untuk Apache Spark, tugas tersebut akan berjalan sebagai akun utama kerberos dataproc
dari realm kerberos cluster.
Multi-tenancy didukung dalam cluster kerberos Managed Service untuk Apache Spark jika Anda mengirimkan tugas secara langsung, ke cluster, misalnya menggunakan SSH. Namun, jika tugas membaca atau menulis ke layanan Google Cloud lain, 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. Managed Service untuk Apache Spark menetapkan nilai default untuk properti ini.
Anda dapat mengganti properti default saat membuat cluster dengan flag
gcloud dataproc clusters create
--properties 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 KDC master akan disinkronkan ke dua KDC replika dengan interval 5 menit melalui cron job, dan 3 KDC akan melayani traffic baca.
Kerberos tidak mendukung replikasi real-time atau failover otomatis secara native jika KDC master tidak berfungsi. Untuk melakukan failover manual:
- Di semua mesin KDC, di
/etc/krb5.conf, ubahadmin_serverke FQDN (Fully Qualified Domain Name) master baru. Hapus master lama dari daftar KDC. - Di KDC master baru, siapkan cron job untuk menyebarkan database.
- Di KDC master baru, mulai ulang proses admin_server (
krb5-admin-server). - 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 Ketersediaan Tinggi, pastikan aturan firewall VPC mengizinkan traffic TCP masuk di port 754 di master untuk memungkinkan penyebaran perubahan yang dilakukan pada KDC master. Kerberos memerlukan DNS terbalik untuk disiapkan dengan benar. Selain itu, untuk kanonisasi akun utama layanan berbasis host, pastikan DNS terbalik disiapkan dengan benar untuk jaringan cluster.
Langkah berikutnya
- Lihat dokumentasi MIT Kerberos.