Rol-tabanlı Erişim Kontrolü (RBAC)

Rol-tabanlı Erişim Kontrolü (RBAC)

Rol-Tabanlı Erişim Kontrolü (RBAC) politika çerçevesi, belirli projeler için hem işleyicilere hem kullanıcılara kaynaklara erişim yetkisi verilmesini sağlar.

Belirli projeler ile paylaşmak için desteklenen nesneler

Mevcutta, bu özellik kullanarak verilebilecek erişim şunun tarafından desteklenmektedir:

  • Ağlarda normal bağlantı noktası oluşturma izinleri (Liberty’den beri).
  • Ağlara veya bağlantı noktalarına QoS politikaları izinleri bağlama (Mitaka’dan beri).
  • Ağlara yönlendirici ağ geçitleri takma (Mitaka’dan beri).

Bir nesneyi belirli projelerle paylaşma

Bir nesneyi belirli bir projeyle paylaşmak, hedef projeye o nesne üzerindeki access_as_shared eylemine izin veren bir politika girişi oluşturarak gerçekleştirilir.

Bir ağı belirli projelerle paylaşma

Paylaşmak için bir ağ oluştur:

$ 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                 |
+---------------------------+--------------------------------------+

openstack network rbac create komutunu kullanarak politika girdisi oluştur (bu örnekte paylaşmak istediğimiz projenin ID’si 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     |
+-------------------+--------------------------------------+

target-project parametresi, ağa erişim gerektiren projeyi belirtir. action parametresi, projeye ne yapmaya izin verildiğini belirtir. ``type``parametresi, hedef nesnenin bir ağ olduğunu söyler. Son parametre, erişim izni verdiğimiz ağın kimliğidir.

b87b2fc13e0248a4a031d38e06dc191d projesi openstack network list ve openstack network show komutlarını çalıştırırken ağları görebilir ve bu ağda bağlantı noktası oluşturabilir. Diğer kullanıcılar (yöneticiler ve sahiplerin dışındakiler) ağı görebileceklerdir.

Bu proje için erişimi kaldırmak için, openstack network rbac delete komutunu kullanarak erişim izni veren politikayı silin:

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

Bu proje ağda bağlantı noktalarına sahipse, sunucu, bağlantı noktaları silinene kadar politikanın silinmesini önleyecektir:

$ 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.

Bu süreç, keyfi sayıda projeyle bir ağ paylaşmak için herhangi bir sayıda tekrarlanabilir.

Belirli projelerle bir QoS politikası paylaşma

Paylaşmak için QoS politikası oluşturun:

$ 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                                |
+-------------+--------------------------------------+

RBAC poltikasını openstack network rbac create komutunu kullanarak oluşturun (bu örnekte, politikayı paylaşmak istediğimiz projenin ID’si 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     |
+-------------------+--------------------------------------+

target-project parametresi, QoS politikasına erişim gerektiren projeyi belirtir. action parametresi, projenin neler yapmasına izin verildiğini belirtir. type parametresi, hedef nesnenin QoS politikası olduğunu söyler. Son parametre, erişim izni verdiğimiz QoS politikasının kimliğidir.

be98b82f8fdf46b696e9e01cebc33fd9 projesi, openstack network qos policy list ve openstack network qos policy show komutları çalıştırılırken QoS politikalarını görebilecektir, ayrıca bağlantı noktalarına ve ağa bağlanabilir. Hiç bir kullanıcı (yöneticiler ve sahipler hariç) QoS politikalarını göremeyecektir.

Projeden erişimi kaldırmak için, buna izin veren RBAC politikasını openstack network rbac delete komutu kullanarak silin:

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

Bu projede QoS politikası uygulanmış bağlantı noktaları veya ağlar varsa, sunucu QoS ilkesi artık kullanılmayana kadar RBAC ilkesini silmeyecektir:

$ 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.

Bu süreç, istenilen sayıda projeyle bir qos politikası paylaşmak için herhangi bir sayıda tekrarlanabilir.

‘paylaşımlı’ bayrağı nasıl bu girdilerle ilişkilidir

Diğer rehber kayıtlarında da belirtildiği üzere neutron, her proje için bir nesne (network, qos-policy) yapma aracı sağlar. Bu, desteklenen nesnede shared bayrağı kullanılarak gerçekleştirilir:

$ 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                 |
+---------------------------+--------------------------------------+

Bu, ağ üzerinde her projenin o ağdaki access_as_shared eylemini gerçekleştirmesine izin veren bir politika oluşturmanın eşdeğeridir. Neutron bunları aynı şey olarak görür, bu nedenle bu ağ için politika girişi şu komutu kullanarak görünür olmalıdır 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              |
+-------------------------------+-------------+--------------------------------+

Detayları görmek için neutron rbac-show komutunu kullanın:

$ 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 | *                                    |
+-------------------+--------------------------------------+

Çıktı, tüm projeleri gösteren simge olan target_tenant *``a ``network türünün 84a7e627-573b-49da-af66-c9a65244f3ce nesnesi üzerinde access_as_shared hareketine izin veren girdiyi gösterir.

Şimdilik, paylaşımlı bayrağı sadece bir ağ için temel alınan RBAC ilkelerine bir eşlemedir. Bir ağda bayrağı True olarak ayarlamak joker karakter RBAC girişi oluşturur. Onu False olarak ayarlamak, joker karakter girdisini kaldırır.

openstack network list veya openstack network show komutunu çalıştırdığınızda, `` shared`` bayrağı, çağıran projeye ve her ağ için RBAC girdilerine dayalı olarak sunucu tarafından hesaplanır. QoS nesneleri için sırasıyla openstack network qos policy list veya openstack network qos policy show komutlarını kullanın. Bir joker karakter girişi varsa, shared bayrağı her zaman True olarak ayarlanır. Yalnızca belirli projelerle paylaşılan girdiler varsa, yalnızca nesnenin paylaştığı projeler bayrağı True olarak görür ve gerisi bayrağı False olarak görecektir.

Bir ağın harici bir ağ olarak kullanılmasına izin verilmesi

Bir ağı tüm projeler yerine belirli projeler için harici bir ağ olarak kullanılabilir hale getirmek için access_as_external eylemini kullanın.

  1. Harici bir ağ olarak kullanılmasını istediğiniz bir ağ oluşturun:

    $ 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. openstack network rbac create komutunu kullanarak politika girdisi oluştur (bu örnekte, politikayı paylaşmak istediğimiz projenin ID’si 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     |
    +-------------------+--------------------------------------+
    

target-project parametresi, ağa erişim gerektiren projeyi belirtir. action parametresi, projenin neler yapmasına izin verildiğini belirtir. type parametresi, hedef nesnenin bir ağ olduğunu gösterir. Son parametre, harici erişim izni verdiğimiz ağın kimliğidir.

Şimdi 838030a7bf3c4d04b4b054c0f0b2b17c projesi, openstack network list and openstack network show komutları çalıştırıldığında ağı görebilir ve yönlendirici geçit bağlantı noktalarını bu ağa bağlayabilir. Diğer kullanıcılar (yöneticiler ve sahipler dışındakiler) ağı göremezler.

Bu proje için erişimi kaldırmak için, openstack network rbac delete komutunu kullanarak erişim izni veren politikayı silin:

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

Bu proje, o ağa bağlı yönlendirici ağ geçidi bağlantı noktalarına sahipse, sunucu, bağlantı noktaları silinene kadar politikanın silinmesini önler:

$ 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.

Bu süreç, herhangi bir sayıda projeye harici olarak erişilebilmesi için tekrar edilebilir.

Oluşturma sırasında bir ağ, harici olarak işaretlenirse, artık bu özellik eklenmeden önceki davranışlarını korumak için herkesin erişim iznini veren bir joker karakter RBAC politikası oluşturur.

$ 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                 |
+---------------------------+--------------------------------------+

Yukarıdaki çıktıda standart router:external özniteliği beklendiği gibi External dır. Artık bir jokerlik politikası RBAC politika listelerinde görünür:

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

Bu politikayı diğer RBAC access_as_external politikasıyla aynı kısıtlamaları kullanarak değiştirebilir veya silebilirsiniz.

Normal kullanıcıların nesneleri birbirleriyle paylaşmalarını önleme

Varsayılan policy.json dosyası, normal kullanıcıların nesnelere joker karakter kullanarak başka her projeyle paylaşmalarına izin vermez; Ancak, nesneleri belirli proje kimlikleri ile paylaşmalarına izin verir.

Eğer operator, normal kullanıcıların bunu yapmasını engellemek isterse, policy.json dosyasındaki "create_rbac_policy": girdisi "" iken "rule:admin_only" olarak ayarlanabilir.

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.