1.8. Identity サービスの設定
以下のステップでは、Identity サービス (keystone) を AD DS と統合するための準備をします。
director を使用している場合には、以下で参照されている設定ファイルが Puppet によって管理されている点に注意してください。このため、openstack overcloud deploy
プロセスを実行するたびに、自分で追加したカスタム設定が上書きされる可能性があります。これらの設定を director ベースのデプロイメントに適用するには、「4章director でのドメイン固有の LDAP バックエンドの使用」を参照してください。
1.8.1. コントローラーの設定
設定ファイルを更新する場合には、特定の 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
keystone サービスを実行しているそれぞれの OpenStack ノードで、以下の手順を実行します。
SELinux を設定します。
# setsebool -P authlogin_nsswitch_use_ldap=on
出力には、以下のようなメッセージが含まれている場合がありますが、これは無視できます。
Full path required for exclude: net:[4026532245].
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/
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
注記director を使用している場合には、
/var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf
が Puppet によって管理されている点に注意してください。このため、openstack overcloud deploy
プロセスを実行するたびに、自分で追加したカスタム設定が上書きされる可能性があります。上書きされた場合には、この設定を毎回手動で追加し直す必要がある場合があります。director ベースのデプロイメントについては、「4章director でのドメイン固有の LDAP バックエンドの使用」を参照してください。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
追加のバックエンドを設定します。
以下の例では、
LAB
は、Identity サービスドメインとして使用する NetBIOS の名前です。AD DS を統合するための keystone ドメインを作成します。
上記のステップで取得した NetBIOS 名の値をドメイン名として使用します。このアプローチでは、ログインプロセス中に、一貫したドメイン名をユーザーに提示することができます。たとえば、NetBIOS 名が
LAB
の場合には、以下のコマンドを実行します。$ openstack domain create LAB
注記このコマンドが使用できない場合には、
# source overcloudrc-v3
のコマンドを実行して、コマンドラインセッションでの keystone v3 へのアクセスが有効化されているかどうかを確認します。設定ファイルを作成します。
AD DS バックエンドを追加するには、
/var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/keystone.LAB.conf
(LAB
は、前のステップで取得した NetBIOS 名に置き換えます) という名前の新規ファイルに LDAP 設定を入力します。以下の設定例は、実際に使用する AD DS デプロイメントに合わせて編集する必要があります。[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
が匿名のアクセスによる全参照を追跡しないようにします。
設定ファイルの所有権を keystone ユーザーに変更します。
# chown 42425:42425 /var/lib/config-data/puppet-generated/keystone/etc/keystone/domains/keystone.LAB.conf
keystone サービスを再起動して、変更を適用します。
# sudo podman exec -it keystone pkill -HUP -f keystone
admin
ユーザーに、ドメインのアクセス権を付与します。注記この手順を実行しても、OpenStack admin アカウントには実際の AD DS ドメインに対するパーミッションは付与されない点を念頭に置いてください。この場合には、ドメイン という用語は、OpenStack が使用する keystone ドメインのことを指しています。
LAB
ドメインのID
を取得します。# openstack domain show LAB +---------+----------------------------------+ | Field | Value | +---------+----------------------------------+ | enabled | True | | id | 6800b0496429431ab1c4efbb3fe810d4 | | name | LAB | +---------+----------------------------------+
admin ユーザーの
ID
の値を取得します。# openstack user list --domain default | grep admin | 3d75388d351846c6a880e53b2508172a | admin |
admin ロールの
ID
の値を取得します。# openstack role list +----------------------------------+-----------------+ | ID | Name | +----------------------------------+-----------------+ | 01d92614cd224a589bdf3b171afc5488 | admin | | 034e4620ed3d45969dfe8992af001514 | member | | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin | | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user | | cfea5760d9c948e7b362abc1d06e557f | reader | | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator | | ef3d3f510a474d6c860b4098ad658a29 | service | +----------------------------------+-----------------+
返されたドメインおよび admin の ID を使用して、keystone
LAB
ドメインのadmin
ロールにadmin
ユーザーを 追加するコマンドを構築します。# openstack role add --domain 6800b0496429431ab1c4efbb3fe810d4 --user 3d75388d351846c6a880e53b2508172a 785c70b150ee4c778fe4de088070b4cf
コマンドで NetBIOS 名を指定して、AD DS ドメイン内のユーザー一覧を確認します。
注記リブートまたはサービスの再起動後には、LDAP に対してクエリーを実行できるようになるまでに多少時間がかかる場合があります。
# openstack user list --domain LAB
ローカルの Identity サービスデータベース内のサービスアカウントを確認します。
# openstack user list --domain default