Penggunaan User Impersonation pada Apache Zeppelin

user-impersonation-apache-zeppelin

Apache Zeppelin adalah sebuah editor kode berbasis web atau dikenal dengan sebutan notebook. Notebook digunakan untuk memudahkan dalam melakukan analisa data secara interaktif dan story telling menggunakan data. Apache Zeppelin mendukung berbagai bahasa pemrograman dan scripting seperti SQL. Python, Scala dan masih banyak lagi.

Apache Zeppelin juga mendukung penggunaan untuk lebih dari satu user (multiple-user environment). Namun dalam kondisi default, Apache Zeppelin mengeksekusi kode atau job ke dalam hadoop cluster menggunakan user zeppelin, walaupun ketika masuk ke dalam aplikasi Zeppelin telah menggunakan user account masing-masing. Hal ini tentu tidak sesuai dengan kaidah keamanan yang umum diterapkan.

Untuk memenuhi kaidah data governance dan keamanan, setiap job, kode, atau aplikasi harus dijalankan menggunakan user credential yang sesuai agar setiap pengguna hanya mengakses sesuai dengan hak yang telah diberikan. Hak ini mencakup otorisasi ke folder dan file tertentu, privilege untuk create, akses, maupun edit tabel dan database, bahkan sampai alokasi resource oleh YARN. Hal ini akan sulit dilakukan jika semua job atau kode dijalankan dengan menggunakan satu user account yang sama. Fitur user impersonation pada Apache Zeppelin memungkinkan untuk melakukan eksekusi kode ke dalam hadoop cluster menggunakan masing-masing user account.

Dalam artikel ini akan dibahas mengenai cara melakukan konfigurasi user impersonation pada interpreter Shell, Hive dan Spark. Pada tutorial ini Apache Zeppelin terinstall pada Yava247 Data Management Platform. Akan tetapi semua langkah-langkah yang dijelaskan dapat diterapkan untuk Apache Zeppelin pada umumnya.

 

Membuat User Account

Tutorial ini menggunakan Yava247 Data Management Platform yang tidak dikonfigurasi pada secure cluster. Sebelum membuat user account pada Zeppelin pastikan :

  1. Buat user account pada OS yang akan digunakan pada Apache Zeppelin. Misalkan user account yang dibuat adalah user01
  2. Pastikan user01 memiliki hak akses HDFS dan memiliki home directory pada HDFS
  3. Pastikan user01 memiliki hak untuk mengakses Apache Hive
  4. Pastikan user01 memiliki hak untuk mengakses Apache Spark

 

Membuat User Account Pada Zeppelin

Sebelum membuat user account pada zeppelin, kita membutuhkan shiro-tools-hasher-1.3.2-cli.jar untuk membuat password yang terenkripsi. File tersebut dapat didownload melalui link ini.

Untuk membuat password dengan menggunakan tools ini dapat dilakukan dengan perintah dibawah ini

java -jar shiro-tools-hasher-1.3.2-cli.jar -p

Password akan terenkripsi menggunakan SHA-256 dan bentuknya seperti berikut

$shiro1$SHA-256$500000$qyhwv2FYjn0pPs8nme62rg==$IbFf9/e9BISg4Bq721N0t1KDUhWm5H0ZZf9KccSJBcw=

 

Untuk membuat user account baru pada Zeppelin dapat dilakukan dengan cara mengedit file shiro.ini. Pada Yava247 Data Management Platform dapat dilakukan melalui Apache Ambari dengan memilih  Zeppelin Notebook > Configs > Advanced zeppelin-shiro-ini

 

zeppelin-shiro-ini
Gambar - Konfigurasi shiro.ini pada Apache Ambari

 

Format umum untuk definisi user account pada Zeppelin adalah:

<user-name> = <encrypted-password>,<role>

 

Untuk menambahkan user01 dengan role1, tambahkan kode berikut pada bagian user pada konfigurasi shiro.ini

user01 = $shiro1$SHA-256$500000$qyhwv2FYjn0pPs8nme62rg==$IbFf9/e9BISg4Bq721N0t1KDUhWm5H0ZZf9KccSJBcw=,role1

Setelah disimpan, dan merestart service Apache Zeppelin, masuk ke Apache Zeppelin notebook dengan menggunakan user01 yang baru dibuat tadi.

Buat notebook baru untuk menguji user account yang digunakan dengan menggunakan shell interpreter

 

 zeppelin-whoami-zeppelin
Gambar - Eksekusi perintah whoami tanpa user impersonation

 

Terlihat diatas bahwa user account yang digunakan untuk operasi shell bukan user01, melainkan zeppelin. Ini menandakan bahwa Zeppelin belum dikonfigurasi untuk menggunakan user impersonation

 

User Impersonation Untuk Shell Interpreter

Untuk mengaktifkan user impersonation, edit file zeppelin-env.sh. Pada Yava247 Data Management Platform dapat dilakukan melalui Apache Ambari, yaitu dengan memilih Services > Zeppelin Notebook > Configs > Advanced zeppelin-env
Tambahkan kode berikut pada bagian bawah

export ZEPPELIN_IMPERSONATE_CMD='sudo -H -u ${ZEPPELIN_IMPERSONATE_USER} bash -c '

 

 zeppelin-env-config
Gambar - Konfigurasi zeppelin-env.sh pada Ambari

 

Simpan perubahannya dan restart Apache Zeppelin.

Tambahkan hak akses untuk melakukan sudoers pada user account yang digunakan untuk mengaktifkan Apache Zeppelin server, pada artikel ini menggunakan zeppelin. Tambahkan kode berikut pada file /etc/sudoers

zeppelin ALL=(ALL) NOPASSWD: ALL

 

Login ke Apache Zeppelin notebook menggunakan user admin, dan lakukan perubahan pada opsi shell interpreter:

  • Binding option = per user / isolated
  • User impersonate = true

Pastikan juga untuk properti  shell interpreter:  

  • working.directory.user.home = true

Simpan perubahan tersebut dan restart shell interpreter.

Lakukan uji coba dengan login ke  Apache Zeppelin notebook, dan jalankan perintah berikut dengan menggunakan shell interpreter

 

 zeppelin-whoami-user01
Gambar - Eksekusi perintah whoami dengan user impersonation

 

 

User Impersonation Untuk Hive Interpreter

Hive interpreter merupakan turunan dari JDBC interpreter yang khusus dikonfigurasi untuk terkoneksi pada Apache Hive. Biasanya Hive interpreter dibuat untuk mempermudah penggunaan pada notebook dalam menggunakan kode SQL untuk mengakses data pada Apache Hive.

Langkah ini merupakan kelanjutan dari langkah user impersonation sebelumnya, dan diasumsikan bahwa Hive interpreter telah terkonfigurasi dengan baik.

Login ke Apache Ambari, kemudian pilih Services > HDFS > Configs > Advanced > Custom Core Site. Tambahkan konfigurasi berikut pada Custom Core Site

  • hadoop.proxyuser.zeppelin.groups = *
  • hadoop.proxyuser.zeppelin.hosts = *

Restart semua service yang terpengaruh oleh perubahan konfigurasi tersebut sesuai yang disarankan oleh Ambari.

Lakukan perubahan pada hive interpreter untuk konfigurasi berikut

  • Binding option = per user / isolated
  • User impersonate = true
  • default.proxy.user.property = hive.server2.proxy.user
  • zeppelin.jdbc.auth.type = SIMPLE
  • default.user = hive

Simpan dan restart hive interpreter.

Masuk kembali ke Apache Zeppelin notebook dengan menggunakan user01, dan jalankan perintah berikut pada notebook untuk mengetahui user account yang terkoneksi ke Hive.

 

hive-user-connection
Gambar - Koneksi ke Apache Hive menggunakan user impersonation

 

 

User Impersonation Untuk Spark Interpreter

Jika telah melakukan langkah-langkah User Impersonation untuk Shell dan Hive, maka untuk user impersonation pada spark interpreter, pastikan konfigurasi spark interpreter terkonfigurasi seperti dibawah ini

  • Binding option = per user / isolated
  • User impersonate = true

Jalankan perintah berikut dengan menggunakan untuk menguji bahwa user impersonation untuk spark interpreter telah bekerja dengan baik

%spark2.pyspark
print("Spark version : " + spark.version)


Buka resource manager, urlnya bisa dilihat pada Ambari > Services > Yarn > Quick Links > ResourceManager UI

spark-resource-manager
Gambar - Eksekusi kode PySpark pada Resource Manager

 

Terlihat pada Resource Manager, user account yang digunakan pada Zeppelin adalah user01

 

Penutup

Demikian tutorial mengenai konfigurasi user impersonation Apache Zeppelin untuk Shell, Hive dan Spark interpreter. Walaupun Apache Zeppelin yang digunakan adalah versi dari Yava247 Data Management Platform, akan tetapi langkah-langkah yang telah dijelaskan diatas dapat diimplementasikan pada Apache Zeppelin secara umum.