Eğer Apache Ranger’i tek cümleyle özetlemek gerekirse : 

“ A kullanıcısının B işlemini C kaynağı üzerinde yapmaya yetkisi var mı ? “

Ranger bu denklemdeki A, B ve C değişkenlerini kontrol edebildiğimiz araçtır.

Apache Ranger, Hadoop platformunda veri güvenliğini sağlamak, izlemek ve yönetmek için bir frameworktur. Ranger ile amaç, Apache Hadoop ekosisteminde kapsamlı güvenlik sağlamaktır. İşletmeler potansiyel olarak çok kullanıcılı bir ortamda birden fazla iş yürütebilir. Hadoop’taki veri güvenliğinin, veri erişimi için çoklu kullanımı desteklerken gelişmesi ve aynı zamanda güvenlik politikalarının merkezi yönetimi ve kullanıcı erişiminin izlenmesi için bir framework sağlaması gerekiyordu bu durumda karşımıza Ranger geliyor.

Apache Ranger’in temel hedefleri :

  • Kullanıcı arayüzünde veya REST API’lerini kullanarak güvenlikle ilgili tüm görevleri yönetmek için merkezi güvenlik yönetimi sağlamak.
  • Tüm Hadoop bileşenlerinde yetkilendirme(authorisation) yöntemini standartlaştırmak.
  • Farklı yetkilendirme yöntemleri için gelişmiş destek. 

Apache Ranger, CDH’de(Cloudera Distribution Hadoop) bulunan Apache Sentry’in yerine gelmiştir.
Güvenlik yetkisinin yanı sıra Apache Ranger, Sentry’de bulunmayan kullanıcı dostu web kullanıcı arayüzünü ve REST API’lerini destekliyor.

Sentry ve Ranger Arasındaki temel farklar şu şekilde:

  Apache Sentry Apache Ranger
Web UI
Command Line
Rest API
Audit
Impala *
Hive
HDFS
Solr
Kafka
HBase
Knox
YARN
Storm
Tag Based Support
Row level filtering
Column Masking
Authorisation
Denial Support

Tablo 1: Sentry ve Ranger

*: CDH 7.+ versiyonlarında Ranger desteği geldiği söyleniyor. İmpala 3.3 ve sonraki sürümlerinde de Ranger ile ilgili güncellemeler mevcut. 

Apache Ranger Mimarisi[2]

Şekil 1: Apache Ranger mimarisi [1]

Apache Ranger’in içindeki bileşenler:

  1. Ranger Admin Server/Portal
  2. Ranger Policy Server
  3. Ranger Plugins
  4. Ranger User/Group Sync
  5. Ranger Tag Sync
  6. Ranger Audit Server

1 – Ranger Admin Server/Portal

  • Güvenlik yönetimi için merkezi arayüz
  • Yönetici kullanıcılar bu işlemleri yapabilir :
    • Repository tanımlama.
    • Policy oluşturma ve güncelleme.
    • Ranger kullanıcılarını ve gruplarını yönetme.
    • Denetim(Audit) politikalarını tanımlama.
    • Denetim faaliyetlerini görüntüleme.

2 – Ranger Policy Server

  • Admin kullanıcıların politika ayrıntılarını tanımlamasına ve güncellemesine izin verir.
  • Admin kullanıcıların hangi kullanıcıların üst yetkilere sahip olduğunu ve politikaları değiştirme yetkisine sahip olabileceklerini belirlemelerine izin verir.
  • Politikalara hem izin verme hem de reddetme desteği(Allow and Denial Support).
  • Politikalar Kullanıcı veya Grup düzeylerinde uygulanabilir.

3 – Ranger User/Group Sync

  • Kullanıcıları ve grupları çekmek için senkronizasyon yardımcı programı, kullanıcı ve grup kaynaklarını olarak aşağıdaki yöntemler desteklenir:
    • Unix
    • LDAP
    • AD
  • Kullanıcı ve Grup bilgileri Ranger admin policy veritabanında depolanır ve policy tanımı için kullanılır.

4 – Ranger Plugins

  • HDFS veya Hive gibi Hadoop bileşenleriyle etkileşime geçen hafif Java programlarıdır.
  • Politikaları düzenli olarak Admin Server’dan alırlar.

5 – Ranger Audit Server

  • Denetimler(Audits) politikalar aracılığıyla yapılandırılır (kullanıcı, denetimin etkinleştirilmesi gerekip gerekmediğini belirtir).
  • Denetimler varsayılan olarak Solr’da tutulmakla birlikte Hdfs’de de tutulabilir.
    • Solr’daki veriler, Ranger yönetici arayüzünde denetim verilerini görüntülemek için kullanılır.
    • HDFS’deki veriler yedek olarak kullanabilir.

6 – Ranger Tag Sync

  • Tagları Apache Atlas üzerinden alır ve policylerde kullanıma hazır hale getirir.
  • Metadataları yönetmek için Apache Atlas gerektirir (Hive veritabanları / Tabloları, HDFS Pathi, Kafka Topicleri ve Tagler vb.)

Policy : Şartname, Kural cümleleri.

Ranger’de 2 çeşit policy vardır: Tag based ve Resource based

Tag Based : Etiketler kullanılarak kaynaklar üzerinde yetkilendirme ve sınırlama yapmamızı sağlar. Bir tag birden fazla kaynağı aynı anda etkileyebilir. Apache Atlas üzerinden oluşturulduğu için bu konudan detaylı olarak Apache Atlas yazımda bahsedeceğim.

Resource based : Ranger, kaynak tabanlı hizmetleri (HDFS, HBase, Hive vb.) yapılandırmanıza ve bu hizmetlere erişim kuralları eklemenize olanak tanır.

Örnek : A kaynağında b pathine sadece c,d kullanıcıları erişsin.

Örnek: Hive’da Customer tablosuna sadece srvc kullanıcı erişsin.

Ranger arayüzünden Access Manager Kısmından ‘Resource Based Policy’ seçeneği ile aşağıdaki ekrana erişiyoruz. Sağ üst köşede gördüğünüz import/export dışarıdan policy almak ve var olan policyleri dışarı aktarmak için kullanılıyor. Aynı bileşenlerle farklı firmalarda iş yaparken kullanabileceğiniz bir özellik. Add , Edit , Delete kısmında ise policyler eklenebiliyor.

Şekil 2: Service Manager ekranının görüntüsü

Yeni bir servis eklerken Config Properties kısımlarını dikkatlice doldurduktan sonra test connection ile bağlantıyı kontrol edebiliriz. 

Şekil 3: Servis ekleme ekranı

Şimdi bir adet resource based policy oluşturalım. Hdfs kullanıcısının Customer tablosunda GSM verilerine erişmesini engelleyelim.

Şekil 4:Policy Ekleme Ekranı

Daha sonra bu columna erişmesini istemediğimiz kişinin username bilgisini Deny Conditions kısmına giriyoruz.

 

Şekil 5: Userin yetkilerini kısıtladığımız Deny Conditions Kısmı

Kaydettikten sonra Hue arayüzünü kullanarak tablomuza sorgu attığımızda aşağıdaki çıktıyı görüyoruz.

Şekil 6: Hdfs userinin erişimi olmadığının gösterilmesi

Ancak içinde gsm no geçmeyen bir sütuna select atarsak erişim sağlayabiliriz.

Şekil 7: Hue arayüzünde Hive kullanarak Sorgu Çalıştırmak

Column Masking

Elimizdeher kullanıcının görmesini istemediğimiz veriler varsa( Tckn, cep tel no gibi ) verilere column masking uyguluyoruz. Amaç verinin açık bir şekilde görülmesini engellemek. Ranger bize maskeleme için çeşitli imkanlar sunmaktadır. Null olarak gösterme, son yada ilk 4 hanesini gösterme, kullanıcı tanımlı fonksiyon(udf) kullanmak bunlardan bazılarıdır. Ranger üzerinden şu şekilde yapılmakta.

Access Manager > Resource Based Policy > Hive > Masking  kısmına gidip yeni bir column masking oluşturalım. Policy type ve Policy id Ranger tarafından atanmaktadır. Enabled kısmı ise bu maskingi silmeden de iptal edebilmemiz için konulmuştur. Enabled’in üstüne bir kez tıkladığımızda disabled moduna geçer ve maskingimiz devre dışı kalır.

Şekil 8 :Maskeleme ekranının olduğu kısım

Yeni bir maskeleme oluşturalım ve Customer tablosundaki ccno(credit card number) verilerini hdfs kullanıcıları için maskeleyelim.

Şekil 9: Maskelemeye Ait Detaylar

Şimdi hangi kullanıcımıza nasıl maskeleme yapacağımızı seçelim. Hdfs userine sadece son 4 haneyi görebilecekleri şekilde bir maskeleme yapıyoruz.

Şekil 10: Maskeleme işleminin hangi kullanıcılara tabi tutulacağı ve nasıl yapılacağı

Bu işlemi yaptıktan sonra hem admin kullanıcısıyla hem de hdfs kullanııcısıyla tablomuza bakmayı deneyelim.

Admin kullanıcısı ile baktığımızda aşağıdaki çıktıyı alıyoruz. Çünkü admin kullanıcısı maskeleme işlemine tutulmuyor yukarıda.

Şekil 11: Admin kullanıcısı için sorgu sonucu

Hdfs kullanıcısı ile baktığımızda ise sadece son 4 haneyi görebiliyoruz.

Şekil 12: Hdfs kullanıcısı için sorgu sonucu

Row Level Filtering

Amaç filtreleyerek belirtilen kişilerin/grupların sadece bu filtreli sonuçlara ulaşabilmesi.
Örnek : Çalışanların Tutulduğu bir tabloda Şirketteki herkes sadece kendi departmanındaki kişilere erişebilirsin.

Service Manager > Resource Based Policy > Hive > Row level filtering üzerinden ulaşabilirsiniz.

Bir employee tablomuz olsun ve bu tabloda hdfs useri data departmanında olsun. Hdfs userinin sadece kendi departmanından olanları görmesini sağlayalım.

İlk olarak veritabanı, tablo bilgilerini giriyoruz.

Şekil 13: Row level filterin detaylarının belirlendiği ekran

User kısmından yine hdfs userini girip Filtreleme seçeneğine department=”Data” diyerek sadece Data departmanında çalışan kişilerin bilgilerinin gelmesini sağlıyoruz.

Şekil 14: Row level filtrenin hangi userlere ve nasıl geçerli olacağını belirttiğimiz ekran

Şimdi tablomuza hem admin hem hdfs kullanıcısıyla sorgu atalım ve filtremizin çalışıp çalışmadığını test edelim.

Admin kullanıcısıyla sorguladığımızda filtrelemeye tabi olmadığı için tüm kullanıcıları görebilecek.

Şekil 15: Admin kullacısının employee tablosuna gönderdiği sorgunun sonucu

Hdfs kullanıcısı ise filtrelenmiş kısmını görebilecek.

Şekil 16: Hdfs kullacısının employee tablosuna gönderdiği sorgunun sonucu

***Tag based policy konusunda Apache Atlas yazımızda değineceğim.***

Ranger Access Conditions

Apache Ranger’de policyler için 4 çeşit ayar vardır

  • Allow
  • Exclude from Allow
  • Deny
  • Exclude from Deny

Allow : İzin verdiğimiz kısım. Yukarıdaki şarta, tabloya, pathe burada verilen kullanıcı ve gruplar erişim sağlar.

Exclude from Allow : Genelde gruplar için kullanılır. Haricinde, dışarıda bırak anlamındadır.

Örnek : Allow kısmında grup olarak Dilişim  dediniz ancak tabloya Tolga’nın erişmesini istemiyorsunuz. Bu kısımda kullanıcı olarak Tolga’yı yazarsanız “tüm Dilişim erişebilir Tolga haricinde” anlamı ortaya çıkar.

Deny:  Erişimin reddedildiği kısım. Burada belirtilen kullanıcı ve grupların yetkileri ellerinden alınır. Erişemezler belirtilen tablo, veritabanı, path gibi şeylere.

Exclude from Deny : Exclude from Allow gibi çalışır. Deny kısmında belirtilen kullanıcı grubundan haricen yetki verebileceğiniz kısımdır.

Şekil 17: Conditionsların Ekran Üzerinde gösterilmesi

Apache Ranger Security Zone

Resource ve Tag bazlı politikaları ayrı güvenlik bölgelerinde(security zone – SZ) düzenlemenizi sağlar. Her ‘SZ’ için bir veya daha fazla yönetici atayabilirsiniz. ‘SZ’ yöneticileri kendi bölgeleri için policyler oluşturabilir ve güncelleyebilir. Bir bölgede oluşturulan policyler sadece o bölge için geçerlidir. Örnek : Finans ve Sales adında 2 ‘SZ’ olsun.

Şekil 18: Örnek Security Zone ve Ayarları

Bu security zoneler altında bulunan kısımlara adminlerin yetki verdiği kişiler policy oluşturup erişimleri düzenleyebilir.

Security Zone bölgelerin kesişmesine izin vermiyor. Yani İki farklı zone aynı veritabanı, tablo vs erişim sağlayamıyor. Bu da karışıklığın önüne geçiyor.

Örnek A bölgesinde X tablosuna filtre getirdiniz ama B bölgesi başka bir şey yaptı ne olacak ? Bölgeler farklı ama tablo aynı bu durumda hangi koşul uygulanacak tabloya ? Böyle bir şey yaşanmıyor çünkü denediğinizde aşağıdaki hata ile karşılaşıyorsunuz.

Şekil 19: Aynı yeri kapsayan Security Zonelerin verdiği hata.

Ranger Audit

Yapılan işlemlerin kayıtlarının tutulduğu kısım. Burada policy, access, request gibi geçmişte yapılan eylemlerin logları görülebilir. Bu kısma sadece admin kullanıcıları erişebilir.

Homepage üzerinden Audit sekmesine tıklayarak ulaşılabilir.

Şekil 20: Audit Access Ana Ekranı

Şekil 21: Policylere ait audit ekranı

Ranger Reports

Ranger üzerindeki her şeyi tek bir ekranda görülüp yönetilebileceği sayfa. Bu sayfada tüm politika, sütun maskeleme (column masking) ve satır bazlı filtreleme (row level filter) erişimi sağlayabilir ve bu sayfanın görünümünü rapor olarak export edebilirsiniz.

Şekil 22: Ranger Reports Ana Ekran

Ranger User/Group Yönetimi

Apache Ranger web arayüzü üzerinde sadece admin kullanıcılarının erişebileceği user, grup ve rollerin oluşturulması, güncellenmesi ve denetimi için kullanılan kısımdır. LDAP, AD gibi sistemlerle entegrasyonu vardır. 

Şekil 23: User ve Groupların yönetildiği ekran

Ranger Rest Api

Rest api kullanarak tüm Ranger servis, policy ve audit’lerine erişebilirsiniz. Çok geniş rest api desteği vardır. Bazılarını Şekil-24’te görebilirsiniz.

Entity bazlı aramalarda her entitye özgü bir değer olan guid kullanılır. Bu idyi entityin üzerine tıkladığınızda url kısmının en sonunda görebilirsiniz.

Şekil 24 : Örnek Ranger Rest Api türleri

Örnek Sorgular;

Tüm servisleri görmek:

 curl -X GET -u ‘admin:password’ -H “Content-Type: application/json” http://127.0.0.1:6080/service/public/v2/api/service

İd ile policy’i getirme:

curl -X GET -u ‘admin:password’ -H “Content-Type: application/json” http://127.0.0.1:6080/service/public/v2/api/policy/46

Bu yazım buraya kadardı. Okuduğunuz için teşekkür ederim ? 

Alıntılar:

[1] : onlineitguru.com/blog/role-of-apache-ranger-in-hadoop-platform
[2] : www.ericlin.me/2020/01/introduction-to-apache-ranger-part-i/

Yazımı hazırlarken kullandığım diğer kaynaklar:

1- cwiki.apache.org/confluence/display/RANGER/

2- www.cloudera.com/products/open-source/apache-hadoop/apache-ranger.html

3- docs.cloudera.com/HDPDocuments/HDP3/HDP-3.1.5/authorization-ranger/content/using_ranger_to_provide_authorization_in_hadoop.html

4- https://ranger.apache.org/apidocs/index.html