第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.comreplica.idm.example.comclient.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 イメージをダウンロードした。

手順

  1. ISO イメージを使用して、controller システム用の新しい仮想マシンをインストールします。詳細は、インストールメディアからの RHEL の対話型インストール を参照してください。インストールの際は、次の点に注意してください。

    1. Virtual Machine Manager (VMM) を使用して仮想マシンをインストールする場合は、controllerserverreplica、および client のホストに名前を付けて、VMM UI 内の名前を CLI 上のホストの名前と一致させます。
    2. IdM サーバーとレプリカをインストールする仮想マシン用に、少なくとも 4 GB の RAM を確保します。クライアントシステム用には 1 GB あれば十分です。
    3. IdM サーバー、レプリカ、クライアントのストレージ用に 30 GB を確保します。
    4. Test and Install ではなく、Install を選択します。
    5. インストール中に controller 上にローカルの ansible_user ユーザーを作成します。
    6. ansible_user ユーザーに覚えやすいパスワード (例: 12345) を設定します。
    7. Root password セクションで、覚えやすいパスワード (例: 1234) を入力します。
    8. Allow root SSH login with password チェックボックスをオンにします。
  2. インストールが完了したら、controller 仮想マシンのホスト名を設定します。

    1. controller 仮想マシンの CLI で、nmtui と入力します。
    2. 下矢印キーを使用して、Set system hostname を選択します。
    3. 新しく開いたウィンドウに、controller.idm.example.com と入力します。

      ホスト名は、controller.idm.example.com などの完全修飾ドメイン名である必要があります。詳細は、Identity Management のインストールIdM の DNS ホスト名および DNS の要件への対応 を参照してください。

    4. 下矢印キーと右矢印キーを使用して、OK を選択します。
    5. もう一度 OK をクリックして、新しいホスト名を確定します。
    6. 上位のインターフェイスで、下矢印キーと右矢印キーを使用して OKQuit を選択します。
    7. [オプション] ホスト名を検証するために、システム上の hostname ユーティリティーを使用します。

      $ hostname
      controller.idm.example.com

      hostname の出力は、localhost または localhost6 以外である必要があります。

  3. 他のすべての仮想マシン (serverreplicaclient) についても上記の手順を繰り返します。
  4. すべての仮想マシン上で ansible_user に sudo 特権を設定します。

    1. controllerroot として SSH 接続します。

      your-physical-system]$ ssh root@controller
    2. /etc/sudoers.d/ansible_user ファイルを作成して、ansible_user にパスワードなしの sudo を設定します。

      # echo "ansible_user ALL=(ALL) NOPASSWD: ALL" | tee /etc/sudoers.d/ansible_user
    3. 管理対象のすべてのノード、serverreplica、および client でこの手順を繰り返します。
    注記

    この章全体を通して、コントローラーに ansible_user としてログインしている場合、root 特権を必要とするコマンドを実行する前に sudo を使用する必要があります。

  5. IP アドレスの代わりにホスト名を使用して、個々のシステムへ相互にログインできるように設定します。

    1. controller の CLI で次のように入力します。

      $ ip a
      1: 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 forever

      192.168.X.X. で始まる IP アドレスをメモします。

    2. 他のすべての仮想ホストでも同じことを行います。
    3. 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
    4. 物理システムの /etc/hosts ファイルも同様に更新します。
  6. controller のオペレーティングシステムが最新であることを確認します。

    1. ローカルシステムから controller 上の ansible_user アカウントに SSH 接続します。

      your-physical-system]$ ssh ansible_user@controller
    2. controller 仮想マシンを Red Hat のサブスクリプション管理サービスに登録します。

      $ sudo subscription-manager register --username <your_user_name> --password <your_password>
    3. 最新のパッケージを使用していることを確認します。

      $ sudo yum update
    4. 他のすべての仮想マシンについても上記の手順を繰り返します。

検証

  • 完全修飾ドメイン名 (FQDN) または短縮名を使用して、物理システムといずれかの仮想システム間の接続をテストします。

    your-physical-system]$ ping controller
    PING 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 コントロールノードを準備する方法を説明します。

手順

  1. コントローラーシステム上で、ansible_user としてログインし、SSH 公開鍵および秘密鍵を作成します。

    [ansible_user@controller]$ ssh-keygen
    Generating 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 環境であるため、パスフレーズは空のままにしておきます。

  2. ~/.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 はパスワードの入力を求めません。
  3. 管理対象ホストのホスト名と必要なインストール変数の値をリストした、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
  4. 次の内容を含む 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 に指示するものです。
  5. 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 管理対象ノードとして準備する方法を説明します。

手順

  1. 管理対象ノード server 上の ansible_user アカウントに、ansible_user ユーザーの SSH 公開鍵をインストールします。

    1. コントロールノードに 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.
    2. プロンプトが表示されたら、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
    3. プロンプトが表示されたら、server 上の ansible_user のパスワードを入力します。

      ansible_user@server.idm.example.com's password: 12345
      Number 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.
    4. server 上でコマンドをリモートで実行して SSH 接続を確認します。

      [ansible_user@controller]$ ssh ansible_user@server.idm.example.com whoami
      ansible_user
  2. 他のすべての管理対象ノード (replicaclient) についても、この手順を繰り返します。
  3. 各管理対象ノードで、ansible_user 用の sudo 設定を作成します。

    1. 各管理対象ノード (serverreplicaclient) で、root ユーザーとしてログインし (sudo アクセス権を持つ別のユーザーがいる場合は sudo を使用)、visudo コマンドを使用して /etc/sudoers.d/ansible_user ファイルを作成および編集します。

      # visudo /etc/sudoers.d/ansible_user

      通常のエディターではなく visudo を使用する利点は、このユーティリティーがファイルをインストールする前に解析エラーなどの基本的なチェックを提供する点にあります。

    2. /etc/sudoers.d/ansible_user ファイルで sudoers ポリシーを設定します。

      ansible_user ALL=(ALL) NOPASSWD: ALL

      これにより、ansible_user のパスワードを入力することなく、このホスト上で root (またはその他の任意のユーザー) としてすべてのコマンドを実行する権限が ansible_user に付与されます。コントローラーの Ansible 設定で become_user = root が指定されているため、Ansible は、昇格された権限を必要とするタスクを実行する際に、この sudo 特権を使用して root 権限に昇格します。

検証

  1. すべての管理対象ノード上のコントロールノードからコマンドを実行できることを確認します。

    [ansible_user@controller]$ ansible all -m ping
    BECOME 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"
    }

    ハードコーディングされたすべてのホストグループには、インベントリーファイルにリストされているすべてのホストが動的に含まれます。

  2. 特権昇格が正しく機能することを確認します。Ansible の command モジュールと become を使用して、すべての管理対象ノードで whoami ユーティリティーを実行します。

    [ansible_user@controller]$ ansible all -m command -a whoami --become
    BECOME 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
    重要

    サーバー、クライアント、またはレプリカのインストール時にエラーが繰り返し発生する場合は、失敗したセットアップのトラブルシューティングを試みるよりも、ホストを消去してクリーンな再インストールを実行することを推奨します。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る