Keystone v3

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску


Заметки о кейстоун v3

Задача:

  • сконфигурировать отдельно-стоящий кейстоун, другие сервисы опенстека не нужны.
  • Пользователи в LDAP (LDAP поставить локально для теста)
  • выдавать токены
  • OS - CentOS7

Apache

Кейстоун это WSGI-приложение и деплоить его нужно соответственно под apache (другие варианты не пробовал)
ДУмаю что это не слишком безопасная настройка с DocumentRoot "/usr/bin" но для тестового сервера вполне.

/etc/httpd/conf.d/keystone.conf
<VirtualHost 0.0.0.0:35357>
  ServerName node-1.domain.tld

  DocumentRoot "/usr/bin"

  <Directory "/usr/bin">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Require all granted
  </Directory>

  ErrorLog "/var/log/httpd/keystone_wsgi_admin_error.log"
  ServerSignature Off
  CustomLog "/var/log/httpd/keystone_wsgi_admin_access.log" "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\""
  WSGIApplicationGroup apache
  WSGIDaemonProcess keystone_admin display-name=keystone-admin group=keystone processes=1 threads=3 user=keystone
  WSGIProcessGroup keystone_admin
  WSGIScriptAlias / "/usr/bin/keystone-wsgi-admin"
  WSGIPassAuthorization On

  LimitRequestFieldSize 81900
</VirtualHost>

<VirtualHost 0.0.0.0:5000>
  ServerName node-1.domain.tld

  ## Vhost docroot
  DocumentRoot "/usr/bin"

  <Directory "/usr/bin">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Require all granted
  </Directory>
  ErrorLog "/var/log/httpd/keystone_wsgi_main_error.log"
  ServerSignature Off
  CustomLog "/var/log/httpd/keystone_wsgi_main_access.log" "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\""
  WSGIApplicationGroup apache
  WSGIDaemonProcess keystone_main display-name=keystone-main group=keystone processes=1 threads=3 user=keystone
  WSGIProcessGroup keystone_main
  WSGIScriptAlias / "/usr/bin/keystone-wsgi-public"
  WSGIPassAuthorization On
  LimitRequestFieldSize 81900
</VirtualHost>

Для убунты как минимум пути и имена бинарников будут отличаться


keystone.conf

Настройки близки к минимальным

# cat /etc/keystone/keystone.conf  | grep -v '#' | grep -v '^$'
[DEFAULT]
admin_token = z5Oq8GDTtFAvdGsld55WO6os
admin_endpoint = http://172.17.35.25:35357
max_project_tree_depth = 5
debug = True
verbose = True
log_file = keystone.log
log_dir = /var/log/keystone
[assignment]
[auth]
[cache]
[catalog]
[cors]
[cors.subdomain]
[credential]
[database]
connection = mysql://keystone:keystone@127.0.0.1/keystone?charset=utf8&read_timeout=60
[domain_config]
driver = sql
[endpoint_filter]
[endpoint_policy]
[eventlet_server]
[eventlet_server_ssl]
[federation]
[fernet_tokens]
[identity]
default_domain_id = default
domain_specific_drivers_enabled = true
domain_configurations_from_database = false
domain_config_dir = /etc/keystone/domains
driver = sql
[identity_mapping]
[kvs]
[ldap]
[matchmaker_redis]
[memcache]
[oauth1]
[os_inherit]
[oslo_messaging_amqp]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[paste_deploy]
[policy]
[resource]
[revoke]
[role]
[saml]
[shadow_users]
[signing]
[ssl]
[token]
[tokenless_auth]
[trust]

Основаня магия доменов это здесь:

[identity]
default_domain_id = default
domain_specific_drivers_enabled = true
domain_configurations_from_database = false
domain_config_dir = /etc/keystone/domains
driver = sql

Эти настройки значат:

  • искать домен-специфичные настройки в каталоге /etc/keystone/domains, имя файла должно быть keystone.<domain_name>.conf, например для моего домена ldaptest: /etc/keystone/domains/keystone.ldaptest.conf
  • разрешить использовать разные бекенды для доменов.

На этом этапе подстерегает некоторое число засад

  • ни под каким соусом у меня не заработал файл с бекендом SQL - вероятно нельзя создать домен с конфигурацией идентичной дефолтной.
  • создавать надо строго в определенном порядке
    • включить опцию domain_specific_drivers_enabled = true
    • подложить файл конфигурации с указаным бекендом (но можно без опций этого бекенда)
    • рестартовать кейстоун
    • создать домен

keystone.ldaptest.conf

Для старта достаточно

[identity]
driver=ldap

остальные опции можно вписать позже.

Мой файл выглядит так:

[identity]
driver=ldap

[ldap]
url = ldap://172.17.35.25
user = cn=Manager,dc=my-domain,dc=com
password = r00tme
use_dumb_member = False
allow_subtree_delete = False

user_tree_dn = ou=People,dc=customer_organization,dc=my-domain,dc=com
group_tree_dn = ou=Group,dc=customer_organization,dc=my-domain,dc=com


user_objectclass = inetOrgPerson
user_name_attribute = uid


role_allow_create = False
role_allow_update = False
role_allow_delete = False

project_allow_create = False
project_allow_update = False
project_allow_delete = False

LDAP

LDAP я поставил с минимальной конфигурацией. Залил следующие данные:


dn: dc=my-domain,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: fuel_users
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: r00tme


dn: dc=customer_organization,dc=my-domain,dc=com
dc: customer_organization
o: Example Organization
objectClass: dcObject
objectClass: organizationdn: cn=admin,dc=my-domain,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: {SSHA}bxQpFzYmIkILSbDEL3cVl+nf03mdra/tdn: ou=Group,dc=customer_organization,dc=my-domain,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
dn: ou=People,dc=customer_organization,dc=my-domain,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit


dn: cn=sirmax,ou=Group,dc=customer_organization,dc=my-domain,dc=com
objectClass: posixGroup
gidNumber: 9999
description: Fuel Users
memberUid: sirmaxdn: uid=sirmax,ou=People,dc=customer_organization,dc=my-domain,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: sirmax
cn: Max Mazur
sn: Mazur
title: Max Mazur
telephoneNumber: +38 067 341 80 70
postalAddress: AddressLine1$AddressLine2$AddressLine3
userPassword: {CRYPT}$6$DS/mzad5$EB.cNCLE7KB7OCPK1nU6aEA8HnQDLY1FPd3KaWPVqaNBtWhmh/4cOUgD1I8tQSFu41yy7jMXDrg9TDqlAbuLX.
loginShell: /bin/bash
uidNumber: 9999
gidNumber: 9999
homeDirectory: /home/sirmax
description: This is me :)


dn: uid=test,ou=People,dc=customer_organization,dc=my-domain,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: test
cn: Test Test
sn: Test
title: Max Mazur
telephoneNumber: +000
postalAddress: AddressLine1$AddressLine2$AddressLine3
userPassword: {CRYPT}$6$DS/mzad5$EB.cNCLE7KB7OCPK1nU6aEA8HnQDLY1FPd3KaWPVqaNBtWhmh/4cOUgD1I8tQSFu41yy7jMXDrg9TDqlAbuLX.
loginShell: /bin/bash
uidNumber: 9999
gidNumber: 9999
homeDirectory: /home/test
description: This test user

openstack клиент

начиная с какого-то момента кейстоун (особенно v3) использует openstack клиент (вместо утилиты keysone)


cat /etc/openstack/clouds.yaml


  • 2 части
    • дефолтный домен
    • домен для тестирования лдапа
clouds:
  test:
    identity-api-version: 3
    auth:
      auth_url: http://172.17.35.25:35357/v3/
      project_name: admin
      username: admin
      password: admin
      project_domain_id: default
      user_domain_id: default
    region_name: RegionOne
  ldaptest1:
    identity-api-version: 3
    auth:
      auth_url: http://172.17.35.25:35357/v3/
      project_name: sirmax
      username: sirmax
      password: r00tme
      project_domain_id: e33e580874f046c39949500462f80a3c
      user_domain_id: e33e580874f046c39949500462f80a3c
    region_name: RegionOne


Создать домент так:

openstack --os-identity-api-version 3   domain create --description "Test ldap  backend   Domain" ldap
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Test ldap  backend   Domain      |
| enabled     | True                             |
| id          | 0799329296c64c3192d3479cd2c18614 |
| name        | ldap                             |
+-------------+----------------------------------+


openstack  --debug   --os-cloud  test domain list

+----------------------------------+----------+---------+-----------------------+
| ID                               | Name     | Enabled | Description           |
+----------------------------------+----------+---------+-----------------------+
| 69ecb5b256c14d168d788e5f69b367a2 | test1    | True    | ldap backend   Domain |
| default                          | Default  | True    | The default domain    |
| e33e580874f046c39949500462f80a3c | ldaptest | True    | ldap backend   Domain |
+----------------------------------+----------+---------+-----------------------+


Создание проекта и назначение роли

openstack  --debug   --os-cloud  test  project create --domain ldaptest  --description "test"  testproject


+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | test                             |
| domain_id   | e33e580874f046c39949500462f80a3c |
| enabled     | True                             |
| id          | facc7e61f02b4b8084973efdd54cd8fd |
| is_domain   | False                            |
| name        | testproject                      |
| parent_id   | e33e580874f046c39949500462f80a3c |
+-------------+----------------------------------+
openstack  --debug   --os-cloud  test domain list


+----------------------------------+----------+---------+-----------------------+
| ID                               | Name     | Enabled | Description           |
+----------------------------------+----------+---------+-----------------------+
| 69ecb5b256c14d168d788e5f69b367a2 | test1    | True    | ldap backend   Domain |
| default                          | Default  | True    | The default domain    |
| e33e580874f046c39949500462f80a3c | ldaptest | True    | ldap backend   Domain |
+----------------------------------+----------+---------+-----------------------+


openstack  --debug   --os-cloud  test user list --domain ldaptest


+------------------------------------------------------------------+--------+
| ID                                                               | Name   |
+------------------------------------------------------------------+--------+
| ca5c3062cd6030942e7de61e57278b8755675c26cc2d17a8448408e2a7bafc97 | sirmax |
| 593ef710581a7ad614727971d84bef0610d5f7aa359c44919461d5cd24ae0aee | test   |
+------------------------------------------------------------------+--------+

openstack  --debug   --os-cloud  test role add --project testproject --user 593ef710581a7ad614727971d84bef0610d5f7aa359c44919461d5cd24ae0aee   admin

После чего этот пользователь сможет работать с минимальной конфигурацией - например получать токены
Добавить секцию в clouds.yaml

  ldaptest2:
    identity-api-version: 3
    auth:
      auth_url: http://172.17.35.25:35357/v3/
      project_name: testproject
      username: test
      password: r00tme
      project_domain_id: e33e580874f046c39949500462f80a3c
      user_domain_id: e33e580874f046c39949500462f80a3c
    region_name: RegionOne
openstack  --debug   --os-cloud  ldaptest2  token issue


+------------+------------------------------------------------------------------+
| Field      | Value                                                            |
+------------+------------------------------------------------------------------+
| expires    | 2016-08-16T16:27:26.499057Z                                      |
| id         | a2cba9fe1eca4190887de2222753f744                                 |
| project_id | facc7e61f02b4b8084973efdd54cd8fd                                 |
| user_id    | 593ef710581a7ad614727971d84bef0610d5f7aa359c44919461d5cd24ae0aee |
+------------+------------------------------------------------------------------+

Ссылки