Mengonfigurasi Kerberos untuk endpoint Thrift Dataproc Metastore

Halaman ini menjelaskan cara mengonfigurasi Kerberos untuk layanan Dataproc Metastore yang menggunakan protokol endpoint Thrift. Jika layanan Dataproc Metastore Anda menggunakan protokol endpoint gRPC, lihat Mengonfigurasi Kerberos untuk endpoint gRPC.

Sebelum memulai

  • Memahami dasar-dasar Kerberos.

    Dalam petunjuk ini, Anda menggunakan cluster Managed Service untuk Apache Spark untuk membuat aset Kerberos berikut:

    • File Keytab.
    • File krb5.conf.
    • Akun utama Kerberos.

    Untuk mengetahui informasi selengkapnya tentang cara kerja aset Kerberos ini dengan layanan Dataproc Metastore, lihat Tentang Kerberos.

  • Buat dan hosting KDC Kerberos Anda sendiri atau pelajari cara menggunakan KDC lokal cluster Managed Service untuk Apache Spark.

  • Buat bucket Cloud Storage atau dapatkan akses ke bucket yang sudah ada. Anda harus menyimpan file krb5.conf di bucket ini.

Pertimbangan jaringan

Sebelum mengonfigurasi Kerberos, pertimbangkan setelan jaringan berikut:

  • Siapkan koneksi IP antara jaringan VPC dan KDC Anda. Anda harus melakukannya untuk mengautentikasi file KDC dengan layanan Dataproc Metastore.

  • Siapkan Aturan firewall yang diperlukan di KDC Anda. Aturan ini diperlukan untuk mengizinkan traffic dari Dataproc Metastore. Untuk mengetahui informasi selengkapnya, lihat Aturan firewall untuk layanan Anda.

  • Jika Anda menggunakan Kontrol Layanan VPC, maka secret Secret Manager dan objek Cloud Storage krb5.conf harus dimiliki oleh project yang berada di perimeter layanan yang sama dengan layanan Dataproc Metastore.

  • Tentukan jaringan peering VPC yang ingin Anda gunakan. Anda harus mengonfigurasi cluster Managed Service untuk Apache Spark dan layanan Dataproc Metastore dengan jaringan peering VPC yang sama.

Peran yang Diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk membuat Dataproc Metastore dengan Kerberos, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda, berdasarkan prinsip hak istimewa terendah:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran yang telah ditentukan ini berisi izin metastore.services.create , yang diperlukan untuk membuat Dataproc Metastore dengan Kerberos.

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Untuk mengetahui informasi selengkapnya tentang peran dan izin Dataproc Metastore tertentu, lihat Mengelola akses dengan IAM.

Untuk mengetahui informasi selengkapnya, lihat IAM dan kontrol akses Dataproc Metastore.

Mengaktifkan Kerberos untuk Dataproc Metastore

Petunjuk berikut menunjukkan cara mengonfigurasi Kerberos untuk layanan Dataproc Metastore yang terlampir ke cluster Managed Service untuk Apache Spark.

Membuat cluster Managed Service untuk Apache Spark dan mengaktifkan Kerberos

gcloud

Untuk menyiapkan cluster Managed Service untuk Apache Spark dengan Kerberos, jalankan perintah gcloud dataproc clusters create berikut:

gcloud dataproc clusters create CLUSTER_NAME \
    --image-version=2.0 \
    --enable-kerberos \
    --scopes 'https://www.googleapis.com/auth/cloud-platform'

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster Managed Service untuk Apache Spark Anda.

Mengonfigurasi cluster Managed Service untuk Apache Spark untuk Kerberos

Petunjuk berikut menunjukkan cara menggunakan SSH untuk terhubung ke cluster utama Managed Service untuk Apache Spark yang terkait dengan layanan Dataproc Metastore Anda.

Setelah itu, Anda akan mengubah file hive-site.xml dan mengonfigurasi Kerberos untuk layanan Anda.

  1. Di Google Cloud konsol, buka halaman Instance VM.
  2. Dalam daftar instance virtual machine, klik SSH di baris node utama Managed Service untuk Apache Spark (your-cluster-name-m).

    Jendela browser akan terbuka di direktori utama Anda di node.

  3. Buka file /etc/hive/conf/hive-site.xml.

    sudo vim /etc/hive/conf/hive-site.xml
    

    Anda akan melihat output yang mirip dengan berikut ini:

    <property>
    <name>hive.metastore.kerberos.principal</name>
    <value>PRINCIPAL_NAME</value>
    </property>
    <property>
    <name>hive.metastore.kerberos.keytab.file</name>
    <value>METASTORE_PRINCIPAL_KEYTAB</value>
    </property>
    

    Ganti:

    • PRINCIPAL_NAME: Nama utama, dalam format berikut primary/instance@REALM. Misalnya, hive/test@C.MY-PROJECT.INTERNAL.
    • METASTORE_PRINCIPAL_KEYTAB: lokasi file keytab Hive Metastore Anda. Gunakan nilai berikut /etc/security/keytab/metastore.service.keytab.

Membuat file keytab

Petunjuk berikut menunjukkan cara membuat file keytab.

File keytab berisi sepasang akun utama Kerberos dan sepasang kunci terenkripsi. File ini digunakan untuk mengautentikasi akun utama layanan dengan KDC Kerberos.

Untuk membuat file keytab

  1. Dalam sesi SSH Managed Service untuk Apache Spark, buat keytab dan akun utama.

    sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
    sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
    
  2. Dalam sesi SSH Managed Service untuk Apache Spark, buat dan upload file keytab ke Secret Manager.

    gcloud secrets create SECRET_NAME --replication-policy automatic
    sudo gcloud secrets versions add SECRET_NAME --data-file /etc/security/keytab/metastore.service.keytab

    Ganti kode berikut:

    • SECRET_NAME: nama secret Anda.

Memperbarui file krb5.conf

Selanjutnya, Anda harus memperbarui file krb5.conf untuk mengaitkannya dengan cluster Managed Service untuk Apache Spark Anda.

  1. Tentukan alamat IP internal utama instance utama cluster Managed Service untuk Apache Spark.

    gcloud compute instances list
    

    Misalnya, menjalankan perintah ini akan menghasilkan output yang serupa:

    ~$ gcloud compute instances list --project kerberos-project
    NAME                                                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP    EXTERNAL_IP     STATUS
    cluster-236-m                                        us-central1-c  n2-standard-4               192.0.2.2      *.*.*.*         RUNNING
    ...
    

    Dalam hal ini, alamat IP internal cluster adalah 192.0.2.2.

  2. Buka file krb5.conf.

    sudo vim /etc/krb5.conf
    
  3. Dalam file, ganti parameter KDC dan parameter admin_server yang ada dengan alamat IP internal cluster Managed Service untuk Apache Spark Anda.

    Misalnya, menggunakan nilai alamat IP dari langkah sebelumnya akan terlihat mirip dengan output ini.

    [realms]
    US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
       kdc = 192.0.2.2
       admin_server = 192.0.2.2
    }
    
  4. Upload file /etc/krb5.conf dari VM utama Managed Service untuk Apache Spark ke bucket Cloud Storage Anda.

    gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5
    

    Ganti:

    • PATH_TO_KRB5: URI Cloud Storage yang berisi file krb5.conf Anda.

    Setelah upload selesai, salin jalur upload. Anda harus menggunakannya saat membuat layanan Dataproc Metastore.

Memberikan peran dan izin IAM

  1. Berikan akun layanan Dataproc Metastore izin untuk mengakses file keytab. Akun ini dikelola Google dan tercantum di halaman UI izin IAM dengan memilih Include Google-provided role grants.

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
          --role roles/secretmanager.secretAccessor

  2. Berikan akun layanan Dataproc Metastore izin untuk mengakses file krb5.conf.

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
          --role roles/storage.objectViewer

Membuat layanan Dataproc Metastore dengan Kerberos

Buat layanan Dataproc Metastore baru yang dikonfigurasi dengan file Kerberos Anda.

Pastikan Anda membuat layanan di jaringan VPC sebagai cluster Managed Service untuk Apache Spark Anda.

gcloud metastore services create SERVICE \
   --location=LOCATION \
   --instance-size=medium \
   --network=VPC_NETWORK \
   --kerberos-principal=KERBEROS_PRINCIPAL \
   --krb5-config=KRB5_CONFIG \
   --keytab=CLOUD_SECRET

Ganti kode berikut:

  • SERVICE: nama layanan Dataproc Metastore Anda.
  • LOCATION: lokasi layanan Dataproc Metastore Anda.
  • VPC_NETWORK: nama jaringan VPC Anda. Gunakan jaringan yang sama yang dikonfigurasi di cluster Managed Service untuk Apache Spark Anda.
  • KERBEROS_PRINCIPAL: nama akun utama Kerberos yang Anda buat sebelumnya.
  • KRB5_CONFIG: lokasi file krb5.conf. Gunakan URI objek Cloud Storage yang mengarah ke file Anda.
  • CLOUD_SECRET: nama resource relatif dari versi secret Secret Manager Secret Manager.

Setelah Anda membuat cluster, Dataproc Metastore akan mencoba terhubung dengan kredensial Kerberos Anda menggunakan file akun utama, keytab, dan krb5.conf yang disediakan. Jika koneksi gagal, pembuatan Dataproc Metastore juga akan gagal.

Setelah layanan Dataproc Metastore dibuat, temukan URI endpoint Thrift dan direktori warehouse Anda.

  1. SSH ke instance utama cluster Managed Service untuk Apache Spark Anda.

  2. Dalam sesi SSH, buka file /etc/hive/conf/hive-site.xml.

    sudo vim /etc/hive/conf/hive-site.xml
    
  3. Ubah /etc/hive/conf/hive-site.xml di cluster Managed Service untuk Apache Spark.

    <property>
    <name>hive.metastore.uris</name>
    <!-- Update this value. -->
    <value>ENDPOINT_URI</value>
    </property>
    <!-- Add this property entry. -->
    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>WAREHOUSE_DIR</value>
    </property>
    
  4. Mulai ulang HiveServer2:

    sudo systemctl restart hive-server2.service
    

Mengonfigurasi Managed Service untuk Apache Spark sebelum mengirimkan tugas

Untuk menjalankan tugas Managed Service untuk Apache Spark, Anda harus menambahkan pengguna hive ke properti allowed.system.users dalam file container-executor.cfg Hadoop. Hal ini memungkinkan pengguna menjalankan kueri untuk mengakses data, seperti select * from.

  1. Dalam sesi SSH, buka file container-executor.cfg Hadoop.

    sudo vim /etc/hadoop/conf/container-executor.cfg
    

    Tambahkan baris berikut di setiap node Managed Service untuk Apache Spark.

    allowed.system.users=hive
    

Mendapatkan tiket Kerberos

  1. Dapatkan tiket Kerberos, sebelum terhubung ke instance Dataproc Metastore.

    sudo klist -kte /etc/security/keytab/metastore.service.keytab
    sudo kinit -kt /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME
    sudo klist # gets the ticket information.
    sudo hive
    

    Ganti kode berikut:

    • PRINCIPAL_NAME: nama akun utama Anda.

Langkah berikutnya