Role-Based Access Control (RBAC)

Role-Based Access Control (RBAC)

Kerangka kebijakan Role-Based Access Control (RBAC) memungkinkan kedua operator maupun user untuk memberikan akses ke sumber daya untuk proyek-proyek tertentu.

Objek yang didukung untuk berbagi dengan proyek-proyek tertentu

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

  • Izin pembuatan port regular di jaringan (sejak Liberty).

  • Mengikat izin kebijakan QoS ke jaringan atau port (sejak Mitaka).

  • Melekatkan gateway router ke jaringan (sejak Mitaka).

Berbagi obyek dengan proyek-proyek tertentu

Berbagi sebuah objek dengan proyek tertentu dilakukan dengan membuat policy entry yang memungkinkan proyek target aksi access_as_shared pada objek itu.

Berbagi jaringan dengan proyek-proyek tertentu

Membuat jaringan untuk berbagi:

$ neutron net-create secret_network

Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 6532a265-43fb-4c8c-8edb-e26b39f2277c |
| mtu                       | 1450                                 |
| name                      | secret_network                       |
| port_security_enabled     | True                                 |
| provider:network_type     | vxlan                                |
| provider:physical_network |                                      |
| provider:segmentation_id  | 1031                                 |
| router:external           | False                                |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | de56db175c1d48b0bbe72f09a24a3b66     |
+---------------------------+--------------------------------------+

Buat policy entry menggunakan command rbac-create (dalam contoh ini, ID dari proyek kami ingin berbagi dengan adalah e28769db97d9449da658bc6931fcb683):

$ neutron rbac-create --target-tenant e28769db97d9449da658bc6931fcb683 \
  --action access_as_shared --type network 6532a265-43fb-4c8c-8edb-e26b39f2277c

Created a new rbac_policy:
+---------------+--------------------------------------+
| Field         | Value                                |
+---------------+--------------------------------------+
| action        | access_as_shared                     |
| id            | 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411 |
| object_id     | 6532a265-43fb-4c8c-8edb-e26b39f2277c |
| object_type   | network                              |
| target_tenant | e28769db97d9449da658bc6931fcb683     |
| tenant_id     | de56db175c1d48b0bbe72f09a24a3b66     |
+---------------+--------------------------------------+

Parameter target-tenant 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 dari jaringan dimana kita memberikan akses ke.

Proyek `` e28769db97d9449da658bc6931fcb683`` sekarang akan dapat melihat jaringan ketika menjalankan net-list dan net-show dan juga akan dapat membuat port pada jaringan itu. Tidak ada user lain (selain admin dan pemilik) akan dapat melihat jaringan.

Untuk menghapus akses untuk proyek itu, hapuslah kebijakan yang memungkinkan itu dengan menggunakan command rbac-delete:

$ neutron rbac-delete 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411
Deleted rbac_policy: 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411

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

$ neutron rbac-delete 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411
RBAC policy on object 6532a265-43fb-4c8c-8edb-e26b39f2277c
cannot be removed because other objects depend on it.

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

Berbagi kebijakan QoS dengan proyek-proyek tertentu

Membuat kebijakan QoS untuk berbagi:

$ neutron qos-policy-create secret_policy

Created a new policy:
+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| description |                                      |
| id          | e45e6917-3f3f-4835-ad54-d12c9151541d |
| name        | secret_policy                        |
| rules       |                                      |
| shared      | False                                |
| tenant_id   | 5b32b072f8354942ab13b6decb1294b3     |
+-------------+--------------------------------------+

Buat policy entry RBAC menggunakan command rbac-create (dalam contoh ini, ID dari proyek dimana kami ingin berbagi dengan adalah` a6bf6cfbcd1f4e32a57d2138b6bd41d1`):

$ neutron rbac-create --target-tenant a6bf6cfbcd1f4e32a57d2138b6bd41d1 \
  --action access_as_shared --type qos-policy e45e6917-3f3f-4835-ad54-d12c9151541d

Created a new rbac_policy:
+---------------+--------------------------------------+
| Field         | Value                                |
+---------------+--------------------------------------+
| action        | access_as_shared                     |
| id            | ec2e3db1-de5b-4043-9d95-156f582653d0 |
| object_id     | e45e6917-3f3f-4835-ad54-d12c9151541d |
| object_type   | qos_policy                           |
| target_tenant | a6bf6cfbcd1f4e32a57d2138b6bd41d1     |
| tenant_id     | 5b32b072f8354942ab13b6decb1294b3     |
+---------------+--------------------------------------+

Parameter target-tenant 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 dari kebijakan QoS dimana kita memberikan akses ke.

Proyek `` a6bf6cfbcd1f4e32a57d2138b6bd41d1`` sekarang akan dapat melihat kebijakan QoS ketika menjalankan qos-policy-list dan qos-policy-show dan juga akan dapat mengikat ke port atau jaringan. Tidak ada user lain (selain admin dan pemilik) akan dapat melihat kebijakan QoS.

Untuk menghapus akses untuk proyek itu, hapuslah kebijakan RBAC yang memungkinkan menggunakan command rbac-delete:

$ neutron rbac-delete e45e6917-3f3f-4835-ad54-d12c9151541d
Deleted rbac_policy: e45e6917-3f3f-4835-ad54-d12c9151541d

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:

$ neutron rbac-delete e45e6917-3f3f-4835-ad54-d12c9151541d
RBAC policy on object e45e6917-3f3f-4835-ad54-d12c9151541d
cannot be removed because other objects depend on it.

Proses ini dapat diulang sejumlah kali untuk berbagi qos-policy dengan jumlah tak terbatas dari proyek.

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:

$ neutron net-create global_network --shared

Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 9a4af544-7158-456d-b180-95f2e11eaa8c |
| mtu                       | 1450                                 |
| name                      | global_network                       |
| port_security_enabled     | True                                 |
| provider:network_type     | vxlan                                |
| provider:physical_network |                                      |
| provider:segmentation_id  | 1010                                 |
| router:external           | False                                |
| shared                    | True                                 |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | de56db175c1d48b0bbe72f09a24a3b66     |
+---------------------------+--------------------------------------+

Ini adalah setara dengan menciptakan kebijakan di jaringan yang memungkinkan setiap proyek untuk melakukan aksi access_as_shared pada jaringan itu. Neutron memperlakukan mereka sebagai hal yang sama, sehingga masuknya kebijakan untuk jaringan yang harus terlihat menggunakan command rbac-list:

$ neutron rbac-list

+--------------------------------------+-------------+--------------------------------------+
| id                                   | object_type | object_id                            |
+--------------------------------------+-------------+--------------------------------------+
| ec2e3db1-de5b-4043-9d95-156f582653d0 | qos_policy  | e45e6917-3f3f-4835-ad54-d12c9151541d |
| e7b7a4a7-8c3e-4003-9e15-5a9464c1ecea | network     | fcc63ae1-c56e-449d-8fb0-4f49f3cc8b55 |
+--------------------------------------+-------------+--------------------------------------+

Gunakan command rbac-show untuk melihat rincian:

$ neutron rbac-show fcc63ae1-c56e-449d-8fb0-4f49f3cc8b55

+---------------+--------------------------------------+
| Field         | Value                                |
+---------------+--------------------------------------+
| action        | access_as_shared                     |
| id            | fcc63ae1-c56e-449d-8fb0-4f49f3cc8b55 |
| object_id     | 9a4af544-7158-456d-b180-95f2e11eaa8c |
| object_type   | network                              |
| target_tenant | *                                    |
| tenant_id     | de56db175c1d48b0bbe72f09a24a3b66     |
+---------------+--------------------------------------+

Output menunjukkan bahwa entri memungkinkan aksi access_as_shared pada objek 9a4af544-7158-456d-b180-95f2e11eaa8c tipe network untuk target_tenant `` * ``, dimana wildcard yang mewakili semua proyek.

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

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

Membiarkan jaringan untuk digunakan sebagai jaringan eksternal

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

  1. Membuat jaringan dimana Anda ingin menjadi tersedia sebagai jaringan eksternal:

    $ neutron net-create secret_external_network
    
    Created a new network:
    +---------------------------+--------------------------------------+
    | Field                     | Value                                |
    +---------------------------+--------------------------------------+
    | admin_state_up            | True                                 |
    | availability_zone_hints   |                                      |
    | availability_zones        |                                      |
    | created_at                | 2016-04-30T06:51:46                  |
    | description               |                                      |
    | id                        | f9e39715-f7da-4bca-a74d-fc3675321661 |
    | ipv4_address_scope        |                                      |
    | ipv6_address_scope        |                                      |
    | mtu                       | 1450                                 |
    | name                      | secret_external_network              |
    | port_security_enabled     | True                                 |
    | provider:network_type     | vxlan                                |
    | provider:physical_network |                                      |
    | provider:segmentation_id  | 1073                                 |
    | router:external           | False                                |
    | shared                    | False                                |
    | status                    | ACTIVE                               |
    | subnets                   |                                      |
    | tags                      |                                      |
    | tenant_id                 | dfe49b63660e494fbdbf6ad2ca2a810f     |
    | updated_at                | 2016-04-30T06:51:46                  |
    +---------------------------+--------------------------------------+
    
  2. Membuat policy entry menggunakan command rbac-create (dalam contoh ini, ID dari proyek dimana kami ingin berbagi dengan adalah` e28769db97d9449da658bc6931fcb683`):

    $ neutron rbac-create --target-tenant e28769db97d9449da658bc6931fcb683 \
      --action access_as_external --type network f9e39715-f7da-4bca-a74d-fc3675321661
    
    Created a new rbac_policy:
    +---------------+--------------------------------------+
    | Field         | Value                                |
    +---------------+--------------------------------------+
    | action        | access_as_external                   |
    | id            | c26b3b05-5781-48a1-a36a-fb63072b5e56 |
    | object_id     | f9e39715-f7da-4bca-a74d-fc3675321661 |
    | object_type   | network                              |
    | target_tenant | e28769db97d9449da658bc6931fcb683     |
    | tenant_id     | dfe49b63660e494fbdbf6ad2ca2a810f     |
    +---------------+--------------------------------------+
    

Parameter target-tenant 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 dari jaringan dimana kami memberikan akses eksternal.

Sekarang proyek `` e28769db97d9449da658bc6931fcb683`` mampu melihat jaringan ketika menjalankan net-list dan net-show dan dapat menempelkan port gateway router ke jaringan itu. Tidak ada user lain (selain admin dan pemilik) dapat melihat jaringan.

Untuk menghapus akses untuk proyek itu, hapuslah kebijakan yang memungkinkan itu dengan menggunakan command rbac-delete:

$ neutron rbac-delete c26b3b05-5781-48a1-a36a-fb63072b5e56
Deleted rbac_policy: c26b3b05-5781-48a1-a36a-fb63072b5e56

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

$ neutron rbac-delete c26b3b05-5781-48a1-a36a-fb63072b5e56
RBAC policy on object f9e39715-f7da-4bca-a74d-fc3675321661
cannot be removed because other objects depend on it.

Proses ini dapat diulang berkali kali untuk membuat jaringan yang tersedia sebagai eksternal untuk jumlah tak terbatas suatu proyek.

Jika jaringan ditandai sebagai eksternal selama pembuatan, sekarang secara implisit menciptakan kebijakan RBAC wildcard yang memberikan akses setiap orang untuk preserve previous behavior sebelum fitur ini telah ditambahkan.

$ neutron net-create global_external_network --router:external

Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2016-04-30T07:00:57                  |
| description               |                                      |
| id                        | cb78991c-cdde-445b-a8ca-d819b9266756 |
| ipv4_address_scope        |                                      |
| ipv6_address_scope        |                                      |
| is_default                | False                                |
| mtu                       | 1450                                 |
| name                      | global_external_network              |
| port_security_enabled     | True                                 |
| provider:network_type     | vxlan                                |
| provider:physical_network |                                      |
| provider:segmentation_id  | 1007                                 |
| router:external           | True                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      |                                      |
| tenant_id                 | dfe49b63660e494fbdbf6ad2ca2a810f     |
| updated_at                | 2016-04-30T07:00:57                  |
+---------------------------+--------------------------------------+

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

$ neutron rbac-list --object_id=cb78991c-cdde-445b-a8ca-d819b9266756 \
  -c id -c target_tenant

+--------------------------------------+---------------+
| id                                   | target_tenant |
+--------------------------------------+---------------+
| 2b72fe2e-20cf-4856-af12-3ac0733604d8 | *             |
+--------------------------------------+---------------+

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

Mencegah user biasa dari berbagi objek dengan satu sama lain

Default file policy.json tidak akan memungkinkan user biasa untuk berbagi objek dengan setiap proyek lainnya menggunakan wildcard; Namun, hal itu akan memungkinkan mereka untuk berbagi objek dengan ID proyek tertentu.

Jika operator ingin mencegah user biasa dari melakukan hal ini, masukkan entri "create_rbac_policy": dalam policy.json dapat disesuaikan dari `` “” `` untuk "rule:admin_only".

Limitations

Seorang user non-admin yang berbagi jaringan dengan proyek lain menggunakan fitur ini tidak akan dapat melihat atau menghapus port dibuat di bawah proyek lainnya. Hal ini karena operasi database neutron otomatis membatasi query database untuk objek yang dimiliki oleh permintaan proyek user jika tidak user adalah admin atau user layanan. Masalah ini sedang dilacak oleh bug berikut: https://bugs.launchpad.net/neutron/+bug/1498790

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.