OpenStack-02-OpenStack LDAP 对接

Reference: Keystone Configuration 下的 Integrate Identity with LDAP。

LDAP 配置修改

  1. Keystone 配置文件添加如下几行(/etc/keystone/domains 是容器内的路径,不需要修改):

    # /etc/kolla/keystone/keystone.conf
    
    [identity]
    domain_specific_drivers_enabled = True
    domain_config_dir = /etc/keystone/domains
    
    [assignment]
    driver = sql
    
  2. 开启多 Domain 登录 Horizon:

    # /etc/kolla/horizon/local_settings
    OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
    
  3. 重启 Horizon 容器

    docker ps | grep horizon | awk '{print $1}' | xargs docker restart
    

    重启后,会有一段时间页面显示 503,稍等即可恢复。

  4. 添加 Keystone Domain 配置文件如下:

    # /etc/kolla/keystone/domains/keystone.new_domain_name.conf
    
    [identity]
    driver = ldap
    
    [ldap]
    chase_referrals = true
    
    url = ldap://xxx:389
    user = CN=xxx,OU=xxx,OU=xxx,DC=xxx,DC=xxx
    password = "xxx"
    suffix = dc=xxx,dc=xxx
    
    user_tree_dn = ou=xxx,dc=xxx,dc=xxx
    user_objectclass = organizationalPerson
    user_name_attribute = sAMAccountName
    user_mail_attribute = mail
    user_id_attribute = sAMAccountName
    use_tls = False
    
    user_allow_create = False
    user_allow_update = False
    user_allow_delete = False
    group_allow_create = False
    group_allow_update = False
    group_allow_delete = False
    
    query_scope = sub
    page_size = 0
    group_members_are_ids = True
    debug_level = 4095
    
    use_pool = true
    pool_size = 10
    pool_connection_timeout = -1
    pool_connection_lifetime = 600
    
    use_auth_pool = true
    auth_pool_size = 100
    auth_pool_connection_lifetime = 600
    

    其中,debug_level = 4095 表示最高的 debug 级别,在 /var/log/kolla/keystone/keystone.log 中会有完整的调试日志。

  5. 重启 Keystone

    docker ps | grep keystone | awk '{print $1}' | xargs docker restart
    
  6. 创建一个新的 Domain,叫 new_domain_name;创建一个新的 Project,叫 prod:

    # 导入 Openstack 环境变量
    source /etc/kolla/admin-openrc.sh
    source /opt/openstack/venv/bin/activate
    
    # 创建一个新的 domain
    openstack domain create new_domain_name
    
    # 查看已有的 domain 列表
    openstack domain list
    
    # 创建一个新的 project
    openstack project create prod --domain new_domain_name
    
    # 查看已有的 project 列表
    openstack project list --long
    
  7. 导入 LDAP 已有的 id_mapping,这中间会有大量 id 映射的日志刷屏,导入需要一段时间:

    (venv) [root@fzo ~]# docker exec -it keystone bash
    (keystone)[root@localhost /]# keystone-manage mapping_populate --domain-name new_domain_name
    (keystone)[root@localhost /]# exit
    
  8. 对账户进行授权

    # 查看 Role
    openstack role list
    
    # 添加 domain 权限
    openstack role add --user-domain new_domain_name --user san.zhang admin --domain new_domain_name
    
    # 添加 project 权限
    openstack role add --user-domain new_domain_name --user san.zhang admin --project prod
    
    # 查看 Role 授权情况
    openstack role assignment list
    

补充说明

调试时会使用到的日志文件位置

# Keystone 调试日志,用于查看 LDAP 认证、授权过程的日志
tailf /var/log/kolla/keystone/keystone.log
tailf /var/log/kolla/keystone/keystone-apache-public-error.log

# Horizon 调试日志,用于查看 LDAP 登录过程的日志
tailf /var/log/kolla/horizon/horizon.log

ldapsearch 工具的使用

先测一下拿到手的 ldap 配置是否信息正确,符合预期。

ldapsearch -x -h _ldap_server_ip_ -p 389 -D "CN=xxx,OU=xxx,OU=xxx,DC=xxx,DC=xxx" -w xxx -b "ou=xxx,dc=xxx,dc=xxx"

Mariadb 信息查看

Mariadb 查看 Keystone LDAP id_mapping 的记录,Mariadb 的密码存在 Kolla-Ansible 密码文件 /etc/kolla/passwords.yml 中;或者进入 Mariadb 容器中查看 /etc/my.cnf 之类的 MySQL 配置文件,也可以查找到对应条目信息。

docker exec -it mariadb mysql -ukeystone -pxxx keystone
MariaDB [keystone]> select * from id_mapping;	

关于进一步的 Role/Policy 权限设置

可以参考:Mapping of policy target to API

你可能感兴趣的:(OpenStack,bin,云计算)