第12章 制御された環境での Identity Management のデプロイ: 概念実証
隔離された安全なサンドボックス環境内における RHEL の Identity Management (IdM) の基本的な機能と概念を紹介します。
以下の内容をハンズオン形式で体験できます。
- Ansible 自動化を使用して、IdM サーバー、レプリカ、およびクライアントで構成される最小限の IdM クラスターをインストールします。
-
IdM Web UI から、ホストベースのアクセス制御、ロールベースのアクセス制御、および
sudoルールを中心に、認証とさまざまなアクセス制御を設定します。IdM Web UI は直感的で、IdM の操作を始めるのに最適な出発点です。 - Ansible を使用して、上記と同じ認証およびアクセス制御設定を実行し、Ansible Playbook がシステム管理にもたらすシンプルさ、自動化、スケーラビリティーを確認します。
制御された環境での Identity Management のデプロイ: 概念実証 は、さまざまな IdM 機能をテストして理解し、実稼働環境にデプロイする準備を支援することを目的としたものです。実稼働環境で直接使用するためのものではありません。
12.1. 制御された環境での RHEL Identity Management のインストール リンクのコピーリンクがクリップボードにコピーされました!
実稼働環境へのデプロイ前にテストを行うために、RHEL 上で Identity Management (IdM) の基本的なインストールを実行する方法を説明します。Ansible Playbook を使用してソフトウェアをインストールします。これにより、利便性と再現性が確保されます。
12.1.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- 16 GB 以上の RAM を搭載し、Red Hat Enterprise Linux (RHEL) を実行中のシステム
- RHEL サブスクリプション
用語と前提
-
ansible_userは、管理対象ノード上のアカウントです。Ansible Playbook で定義されているアクションを実行するために使用されます。このユーザーには、root 権限を必要とするコマンドを実行するための sudo 特権が付与されています。 - controller.idm.example.com は、Ansible コントロールノードの名前です。コントロールノードは、Ansible Playbook が保存および実行されるホストです。
- server.idm.example.com、replica.idm.example.com、client.idm.example.com は、RHEL の Identity Management がインストールおよび設定されている管理対象ノードです。
- コントロールノードと管理対象ノードは仮想マシン上で実行されています。これらの仮想マシンはすべて、RHEL を実行する 1 つの物理システムにインストールされます。
12.1.2. 概念実証として IdM 用の仮想マシンに RHEL をインストールする リンクのコピーリンクがクリップボードにコピーされました!
後で ansible-freeipa RPM コレクションを使用して IdM クラスターをインストールできるように、仮想マシンに RHEL をインストールする方法を説明します。
前提条件
- Red Hat カスタマーポータルから RHEL 8、9、または 10 の最新の ISO イメージをダウンロードした。
手順
ISO イメージを使用して、controller システム用の新しい仮想マシンをインストールします。詳細は、インストールメディアからの RHEL の対話型インストール を参照してください。インストールの際は、次の点に注意してください。
- Virtual Machine Manager (VMM) を使用して仮想マシンをインストールする場合は、controller、server、replica、および client のホストに名前を付けて、VMM UI 内の名前を CLI 上のホストの名前と一致させます。
- IdM サーバーとレプリカをインストールする仮想マシン用に、少なくとも 4 GB の RAM を確保します。クライアントシステム用には 1 GB あれば十分です。
- IdM サーバー、レプリカ、クライアントのストレージ用に 30 GB を確保します。
- Test and Install ではなく、Install を選択します。
-
インストール中に controller 上にローカルの
ansible_userユーザーを作成します。 -
ansible_userユーザーに覚えやすいパスワード (例: 12345) を設定します。 - Root password セクションで、覚えやすいパスワード (例: 1234) を入力します。
-
Allow root SSH login with passwordチェックボックスをオンにします。
インストールが完了したら、controller 仮想マシンのホスト名を設定します。
-
controller 仮想マシンの CLI で、
nmtuiと入力します。 - 下矢印キーを使用して、Set system hostname を選択します。
新しく開いたウィンドウに、controller.idm.example.com と入力します。
ホスト名は、controller.idm.example.com などの完全修飾ドメイン名である必要があります。詳細は、Identity Management のインストール の IdM の DNS ホスト名および DNS の要件への対応 を参照してください。
-
下矢印キーと右矢印キーを使用して、
OKを選択します。 -
もう一度
OKをクリックして、新しいホスト名を確定します。 -
上位のインターフェイスで、下矢印キーと右矢印キーを使用して
OKとQuitを選択します。 [オプション] ホスト名を検証するために、システム上の
hostnameユーティリティーを使用します。$ hostnamecontroller.idm.example.comhostnameの出力は、localhostまたはlocalhost6以外である必要があります。
-
controller 仮想マシンの CLI で、
- 他のすべての仮想マシン (server、replica、client) についても上記の手順を繰り返します。
すべての仮想マシン上で
ansible_userに sudo 特権を設定します。controller に
rootとして SSH 接続します。your-physical-system]$ ssh root@controller/etc/sudoers.d/ansible_userファイルを作成して、ansible_userにパスワードなしのsudoを設定します。# echo "ansible_user ALL=(ALL) NOPASSWD: ALL" | tee /etc/sudoers.d/ansible_user- 管理対象のすべてのノード、server、replica、および client でこの手順を繰り返します。
注記この章全体を通して、コントローラーに
ansible_userとしてログインしている場合、root特権を必要とするコマンドを実行する前にsudoを使用する必要があります。IP アドレスの代わりにホスト名を使用して、個々のシステムへ相互にログインできるように設定します。
controller の CLI で次のように入力します。
$ ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:b7:e6:ac brd ff:ff:ff:ff:ff:ff inet 192.168.122.86/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0 valid_lft 3106sec preferred_lft 3106sec inet6 fe80::5054:ff:feb7:e6ac/64 scope link noprefixroute valid_lft forever preferred_lft forever192.168.X.X. で始まる IP アドレスをメモします。
- 他のすべての仮想ホストでも同じことを行います。
controller で、
sudoを使用して、すべての仮想システムのホスト名と IP アドレスを/etc/hostsファイルに追加します。ファイルは次のようになります。127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.122.86 controller.idm.example.com controller 192.168.122.42 server.idm.example.com server 192.168.122.103 replica.idm.example.com replica 192.168.122.200 client.idm.example.com client-
物理システムの
/etc/hostsファイルも同様に更新します。
controller のオペレーティングシステムが最新であることを確認します。
ローカルシステムから controller 上の
ansible_userアカウントに SSH 接続します。your-physical-system]$ ssh ansible_user@controllercontroller 仮想マシンを Red Hat のサブスクリプション管理サービスに登録します。
$ sudo subscription-manager register --username <your_user_name> --password <your_password>最新のパッケージを使用していることを確認します。
$ sudo yum update- 他のすべての仮想マシンについても上記の手順を繰り返します。
検証
完全修飾ドメイン名 (
FQDN) または短縮名を使用して、物理システムといずれかの仮想システム間の接続をテストします。your-physical-system]$ ping controllerPING controller.idm.example.com (192.168.122.86) 56(84) bytes of data. 64 bytes from controller.idm.example.com (192.168.122.86): icmp_seq=1 ttl=64 time=0.353 ms 64 bytes from controller.idm.example.com (192.168.122.86): icmp_seq=2 ttl=64 time=0.398 ms 64 bytes from controller.idm.example.com (192.168.122.86): icmp_seq=3 ttl=64 time=0.453 ms
12.1.3. Ansible Playbook を使用して IdM をインストールするためのコントロールノードの準備 リンクのコピーリンクがクリップボードにコピーされました!
管理対象ノードに IdM をインストールして設定するために、Ansible コントロールノードを準備する方法を説明します。
前提条件
手順
コントローラーシステム上で、
ansible_userとしてログインし、SSH公開鍵および秘密鍵を作成します。[ansible_user@controller]$ ssh-keygenGenerating public/private rsa key pair. Enter file in which to save the key (/home/ansible_user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): [Enter] Enter same passphrase again: [Enter] ...鍵ファイルの保存場所として、推奨されているデフォルトの場所を使用してください。これは PoC 環境であるため、パスフレーズは空のままにしておきます。
~/.ansible.cfgファイルを次の内容で作成します。[defaults] inventory = /home/ansible_user/inventory remote_user = ansible_user [privilege_escalation] become = True become_method = sudo become_user = root注記~/.ansible.cfgファイルの設定は優先度が高く、グローバルな/etc/ansible/ansible.cfgファイルの設定をオーバーライドします。これらの設定を使用して、Ansible は次のアクションを実行します。
- 指定されたインベントリーファイルでホストを管理します。
-
管理対象ノードへの
SSH接続を確立するときに、remote_userパラメーターで設定されたアカウントを使用します。 -
権限昇格が必要なタスクを実行する際に、
sudoを使用してroot特権に昇格します。ansible_userはパスワードなしの sudo (NOPASSWD) で設定されているため、Ansible はパスワードの入力を求めません。
管理対象ホストのホスト名と必要なインストール変数の値をリストした、INI または YAML 形式の
~/inventoryファイルを作成します。[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=True ipaserver_auto_forwarders=True ipaadmin_password=Secret123 ipadm_password=Secret123 [ipareplicas] replica.idm.example.com [ipareplicas:vars] ipareplica_setup_dns=true ipareplica_auto_forwarders=true ipaadmin_password=Secret123 ipareplica_servers=server.idm.example.com [ipaclients] client.idm.example.com [ipaclients:vars] ipaadmin_password=Secret123 ipaclient_domain=idm.example.com ipaclient_configure_dns_resolver=true ipaclient_dns_servers=192.168.122.1 ipaclient_servers=server.idm.example.com次の内容を含む
install-cluster.ymlファイルを作成します。--- - name: Play to configure IPA server hosts: ipaserver become: true roles: - role: freeipa.ansible_freeipa.ipaserver state: present - name: Play to configure IPA clients with username/password hosts: ipaclients become: true roles: - role: freeipa.ansible_freeipa.ipaclient state: present - name: Play to configure IPA replicas hosts: ipareplicas serial: 1 become: true roles: - role: freeipa.ansible_freeipa.ipareplica state: presentこの Playbook には 3 つのプレイが含まれています。
- 最初のプレイはプライマリー IdM サーバーをインストールします。
- 2 番目のプレイは IdM クライアントをインストールします。
-
3 番目のプレイは IdM レプリカをインストールします。
serial: 1ディレクティブは、同じ IdM サーバーに対して一度に 1 つのレプリカのみをデプロイするように Ansible に指示するものです。
sudo特権を使用して、ansible-freeipaコレクションをインストールします。[ansible_user@controller]$ sudo dnf install ansible-freeipa[...] Transaction Summary ======================================================================================================================================================================== Install 11 Packages Total download size: 9.8 M Installed size: 42 M Is this ok [y/N]: y [...]
12.1.4. Ansible Playbook を使用して IdM をインストールするための管理対象ノードの準備 リンクのコピーリンクがクリップボードにコピーされました!
IdM デプロイメントのインストールに使用できるように、仮想マシンを Ansible 管理対象ノードとして準備する方法を説明します。
前提条件
手順
管理対象ノード server 上の
ansible_userアカウントに、ansible_userユーザーのSSH公開鍵をインストールします。コントロールノードに
ansible_userとしてログインし、SSH公開鍵を server 上のansible_userアカウントにコピーします。[ansible_user@controller]$ ssh-copy-id ansible_user@server.idm.example.com/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible_user/.ssh/id_rsa.pub" The authenticity of host 'server.idm.example.com (192.168.122.42)' can't be established. ECDSA key fingerprint is SHA256:9bZ33GJNODK3zbNhybokN/6Mq7hu3vpBXDrCxe7NAvo.プロンプトが表示されたら、yes と入力して接続します。
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysプロンプトが表示されたら、server 上の
ansible_userのパスワードを入力します。ansible_user@server.idm.example.com's password: 12345Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'ansible_user@server.idm.example.com'" and check to make sure that only the key(s) you wanted were added.server 上でコマンドをリモートで実行して
SSH接続を確認します。[ansible_user@controller]$ ssh ansible_user@server.idm.example.com whoamiansible_user
- 他のすべての管理対象ノード (replica、client) についても、この手順を繰り返します。
各管理対象ノードで、
ansible_user用のsudo設定を作成します。各管理対象ノード (server、replica、client) で、root ユーザーとしてログインし (sudo アクセス権を持つ別のユーザーがいる場合は sudo を使用)、visudo コマンドを使用して
/etc/sudoers.d/ansible_userファイルを作成および編集します。# visudo /etc/sudoers.d/ansible_user通常のエディターではなく
visudoを使用する利点は、このユーティリティーがファイルをインストールする前に解析エラーなどの基本的なチェックを提供する点にあります。/etc/sudoers.d/ansible_userファイルでsudoersポリシーを設定します。ansible_user ALL=(ALL) NOPASSWD: ALLこれにより、
ansible_userのパスワードを入力することなく、このホスト上で root (またはその他の任意のユーザー) としてすべてのコマンドを実行する権限がansible_userに付与されます。コントローラーの Ansible 設定でbecome_user = rootが指定されているため、Ansible は、昇格された権限を必要とするタスクを実行する際に、この sudo 特権を使用して root 権限に昇格します。
検証
すべての管理対象ノード上のコントロールノードからコマンドを実行できることを確認します。
[ansible_user@controller]$ ansible all -m pingBECOME password: client.idm.example.com | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } server.idm.example.com | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } replica.idm.example.com | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }ハードコーディングされたすべてのホストグループには、インベントリーファイルにリストされているすべてのホストが動的に含まれます。
特権昇格が正しく機能することを確認します。Ansible の
commandモジュールとbecomeを使用して、すべての管理対象ノードでwhoamiユーティリティーを実行します。[ansible_user@controller]$ ansible all -m command -a whoami --becomeBECOME password: <password> client.idm.example.com | CHANGED | rc=0 >> root server.idm.example.com | CHANGED | rc=0 >> root replica.idm.example.com | CHANGED | rc=0 >> rootコマンドが
rootを返した場合、管理対象ノード上でsudoが正しく設定されています。--becomeは、Ansible に sudo を使用して特権を昇格するように指示するフラグです。
12.1.5. 仮想マシンへの IdM クラスターのインストール リンクのコピーリンクがクリップボードにコピーされました!
コントロールノードで 1 つの Ansible コマンドを使用して、仮想マシンに IdM プライマリーサーバー、クライアント、レプリカをインストールする方法を説明します。
前提条件
手順
IdM クラスターをインストールします。
[ansible_user@controller]$ ansible-playbook -i inventory -vv install-cluster.yml重要サーバー、クライアント、またはレプリカのインストール時にエラーが繰り返し発生する場合は、失敗したセットアップのトラブルシューティングを試みるよりも、ホストを消去してクリーンな再インストールを実行することを推奨します。