Интеграция с LDAP

Интеграция OpenStack с LDAP

Для интеграции OpenStack с каталогом пользователей по протоколу LDAP выполните следующие шаги:

  1. Создайте домен. Для этого перейдите в OpenStack CLI и выполните команду создания домена openstack domain create <домен ldap>, указав имя добавляемого домена.

  2. Добавьте параметры в файл globals.yml соответствующего региона, указав имя добавляемого домена (в интерфейсе Horizon в выпадающем списке домены будут отображаться в той последовательности, в которой они указаны в этом файле):

    keystone_ldap_url: "ldaps://<имя сервера LDAP>:<порт LDAP>"
    horizon_keystone_multidomain: "True"
    horizon_keystone_domain_choices:
      Default: default
      Ldap: <домен LDAP>
    
  3. Добавьте параметры в файл /config/keystone/domains/keystone.ldap.conf соответствующего региона:

    [identity]
    driver = ldap
    
    [<домен LDAP>]
    group_allow_create = False
    group_allow_delete = False
    group_allow_update = False
    group_desc_attribute = description
    group_id_attribute = cn
    group_member_attribute = member
    group_name_attribute = cn
    group_objectclass = group
    group_filter = "<фильтр групп LDAP>"
    password = "{{ ldap_password }}"
    query_scope = sub
    suffix = "<DN-суффикс LDAP>"
    user_tree_dn = "<DN-tree пользователей>"
    url = "{{ keystone_ldap_url }}"
    user = <DN служебного пользователя>
    user_filter = "<фильтр пользователей LDAP>"
    user_allow_create = False
    user_allow_delete = False
    user_allow_update = False
    user_enabled_attribute = userAccountControl
    user_enabled_default = 512
    user_enabled_mask = 2
    user_id_attribute = cn
    user_mail_attribute = mail
    user_name_attribute = sAMAccountName
    user_objectclass = person
    user_pass_attribute = userPassword
    group_tree_dn = "<DN-tree групп>"
    page_size = 0
    
  4. При интеграции по протоколу LDAPS добавьте цепочку из корневых и промежуточных сертификатов в файл certificates/ca/ldap.crt и соответствующую строку в файл конфигурации keystone.ldap.conf:

    [<домен LDAP>]
    tls_cacertfile = "{{ openstack_cacert }}"
    
  5. Поместите пароль пользователя <DN служебного пользователя> в Vault в файл паролей региона secret_v2 / deployments / <LCM FQDN> / <имя региона> / passwords_yml в поле ldap_password.

  6. Выполните развёртывание региона с указанием тегов keystone и horizon.

  7. Проверьте, что пользователи и группы LDAP видны в KeyStack в OpenStack CLI:

    # openstack user list --domain <домен LDAP>
    +------------------------------------------------------------------+----------------+
    | ID                                                               | Name           |
    +------------------------------------------------------------------+----------------+
    | f82090b43940df5f7b8e77fb5e4ddaf04e60cecebc5e94dd63a5e0f53f219fe5 | user1          |
    +------------------------------------------------------------------+----------------+
    
    # openstack group list --domain <домен LDAP>
    +------------------------------------------------------------------+--------+
    | ID                                                               | Name   |
    +------------------------------------------------------------------+--------+
    | ec6d01371e3160ab417c404fa07828a2e4c2d2e3147b762f9cf6f3555a601280 | group1 |
    +------------------------------------------------------------------+--------+
    
  8. Создайте проект в OpenStack CLI или с помощью интерфейса Horizon:

    openstack project create <проект> --domain <домен ldap>
    
  9. Добавьте пользователей или группы в проект и дайте им права в них в OpenStack CLI:

    openstack role add --project <проект> --user user1 --user-domain <домен ldap> member
    openstack role add --project <проект> --group group1 --user-domain <домен ldap> member
    

Интеграция Grafana с LDAP

При необходимости интеграции Grafana с LDAP, выполните следующие шаги:

  1. При интеграции по протоколу LDAPS добавьте цепочку из корневых и промежуточных сертификатов в файл certificates/ca/ldap.crt.

  2. Поместите пароль пользователя <DN служебного пользователя> в Vault в файл паролей региона secret_v2 / deployments / <LCM FQDN> / <имя региона> / passwords_yml в поле ldap_password.

  3. Создайте файл grafana.yml в папке globals.d региона и укажите в нём необходимые параметры:

    grafana_security_ldap_enabled: "yes"
    grafana_security_ldap_host: "<имя сервера LDAP>"
    grafana_security_ldap_port: "<порт LDAP>"
    grafana_security_ldap_use_ssl: "true"
    grafana_security_ldap_start_tls: "false"
    grafana_security_ldap_ssl_skip_verify: "false"
    grafana_security_ldap_bind_dn: "<DN служебного пользователя>"
    grafana_security_ldap_bind_password: "{{ ldap_password }}"
    grafana_security_ldap_search_filter: "<фильтр пользователей LDAP>"
    grafana_security_ldap_search_base_dns: "<DN-tree пользователей>"
    
  4. Выполните развёртывание региона с указанием тега grafana.

Интеграция OpenSearch с LDAP

При необходимости интеграции OpenSearch с LDAP, выполните следующие шаги:

  1. При интеграции по протоколу LDAPS добавьте цепочку из корневых и промежуточных сертификатов в файл certificates/ca/ldap.crt.

  2. Поместите пароль пользователя <DN служебного пользователя> в Vault в файл паролей региона secret_v2 / deployments / <LCM FQDN> / <имя региона> / passwords_yml в поле ldap_password.

  3. Создайте файл opensearch.yml в папке globals.d региона и укажите в нём необходимые параметры:

    enable_opensearch_ldap: "yes"
    opensearch_admin_tls: "CN=backend.<FQDN внешнего VIP>"
    opensearch_ldap_hosts:
        - "<имя сервера LDAP>:<порт LDAP>"
    opensearch_ldap_bind_dn: "<DN служебного пользователя>"
    opensearch_ldap_password: "{{ ldap_password }}"
    opensearch_ldap_userbase: "<DN-tree пользователей>"
    opensearch_ldap_rolebase: "<DN-tree групп>"
    opensearch_ldap_verify_hostnames: "false"
    opensearch_ldap_enable_ssl: "true"
    fluentd_opensearch_password: "{{ ldap_password }}"
    fluentd_opensearch_user: "<DN служебного пользователя>"
    
  4. Создайте новый файл /config/opensearch/roles_mapping.yml с содержимым:

    all_access:
      backend_roles:
      - "<группа пользователя admin>"
    readall:
      backend_roles:
      - "<группа пользователя reader>"
    
  5. Выполните развёртывание региона с указанием тегов common и opensearch.

Проверка корректности настройки интеграции с LDAP

Выполните проверки работы ролевой модели:

  • AdminUI: войдите пользователем с ролью admin, убедитесь в доступности кнопки Создать ВМ и корректном отображении мониторинга. Войдите пользователем с ролью reader, убедитесь в недоступности кнопок создания ресурсов.

  • GitLab: создайте тестовый Merge Request, убедитесь в требовании одобрения двух администраторов. Проверьте блокировку прямых коммитов в master.

  • NetBox: войдите пользователями с разными ролями, проверьте доступность кнопок управления в соответствии с назначенными правами.