5.5. Ansible を使用した TLS-e の実装
新しい tripleo-ipa
メソッドを使用して、どこでも TLS (TLS-e) と呼ばれるオーバークラウドエンドポイントで SSL/TLS を有効にすることができます。必要な証明書の数が多いため、Red Hat OpenStack Platform は Red Hat Identity Management (IdM) と統合されています。tripleo-ipa
を使用して TLS-e を設定する場合、IdM が認証局です。
前提条件
- stack ユーザーの作成など、アンダークラウドの設定手順がすべて完了していること。詳細は、director を使用した Red Hat OpenStack Platform のインストールおよび管理 を参照してください。
DNS サーバーの IP アドレスは、アンダークラウド上で IdM サーバーの IP アドレスに設定されます。以下のパラメーターのいずれかを
undercloud.conf
ファイルに設定する必要があります。-
DEFAULT/undercloud_nameservers
-
%SUBNET_SECTION%/dns_nameservers
-
手順
次の手順で、Red Hat OpenStack Platform の新規インストール、または TLS-e で設定する既存のデプロイメントに TLS-e を実装します。事前にプロビジョニングされたノードに TLS-e を設定した Red Hat OpenStack Platform をデプロイする場合は、この方式を使用する必要があります。
既存の環境に TLS-e を実装している場合は、openstack undercloud install
や openstack overcloud deploy
などのコマンドを実行する必要があります。これらの手順はべき等性を持ち、更新されたテンプレートおよび設定ファイルと一致するように既存のデプロイメント設定を調整するだけです。
/etc/resolv.conf
ファイルを設定します。アンダークラウドの
/etc/resolv.conf
に、適切な検索ドメインおよびネームサーバーを設定します。たとえば、デプロイメントドメインがexample.com
で FreeIPA サーバーのドメインがbigcorp.com
の場合、以下の行を /etc/resolv.conf に追加します。search example.com bigcorp.com nameserver $IDM_SERVER_IP_ADDR
必要なソフトウェアをインストールします。
sudo dnf install -y python3-ipalib python3-ipaclient krb5-devel
ご自分の環境に固有の値で環境変数をエクスポートします。
export IPA_DOMAIN=bigcorp.com export IPA_REALM=BIGCORP.COM export IPA_ADMIN_USER=$IPA_USER 1 export IPA_ADMIN_PASSWORD=$IPA_PASSWORD 2 export IPA_SERVER_HOSTNAME=ipa.bigcorp.com export UNDERCLOUD_FQDN=undercloud.example.com 3 export USER=stack export CLOUD_DOMAIN=example.com
アンダークラウドで
undercloud-ipa-install.yaml
Ansible Playbook を実行します。ansible-playbook \ --ssh-extra-args "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \ /usr/share/ansible/tripleo-playbooks/undercloud-ipa-install.yaml
undercloud.conf に以下のパラメーターを追加します。
undercloud_nameservers = $IDM_SERVER_IP_ADDR overcloud_domain_name = example.com
[オプション] IPA レルムが IPA ドメインと一致しない場合は、
certmonger_krb_realm
パラメーターの値を設定します。/home/stack/hiera_override.yaml
でcertmonger_krb_realm
の値を設定します。parameter_defaults: certmonger_krb_realm: EXAMPLE.COMPANY.COM
undercloud.conf
でcustom_env_files
パラメーターの値を/home/stack/hiera_override.yaml
に設定します。custom_env_files = /home/stack/hiera_override.yaml
アンダークラウドをデプロイします。
openstack undercloud install
検証
以下の手順を実施して、アンダークラウドが正しく登録されたことを確認します。
IdM のホストをリスト表示します。
$ kinit admin $ ipa host-find
アンダークラウドに
/etc/novajoin/krb5.keytab
が存在することを確認します。ls /etc/novajoin/krb5.keytab
novajoin
というディレクトリー名は、従来の方式に対応させる目的でのみ使用されています。
オーバークラウドでの TLS-e の設定
TLS everywhere (TLS-e) を設定したオーバークラウドをデプロイする場合、アンダークラウドおよびオーバークラウドの IP アドレスは自動的に IdM に登録されます。
オーバークラウドをデプロイする前に、以下のような内容で YAML ファイル
tls-parameters.yaml
を作成します。お使いの環境に固有の値を選択してください。parameter_defaults: DnsSearchDomains: ["example.com"] CloudDomain: example.com CloudName: overcloud.example.com CloudNameInternal: overcloud.internalapi.example.com CloudNameStorage: overcloud.storage.example.com CloudNameStorageManagement: overcloud.storagemgmt.example.com CloudNameCtlplane: overcloud.ctlplane.example.com IdMServer: freeipa-0.redhat.local IdMDomain: redhat.local IdMInstallClientPackages: False resource_registry: OS::TripleO::Services::IpaClient: /usr/share/openstack-tripleo-heat-templates/deployment/ipa/ipaservices-baremetal-ansible.yaml
-
OS::TripleO::Services::IpaClient
パラメーターに示す値は、enable-internal-tls.yaml
ファイルのデフォルト設定を上書きします。openstack overcloud deploy
コマンドで、enable-internal-tls.yaml
の後にtls-parameters.yaml
ファイルを指定するようにします。 - TLS-e の実装に使用するパラメーターの詳細は、tripleo-ipa のパラメーター を参照してください。
-
[オプション] IPA レルムが IPA ドメインと一致しない場合は、
tls-parameters.yaml
ファイルにCertmongerKerberosRealm
パラメーターの値も含める必要があります。CertmongerKerberosRealm: EXAMPLE.COMPANY.COM
オーバークラウドをデプロイする。デプロイメントコマンドに tls-parameters.yaml を追加する必要があります。
DEFAULT_TEMPLATES=/usr/share/openstack-tripleo-heat-templates/ CUSTOM_TEMPLATES=/home/stack/templates openstack overcloud deploy \ -e ${DEFAULT_TEMPLATES}/environments/ssl/tls-everywhere-endpoints-dns.yaml \ -e ${DEFAULT_TEMPLATES}/environments/services/haproxy-public-tls-certmonger.yaml \ -e ${DEFAULT_TEMPLATES}/environments/ssl/enable-internal-tls.yaml \ -e ${CUSTOM_TEMPLATES}/tls-parameters.yaml \ ...
keystone にエンドポイントリストのクエリーを行い、各エンドポイントが HTTPS を使用していることを確認します。
openstack endpoint list