Role-Based Access Control (RBAC)

Role-Based Access Control (RBAC)

Kerangka kebijakan Role-Based Access Control (RBAC) mengaktifkan operator dan pengguna untuk memberikan akses ke sumber daya untuk proyek-proyek tertentu.

Objek yang didukung untuk berbagi dengan proyek tertentu

Saat ini, akses yang dapat diberikan penggunaan fitur ini didukung oleh:

  • Izin pembuatan port regular di jaringan (sejak Liberty).
  • Pengikatan izin kebijakan QoS ke jaringan atau port (sejak Mitaka).
  • Pelekatan router gateways untuk jaringan (sejak Mitaka).

Berbagi obyek dengan proyek tertentu

Berbagi sebuah objek dengan proyek tertentu dilakukan dengan pembuatan entri kebijakan yang mengizinkan proyek target aksi `` access_as_shared`` pada objek itu.

Berbagi jaringan dengan proyek tertentu

Membuat jaringan untuk berbagi:

$ openstack network create secret_network
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2017-01-25T20:16:40Z                 |
| description               |                                      |
| dns_domain                | None                                 |
| id                        | f55961b9-3eb8-42eb-ac96-b97038b568de |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | None                                 |
| mtu                       | 1450                                 |
| name                      | secret_network                       |
| port_security_enabled     | True                                 |
| project_id                | 61b7eba037fd41f29cfba757c010faff     |
| provider:network_type     | vxlan                                |
| provider:physical_network | None                                 |
| provider:segmentation_id  | 9                                    |
| qos_policy_id             | None                                 |
| revision_number           | 3                                    |
| router:external           | Internal                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| updated_at                | 2017-01-25T20:16:40Z                 |
+---------------------------+--------------------------------------+

Buat entri kebijakan menggunakan perintah openstack network rbac create (Dalam contoh ini, ID proyek dimana kami ingin berbagi dengan adalah b87b2fc13e0248a4a031d38e06dc191d):

$ openstack network rbac create --target-project \
b87b2fc13e0248a4a031d38e06dc191d --action access_as_shared \
--type network f55961b9-3eb8-42eb-ac96-b97038b568de
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| action            | access_as_shared                     |
| id                | f93efdbf-f1e0-41d2-b093-8328959d469e |
| name              | None                                 |
| object_id         | f55961b9-3eb8-42eb-ac96-b97038b568de |
| object_type       | network                              |
| project_id        | 61b7eba037fd41f29cfba757c010faff     |
| target_project_id | b87b2fc13e0248a4a031d38e06dc191d     |
+-------------------+--------------------------------------+

Parameter target-project` menentukan proyek yang membutuhkan akses ke jaringan. Parameter action menentukan proyek apa yang diperbolehkan untuk dilakukan. Parameter type mengatakan bahwa objek target adalah jaringan. Parameter terakhir adalah ID jaringan dimana kita memberikan akses ke.

Proyek b87b2fc13e0248a4a031d38e06dc191d sekarang akan dapat melihat jaringan ketika menjalankan openstack network list dan openstack network show dan juga akan dapat membuat port pada jaringan itu. Tidak ada pengguna lain (selain admin dan pemilik) akan dapat melihat jaringan.

Untuk menghapus akses untuk proyek itu, hapus kebijakan yang mengizinkan penggunaan perintah openstack network rbac delete:

$ openstack network rbac delete f93efdbf-f1e0-41d2-b093-8328959d469e

Jika proyek memiliki port pada jaringan, server akan mencegah kebijakan dari penghapusan sampai port itu telah dihapus:

$ openstack network rbac delete f93efdbf-f1e0-41d2-b093-8328959d469e
RBAC policy on object f93efdbf-f1e0-41d2-b093-8328959d469e
cannot be removed because other objects depend on it.

Proses ini dapat diulang beberapa kali untuk berbagi jaringan dengan jumlah proyek berapapun.

Berbagi kebijakan QoS dengan proyek tertentu

Buat kebijakan QoS untuk berbagi:

$ openstack network qos policy create secret_policy
+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| description |                                      |
| id          | 1f730d69-1c45-4ade-a8f2-89070ac4f046 |
| name        | secret_policy                        |
| project_id  | 61b7eba037fd41f29cfba757c010faff     |
| rules       | []                                   |
| shared      | False                                |
+-------------+--------------------------------------+

Buat entri kebijakan RBAC menggunakan perintah openstack network rbac create (dalam contoh ini, ID proyek dimana kami ingin berbagi dengan adalah be98b82f8fdf46b696e9e01cebc33fd9):

$ openstack network rbac create --target-project \
be98b82f8fdf46b696e9e01cebc33fd9 --action access_as_shared \
--type qos_policy 1f730d69-1c45-4ade-a8f2-89070ac4f046
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| action            | access_as_shared                     |
| id                | 8828e38d-a0df-4c78-963b-e5f215d3d550 |
| name              | None                                 |
| object_id         | 1f730d69-1c45-4ade-a8f2-89070ac4f046 |
| object_type       | qos_policy                           |
| project_id        | 61b7eba037fd41f29cfba757c010faff     |
| target_project_id | be98b82f8fdf46b696e9e01cebc33fd9     |
+-------------------+--------------------------------------+

Parameter target-project menentukan proyek yang membutuhkan akses ke kebijakan QoS. Parameter action menentukan proyek apa yang diperbolehkan untuk dilakukan. Parameter type mengatakan bahwa objek target adalah kebijakan QoS. Parameter terakhir adalah ID kebijakan QoS dimana kita memberikan akses ke.

Proyek be98b82f8fdf46b696e9e01cebc33fd9 sekarang akan dapat melihat kebijakan QoS ketika menjalankan openstack network qos policy list dan openstack network qos policy show dan juga akan dapat mengikat ke port atau jaringan. Tidak ada pengguna lain (selain admin dan pemilik) akan dapat melihat kebijakan QoS.

Untuk menghapus akses untuk proyek itu, hapuslah kebijakan RBAC yang mengizinkan penggunaan perintah openstack network rbac delete:

$ openstack network rbac delete 8828e38d-a0df-4c78-963b-e5f215d3d550

Jika proyek yang memiliki port atau jaringan dengan kebijakan QoS diterapkan kepada mereka, server tidak akan menghapus kebijakan RBAC sampai kebijakan QoS tidak lagi digunakan:

$ openstack network rbac delete 8828e38d-a0df-4c78-963b-e5f215d3d550
RBAC policy on object 8828e38d-a0df-4c78-963b-e5f215d3d550
cannot be removed because other objects depend on it.

Proses ini dapat diulang beberapa kali untuk berbagi qos-policy dengan jumlah proyek berapapun.

Bagaimana ‘shared’ flag berkaitan dengan entri ini

Seperti yang diperkenalkan dalam entri buku lainnya, neutron menyediakan sarana untuk membuat sebuah objek (network, qos-policy) tersedia untuk setiap proyek. Hal ini dicapai dengan menggunakan shared flag pada objek yang didukung:

$ openstack network create global_network --share
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2017-01-25T20:32:06Z                 |
| description               |                                      |
| dns_domain                | None                                 |
| id                        | 84a7e627-573b-49da-af66-c9a65244f3ce |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | None                                 |
| mtu                       | 1450                                 |
| name                      | global_network                       |
| port_security_enabled     | True                                 |
| project_id                | 61b7eba037fd41f29cfba757c010faff     |
| provider:network_type     | vxlan                                |
| provider:physical_network | None                                 |
| provider:segmentation_id  | 7                                    |
| qos_policy_id             | None                                 |
| revision_number           | 3                                    |
| router:external           | Internal                             |
| segments                  | None                                 |
| shared                    | True                                 |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| updated_at                | 2017-01-25T20:32:07Z                 |
+---------------------------+--------------------------------------+

Ini adalah setara dengan pembuatan kebijakan di jaringan yang mengizinkan setiap proyek untuk melakukan aksi access_as_shared pada jaringan itu. Neutron memperlakukan mereka sebagai hal yang sama, sehingga masuknya kebijakan untuk jaringan itu harus terlihat dengan menggunakan perintah openstack network rbac list:

$ openstack network rbac list
+-------------------------------+-------------+--------------------------------+
| ID                            | Object Type | Object ID                      |
+-------------------------------+-------------+--------------------------------+
| 58a5ee31-2ad6-467d-           | qos_policy  | 1f730d69-1c45-4ade-            |
| 8bb8-8c2ae3dd1382             |             | a8f2-89070ac4f046              |
| 27efbd79-f384-4d89-9dfc-      | network     | 84a7e627-573b-49da-            |
| 6c4a606ceec6                  |             | af66-c9a65244f3ce              |
+-------------------------------+-------------+--------------------------------+

Gunakan perintah neutron rbac-show, lihat rincian:

$ openstack network rbac show 27efbd79-f384-4d89-9dfc-6c4a606ceec6
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| action            | access_as_shared                     |
| id                | 27efbd79-f384-4d89-9dfc-6c4a606ceec6 |
| name              | None                                 |
| object_id         | 84a7e627-573b-49da-af66-c9a65244f3ce |
| object_type       | network                              |
| project_id        | 61b7eba037fd41f29cfba757c010faff     |
| target_project_id | *                                    |
+-------------------+--------------------------------------+

Output menunjukkan bahwa entri menizinkan tindakan access_as_shared on object 84a7e627-573b-49da-af66-c9a65244f3ce dari tipe network ke target_tenant *, merupakan wildcard yang mewakili semua proyek.

Saat ini, flag shared hanyalah pemetaan kebijakan RBAC yang mendasarinya untuk jaringan. Pengaturan flag ke `` True`` pada jaringan menciptakan entri RBAC wildcard. Pengaturan ke `` False`` menghapus entri wildcard.

Ketika Anda menjalankan openstack network list atau openstack network show, flag shared dihitung oleh server berdasarkan proyek panggilan dan entri RBAC untuk setiap jaringan. Untuk objek QoS gunakan openstack network qos policy list atau openstack network qos policy show masing-masing. Jika ada entri wildcard, flag shared selalu diatur ke True. Jika hanya ada entri yang berbagi dengan proyek tertentu, hanya proyek yang objeknya berbagi akan melihat flag sebagai `` True`` dan sisanya akan melihat bendera sebagai False.

Membiarkan jaringan untuk digunakan sebagai jaringan eksternal

Untuk membuat sebuah jaringan tersedia sebagai jaringan eksternal untuk proyek-proyek tertentu bukan untuk semua proyek, gunakan aksi access_as_external.

  1. Buat jaringan dimana Anda menginginkan tersedia sebagai jaringan eksternal:

    $ openstack network create secret_external_network
    +---------------------------+--------------------------------------+
    | Field                     | Value                                |
    +---------------------------+--------------------------------------+
    | admin_state_up            | UP                                   |
    | availability_zone_hints   |                                      |
    | availability_zones        |                                      |
    | created_at                | 2017-01-25T20:36:59Z                 |
    | description               |                                      |
    | dns_domain                | None                                 |
    | id                        | 802d4e9e-4649-43e6-9ee2-8d052a880cfb |
    | ipv4_address_scope        | None                                 |
    | ipv6_address_scope        | None                                 |
    | is_default                | None                                 |
    | mtu                       | 1450                                 |
    | name                      | secret_external_network              |
    | port_security_enabled     | True                                 |
    | project_id                | 61b7eba037fd41f29cfba757c010faff     |
    | proider:network_type      | vxlan                                |
    | provider:physical_network | None                                 |
    | provider:segmentation_id  | 21                                   |
    | qos_policy_id             | None                                 |
    | revision_number           | 3                                    |
    | router:external           | Internal                             |
    | segments                  | None                                 |
    | shared                    | False                                |
    | status                    | ACTIVE                               |
    | subnets                   |                                      |
    | updated_at                | 2017-01-25T20:36:59Z                 |
    +---------------------------+--------------------------------------+
    
  2. Buat entri kebijakan menggunakan perintah openstack network rbac create (dalam contoh ini, ID proyek dimana kami ingin berbagi dengan adalah 838030a7bf3c4d04b4b054c0f0b2b17c):

    $ openstack network rbac create --target-project \
    838030a7bf3c4d04b4b054c0f0b2b17c --action access_as_external \
    --type network 802d4e9e-4649-43e6-9ee2-8d052a880cfb
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | action            | access_as_external                   |
    | id                | afdd5b8d-b6f5-4a15-9817-5231434057be |
    | name              | None                                 |
    | object_id         | 802d4e9e-4649-43e6-9ee2-8d052a880cfb |
    | object_type       | network                              |
    | project_id        | 61b7eba037fd41f29cfba757c010faff     |
    | target_project_id | 838030a7bf3c4d04b4b054c0f0b2b17c     |
    +-------------------+--------------------------------------+
    

Parameter target-project menentukan proyek yang membutuhkan akses ke jaringan. Parameter action menentukan proyek apa yang diperbolehkan untuk dilakukan. Parameter type menunjukkan bahwa objek target adalah jaringan. Parameter terakhir adalah ID jaringan dimana kami memberikan akses eksternalnya.

Sekarang proyek `` 838030a7bf3c4d04b4b054c0f0b2b17c`` mampu melihat jaringan ketika berjalan openstack network list dan openstack network show dan dapat menghubungkan router gateway port ke jaringan itu. Tidak ada pengguna lain (selain admin dan pemilik) dapat melihat jaringan.

Untuk menghapus akses untuk proyek itu, hapus kebijakan yang mengizinkan penggunaan perintah openstack network rbac delete:

$ openstack network rbac delete afdd5b8d-b6f5-4a15-9817-5231434057be

Jika proyek yang memiliki port gerbang router terpasang ke jaringan itu, server akan mencegah kebijakan dari penghapusan sampai port telah dihapus:

$ openstack network rbac delete afdd5b8d-b6f5-4a15-9817-5231434057be
RBAC policy on object afdd5b8d-b6f5-4a15-9817-5231434057be
cannot be removed because other objects depend on it.

Proses ini dapat diulang beberapa kali untuk membuat jaringan yang tersedia sebagai eksternal sampai jumlah proyek berapapun.

Jika jaringan ditandai sebagai eksternal selama pembuatan, sekarang secara implisit hal itu menciptakan kebijakan RBAC wildcard memberikan akses setiap orang untuk menjaga tindakan sebelumnya sebelum fitur ini ditambahkan.

$ openstack network create global_external_network --external
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2017-01-25T20:41:44Z                 |
| description               |                                      |
| dns_domain                | None                                 |
| id                        | 72a257a2-a56e-4ac7-880f-94a4233abec6 |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | None                                 |
| mtu                       | 1450                                 |
| name                      | global_external_network              |
| port_security_enabled     | True                                 |
| project_id                | 61b7eba037fd41f29cfba757c010faff     |
| provider:network_type     | vxlan                                |
| provider:physical_network | None                                 |
| provider:segmentation_id  | 69                                   |
| qos_policy_id             | None                                 |
| revision_number           | 4                                    |
| router:external           | External                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| updated_at                | 2017-01-25T20:41:44Z                 |
+---------------------------+--------------------------------------+

Pada contoh di atas atribut router:external standar adalah `` External`` seperti yang diharapkan. Sekarang kebijakan wildcard terlihat dalam daftar kebijakan RBAC:

$ openstack network rbac list --long -c ID -c Action
+--------------------------------------+--------------------+
| ID                                   | Action             |
+--------------------------------------+--------------------+
| b694e541-bdca-480d-94ec-eda59ab7d71a | access_as_external |
+--------------------------------------+--------------------+

Anda dapat mengubah atau menghapus kebijakan ini dengan kendala yang sama seperti kebijakan access_as_external RBAC lainnya.

Pencegahan pengguna biasa berbagi objek dengan pengguna lainnya

File policy.json default tidak akan mengizinkan pengguna biasa untuk berbagi objek dengan proyek lainnya menggunakan wildcard; Namun, hal itu akan mengizinkan mereka untuk berbagi objek dengan ID proyek tertentu.

Jika operator ingin mencegah pengguna biasa melakukan ini, "create_rbac_policy": entri dalam policy.json dapat disesuaikan dari "" menjadi "rule:admin_only".

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.