Dengan konfigurasi Apache HBase default, semua orang diizinkan untuk membaca dan menulis ke semua tabel yang tersedia di sistem. Untuk banyak penyiapan perusahaan, kebijakan semacam ini tidak dapat diterima.
Administrator dapat menyiapkan firewall yang memutuskan mesin mana yang diizinkan untuk berkomunikasi dengan HBase. Namun, mesin yang dapat melewati firewall masih diizinkan untuk membaca dan menulis ke semua tabel. Mekanisme semacam ini efektif tetapi tidak cukup karena HBase masih tidak dapat membedakan antara banyak pengguna yang menggunakan mesin klien yang sama, dan masih belum ada perincian terkait dengan tabel HBase, kelompok kolom, atau akses kualifikasi kolom.
Dalam postingan ini, kita akan membahas bagaimana Kerberos digunakan dengan Hadoop dan HBase untuk memberikan Otentikasi Pengguna , dan bagaimana HBase mengimplementasikan Otorisasi Pengguna untuk memberikan izin kepada pengguna untuk tindakan tertentu pada kumpulan data tertentu.
HBase Aman:Otentikasi &Otorisasi
HBase yang aman bertujuan untuk melindungi dari sniffer, pengguna yang tidak diautentikasi/tidak sah, dan serangan berbasis jaringan. Itu tidak melindungi dari pengguna resmi yang secara tidak sengaja menghapus semua data.
HBase dapat dikonfigurasi untuk memberikan Otentikasi Pengguna , yang memastikan bahwa hanya pengguna yang berwenang yang dapat berkomunikasi dengan HBase. Sistem otorisasi diimplementasikan di tingkat RPC, dan didasarkan pada Simple Authentication and Security Layer (SASL), yang mendukung (di antara mekanisme autentikasi lainnya) Kerberos. SASL memungkinkan otentikasi, negosiasi enkripsi dan/atau verifikasi integritas pesan pada basis per koneksi (properti konfigurasi “hbase.rpc.protection”).
Langkah selanjutnya setelah mengaktifkan User Authentication adalah memberi admin kemampuan untuk menentukan serangkaian aturan Otorisasi Pengguna yang mengizinkan atau menolak tindakan tertentu. Sistem Otorisasi, juga dikenal sebagai Access Controller Coprocessor atau Access Control List (ACL), tersedia mulai dari HBase 0.92 (CDH4) dan seterusnya dan memberikan kemampuan untuk menentukan kebijakan otorisasi (Baca/Tulis/Buat/Admin), dengan tabel/keluarga /perincian kualifikasi, untuk pengguna tertentu.
Kerberos
Kerberos adalah protokol otentikasi jaringan. Ini dirancang untuk menyediakan otentikasi yang kuat untuk aplikasi klien/server dengan menggunakan kriptografi kunci rahasia. Protokol Kerberos menggunakan kriptografi yang kuat (AES, 3DES, …) sehingga klien dapat membuktikan identitasnya ke server (dan sebaliknya) melalui koneksi jaringan yang tidak aman. Setelah klien dan server menggunakan Kerberos untuk membuktikan identitas mereka, mereka juga dapat mengenkripsi semua komunikasi mereka untuk memastikan privasi dan integritas data saat menjalankan bisnis.
Protokol pertukaran tiket
Pada tingkat tinggi, untuk mengakses layanan menggunakan Kerberos, setiap klien harus mengikuti tiga langkah:
- Otentikasi Kerberos:Klien mengautentikasi dirinya sendiri ke Server Otentikasi Kerberos dan menerima Tiket Pemberian Tiket (TGT).
- Otorisasi Kerberos:Klien meminta tiket layanan dari Server Pemberian Tiket, yang mengeluarkan tiket dan kunci sesi jika TGT klien yang dikirim dengan permintaan tersebut valid.
- Permintaan Layanan:Klien menggunakan tiket layanan untuk mengautentikasi dirinya sendiri ke server yang menyediakan layanan yang digunakan klien (mis. HDFS, HBase, …)
HBase, HDFS, ZooKeeper SASL
Karena HBase bergantung pada HDFS dan ZooKeeper, HBase yang aman bergantung pada HDFS yang aman dan ZooKeeper yang aman. Ini berarti server HBase perlu membuat sesi layanan yang aman, seperti yang dijelaskan di atas, untuk berkomunikasi dengan HDFS dan ZooKeeper.
Semua file yang ditulis oleh HBase disimpan dalam HDFS. Seperti dalam sistem file Unix, kontrol akses yang disediakan oleh HDFS didasarkan pada pengguna, grup, dan izin. Semua file yang dibuat oleh HBase memiliki "hbase" sebagai pengguna, tetapi kontrol akses ini didasarkan pada nama pengguna yang disediakan oleh sistem, dan setiap orang yang dapat mengakses mesin berpotensi dapat "sudo" sebagai pengguna "hbase". Secure HDFS menambahkan langkah-langkah autentikasi yang menjamin bahwa pengguna “hbase” dapat dipercaya.
ZooKeeper memiliki Access Control List (ACL) di setiap znode yang memungkinkan akses baca/tulis ke pengguna berdasarkan informasi pengguna dengan cara yang mirip dengan HDFS.
HBase ACL
Sekarang pengguna kami diautentikasi melalui Kerberos, kami yakin bahwa nama pengguna yang kami terima adalah salah satu pengguna tepercaya kami. Terkadang ini tidak cukup perincian – kami ingin mengontrol bahwa pengguna tertentu dapat membaca atau menulis tabel. Untuk melakukan itu, HBase menyediakan mekanisme Otorisasi yang memungkinkan akses terbatas untuk pengguna tertentu.
Untuk mengaktifkan fitur ini, Anda harus mengaktifkan koprosesor Access Controller, dengan menambahkannya ke hbase-site.xml di bawah kelas koprosesor server master dan wilayah. (Lihat cara mengatur konfigurasi keamanan HBase di sini.)
Koprosesor adalah kode yang berjalan di dalam setiap Server Wilayah HBase dan/atau Master. Ia mampu mencegat sebagian besar operasi (menempatkan, mendapatkan, menghapus, ...), dan menjalankan kode arbitrer sebelum dan/atau setelah operasi dijalankan.
Dengan menggunakan kemampuan ini untuk mengeksekusi beberapa kode sebelum setiap operasi, koprosesor Access Controller dapat memeriksa hak pengguna dan memutuskan apakah pengguna dapat atau tidak dapat menjalankan operasi.
Shell HBase memiliki beberapa perintah yang memungkinkan admin mengelola hak pengguna:
grant [table] [family] [qualifier]
revoke [table] [family] [qualifier]
Seperti yang Anda lihat, admin memiliki kemampuan untuk membatasi akses pengguna berdasarkan skema tabel:
- Berikan hak baca hanya untuk Pengguna-W ke Table-X/Family-Y (
grant 'User-W', 'R', 'Table-X', 'Family-Y'
) - Berikan Pengguna-W hak baca/tulis penuh ke Qualifier-Z (
grant 'User-W', 'RW', 'Table-X', 'Family-Y', 'Qualifier-Z'
)
Admin juga memiliki kemampuan untuk memberikan hak global, yang beroperasi di tingkat cluster, seperti membuat tabel, menyeimbangkan region, mematikan cluster, dan sebagainya:
- Beri Pengguna-W kemampuan untuk membuat tabel (
grant 'User-W', 'C'
) - Beri Pengguna-W kemampuan untuk mengelola cluster (
grant 'User-W', 'A'
)
Semua izin disimpan dalam tabel yang dibuat oleh koprosesor Access Controller, yang disebut _acl_. Kunci utama tabel ini adalah nama tabel yang Anda tentukan dalam perintah hibah. Tabel _acl_ hanya memiliki satu kelompok kolom dan setiap qualifier menjelaskan perincian hak untuk tabel/pengguna tertentu. Nilai tersebut berisi hak sebenarnya yang diberikan.
Seperti yang Anda lihat, perintah shell HBase terkait erat dengan cara data disimpan. Perintah grant menambahkan atau memperbarui satu baris, dan perintah revoke menghapus satu baris dari tabel _acl_.
Akses Pengontrol di balik kap
Seperti disebutkan sebelumnya, koprosesor Pengontrol Akses menggunakan kemampuan untuk mencegat setiap permintaan pengguna, dan memeriksa apakah pengguna memiliki hak untuk menjalankan operasi.
Untuk setiap operasi, Pengontrol Akses perlu mengkueri tabel _acl_ untuk melihat apakah pengguna memiliki hak untuk menjalankan operasi.
Namun, operasi ini dapat berdampak negatif pada kinerja. Solusi untuk memperbaiki masalah ini adalah menggunakan tabel _acl_ untuk persistensi dan ZooKeeper untuk mempercepat pencarian hak. Setiap server wilayah memuat tabel _acl_ dalam memori dan mendapatkan pemberitahuan tentang perubahan oleh ZkPermissionWatcher. Dengan cara ini, setiap server wilayah memiliki nilai yang diperbarui setiap saat dan setiap pemeriksaan izin dilakukan dengan menggunakan peta dalam memori.
Peta jalan
Meskipun Kerberos adalah sistem autentikasi yang stabil, teruji, dan terbukti, fitur HBase ACL masih sangat mendasar dan semantiknya masih terus berkembang. HBASE-6096 adalah payung JIRA sebagai referensi untuk semua peningkatan yang akan dikirimkan dalam fitur ACL v2.
Topik terbuka lainnya tentang otorisasi dan kontrol akses adalah menerapkan sistem keamanan per-KeyValue (HBASE-6222 ) yang akan memberikan kemampuan untuk memiliki nilai yang berbeda pada sel yang sama yang terkait dengan tag keamanan. Itu akan memungkinkan untuk menampilkan bagian informasi tertentu berdasarkan izin pengguna.
Kesimpulan
HBase Security menambahkan dua fitur tambahan yang memungkinkan Anda untuk melindungi data Anda dari sniffer atau serangan jaringan lainnya (dengan menggunakan Kerberos untuk mengautentikasi pengguna dan mengenkripsi komunikasi antar layanan), dan memungkinkan Anda untuk menentukan kebijakan Otorisasi Pengguna, membatasi operasi, dan membatasi visibilitas data untuk pengguna tertentu.
Matteo Bertozzi adalah Software Engineer di Spotify dan Konsultan HBase di Cloudera.