Role Based Access Control (RBAC) pada Openstack

Role Based Access Control (RBAC) pada Openstack

RBAC ini mempunyai fungsi yaitu mengatur hak akses siapa aja yg bisa pakai opsi-opsi tertentu pada dashboard di openstack.

Paham nda hehe?? jadi gini penjelasannya lagi, misalkan lu nda mau user lain, selain user admin bisa buat instances di VM, nah untuk itu kita harus mengatur policy RBAC ini.

Beberapa yg perlu di perhatikan untuk mengatur RBAC :

  • Kita diharuskan manual mengedit-nya via console pada node controller, dan sampai saat ini (yg saya tau) belum ada plugin/add-ons untuk mengedit via dashboard atau gui. (kalo misalkan ada komentar dong hehe)
  • File yang di edit yaitu file policy.json, yg terletak tiap masing2 services pada openstack
    contoh, untuk mengatur hak akses buat user, dll (termasuk kedalam service identity/keystone) berarti file policy.json-nya ada di direktori /etc/keystone/policy.json
  • Karena file tersebut ber-format json, maka ketika sudah selesai di edit file tersebut, kita hanya perlu menyimpan saja (tidak perlu restart service/system), dan nanti policy tersebut akan otomatis ter-load.
  • Jangan lupa backup sebelum mengedit file policy.json-nya.
  • RBAC memungkinkan membatasi hak akses mulai dari per-project, user, role, domain, group, dll

Oke sekarang saya coba jelaskan cara mengedit file policy.json-nya. Misalkan sekarang saya buka file policy milik service compute (nova) yg berada di /etc/nova/policy.json

vi /etc/nova/policy.json

Role Based Access Control (RBAC) pada Openstack

  • label, biasanya di baris paling atas, di pisahkan oleh 1 baris, dan symbol titik2 (:) berada di luar name-nya itu adalah pemanggil atau sebagai label. – Maksudnya misalkan pada data  isadmin:True or projectid:%(projectid)s  bisa dipersingkat menggunakan label  adminor_owner , jadi lebih mudah ditulis dan juga di ingat.
  • function, nah ini adalah fungsi2 yang dapat di atur hak aksesnya, sesuai role, dll yg di inginkan.
  • *name *(pada baris pemanggil), ini hanyalah variable yg berisi data, ini bisa di tentukan namanya sesuai keinginan kita.
  • *data *(pada baris pemanggil), berisi atribut policies yg kita tentukan (semua atribut yg bisa digunakan bisa lihat di bawah) – dalam 1 name, bisa menggunakan banyak attribute dengan cara di pisahkan dengan menggunakan script or
  • service, nama service openstack-nya.
  • action, aksi yg akan dilakukan oleh function tersebut.

Berikut beberapa list atribut yang bisa di gunakan :

  • contoh, “compute:get”: “”,
  • ! – contoh, “compute:get”: “!“,
  • not contoh, “compute:get”: “not role:admin“,
  • role contoh, “compute:get”: “role:admin“,
  • rule: contoh, “compute:get”: “rule:adminorowner“,
  • is_admin:True
  • userid:%(userid)s
  • userid:%(target.token.userid)s
  • userid:%(target.credential.userid)s
  • projectid:%(projectid)s
  • tenantid:%(tenantid)s
  • field:networks:shared=True
  • field:firewalls:shared=True
  • field:firewall_policies:shared=True
  • field:subnetpools:shared=True
  • field:address_scopes:shared=True
  • field:networks:router:external=True
  • *dan lain-lain *(akan di update, jika ketemu lagi hehe)

Cara Membuat Role View Only

Kita buat project baru lagi agar role view only dapat terpisah dengan project admin, caranya yaitu

  1. Buka dashboard (login sebagai admin), kemudian klik identity > projects > create project > dan tulis nama project-nya (contoh-nya, member)
    Role Based Access Control (RBAC) pada Openstack
  2. Buat role baru, dengan cara pergi ke identity > roles > create role > tulis nama role-nya (contoh: view_only)
    Role Based Access Control (RBAC) pada Openstack
  3. Buat user baru dengan role viewonly, dengan cara pergi ke identity > users > create user > tulis nama user, password, project (member), role (viewonly).
    Role Based Access Control (RBAC) pada Openstack
  4. Disini kita akan atur rbac pada service nova, neutron, cinder, dan glance. Backup terlebih dahulu file policy.json pada tiap servicenya. Dan berikut function2 yg harus di edit pada file policy.json pada masing2 service-nya

vi /etc/nova/policy.json

“adminorowner”: “isadmin:True or role:member“, … “compute:get”: “rule:adminorowner or role:viewonly”, “compute:getall”: “rule:adminorowner or role:viewonly”, “compute:getinstancemetadata”: “rule:adminorowner or role:viewonly”, “compute:getallinstancemetadata”: “rule:adminorowner role:viewonly”, “compute:getallinstancesystemmetadata”: “rule:adminorowner or role:viewonly”, “compute:getdiagnostics”: “rule:adminorowner or role:viewonly”, “compute:getinstancediagnostics”: “rule:adminorowner or role:viewonly”, “compute:getvncconsole”: “rule:adminorowner or role:viewonly”, “compute:getconsoleoutput”: “rule:adminorowner or role:viewonly”, … “computeextension:consoleoutput”: “rule:adminorowner or role:viewonly”, “computeextension:consoles”: “rule:adminorowner or role:viewonly”, “computeextension:extendedstatus”: “rule:adminorowner or role:viewonly”, “computeextension:flavorextraspecs:show”: “rule:adminorowner or role:viewonly”, “computeextension:keypairs:index”: “rule:adminorowner or role:viewonly”, “computeextension:keypairs:show”: “rule:adminorowner or role:viewonly”, “computeextension:quotas:show”: “rule:adminorowner or role:viewonly”, “computeextension:serverusage”: “rule:adminorowner or role:viewonly”, “computeextension:simpletenantusage:show”: “rule:adminorowner or role:viewonly”, “computeextension:volumeattachments:show”: “rule:adminorowner or role:viewonly”, “computeextension:availabilityzone:list”: “rule:adminorowner or role:viewonly”, … “oscomputeapi:servers:detail”: “rule:adminorowner or role:viewonly”, “oscomputeapi:servers:index”: “rule:adminorowner or role:viewonly”, “oscomputeapi:servers:show”: “rule:adminorowner or role:viewonly”, … “oscomputeapi:os-certificates:show”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-consoles:index”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-consoles:show”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-console-output”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-remote-consoles”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-extended-status”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-extended-availability-zone”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-flavor-extra-specs:show”: “rule:adminorowner or role:viewonly”, “oscomputeapi:ips:show”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-keypairs”: “rule:adminorowner or role:viewonly”, “oscomputeapi:limits”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-quota-sets:show”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-server-usage”: “rule:adminorowner or role:viewonly”, “oscomputeapi:server-metadata:show”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-simple-tenant-usage:show”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-volumes-attachments:show”: “rule:adminorowner or role:viewonly”, “oscomputeapi:os-availability-zone:list”: “rule:adminorowner or role:viewonly”,


vi /etc/neutron/policy.json

“adminormember”: “isadmin:True or role:member“, … “createsubnet”: “rule:adminormember”, … “updatesubnet”: “rule:adminormember”, “deletesubnet”: “rule:adminormember”, … “createsubnetpool”: “rule:adminormember”, … “updatesubnetpool”: “rule:adminormember”, … “deletesubnetpool”: “rule:adminormember”, … “createaddressscope”: “rule:adminormember”, … “updateaddressscope”: “rule:adminormember”, … “deleteaddressscope”: “rule:adminormember”, … “createnetwork”: “rule:adminormember”, … “createrouter”: “rule:adminormember”, … “deleterouter”: “rule:adminormember”, …


vi /etc/cinder/policy.json

“adminorowner”: “isadmin:True or role:member“, “projectrule”: “projectid:%(projectid)s”, “default”: “rule:adminorowner or rule:projectrule”, … “volume:create”: “rule:adminorowner”, … “volume:get”: “rule:adminorowner or role:viewonly”, “volume:getall”: “rule:adminorowner or role:viewonly”, “volume:getvolumemetadata”: “rule:adminorowner or role:viewonly”, … “volume:getsnapshot”: “rule:adminorowner or role:viewonly”, “volume:getallsnapshots”: “rule:adminorowner or role:viewonly”, … “volumeextension:quotas:show”: “rule:adminorowner or role:viewonly”, … “volume:accepttransfer”: “rule:adminorowner”, … “backup:create” : “rule:adminorowner”, … “backup:get”: “rule:adminorowner or role:viewonly”, “backup:getall”: “rule:adminorowner or role:viewonly”, … “snapshotextension:snapshotactions:updatesnapshotstatus”: “rule:adminorowner”, …


vi /etc/glance/policy.json

“adminormember”: “isadmin:True or role:member“, … “addimage”: “rule:adminormember”, “deleteimage”: “rule:adminormember”, “getimage”: “rule:adminormember or role:viewonly”, “getimages”: “rule:adminormember or role:viewonly”, “modifyimage”: “rule:adminormember”, … “copyfrom”: “rule:adminormember”, … “downloadimage”: “rule:adminormember”, “uploadimage”: “rule:adminormember”, … “deleteimagelocation”: “rule:adminormember”, “getimagelocation”: “rule:adminormember or role:viewonly”, “setimagelocation”: “rule:adminormember”, … “addmember”: “rule:adminormember”, “deletemember”: “rule:adminormember”, “getmember”: “rule:adminormember or role:viewonly”, “getmembers”: “rule:adminormember or role:viewonly”, “modifymember”: “rule:adminormember”, … “deactivate”: “rule:adminormember”, “reactivate”: “rule:adminormember”, … “getmetadefnamespace”: “rule:adminormember or role:viewonly”, “getmetadefnamespaces”:”rule:adminormember or role:viewonly”, “modifymetadefnamespace”:”rule:adminormember”, “addmetadefnamespace”:”rule:adminormember”, … “getmetadefobject”:”rule:adminormember or role:viewonly”, “getmetadefobjects”:”rule:adminormember or role:viewonly”, “modifymetadefobject”:”rule:adminormember”, “addmetadefobject”:”rule:adminormember”, … “listmetadefresourcetypes”:”rule:adminormember or role:viewonly”, “getmetadefresourcetype”:”rule:adminormember or role:viewonly”, “addmetadefresourcetypeassociation”:”rule:adminormember”, … “getmetadefproperty”:”rule:adminormember or role:viewonly”, “getmetadefproperties”:”rule:adminormember or role:viewonly”, “modifymetadefproperty”:”rule:adminormember”, “addmetadefproperty”:”rule:adminormember”, … “getmetadeftag”:”rule:adminormember or role:viewonly”, “getmetadeftags”:”rule:adminormember or role:viewonly”, “modifymetadeftag”:”rule:adminormember”, “addmetadeftag”:”rule:adminormember”, “addmetadeftags”:”rule:adminor_member”,