1.4. コントローラーノードでの OpenStack Identity ドメインの設定

外部のユーザー管理サービスと統合する OpenStack Identity (keystone) を実行するコントローラーノードを設定するには、まず LDAP 認証を使用するように SELinux を設定し、コントローラーノードに domains ディレクトリーを作成します。次に、OpenStack Identity が複数のバックエンドを使用するように設定します。また、Dashboard が複数のドメインを使用するように設定します。

注記

director を使用している場合には、以下の手順で参照されている設定ファイルが Puppet によって管理されている点に注意してください。このため、openstack overcloud deploy コマンドを実行するたびに、自分で追加したカスタム設定が上書きされる可能性があります。

プランニング

設定ファイルを更新する場合には、特定の OpenStack サービスはコンテナー内で実行されるようになったことを認識する必要があります。これは、keystone、nova、cinder などのサービスが対象です。そのため、考慮すべき特定の管理プラクティスがいくつかあります。

  • 物理ノードのホストオペレーティングシステム上の設定ファイル (例: /etc/cinder/cinder.conf) は更新しないでください。コンテナー化されたサービスはこのようなファイルを参照しません。
  • コンテナー内で実行されている設定ファイルは更新しないでください。コンテナーを再起動すると変更が失われてしまいます。

    代わりに、コンテナー化されたサービスに変更を加える必要がある場合は、コンテナーの生成に使用される設定ファイルを更新する必要があります。これらのファイルは /var/lib/config-data/puppet-generated/ 内に保管されています。

    以下に例を示します。

    • keystone: /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf
    • cinder: /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf
    • nova: /var/lib/config-data/puppet-generated/nova/etc/nova/nova.conf

    変更内容は、サービスを再起動した後に適用されます。例: sudo systemctl restart tripleo_keystone

Procedure

OpenStack Identity (keystone) サービスを実行するそれぞれのコントローラーノードで、この手順を実施します。

  1. SELinux を設定します。

    # setsebool -P authlogin_nsswitch_use_ldap=on

    出力には、以下のようなメッセージが含まれている場合がありますが、これは無視できます。

    Full path required for exclude: net:[4026532245].
  2. domains ディレクトリーを作成します。

    # mkdir /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/
    # chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/
  3. keystone が複数のバックエンドを使用するように設定します。

    注記

    dnf install crudini を使用して crudini をインストールする必要がある場合があります。

    # crudini --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf identity domain_specific_drivers_enabled true
    # crudini --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf identity domain_config_dir /etc/keystone/domains
    # crudini --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf assignment driver sql
  4. Dashboard で複数のドメインを有効にします。以下の行を /var/lib/config-data/puppet-generated/horizon/etc/openstack-dashboard/local_settings に追加します。

    OPENSTACK_API_VERSIONS = {
        "identity": 3
    }
    OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
    OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
    注記

    director を使用している場合には、/var/lib/config-data/puppet-generated/horizon/etc/openstack-dashboard/local_settings が Puppet によって管理されている点に注意してください。このため、カスタムの設定を追加しても、openstack overcloud deploy プロセスを実行するたびに上書きされる可能性があります。上書きされた場合には、この設定を毎回手動で追加し直す必要がある場合があります。

    horizon コンテナーを再起動して、設定を適用します。

    $ sudo systemctl restart tripleo_horizon
  5. 前のステップでドメイン名として取得した NetBIOS 名の値で、外部サービスとの統合用の keystone ドメインを作成します。このアプローチでは、ログインプロセス中に、一貫したドメイン名をユーザーに提示することができます。以下の例では、LAB は、Identity サービスドメインとして使用する NetBIOS の名前に置き換えます。

    $ openstack domain create LAB
    注記

    このコマンドが使用できない場合には、# source overcloudrc-v3 のコマンドを実行して、コマンドラインセッションでの keystone v3 へのアクセスが有効化されているかどうかを確認します。

  6. 統合する外部サービスの設定ファイルを作成します。

    • Active Directory Domain Service (AD DS):/var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/keystone.LAB.conf (LAB は、前のステップで取得した NetBIOS 名に置き換えます) という名前の新規ファイルに LDAP 設定を入力します。以下の設定例は、実際に使用する LDAP デプロイメントに合わせて編集する必要があります。

      [ldap]
      url                  = ldaps://addc.lab.local:636
      user                  = CN=svc-ldap,OU=labUsers,DC=lab,DC=local
      password                 = RedactedComplexPassword
      suffix                   = DC=lab,DC=local
      user_tree_dn             = OU=labUsers,DC=lab,DC=local
      user_objectclass         = person
      user_filter                  = (|(memberOf=cn=grp-openstack,OU=labUsers,DC=lab,DC=local)(memberOf=cn=grp-openstack-admin,OU=labUsers,DC=lab,DC=local)(memberOf=memberOf=cn=grp-openstack-demo,OU=labUsers,DC=lab,DC=local))
      user_id_attribute        = sAMAccountName
      user_name_attribute      = sAMAccountName
      user_mail_attribute      = mail
      user_pass_attribute      =
      user_enabled_attribute   = userAccountControl
      user_enabled_mask        = 2
      user_enabled_default     = 512
      user_attribute_ignore    = password,tenant_id,tenants
      group_objectclass        = group
      group_tree_dn            = OU=labUsers,DC=lab,DC=local
      group_filter             = (CN=grp-openstack*)
      group_id_attribute       = cn
      group_name_attribute     = name
      use_tls                  = False
      tls_cacertfile                  =/etc/pki/ca-trust/source/anchors/anchorsaddc.lab.local.pem
      
      query_scope                  = sub
      chase_referrals                  = false
      
      [identity]
      driver = ldap

      各設定項目について説明します。

      設定説明

      url

      認証に使用する AD Domain Controller。LDAPS ポート 636 を使用します。

      user

      LDAP クエリーに使用する AD アカウントの 識別名。たとえば、Get-ADuser svc-ldap | select DistinguishedName を使用する AD 内の svc-ldap アカウントの 識別名 の値を特定することができます。

      password

      上記で使用した AD アカウントのパスワード (プレーンテキスト形式)。

      suffix

      AD ドメインの 識別名。この値は、Get-ADDomain | select DistinguishedName を使用して特定することができます。

      user_tree_dn

      OpenStack アカウントを含む 組織単位 (OU)。

      user_objectclass

      LDAP ユーザーの種別を定義します。AD には person の種別を使用します。

      user_filter

      Identity サービスに対して提示するユーザーをフィルタリングします。その結果、grp-openstack グループのメンバーのみに Identity サービスで定義されているパーミッションを付与することができます。この値には、グループの 完全な識別名 が必要です: Get-ADGroup grp-openstack | select DistinguishedName

      user_id_attribute

      ユーザー ID に使用する AD 値をマッピングします。

      user_name_attribute

      names に使用する AD 値をマッピングします。

      user_mail_attribute

      ユーザーのメールアドレスに使用する AD 値をマッピングします。

      user_pass_attribute

      この値は空白のままにします。

      user_enabled_attribute

      アカウントが有効にされているかどうかを検証する AD の設定。

      user_enabled_mask

      アカウントが有効化されているかを判断するために確認すべき値を定義します。ブール値が返されない場合に使用します。

      user_enabled_default

      アカウントが有効化されていることを示す AD 値。

      user_attribute_ignore

      Identity サービスが無視する必要のあるユーザー属性を定義します。

      group_objectclass

      groups に使用する AD 値をマッピングします。

      group_tree_dn

      そのユーザーグループを含む 組織単位 (OU)。

      group_filter

      Identity サービスに提示するグループをフィルタリングします。

      group_id_attribute

      グループ ID に使用する AD 値をマッピングします。

      group_name_attribute

      グループ名に使用する AD 値をマッピングします。

      use_tls

      TLS を使用するかどうかを定義します。STARTTLS ではなく LDAPS で暗号化する場合には、無効にする必要があります。

      tls_cacertfile

      .crt 証明書ファイルへのパスを指定します。

      query_scope

      grp-openstack グループに所属するユーザーを特定する場合に、Identity サービスがネスト化された子 OU 内での検索ができるように設定します。

      chase_referrals

      false に設定します。この設定により python-ldap が匿名のアクセスによる全参照を追跡しないようにします。

    • Red Hat Identity Manager (IdM): /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/keystone.LAB.conf (LAB は、前のステップで作成したドメイン名に置き換えます) という名前の新規ファイルに LDAP 設定を入力します。以下の設定例は、実際に使用する IdM デプロイメントに合わせて編集する必要があります。

      [ldap]
      url =  ldaps://idm.lab.local
      user = uid=svc-ldap,cn=users,cn=accounts,dc=lab,dc=local
      user_filter = (memberOf=cn=grp-openstack,cn=groups,cn=accounts,dc=lab,dc=local)
      password = RedactedComplexPassword
      user_tree_dn = cn=users,cn=accounts,dc=lab,dc=local
      user_objectclass = inetUser
      user_id_attribute = uid
      user_name_attribute = uid
      user_mail_attribute = mail
      user_pass_attribute =
      group_tree_dn               = cn=groups,cn=accounts,dc=lab,dc=local
      group_objectclass              = groupOfNames
      group_id_attribute            = cn
      group_name_attribute       =  cn
      group_member_attribute  = member
      group_desc_attribute        = description
      use_tls                  = False
      query_scope                  = sub
      chase_referrals                  = false
      tls_cacertfile =/etc/pki/ca-trust/source/anchors/anchorsca.crt
      
      [identity]
      driver = ldap

      各設定項目について説明します。

      設定説明

      url

      認証に使用する IdM サーバー。LDAPS ポート 636 を使用します。

      user

      LDAP クエリーに使用する IdM 内のアカウント。

      password

      上記で使用した IdM アカウントのパスワード (プレーンテキスト形式)。

      user_filter

      Identity サービスに対して提示するユーザーをフィルタリングします。その結果、grp-openstack グループのメンバーのみに Identity サービスで定義されているパーミッションを付与することができます。

      user_tree_dn

      IdM 内の OpenStack アカウントへのパス。

      user_objectclass

      LDAP ユーザーの種別を定義します。IdM には inetUser の種別を使用します。

      user_id_attribute

      ユーザー ID に使用する IdM 値をマッピングします。

      user_name_attribute

      names に使用する IdM 値をマッピングします。

      user_mail_attribute

      ユーザーのメールアドレスに使用する IdM 値をマッピングします。

      user_pass_attribute

      この値は空白のままにします。

      注記

      IdM グループとの統合で返されるのは直接のメンバーだけで、ネスト化されたグループは返されません。したがって、LDAP_MATCHING_RULE_IN_CHAIN または memberof:1.2.840.113556.1.4.1941: に依存するクエリーは、現在 IdM では機能しません。

  7. 設定ファイルの所有権を keystone ユーザーに変更します。

    # chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/keystone.LAB.conf
  8. keystone サービスを再起動して、変更を適用します。

    # sudo systemctl restart tripleo_keystone