Ansible을 사용하여 RHEL에서 Identity Management 설치 및 관리


Red Hat Enterprise Linux 10

Ansible 플레이북을 사용하여 IdM 환경을 설치, 구성 및 유지 관리

Red Hat Customer Content Services

초록

Red Hat은 관리자가 Ansible을 사용하여 Red Hat Enterprise Linux IdM(Identity Management)을 실행할 수 있는 ansible-freeipa 패키지를 제공합니다. 플레이북을 사용하여 IdM을 설치하고 사용자, 그룹, 호스트, 액세스 제어 및 구성 설정을 관리할 수 있습니다.

1장. Ansible 용어

이 제목의 장에서는 공식 Ansible 용어를 사용합니다. 용어에 익숙하지 않은 경우 진행하기 전에 공식 Ansible 업스트림 문서, 특히 다음 섹션을 읽으십시오.

  • Ansible 섹션의 기본 개념은 Ansible에서 가장 일반적으로 사용되는 개념에 대한 개요를 제공합니다.
  • 사용자 가이드에서는 명령줄 사용, 인벤토리 작업, 데이터 상호 작용, 작업, 플레이, 플레이북 실행 등 Ansible을 사용할 때 가장 일반적인 상황 및 질문을 간략하게 설명합니다.
  • 인벤토리를 빌드하는 방법은 인벤토리 를 설계하는 방법에 대한 팁을 제공합니다. 인벤토리는 Ansible에서 인프라의 여러 관리 노드 또는 호스트에 대해 작업하는 데 사용하는 목록 또는 목록입니다.
  • 플레이북 소개에는 구성, 시스템 배포 및 복잡한 애플리케이션을 배포하기 위한 반복 가능하고 재사용 가능한 시스템으로 Ansible 플레이북의 개념이 도입되었습니다.
  • Ansible 역할 섹션에서는 알려진 파일 구조를 기반으로 변수, 작업 및 핸들러 로드를 자동화하는 방법을 설명합니다.
  • 플레이북 섹션에서 컬렉션을 사용하면 플레이북에서 컬렉션을 간단히 참조하는 방법을 제안할 수 있습니다.
  • 용어집 은 Ansible 문서의 다른 위치에서 사용되는 용어를 설명합니다.

2장. Ansible 플레이북을 사용하여 Identity Management 서버 설치

Ansible 을 사용하여 시스템을 IdM 서버로 구성하는 방법에 대해 자세히 알아보십시오. IdM 서버로 시스템을 구성하면 IdM 도메인을 설정하고 시스템에서 IdM 클라이언트에 IdM 서비스를 제공할 수 있습니다. freeipa.ansible_freeipa.ipaserver Ansible 역할을 사용하여 배포를 관리할 수 있습니다.

사전 요구 사항

  • 일반적인 Ansible 및 IdM 개념을 이해하고 있습니다.

2.1. Ansible 및 IdM 설치의 이점

Ansible은 시스템 구성, 소프트웨어 배포 및 롤링 업데이트를 수행하는 데 사용되는 자동화 툴입니다. Ansible에는 RHEL IdM(Identity Management) 지원이 포함되며 Ansible 역할을 사용하여 IdM 서버, 복제본, 클라이언트 또는 전체 IdM 토폴로지 설정과 같은 설치 작업을 자동화할 수 있습니다.

Ansible을 사용하여 IdM 설치의 이점

다음 목록은 수동 설치와 달리 Ansible을 사용하여 Identity Management를 설치할 때의 이점을 제공합니다.

  • 관리 노드에 로그인할 필요가 없습니다.
  • 개별적으로 배포되도록 각 호스트에서 설정을 구성할 필요가 없습니다. 대신 전체 클러스터를 배포할 하나의 인벤토리 파일이 있을 수 있습니다.
  • 인벤토리 파일을 나중에 관리 작업에 재사용할 수 있습니다(예: 사용자 및 호스트 추가). IdM과 관련이 없는 이러한 작업에도 인벤토리 파일을 재사용할 수 있습니다.

2.2. ansible-freeipa 패키지 설치

다음 절차에 따라 RHEL IdM(Identity Management)을 설치 및 관리하기 위한 Ansible 역할 및 모듈을 제공하는 ansible-freeipa 패키지를 설치합니다.

사전 요구 사항

  • 컨트롤러가 유효한 서브스크립션이 있는 Red Hat Enterprise Linux 시스템인지 확인합니다. 그렇지 않은 경우 대체 설치 지침은 공식 Ansible 문서 설치 가이드를 참조하십시오.
  • 컨트롤러의 SSH 프로토콜을 통해 관리형 노드에 연결할 수 있는지 확인합니다. 관리 노드가 컨트롤러의 /root/.ssh/known_hosts 파일에 나열되어 있는지 확인합니다.

프로세스

Ansible 컨트롤러에서 다음 절차를 사용합니다.

  • ansible-freeipa 패키지를 설치합니다.

    # dnf install ansible-freeipa

    역할 및 모듈은 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/roles / 및 /usr/share/ansible/collections/ansible_freeipa/plugins/modules 디렉터리에 설치됩니다.

중요

ansible-freeipa rpm은 freeipa.ansible_freeipa 컬렉션만 설치합니다.

새 컬렉션을 사용하려면 freeipa.ansible_freeipa 접두사를 역할 및 모듈 이름에 추가합니다. 정규화된 이름을 사용하여 Ansible 권장 사항을 따릅니다. 예를 들어 ipahbacrule 모듈을 참조하려면 freeipa.ansible_freeipa.ipahbacrule 을 사용합니다.

2.3. 파일 시스템의 Ansible 역할 위치

기본적으로 ansible-freeipa 역할은 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/roles/ 디렉터리에 설치됩니다. ansible-freeipa 패키지의 구조는 다음과 같습니다.

  • /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/roles/ 디렉터리는 Ansible 컨트롤러에 ipaserver,ipareplica,ipaclient,ipasmartcardipabackup 역할을 저장합니다. 각 역할 디렉터리는 README.md 마크다운 파일의 역할에 대한 기본 개요, 라이센스 및 설명서를 저장합니다.

    [root@server]# ls -1 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/roles
    ipaclient
    ipareplica
    ipaserver
  • /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/ 디렉터리에는 개별 역할 및 토폴로지에 대한 문서가 README.md 마크다운 파일에 저장됩니다. 또한 playbook / 하위 디렉터리 를 저장합니다.

    [root@server]# ls -1 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/
    playbooks
    README-client.md
    README.md
    README-replica.md
    README-server.md
    README-topology.md
  • /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/ 디렉터리에는 예제 플레이북이 저장됩니다.

    [root@server]# ls -1 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/
    install-client.yml
    install-cluster.yml
    install-replica.yml
    install-server.yml
    uninstall-client.yml
    uninstall-cluster.yml
    uninstall-replica.yml
    uninstall-server.yml

2.4. 통합 DNS 및 통합 CA를 루트 CA로 사용하여 배포의 매개변수 설정

IdM 통합 DNS 솔루션을 사용하는 환경에서 통합 CA를 루트 CA로 설치하도록 인벤토리 파일을 구성하려면 다음 절차를 완료합니다.

참고

이 절차의 인벤토리는 INI 형식을 사용합니다. 또는 YAML 또는 JSON 형식을 사용할 수 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리를 생성합니다.

    $ mkdir MyPlaybooks
  2. ~/MyPlaybooks/inventory 파일을 만듭니다.
  3. 편집할 인벤토리 파일을 엽니다. IdM 서버로 사용할 호스트의FQDN(정규화된 도메인 이름)을 지정합니다. FQDN 이 다음 기준을 충족하는지 확인합니다.

    • 영숫자 및 하이픈(-)만 허용됩니다. 예를 들어 밑줄은 허용되지 않으며 DNS 오류가 발생할 수 있습니다.
    • 호스트 이름은 모두 소문자여야 합니다.
  4. IdM 도메인 및 영역 정보를 지정합니다.
  5. 다음 옵션을 추가하여 통합 DNS를 사용하도록 지정합니다.

    ipaserver_setup_dns=true
  6. DNS 전달 설정을 지정합니다. 다음 옵션 중 하나를 선택합니다.

    • 설치 프로그램이 /etc/resolv.conf 파일에서 전달자를 사용하려면 ipaserver_auto_forwarders=true 옵션을 사용합니다. /etc/resolv.conf 파일에 지정된 이름 서버가 localhost 127.0.0.1 주소이거나 가상 사설 네트워크에 있고 사용 중인 DNS 서버가 일반적으로 공용 인터넷에서 연결할 수 없는 경우 이 옵션을 사용하지 마십시오.
    • ipaserver_forwarders 옵션을 사용하여 전달자를 수동으로 지정합니다. 설치 프로세스는 설치된 IdM 서버의 /etc/named.conf 파일에 전달자 IP 주소를 추가합니다.
    • ipaserver_no_forwarders=true 옵션을 사용하여 대신 사용할 루트 DNS 서버를 구성합니다.

      참고

      DNS 전달자가 없으면 사용자 환경이 분리되어 있으며 인프라의 다른 DNS 도메인의 이름이 확인되지 않습니다.

  7. DNS 역방향 레코드 및 영역 설정을 지정합니다. 다음 옵션 중에서 선택합니다.

    • ipaserver_allow_zone_overlap=true 옵션을 사용하여 영역이 이미 확인 가능한 경우에도 (반복) 영역을 생성할 수 있습니다.
    • ipaserver_reverse_zones 옵션을 사용하여 역방향 영역을 수동으로 지정합니다.
    • 설치 프로그램이 역방향 DNS 영역을 생성하지 않으려면 ipaserver_no_reverse=true 옵션을 사용합니다.

      참고

      IdM을 사용하여 역방향 영역을 관리하는 것은 선택 사항입니다. 대신 외부 DNS 서비스를 사용할 수 있습니다.

  8. adminDirectory Manager 의 암호를 지정합니다. Ansible Vault를 사용하여 암호를 저장하고 플레이북 파일의 Vault 파일을 참조합니다. 또는 덜 안전하게 인벤토리 파일에서 직접 암호를 지정합니다.
  9. 선택 사항: IdM 서버에서 사용할 사용자 지정 firewalld 영역을 지정합니다. 사용자 지정 영역을 설정하지 않으면 IdM은 해당 서비스를 기본 firewalld 영역에 추가합니다. 사전 정의된 기본 영역은 public 입니다.

    중요

    지정된 firewalld 영역이 있어야 하며 영구 영역이어야 합니다.

    필요한 서버 정보가 있는 인벤토리 파일의 예(암호 제외)

    [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
    [...]

    필수 서버 정보가 있는 인벤토리 파일의 예(암호 포함)

    [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=MySecretPassword123
    ipadm_password=MySecretPassword234
    
    [...]

    사용자 지정 firewalld 영역이 있는 인벤토리 파일의 예

    [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=MySecretPassword123
    ipadm_password=MySecretPassword234
    ipaserver_firewalld_zone=custom zone

    Ansible Vault 파일에 저장된 admin 및 Directory Manager 암호를 사용하여 IdM 서버를 설정하는 플레이북의 예

    ---
    - name: Playbook to configure IPA server
      hosts: ipaserver
      become: true
      vars_files:
      - playbook_sensitive_data.yml
    
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        state: present

    인벤토리 파일에서 admin 및 Directory Manager 암호를 사용하여 IdM 서버를 설정하는 플레이북의 예

    ---
    - name: Playbook to configure IPA server
      hosts: ipaserver
      become: true
    
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        state: present

2.5. 외부 DNS 및 통합 CA를 루트 CA로 사용하여 배포의 매개변수 설정

외부 DNS 솔루션을 사용하는 환경에서 통합 CA를 루트 CA로 설치하도록 인벤토리 파일을 구성하려면 다음 절차를 완료합니다.

참고

이 절차의 인벤토리 파일은 INI 형식을 사용합니다. 또는 YAML 또는 JSON 형식을 사용할 수 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리를 생성합니다.

    $ mkdir MyPlaybooks
  2. ~/MyPlaybooks/inventory 파일을 만듭니다.
  3. 편집할 인벤토리 파일을 엽니다. IdM 서버로 사용할 호스트의FQDN(정규화된 도메인 이름)을 지정합니다. FQDN 이 다음 기준을 충족하는지 확인합니다.

    • 영숫자 및 하이픈(-)만 허용됩니다. 예를 들어 밑줄은 허용되지 않으며 DNS 오류가 발생할 수 있습니다.
    • 호스트 이름은 모두 소문자여야 합니다.
  4. IdM 도메인 및 영역 정보를 지정합니다.
  5. ipaserver_setup_dns 옵션이 no 또는 absent로 설정되어 있는지 확인합니다.
  6. adminDirectory Manager 의 암호를 지정합니다. Ansible Vault를 사용하여 암호를 저장하고 플레이북 파일의 Vault 파일을 참조합니다. 또는 덜 안전하게 인벤토리 파일에서 직접 암호를 지정합니다.
  7. 선택 사항: IdM 서버에서 사용할 사용자 지정 firewalld 영역을 지정합니다. 사용자 지정 영역을 설정하지 않으면 IdM은 해당 서비스를 기본 firewalld 영역에 추가합니다. 사전 정의된 기본 영역은 public 입니다.

    중요

    지정된 firewalld 영역이 있어야 하며 영구 영역이어야 합니다.

    필요한 서버 정보가 있는 인벤토리 파일의 예(암호 제외)

    [ipaserver]
    server.idm.example.com
    
    [ipaserver:vars]
    ipaserver_domain=idm.example.com
    ipaserver_realm=IDM.EXAMPLE.COM
    ipaserver_setup_dns=no
    [...]

    필수 서버 정보가 있는 인벤토리 파일의 예(암호 포함)

    [ipaserver]
    server.idm.example.com
    
    [ipaserver:vars]
    ipaserver_domain=idm.example.com
    ipaserver_realm=IDM.EXAMPLE.COM
    ipaserver_setup_dns=no
    ipaadmin_password=MySecretPassword123
    ipadm_password=MySecretPassword234
    
    [...]

    사용자 지정 firewalld 영역이 있는 인벤토리 파일의 예

    [ipaserver]
    server.idm.example.com
    
    [ipaserver:vars]
    ipaserver_domain=idm.example.com
    ipaserver_realm=IDM.EXAMPLE.COM
    ipaserver_setup_dns=no
    ipaadmin_password=MySecretPassword123
    ipadm_password=MySecretPassword234
    ipaserver_firewalld_zone=custom zone

    Ansible Vault 파일에 저장된 admin 및 Directory Manager 암호를 사용하여 IdM 서버를 설정하는 플레이북의 예

    ---
    - name: Playbook to configure IPA server
      hosts: ipaserver
      become: true
      vars_files:
      - playbook_sensitive_data.yml
    
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        state: present

    인벤토리 파일에서 admin 및 Directory Manager 암호를 사용하여 IdM 서버를 설정하는 플레이북의 예

    ---
    - name: Playbook to configure IPA server
      hosts: ipaserver
      become: true
    
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        state: present

Ansible 플레이북을 사용하여 통합 인증 기관(CA)을 루트 CA로 사용하여 IdM 서버를 배포하려면 다음 절차를 완료합니다.

사전 요구 사항

프로세스

  1. Ansible Playbook을 실행합니다.

    $ ansible-playbook -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-server.yml
  2. 다음 옵션 중 하나를 선택합니다.

    • IdM 배포에서 외부 DNS를 사용하는 경우: /tmp/ipa.system.records.UFRPto.db 파일에 포함된 DNS 리소스 레코드를 기존 외부 DNS 서버에 추가합니다. DNS 레코드를 업데이트하는 프로세스는 특정 DNS 솔루션에 따라 다릅니다.

      ...
      Restarting the KDC
      Please add records in this file to your DNS system: /tmp/ipa.system.records.UFRBto.db
      Restarting the web server
      ...
    중요

    기존 DNS 서버에 DNS 레코드를 추가할 때까지 서버 설치가 완료되지 않습니다.

    • IdM 배포에서 통합 DNS를 사용하는 경우:

      • 상위 도메인의 DNS 위임을 IdM DNS 도메인에 추가합니다. 예를 들어 IdM DNS 도메인이 idm.example.com 인 경우 example.com 상위 도메인에 이름 서버(NS) 레코드를 추가합니다.

        중요

        IdM DNS 서버가 설치되면 이 단계를 반복합니다.

      • 시간 서버의 _ntp._udp 서비스(SRV) 레코드를 IdM DNS에 추가합니다. IdM DNS에 새로 설치된 IdM 서버의 시간 서버에 SRV 레코드가 있으면 이 기본 IdM 서버에서 사용하는 시간 서버와 동기화되도록 향후 복제본 및 클라이언트 설치가 자동으로 구성됩니다.

2.7. 통합 DNS 및 외부 CA를 루트 CA로 사용하여 배포의 매개변수 설정

IdM 통합 DNS 솔루션을 사용하는 환경에서 외부 CA를 루트 CA로 설치하도록 인벤토리 파일을 구성하려면 다음 절차를 완료합니다.

참고

이 절차의 인벤토리 파일은 INI 형식을 사용합니다. 또는 YAML 또는 JSON 형식을 사용할 수 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리를 생성합니다.

    $ mkdir MyPlaybooks
  2. ~/MyPlaybooks/inventory 파일을 만듭니다.
  3. 편집할 인벤토리 파일을 엽니다. IdM 서버로 사용할 호스트의FQDN(정규화된 도메인 이름)을 지정합니다. FQDN 이 다음 기준을 충족하는지 확인합니다.

    • 영숫자 및 하이픈(-)만 허용됩니다. 예를 들어 밑줄은 허용되지 않으며 DNS 오류가 발생할 수 있습니다.
    • 호스트 이름은 모두 소문자여야 합니다.
  4. IdM 도메인 및 영역 정보를 지정합니다.
  5. 다음 옵션을 추가하여 통합 DNS를 사용하도록 지정합니다.

    ipaserver_setup_dns=true
  6. DNS 전달 설정을 지정합니다. 다음 옵션 중 하나를 선택합니다.

    • 설치 프로세스에서 /etc/resolv.conf 파일의 전달자를 사용하려면 ipaserver_auto_forwarders=true 옵션을 사용합니다. /etc/resolv.conf 파일에 지정된 이름 서버가 localhost 127.0.0.1 주소이거나 가상 사설 네트워크에 있고 사용 중인 DNS 서버가 일반적으로 공용 인터넷에서 연결할 수 없는 경우에는 이 옵션을 사용하지 않는 것이 좋습니다.
    • ipaserver_forwarders 옵션을 사용하여 전달자를 수동으로 지정합니다. 설치 프로세스는 설치된 IdM 서버의 /etc/named.conf 파일에 전달자 IP 주소를 추가합니다.
    • ipaserver_no_forwarders=true 옵션을 사용하여 대신 사용할 루트 DNS 서버를 구성합니다.

      참고

      DNS 전달자가 없으면 사용자 환경이 분리되어 있으며 인프라의 다른 DNS 도메인의 이름이 확인되지 않습니다.

  7. DNS 역방향 레코드 및 영역 설정을 지정합니다. 다음 옵션 중에서 선택합니다.

    • ipaserver_allow_zone_overlap=true 옵션을 사용하여 영역이 이미 확인 가능한 경우에도 (반복) 영역을 생성할 수 있습니다.
    • ipaserver_reverse_zones 옵션을 사용하여 역방향 영역을 수동으로 지정합니다.
    • 설치 프로세스에서 역방향 DNS 영역을 생성하지 않으려면 ipaserver_no_reverse=true 옵션을 사용합니다.

      참고

      IdM을 사용하여 역방향 영역을 관리하는 것은 선택 사항입니다. 대신 외부 DNS 서비스를 사용할 수 있습니다.

  8. adminDirectory Manager 의 암호를 지정합니다. Ansible Vault를 사용하여 암호를 저장하고 플레이북 파일의 Vault 파일을 참조합니다. 또는 덜 안전하게 인벤토리 파일에서 직접 암호를 지정합니다.
  9. 선택 사항: IdM 서버에서 사용할 사용자 지정 firewalld 영역을 지정합니다. 사용자 지정 영역을 설정하지 않으면 IdM은 해당 서비스를 기본 firewalld 영역에 추가합니다. 사전 정의된 기본 영역은 public 입니다.

    중요

    지정된 firewalld 영역이 있어야 하며 영구 영역이어야 합니다.

    필요한 서버 정보가 있는 인벤토리 파일의 예(암호 제외)

    [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
    [...]

    필수 서버 정보가 있는 인벤토리 파일의 예(암호 포함)

    [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=MySecretPassword123
    ipadm_password=MySecretPassword234
    
    [...]

    사용자 지정 firewalld 영역이 있는 인벤토리 파일의 예

    [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=MySecretPassword123
    ipadm_password=MySecretPassword234
    ipaserver_firewalld_zone=custom zone
    
    [...]

  10. 설치 첫 번째 단계에 대한 플레이북을 생성합니다. CSR(인증서 서명 요청)을 생성하고 컨트롤러에서 관리 노드로 복사하는 지침을 입력합니다.

    ---
    - name: Playbook to configure IPA server Step 1
      hosts: ipaserver
      become: true
      vars_files:
      - playbook_sensitive_data.yml
      vars:
        ipaserver_external_ca: true
    
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        state: present
    
      post_tasks:
      - name: Copy CSR /root/ipa.csr from node to "{{ groups.ipaserver[0] + '-ipa.csr' }}"
        fetch:
          src: /root/ipa.csr
          dest: "{{ groups.ipaserver[0] + '-ipa.csr' }}"
          flat: true
  11. 설치의 마지막 단계에 사용할 다른 플레이북을 생성합니다.

    ---
    - name: Playbook to configure IPA server Step 2
      hosts: ipaserver
      become: true
      vars_files:
      - playbook_sensitive_data.yml
      vars:
        ipaserver_external_cert_files:
          - "/root/servercert20240601.pem"
          - "/root/cacert.pem"
    
      pre_tasks:
      - name: Copy "{{ groups.ipaserver[0] }}-{{ item }}" to "/root/{{ item }}" on node
        ansible.builtin.copy:
          src: "{{ groups.ipaserver[0] }}-{{ item }}"
          dest: "/root/{{ item }}"
          force: true
        with_items:
        - servercert20240601.pem
        - cacert.pem
    
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        state: present

2.8. 외부 DNS 및 외부 CA를 루트 CA로 사용하여 배포의 매개변수 설정

외부 DNS 솔루션을 사용하는 환경에서 외부 CA를 루트 CA로 설치하도록 인벤토리 파일을 구성하려면 다음 절차를 완료합니다.

참고

이 절차의 인벤토리 파일은 INI 형식을 사용합니다. 또는 YAML 또는 JSON 형식을 사용할 수 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리를 생성합니다.

    $ mkdir MyPlaybooks
  2. ~/MyPlaybooks/inventory 파일을 만듭니다.
  3. 편집할 인벤토리 파일을 엽니다. IdM 서버로 사용할 호스트의FQDN(정규화된 도메인 이름)을 지정합니다. FQDN 이 다음 기준을 충족하는지 확인합니다.

    • 영숫자 및 하이픈(-)만 허용됩니다. 예를 들어 밑줄은 허용되지 않으며 DNS 오류가 발생할 수 있습니다.
    • 호스트 이름은 모두 소문자여야 합니다.
  4. IdM 도메인 및 영역 정보를 지정합니다.
  5. ipaserver_setup_dns 옵션이 no 또는 absent로 설정되어 있는지 확인합니다.
  6. adminDirectory Manager 의 암호를 지정합니다. Ansible Vault를 사용하여 암호를 저장하고 플레이북 파일의 Vault 파일을 참조합니다. 또는 덜 안전하게 인벤토리 파일에서 직접 암호를 지정합니다.
  7. 선택 사항: IdM 서버에서 사용할 사용자 지정 firewalld 영역을 지정합니다. 사용자 지정 영역을 설정하지 않으면 IdM은 해당 서비스를 기본 firewalld 영역에 추가합니다. 사전 정의된 기본 영역은 public 입니다.

    중요

    지정된 firewalld 영역이 있어야 하며 영구 영역이어야 합니다.

    필요한 서버 정보가 있는 인벤토리 파일의 예(암호 제외)

    [ipaserver]
    server.idm.example.com
    
    [ipaserver:vars]
    ipaserver_domain=idm.example.com
    ipaserver_realm=IDM.EXAMPLE.COM
    ipaserver_setup_dns=no
    [...]

    필수 서버 정보가 있는 인벤토리 파일의 예(암호 포함)

    [ipaserver]
    server.idm.example.com
    
    [ipaserver:vars]
    ipaserver_domain=idm.example.com
    ipaserver_realm=IDM.EXAMPLE.COM
    ipaserver_setup_dns=no
    ipaadmin_password=MySecretPassword123
    ipadm_password=MySecretPassword234
    
    [...]

    사용자 지정 firewalld 영역이 있는 인벤토리 파일의 예

    [ipaserver]
    server.idm.example.com
    
    [ipaserver:vars]
    ipaserver_domain=idm.example.com
    ipaserver_realm=IDM.EXAMPLE.COM
    ipaserver_setup_dns=no
    ipaadmin_password=MySecretPassword123
    ipadm_password=MySecretPassword234
    ipaserver_firewalld_zone=custom zone
    
    [...]

  8. 설치 첫 번째 단계에 대한 플레이북을 생성합니다. CSR(인증서 서명 요청)을 생성하고 컨트롤러에서 관리 노드로 복사하는 지침을 입력합니다.

    ---
    - name: Playbook to configure IPA server Step 1
      hosts: ipaserver
      become: true
      vars_files:
      - playbook_sensitive_data.yml
      vars:
        ipaserver_external_ca: true
    
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        state: present
    
      post_tasks:
      - name: Copy CSR /root/ipa.csr from node to "{{ groups.ipaserver[0] + '-ipa.csr' }}"
        fetch:
          src: /root/ipa.csr
          dest: "{{ groups.ipaserver[0] + '-ipa.csr' }}"
          flat: true
  9. 설치의 마지막 단계에 사용할 다른 플레이북을 생성합니다.

    ---
    - name: Playbook to configure IPA server Step 2
      hosts: ipaserver
      become: true
      vars_files:
      - playbook_sensitive_data.yml
      vars:
        ipaserver_external_cert_files:
          - "/root/servercert20240601.pem"
          - "/root/cacert.pem"
    
      pre_tasks:
      - name: Copy "{{ groups.ipaserver[0] }}-{{ item }}" to "/root/{{ item }}" on node
        ansible.builtin.copy:
          src: "{{ groups.ipaserver[0] }}-{{ item }}"
          dest: "/root/{{ item }}"
          force: true
        with_items:
        - servercert20240601.pem
        - cacert.pem
    
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        state: present

Ansible 플레이북을 사용하여 외부 CA(인증 기관)가 있는 IdM 서버를 루트 CA로 배포하려면 다음 절차를 완료합니다.

사전 요구 사항

프로세스

  1. 설치의 첫 번째 단계에 대한 지침을 사용하여 Ansible 플레이북을 실행합니다(예: install-server-step1.yml ):

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-server-step1.yml
  2. 컨트롤러에서 ipa.csr 인증서 서명 요청 파일을 찾아 외부 CA에 제출합니다.
  3. 다음 단계의 플레이북에서 찾을 수 있도록 외부 CA에서 서명한 IdM CA 인증서를 컨트롤러 파일 시스템에 배치합니다.
  4. 설치의 최종 단계에 대한 지침을 사용하여 Ansible 플레이북을 실행합니다(예: install-server-step2.yml ):

    $ ansible-playbook -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-server-step2.yml
  5. 다음 옵션 중 하나를 선택합니다.

    • IdM 배포에서 외부 DNS를 사용하는 경우: /tmp/ipa.system.records.UFRPto.db 파일에 포함된 DNS 리소스 레코드를 기존 외부 DNS 서버에 추가합니다. DNS 레코드를 업데이트하는 프로세스는 특정 DNS 솔루션에 따라 다릅니다.

      ...
      Restarting the KDC
      Please add records in this file to your DNS system: /tmp/ipa.system.records.UFRBto.db
      Restarting the web server
      ...
    중요

    기존 DNS 서버에 DNS 레코드를 추가할 때까지 서버 설치가 완료되지 않습니다.

    • IdM 배포에서 통합 DNS를 사용하는 경우:

      • 상위 도메인의 DNS 위임을 IdM DNS 도메인에 추가합니다. 예를 들어 IdM DNS 도메인이 idm.example.com 인 경우 example.com 상위 도메인에 이름 서버(NS) 레코드를 추가합니다.

        중요

        IdM DNS 서버가 설치되면 이 단계를 반복합니다.

      • 시간 서버의 _ntp._udp 서비스(SRV) 레코드를 IdM DNS에 추가합니다. IdM DNS에 새로 설치된 IdM 서버의 시간 서버에 SRV 레코드가 있으면 이 기본 IdM 서버에서 사용하는 시간 서버와 동기화되도록 향후 복제본 및 클라이언트 설치가 자동으로 구성됩니다.

2.10. Ansible 플레이북을 사용하여 IdM 서버 설치 제거

참고

기존 RHEL IdM(Identity Management) 배포에서 복제본서버는 서로 바꿔 사용할 수 있습니다.

Ansible 플레이북을 사용하여 IdM 복제본을 제거하려면 다음 절차를 완료합니다. 이 예제에서는 다음을 수행합니다.

  • server123.idm.example.com 에서 IdM 구성이 제거됩니다.
  • server123.idm.example.com 및 관련 호스트 항목이 IdM 토폴로지에서 제거됩니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 관리 노드에서 다음을 수행합니다.

    • 시스템은 RHEL 10에서 실행되고 있습니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 uninstall-server.yml 을 생성합니다.

    ---
    - name: Playbook to uninstall an IdM replica
      hosts: ipaserver
      become: true
    
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        ipaserver_remove_from_domain: true
        state: absent

    ipaserver_remove_from_domain 옵션은 IdM 토폴로지에서 호스트를 등록 해제합니다.

    참고

    server123.idm.example.com을 제거해도 연결이 끊긴 토폴로지가 발생하면 제거가 중단됩니다. 자세한 내용은 연결이 끊긴 토폴로지로 이어지는 경우에도 Ansible 플레이북을 사용하여 IdM 서버 설치 제거를 참조하십시오.

  2. 복제본을 제거합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/inventory <path_to_playbooks_directory>/uninstall-server.yml
  3. server123.idm.example.com 을 가리키는 모든 이름 서버(NS) DNS 레코드가 DNS 영역에서 삭제되었는지 확인합니다. 이는 IdM 또는 외부 DNS에서 관리하는 통합 DNS를 사용하는지 여부와 관계없이 적용됩니다.
참고

기존 RHEL IdM(Identity Management) 배포에서 복제본서버는 서로 바꿔 사용할 수 있습니다.

연결이 끊긴 IdM 토폴로지가 발생하는 경우에도 Ansible 플레이북을 사용하여 IdM 복제본을 제거하려면 다음 절차를 완료합니다. 예제에서 server456.idm.example.com 은 토폴로지에서 server123.idm.example.com 의 FQDN이 있는 복제본 및 관련 호스트 항목을 제거하여 특정 복제본의 server456.idm.example.com 과 나머지 토폴로지의 연결이 끊어진 상태로 유지됩니다.

참고

remove_server_from_domain 만 사용하여 토폴로지에서 복제본을 제거하면 연결이 끊긴 토폴로지가 발생하지 않으며 다른 옵션은 필요하지 않습니다. 결과가 연결 해제된 토폴로지인 경우 보존할 도메인의 일부를 지정해야 합니다. 이 경우 다음을 수행해야 합니다.

  • ipaserver_remove_on_server 값을 지정합니다.
  • ipaserver_ignore_topology_disconnect 를 True로 설정합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 관리 노드에서 다음을 수행합니다.

    • 시스템은 RHEL 10에서 실행되고 있습니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 uninstall-server.yml 을 생성합니다.

    ---
    - name: Playbook to uninstall an IdM replica
      hosts: ipaserver
      become: true
    
      roles:
      - role: freeipa.ansible_freeipa.ipaserver
        ipaserver_remove_from_domain: true
        ipaserver_remove_on_server: server456.idm.example.com
        ipaserver_ignore_topology_disconnect: true
        state: absent
    참고

    일반적인 상황에서 server123을 제거하면 연결이 끊긴 토폴로지가 발생하지 않습니다. ipaserver_remove_on_server 의 값이 설정되지 않은 경우 server123이 제거된 복제본은 server123의 복제 계약을 사용하여 자동으로 결정됩니다.

  2. 복제본을 제거합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/uninstall-server.yml
  3. server123.idm.example.com 을 가리키는 모든 이름 서버(NS) DNS 레코드가 DNS 영역에서 삭제되었는지 확인합니다. 이는 IdM 또는 외부 DNS에서 관리하는 통합 DNS를 사용하는지 여부와 관계없이 적용됩니다.

3장. Ansible 플레이북을 사용하여 Identity Management 복제본 설치

Ansible 을 사용하여 시스템을 IdM 복제본으로 구성하면 IdM 도메인에 등록하고 시스템의 도메인의 IdM 서버에서 IdM 서비스를 사용할 수 있습니다.

배포는 ipareplica Ansible 역할에서 관리합니다. 역할은 자동 검색 모드를 사용하여 IdM 서버, 도메인 및 기타 설정을 식별할 수 있습니다. 그러나 계층과 같은 모델에 여러 복제본을 배포하는 경우 다른 복제본 그룹이 다른 시간에 배포되는 경우 각 그룹의 특정 서버 또는 복제본을 정의해야 합니다.

사전 요구 사항

3.1. IdM 복제본 설치를 위한 기본, 서버 및 클라이언트 변수 지정

IdM 복제본 설치를 위해 인벤토리 파일을 구성하려면 다음 절차를 완료합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 freeipa.ansible_freeipa 컬렉션을 설치했습니다.

프로세스

  1. 편집할 인벤토리 파일을 엽니다. IdM 복제본이 될 호스트의 FQDN(정규화된 도메인 이름)을 지정합니다. FQDN은 유효한 DNS 이름이어야 합니다.

    • 숫자, 영문자 및 하이픈(-)만 허용됩니다. 예를 들어 밑줄은 허용되지 않으며 DNS 오류가 발생할 수 있습니다.
    • 호스트 이름은 모두 소문자여야 합니다.

      복제본의 FQDN만 정의된 간단한 인벤토리 호스트 파일의 예

      [ipareplicas]
      replica1.idm.example.com
      replica2.idm.example.com
      replica3.idm.example.com
      [...]

      IdM 서버가 이미 배포되어 있고 IdM DNS 영역에 SRV 레코드가 올바르게 설정된 경우 스크립트는 기타 필요한 모든 값을 자동으로 검색합니다.

  2. 선택 사항: 토폴로지를 설계한 방법에 따라 인벤토리 파일에서 추가 정보를 제공합니다.

    시나리오 1

    자동 검색을 방지하고 [ipareplicas] 섹션에 모든 복제본이 특정 IdM 서버를 사용하도록 하려면 인벤토리 파일의 [ipaservers] 섹션에 서버를 설정합니다.

    IdM 서버 및 정의된 복제본의 FQDN이 있는 인벤토리 호스트 파일의 예

    [ipaservers]
    server.idm.example.com
    
    [ipareplicas]
    replica1.idm.example.com
    replica2.idm.example.com
    replica3.idm.example.com
    [...]

    시나리오 2

    또는 자동 검색을 피하지만 특정 서버를 사용하여 특정 복제본을 배포하려면 인벤토리 파일의 ipareplicas 섹션에서 특정 복제본의 서버를 개별적으로 설정합니다.

    특정 복제본에 대해 정의된 특정 IdM 서버가 있는 인벤토리 파일의 예

    [ipaservers]
    server.idm.example.com
    replica1.idm.example.com
    
    [ipareplicas]
    replica2.idm.example.com
    replica3.idm.example.com ipareplica_servers=replica1.idm.example.com

    위의 예에서 replica3.idm.example.com 은 이미 배포된 replica1.idm.example.com 을 복제 소스로 사용합니다.

    시나리오 3

    여러 복제본을 하나의 일괄 처리로 배포하고 시간이 우려하는 경우 다중 계층 복제본 배포가 유용할 수 있습니다. 인벤토리 파일에 특정 복제본 그룹(예: [ipareplicas_tier1][ipareplicas_tier2] )을 정의하고 install-replica.yml 플레이북의 각 그룹에 대해 별도의 플레이를 설계합니다.

    복제본 계층이 정의된 인벤토리 파일의 예

    [ipaservers]
    server.idm.example.com
    
    [ipareplicas_tier1]
    replica1.idm.example.com
    
    [ipareplicas_tier2]
    replica2.idm.example.com \ ipareplica_servers=replica1.idm.example.com,server.idm.example.com

    ipareplica_servers 의 첫 번째 항목이 사용됩니다. 두 번째 항목은 폴백 옵션으로 사용됩니다. IdM 복제본을 배포하기 위해 여러 계층을 사용하는 경우 먼저 tier1에서 복제본을 배포한 다음 tier2의 복제본을 배포하기 위해 플레이북에 별도의 작업이 있어야 합니다.

    다른 복제본 그룹에 대해 다른 플레이가 있는 플레이북 파일의 예

    ---
    - name: Playbook to configure IPA replicas (tier1)
      hosts: ipareplicas_tier1
      become: true
    
      roles:
      - role: freeipa.ansible_freeipa.ipareplica
        state: present
    
    - name: Playbook to configure IPA replicas (tier2)
      hosts: ipareplicas_tier2
      become: true
    
      roles:
      - role: freeipa.ansible_freeipa.ipareplica
        state: present

  3. 선택 사항: firewalld 및 DNS에 대한 추가 정보를 제공합니다.

    시나리오 1

    복제본에서 지정된 firewalld 영역을 사용하도록 하려면(예: 내부) 인벤토리 파일에서 지정할 수 있습니다. 사용자 지정 영역을 설정하지 않으면 IdM은 해당 서비스를 기본 firewalld 영역에 추가합니다. 사전 정의된 기본 영역은 public 입니다.

    중요

    지정된 firewalld 영역이 있어야 하며 영구 영역이어야 합니다.

    사용자 지정 firewalld 영역이 있는 간단한 인벤토리 호스트 파일의 예

    [ipaservers]
    server.idm.example.com
    
    [ipareplicas]
    replica1.idm.example.com
    replica2.idm.example.com
    replica3.idm.example.com
    [...]
    
    [ipareplicas:vars]
    ipareplica_firewalld_zone=custom zone

    시나리오 2

    복제본에서 IdM DNS 서비스를 호스팅하려면 ipareplica_setup_dns=true 행을 [ipareplicas:vars] 섹션에 추가합니다. 또한 서버별 DNS 전달자를 사용하려면 을 지정합니다.

    • 서버별 전달자를 구성하려면 ipareplica_forwarders 변수와 문자열 목록을 [ipareplicas:vars] 섹션에 추가합니다. 예를 들면 ipareplica_forwarders=192.0.2.1,192.0.2.2
    • 서버별 전달자를 구성하지 않으려면 [ipareplicas:vars] 섹션에 다음 행을 추가합니다. ipareplica_no_forwarders=true.
    • 복제본의 /etc/resolv.conf 파일에 나열된 전달자를 기반으로 서버별 전달자를 구성하려면 ipareplica_auto_forwarders 변수를 [ipareplicas:vars] 섹션에 추가합니다.

    복제본에서 DNS 및 서버별 전달자를 설정하는 지침이 있는 인벤토리 파일의 예

    [ipaservers]
    server.idm.example.com
    
    [ipareplicas]
    replica1.idm.example.com
    replica2.idm.example.com
    replica3.idm.example.com
    [...]
    
    [ipareplicas:vars]
    ipareplica_setup_dns=true
    ipareplica_forwarders=192.0.2.1,192.0.2.2

    시나리오 3

    ipaclient_configure_dns_resolveipaclient_dns_servers 옵션(사용 가능한 경우)을 사용하여 DNS 확인자를 지정하여 클러스터 배포를 단순화합니다. IdM 배포에서 통합 DNS를 사용하는 경우 특히 유용합니다.

    DNS 확인자를 지정하는 인벤토리 파일 스니펫입니다.

    [...]
    [ipaclient:vars]
    ipaclient_configure_dns_resolver=true
    ipaclient_dns_servers=192.168.100.1

    참고

    ipaclient_dns_servers 목록에는 IP 주소만 포함되어야 합니다. 호스트 이름은 허용되지 않습니다.

IdM 복제본 설치를 위한 권한 부여를 구성하려면 다음 절차를 완료합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 복제본을 배포할 수 있는 사용자의 암호를 지정합니다(예: IdM 관리자 ).

    • Ansible Vault를 사용하여 암호를 저장하고 플레이북 파일의 Vault 파일을 참조합니다(예: install-replica.yml ).

      Ansible Vault 파일의 인벤토리 파일 및 암호에서 주체를 사용하는 플레이북 파일의 예

      - name: Playbook to configure IPA replicas
        hosts: ipareplicas
        become: true
        vars_files:
        - playbook_sensitive_data.yml
      
        roles:
        - role: freeipa.ansible_freeipa.ipareplica
          state: present

      Ansible Vault 사용 방법에 대한 자세한 내용은 공식 Ansible Vault 설명서를 참조하십시오.

    • 덜 안전하게, 인벤토리 파일에서 직접 admin 의 자격 증명을 제공합니다. 인벤토리 파일의 [ipareplicas:vars] 섹션에서 ipaadmin_password 옵션을 사용합니다. 인벤토리 파일과 install-replica.yml 플레이북 파일은 다음과 같습니다.

      인벤토리 hosts.replica 파일 예

      [...]
      [ipareplicas:vars]
      ipaadmin_password=Secret123

      인벤토리 파일의 주체 및 암호를 사용하는 플레이북의 예

      - name: Playbook to configure IPA replicas
        hosts: ipareplicas
        become: true
      
        roles:
        - role: freeipa.ansible_freeipa.ipareplica
          state: present

    • 또는 덜 안전하게, 인벤토리 파일에 직접 복제본을 배포할 수 있는 권한이 있는 다른 사용자의 자격 증명을 제공합니다. 다른 권한이 있는 사용자를 지정하려면 사용자 이름에 ipaadmin_principal 옵션을 사용하고 암호에 ipaadmin_password 옵션을 사용합니다. 인벤토리 파일과 install-replica.yml 플레이북 파일은 다음과 같습니다.

      인벤토리 hosts.replica 파일 예

      [...]
      [ipareplicas:vars]
      ipaadmin_principal=my_admin
      ipaadmin_password=my_admin_secret123

      인벤토리 파일의 주체 및 암호를 사용하는 플레이북의 예

      - name: Playbook to configure IPA replicas
        hosts: ipareplicas
        become: true
      
        roles:
        - role: freeipa.ansible_freeipa.ipareplica
          state: present

참고

IdM 복제본을 설치하는 동안 제공된 Kerberos 주체에 필요한 권한이 있는지도 확인하여 사용자 ID 덮어쓰기를 확인합니다. 결과적으로 IdM 관리자 역할을 수행하도록 구성된 AD 관리자의 인증 정보를 사용하여 복제본을 배포할 수 있습니다.

3.3. Ansible 플레이북을 사용하여 IdM 복제본 배포

Ansible 플레이북을 사용하여 IdM 복제본을 배포하려면 다음 절차를 완료합니다.

사전 요구 사항

프로세스

  • Ansible Playbook을 실행합니다.

    $ ansible-playbook -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-replica.yml

다음 단계

3.4. Ansible 플레이북을 사용하여 IdM 복제본 설치 제거

참고

기존 RHEL IdM(Identity Management) 배포에서 복제본서버는 서로 바꿔 사용할 수 있습니다. IdM 서버를 제거하는 방법에 대한 자세한 내용은 Ansible 플레이북을 사용하여 IdM 서버 설치 제거 또는 Ansible 플레이북 을 사용하여 연결이 끊긴 토폴로지로 이어지는 경우에도 IdM 서버를 설치 제거합니다.

4장. Ansible 플레이북을 사용하여 Identity Management 클라이언트 설치

Ansible 을 사용하여 IdM(Identity Management) 클라이언트로 시스템을 구성하는 방법에 대해 자세히 알아보십시오. IdM 클라이언트로 시스템을 구성하면 IdM 도메인에 등록되고 시스템의 도메인의 IdM 서버에서 IdM 서비스를 사용할 수 있습니다.

배포는 ipaclient Ansible 역할에서 관리합니다. 기본적으로 역할은 자동 검색 모드를 사용하여 IdM 서버, 도메인 및 기타 설정을 식별합니다. Ansible 플레이북이 지정된 설정을 사용하도록 역할을 수정할 수 있습니다(예: 인벤토리 파일).

사전 요구 사항

  • Ansible 제어 노드에 ansible-freeipa 패키지를 설치했습니다.
  • Ansible 버전 2.15 이상을 사용하고 있습니다.
  • 일반적인 Ansible 및 IdM 개념을 이해하고 있습니다.

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management) 클라이언트를 설치하려면 인벤토리 파일에서 대상 호스트 매개변수를 구성합니다. 예를 들면 다음과 같습니다.

  • 호스트에 대한 정보
  • 작업 권한 부여

인벤토리 파일은 보유한 인벤토리 플러그인에 따라 여러 형식 중 하나일 수 있습니다. INI와 같은 형식은 Ansible의 기본값 중 하나이며 아래 예제에서 사용됩니다.

참고

RHEL에서 그래픽 사용자 인터페이스와 함께 스마트 카드를 사용하려면 Ansible 플레이북에 ipaclient_mkhomedir 변수를 포함해야 합니다.

프로세스

  1. 편집을 위해 인벤토리 파일을 엽니다.
  2. IdM 클라이언트가 될 호스트의 FQDN(정규화된 호스트 이름)을 지정합니다. 정규화된 도메인 이름은 유효한 DNS 이름이어야 합니다.

    • 숫자, 영문자 및 하이픈(-)만 허용됩니다. 예를 들어 밑줄은 허용되지 않으며 DNS 오류가 발생할 수 있습니다.
    • 호스트 이름은 모두 소문자여야 합니다. 대문자는 사용할 수 없습니다.

    IdM DNS 영역에 SRV 레코드가 올바르게 설정된 경우 스크립트는 기타 필요한 모든 값을 자동으로 검색합니다.

    정의된 클라이언트 FQDN만 있는 간단한 인벤토리 호스트 파일의 예

    [ipaclients]
    client.idm.example.com
    [...]

  3. 클라이언트 등록을 위한 인증 정보를 지정합니다. 다음 인증 방법을 사용할 수 있습니다.

    • 클라이언트를 등록할 수 있는 권한이 부여된 사용자의 암호 입니다. 이는 기본 옵션입니다.

      • Ansible Vault를 사용하여 암호를 저장하고 플레이북 파일의 Vault 파일(예: install-client.yml )을 직접 참조합니다.

        Ansible Vault 파일의 인벤토리 파일 및 암호에서 주체를 사용하는 플레이북 파일의 예

        - name: Playbook to configure IPA clients with username/password
          hosts: ipaclients
          become: true
          vars_files:
          - playbook_sensitive_data.yml
        
          roles:
          - role: freeipa.ansible_freeipa.ipaclient
            state: present

      • 덜 안전하게, inventory/hosts 파일의 [ ipaclients:vars] 섹션에서 ipa admin _password 옵션을 사용하여 관리자의 인증 정보를 제공합니다. 또는 다른 권한이 있는 사용자를 지정하려면 사용자 이름에 ipaadmin_principal 옵션을 사용하고 암호로 ipaadmin_password 옵션을 사용합니다. inventory/hosts 인벤토리 파일과 install-client.yml 플레이북 파일은 다음과 같습니다.

        인벤토리 호스트 파일 예

        [...]
        [ipaclients:vars]
        ipaadmin_principal=my_admin
        ipaadmin_password=Secret123

        인벤토리 파일의 주체 및 암호를 사용하는 플레이북의 예

        - name: Playbook to unconfigure IPA clients
          hosts: ipaclients
          become: true
        
          roles:
          - role: freeipa.ansible_freeipa.ipaclient
            state: true

    • 이전 등록의 클라이언트 키탭 은 계속 사용할 수 있습니다.

      이 옵션은 시스템이 이전에 Identity Management 클라이언트로 등록된 경우 사용할 수 있습니다. 이 인증 방법을 사용하려면 #ipaclient_keytab 옵션의 주석을 제거하고 keytab을 저장하는 파일의 경로를 지정합니다(예: inventory/hosts[ipaclient:vars] 섹션).

    • 등록하는 동안 생성할 임의의 일회성 암호 (OTP)입니다. 이 인증 방법을 사용하려면 인벤토리 파일에서 ipaclient_use_otp=true 옵션을 사용합니다. 예를 들어 inventory/hosts 파일의 [ipaclients:vars] 섹션에서 ipaclient_use_otp=true 옵션의 주석을 해제할 수 있습니다. OTP를 사용하면 다음 옵션 중 하나도 지정해야 합니다.

      • 클라이언트를 등록할 수 있는 사용자의 암호입니다(예: inventory/hosts 파일의 [ipaclients:vars] 섹션에 ipaadmin_password 의 값을 제공합니다.
      • 예를 들어 inventory/hosts[ipaclients:vars] 섹션에 ipaadmin_keytab 값을 제공하여 관리자 키탭 .
  4. 선택 사항: ipaclient_configure_dns_resolveipaclient_dns_servers 옵션(사용 가능한 경우)을 사용하여 DNS 확인자를 지정합니다. IdM 배포에서 통합 DNS를 사용하는 경우 특히 유용합니다.

    DNS 확인자를 지정하는 인벤토리 파일 스니펫입니다.

    [...]
    [ipaclients:vars]
    ipaadmin_password: "{{ ipaadmin_password }}"
    ipaclient_domain=idm.example.com
    ipaclient_configure_dns_resolver=true
    ipaclient_dns_servers=192.168.100.1

    참고

    ipaclient_dns_servers 목록에는 IP 주소만 포함되어야 합니다. 호스트 이름은 허용되지 않습니다.

  5. IdM 수준에서 IdM 사용자에 대해 subid 범위를 구성하려면 ipaclient_subid: true 옵션을 지정할 수도 있습니다.

Ansible 플레이북을 사용하여 Identity Management 클라이언트를 설치하려면 인벤토리 파일에서 대상 호스트 매개 변수를 구성합니다(예: inventory/hosts ):

  • 호스트, IdM 서버, IdM 도메인 또는 IdM 영역에 대한 정보
  • 작업 권한 부여

인벤토리 파일은 보유한 인벤토리 플러그인에 따라 여러 형식 중 하나일 수 있습니다. INI와 같은 형식은 Ansible의 기본값 중 하나이며 아래 예제에서 사용됩니다.

참고

RHEL에서 그래픽 사용자 인터페이스와 함께 스마트 카드를 사용하려면 Ansible 플레이북에 ipaclient_mkhomedir 변수를 포함해야 합니다.

프로세스

  1. IdM 클라이언트가 될 호스트의 FQDN(정규화된 호스트 이름)을 지정합니다. 정규화된 도메인 이름은 유효한 DNS 이름이어야 합니다.

    • 숫자, 영문자 및 하이픈(-)만 허용됩니다. 예를 들어 밑줄은 허용되지 않으며 DNS 오류가 발생할 수 있습니다.
    • 호스트 이름은 모두 소문자여야 합니다. 대문자는 사용할 수 없습니다.
  2. 인벤토리/hosts 파일의 관련 섹션에서 다른 옵션을 지정합니다.

    • 클라이언트가 등록할 IdM 서버를 나타내는 [ipaservers] 섹션에 있는 서버의 FQDN
    • 다음 두 옵션 중 하나입니다.

      • 클라이언트가 등록할 IdM 서버의 DNS 도메인 이름을 나타내는 [ipaclients:vars] 섹션의 ipaclient_domain 옵션
      • IdM 서버에서 제어하는 Kerberos 영역의 이름을 나타내는 [ipaclients:vars] 섹션의 ipaclient_realm 옵션

        클라이언트 FQDN, 서버 FQDN 및 정의된 도메인이 있는 인벤토리 호스트 파일의 예

        [ipaclients]
        client.idm.example.com
        
        [ipaservers]
        server.idm.example.com
        
        [ipaclients:vars]
        ipaclient_domain=idm.example.com
        [...]

  3. 클라이언트 등록을 위한 인증 정보를 지정합니다. 다음 인증 방법을 사용할 수 있습니다.

    • 클라이언트를 등록할 수 있는 권한이 부여된 사용자의 암호 입니다. 이는 기본 옵션입니다.

      • Ansible Vault를 사용하여 암호를 저장하고 플레이북 파일의 Vault 파일(예: install-client.yml )을 직접 참조합니다.

        Ansible Vault 파일의 인벤토리 파일 및 암호에서 주체를 사용하는 플레이북 파일의 예

        - name: Playbook to configure IPA clients with username/password
          hosts: ipaclients
          become: true
          vars_files:
          - playbook_sensitive_data.yml
        
          roles:
          - role: freeipa.ansible_freeipa.ipaclient
            state: present

    • 덜 안전하게, inventory/hosts 파일의 [ ipaclients:vars] 섹션에서 ipa admin _password 옵션을 사용하여 제공할 관리자의 자격 증명입니다. 또는 다른 권한이 있는 사용자를 지정하려면 사용자 이름에 ipaadmin_principal 옵션을 사용하고 암호로 ipaadmin_password 옵션을 사용합니다. install-client.yml 플레이북 파일은 다음과 같습니다.

      인벤토리 호스트 파일 예

      [...]
      [ipaclients:vars]
      ipaadmin_principal=my_admin
      ipaadmin_password=Secret123

      인벤토리 파일의 주체 및 암호를 사용하는 플레이북의 예

      - name: Playbook to unconfigure IPA clients
        hosts: ipaclients
        become: true
      
        roles:
        - role: freeipa.ansible_freeipa.ipaclient
          state: true

    • 이전 등록의 클라이언트 키탭 은 계속 사용할 수 있습니다.

      이 옵션은 시스템이 이전에 Identity Management 클라이언트로 등록된 경우 사용할 수 있습니다. 이 인증 방법을 사용하려면 ipaclient_keytab 옵션의 주석을 제거하고 키탭을 저장하는 파일의 경로를 지정합니다(예: inventory/hosts[ipaclient:vars] 섹션).

    • 등록하는 동안 생성할 임의의 일회성 암호 (OTP)입니다. 이 인증 방법을 사용하려면 인벤토리 파일에서 ipaclient_use_otp=true 옵션을 사용합니다. 예를 들어 inventory/hosts 파일의 [ipaclients:vars] 섹션에서 #ipaclient_use_otp=true 옵션의 주석을 해제할 수 있습니다. OTP를 사용하면 다음 옵션 중 하나도 지정해야 합니다.

      • 클라이언트를 등록할 수 있는 사용자의 암호입니다(예: inventory/hosts 파일의 [ipaclients:vars] 섹션에 ipaadmin_password 의 값을 제공합니다.
      • 예를 들어 inventory/hosts[ipaclients:vars] 섹션에 ipaadmin_keytab 값을 제공하여 관리자 키탭 .
  4. IdM 수준에서 IdM 사용자에 대해 subid 범위를 구성하려면 ipaclient_subid: true 옵션을 지정할 수도 있습니다.

다음 방법을 사용하여 IdM 클라이언트 등록을 승인할 수 있습니다.

  • 임의의 일회성 암호(OTP) + 관리자 암호
  • 임의의 일회성 암호(OTP) + 관리자 키탭
  • 이전 등록의 클라이언트 키탭
  • 인벤토리 파일에 저장된 클라이언트(관리자)를 등록할 수 있는 사용자의 암호
  • Ansible 자격 증명 모음에 저장된 클라이언트(관리자)를 등록할 수 있는 사용자의 암호

IdM 클라이언트 설치 전에 IdM 관리자가 OTP를 생성할 수 있습니다. 이 경우 OTP 자체 이외의 설치에 대한 인증 정보가 필요하지 않습니다.

다음은 이러한 방법에 대한 샘플 인벤토리 파일입니다.

Expand
표 4.1. 인벤토리 파일 샘플
권한 부여 옵션인벤토리 파일

임의의 일회성 암호(OTP) + 관리자 암호

[ipaclients:vars]
ipaadmin_password=Secret123
ipaclient_use_otp=true

임의의 일회성 암호(OTP)

[ipaclients:vars]
ipaclient_otp=<W5YpARl=7M.>

이 시나리오에서는 설치 전에 IdM 관리자가 OTP를 이미 생성했다고 가정합니다.

임의의 일회성 암호(OTP) + 관리자 키탭

[ipaclients:vars]
ipaadmin_keytab=/root/admin.keytab
ipaclient_use_otp=true

이전 등록의 클라이언트 키탭

[ipaclients:vars]
ipaclient_keytab=/root/krb5.keytab

인벤토리 파일에 저장된 관리자 의 암호

[ipaclients:vars]
ipaadmin_password=Secret123

Ansible 자격 증명 모음 파일에 저장된 관리자 의 암호

[ipaclients:vars]
[...]

Ansible Vault 파일에 저장된 admin 사용자의 암호를 사용하는 경우 해당 플레이북 파일에 추가 vars_files 지시문이 있어야 합니다.

Expand
표 4.2. Ansible 자격 증명 모음에 저장된 사용자 암호
인벤토리 파일플레이북 파일
[ipaclients:vars]
[...]
- name: Playbook to configure IPA clients
  hosts: ipaclients
  become: true
  vars_files:
  - ansible_vault_file.yml

  roles:
  - role: freeipa.ansible_freeipa.ipaclient
    state: present

위에서 설명한 다른 모든 권한 부여 시나리오에서는 기본 플레이북 파일은 다음과 같을 수 있습니다.

- name: Playbook to configure IPA clients
  hosts: ipaclients
  become: true

  roles:
  - role: freeipa.ansible_freeipa.ipaclient
    state: true
참고

위에서 설명한 두 OTP 권한 부여 시나리오에서는 kinit 명령을 사용하여 관리자의 TGT를 요청하면 처음 지정되거나 검색된 IdM 서버에서 수행됩니다. 따라서 Ansible 제어 노드를 추가로 수정할 필요가 없습니다.

4.4. Ansible 플레이북을 사용하여 IdM 클라이언트 배포

Ansible 플레이북을 사용하여 IdM 환경에 IdM 클라이언트를 배포하려면 다음 절차를 완료합니다.

사전 요구 사항

프로세스

  • Ansible Playbook을 실행합니다.

    $ ansible-playbook -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-client.yml

4.5. Ansible에서 일회성 암호 방법을 사용하여 IdM 클라이언트 설치

RHEL IdM(Identity Management)의 새 호스트에 대해 일회성 암호(OTP)를 생성하고 이를 사용하여 IdM 도메인에 시스템을 등록할 수 있습니다. 다음 절차에서는 다른 IdM 호스트에서 OTP를 생성한 후 Ansible을 사용하여 IdM 클라이언트를 설치하는 방법을 설명합니다.

조직에 다른 권한이 있는 두 시스템 관리자가 있는 경우 IdM 클라이언트를 설치하는 이 방법을 사용할 수 있습니다.

  • IdM 관리자의 인증 정보가 있는 사람입니다.
  • IdM 클라이언트가 되기 위해 호스트에 대한 root 액세스 권한을 포함하여 필요한 Ansible 자격 증명이 있는 또 다른 방법입니다.

IdM 관리자는 OTP 암호가 생성되는 절차의 첫 번째 부분을 수행합니다. Ansible 관리자는 OTP가 IdM 클라이언트를 설치하는 데 사용되는 절차의 나머지 부분을 수행합니다.

사전 요구 사항

  • IdM 관리자 인증 정보 또는 최소한 호스트 등록 권한과 IdM에 DNS 레코드를 추가할 수 있는 권한이 있습니다.
  • IdM 클라이언트를 설치할 수 있도록 Ansible 관리 노드에 사용자 에스컬레이션 방법을 구성했습니다.
  • Ansible 제어 노드가 RHEL 8.7 또는 이전 버전에서 실행 중인 경우 Ansible 제어 노드에 패키지를 설치할 수 있어야 합니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 관리형 노드는 고정 IP 주소와 작업 패키지 관리자가 있는 Red Hat Enterprise Linux 10 시스템입니다.

프로세스

  1. 호스트 등록 권한이 있고 DNS 레코드를 추가할 수 있는 권한이 있는 역할을 사용하여 IdM 사용자로 IdM 호스트에 SSH 를 실행하십시오.

    $ ssh admin@server.idm.example.com
  2. 새 클라이언트에 대한 OTP를 생성합니다.

    [admin@server ~]$ ipa host-add client.idm.example.com --ip-address=172.25.250.11 --random
     --------------------------------------------------
     Added host "client.idm.example.com"
     --------------------------------------------------
      Host name: client.idm.example.com
      Random password: W5YpARl=7M.n
      Password: True
      Keytab: False
      Managed by: server.idm.example.com

    --ip-address= <your_host_ip_address > 옵션은 지정된 IP 주소를 사용하여 IdM DNS에 호스트를 추가합니다.

  3. IdM 호스트를 종료합니다.

    $ exit
    logout
    Connection to server.idm.example.com closed.
  4. ansible 컨트롤러에서 임의의 암호를 포함하도록 인벤토리 파일을 업데이트합니다.

    [...]
    [ipaclients]
    client.idm.example.com
    
    [ipaclients:vars]
    ipaclient_domain=idm.example.com
    ipaclient_otp=W5YpARl=7M.n
    [...]
  5. 플레이북을 실행하여 클라이언트를 설치합니다.

    $ ansible-playbook -i inventory install-client.yml

4.6. Ansible 설치 후 RHEL Identity Management 클라이언트 테스트

명령행(CLI)은 ansible-playbook 명령이 성공했음을 알려주지만 자체 테스트를 수행할 수도 있습니다.

RHEL Identity Management 클라이언트에서 서버에 정의된 사용자에 대한 정보를 가져올 수 있는지 테스트하려면 서버에 정의된 사용자를 확인할 수 있는지 확인합니다. 예를 들어 기본 admin 사용자를 확인하려면 다음을 실행합니다.

[user@client1 ~]$ id admin
uid=1254400000(admin) gid=1254400000(admins) groups=1254400000(admins)

인증이 올바르게 작동하는지 테스트하기 위해 su - 이미 존재하는 다른 IdM 사용자로 다음을 수행합니다.

[user@client1 ~]$ su - idm_user
Last login: Thu Oct 18 18:39:11 CEST 2018 from 192.168.122.1 on pts/0
[idm_user@client1 ~]$

4.7. Ansible 플레이북을 사용하여 IdM 클라이언트 설치 제거

Ansible 플레이북을 사용하여 IdM 클라이언트로 호스트를 설치 제거하려면 다음 절차를 완료합니다.

사전 요구 사항

  • IdM 관리자 인증 정보입니다.
  • 관리형 노드는 고정 IP 주소가 있는 Red Hat Enterprise Linux 10 시스템입니다.

프로세스

  • 지침을 사용하여 Ansible 플레이북을 실행하여 클라이언트를 설치 제거합니다(예: uninstall-client.yml:)

    $ ansible-playbook -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/uninstall-client.yml
중요

클라이언트 설치 제거는 클라이언트에서 기본 IdM 구성만 제거하지만 클라이언트를 다시 설치하기로 결정한 경우 호스트에 구성 파일은 그대로 둡니다. 또한 제거에는 다음과 같은 제한 사항이 있습니다.

  • IdM LDAP 서버에서 클라이언트 호스트 항목을 제거하지 않습니다. 설치 제거는 호스트에만 등록 취소됩니다.
  • IdM에서 클라이언트에 있는 서비스는 제거되지 않습니다.
  • IdM 서버에서 클라이언트의 DNS 항목을 제거하지 않습니다.
  • /etc/krb5.keytab 이외의 keytab의 이전 주체는 제거되지 않습니다.

설치 제거는 IdM CA에서 호스트에 대해 발행한 모든 인증서를 제거합니다.

5장. Ansible 플레이북을 사용하여 IdM 관리를 위한 환경 준비

RHEL IdM(Identity Management)을 관리하는 시스템 관리자로서 Ansible로 작업할 때 다음을 수행하는 것이 좋습니다.

  • 홈 디렉터리에 있는 Ansible 플레이북 전용 하위 디렉터리를 유지합니다(예: ~/MyPlaybooks ).
  • /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/*/usr/share/doc/rhel-system-roles/* 디렉터리 및 하위 디렉터리에서 ~/MyPlaybooks 디렉터리에 샘플 Ansible 플레이북을 복사하고 조정합니다.
  • ~/MyPlaybooks 디렉터리에 인벤토리 파일을 포함합니다.

이 방법을 사용하면 모든 플레이북을 한 곳에서 찾을 수 있습니다.

참고

관리 노드에서 root 권한을 호출하지 않고 ansible-freeipa 플레이북을 실행할 수 있습니다. 예외에는 ipaserver,ipareplica,ipaclient,ipasmartcard_server,ipasmartcard_clientipabackup ansible-freeipa 역할을 사용하는 플레이북이 포함됩니다. 이러한 역할에는 디렉터리 및 dnf 소프트웨어 패키지 관리자에 대한 권한이 필요합니다.

Red Hat Enterprise Linux IdM 설명서의 플레이북은 다음과 같은 보안 구성 을 가정합니다.

  • IdM admin 은 관리 노드의 원격 Ansible 사용자입니다.
  • Ansible 자격 증명 모음에 암호화된 IdM 관리자 암호를 저장합니다.
  • 암호 파일에 Ansible 자격 증명 모음을 보호하는 암호를 저장했습니다.
  • 로컬 ansible 사용자를 제외한 모든 사용자에게 vault 암호 파일에 대한 액세스를 차단합니다.
  • vault 암호 파일을 정기적으로 제거하고 다시 생성합니다.

대체 보안 구성 도 고려하십시오.

Ansible 플레이북을 저장하고 실행하는 데 사용할 수 있도록 ~/MyPlaybooks 디렉터리를 생성하고 구성하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 관리형 노드, server.idm.example.comreplica.idm.example.com 에 IdM 서버를 설치했습니다.
  • 제어 노드에서 직접 관리 노드, server.idm.example.comreplica.idm.example.com 에 로그인할 수 있도록 DNS 및 네트워킹을 구성했습니다.
  • IdM 관리자 암호를 알고 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 변경합니다.

    $ cd ~/MyPlaybooks
  2. 다음 콘텐츠를 사용하여 ~/MyPlaybooks/ansible.cfg 파일을 생성합니다.

    [defaults]
    inventory = /home/your_username/MyPlaybooks/inventory
    remote_user = admin
  3. 다음 콘텐츠를 사용하여 ~/MyPlaybooks/inventory 파일을 만듭니다.

    [eu]
    server.idm.example.com
    
    [us]
    replica.idm.example.com
    
    [ipaserver:children]
    eu
    us

    이 구성은 이러한 위치의 호스트에 대해 두 개의 호스트 그룹 euus 를 정의합니다. 또한 이 구성은 euus 그룹의 모든 호스트를 포함하는 ipaserver 호스트 그룹을 정의합니다.

  4. 선택 사항: SSH 공개 및 개인 키를 생성합니다. 테스트 환경에서 액세스를 단순화하려면 개인 키에 암호를 설정하지 마십시오.

    $ ssh-keygen
  5. SSH 공개 키를 각 관리 노드의 IdM 관리자 계정에 복사합니다.

    $ ssh-copy-id admin@server.idm.example.com
    $ ssh-copy-id admin@replica.idm.example.com

    이러한 명령을 사용하려면 IdM 관리자 암호를 입력해야 합니다.

  6. vault 암호가 포함된 password_file 파일을 생성합니다.

    redhat
  7. 파일을 수정하려면 권한을 변경합니다.

    $ chmod 0600 password_file
  8. secret.yml Ansible vault를 생성하여 IdM 관리자 암호를 저장합니다.

    1. vault 암호를 저장하도록 password_file 을 구성합니다.

      $ ansible-vault create --vault-password-file=password_file secret.yml
    2. 메시지가 표시되면 secret.yml 파일의 내용을 입력합니다.

      ipaadmin_password: Secret123
참고

플레이북에서 암호화된 ipaadmin_password 를 사용하려면 vars_file 지시문을 사용해야 합니다. 예를 들어 IdM 사용자를 삭제하는 간단한 플레이북은 다음과 같습니다.

---
- name: Playbook to handle users
  hosts: ipaserver

  vars_files:
  - /home/user_name/MyPlaybooks/secret.yml

  tasks:
  - name: Delete user robot
    freeipa.ansible_freeipa.ipauser:
      ipaadmin_password: "{{ ipaadmin_password }}"
      name: robot
      state: absent

플레이북을 실행할 때 --vault-password-file=password_file옵션을 추가하여 Ansible에 vault 암호를 사용하여 ipaadmin_password _password 의 암호를 해독하도록 지시합니다. 예를 들면 다음과 같습니다.

ansible-playbook -i inventory --vault-password-file=password_file del-user.yml
주의

보안상의 이유로 각 세션 종료 시 vault 암호 파일을 제거하고 각 새 세션이 시작될 때 6-8단계를 반복합니다.

ansible-freeipa 역할 및 모듈을 사용하는 플레이북 실행에 필요한 자격 증명을 제공하는 다양한 방법에는 장단점이 있습니다.

플레이북의 일반 텍스트로 암호 저장

이점:

  • 플레이북을 실행할 때마다 메시지가 표시되지 않습니다.
  • 쉽게 구현할 수 있습니다.

단점:

  • 파일에 대한 액세스 권한이 있는 모든 사용자가 암호를 읽을 수 있습니다. 잘못된 권한을 설정하고 파일을 공유(예: 내부 또는 외부 리포지토리)하면 보안이 손상될 수 있습니다.
  • 유지 관리 작업: 암호가 변경되면 모든 플레이북에서 변경해야 합니다.

플레이북을 실행할 때 대화식으로 암호 입력

이점:

  • 아무나 비밀번호를 훔치면 아무데도 저장되지 않기 때문에 비밀번호를 훔칠 수 없습니다.
  • 암호를 쉽게 업데이트할 수 있습니다.
  • 쉽게 구현할 수 있습니다.

단점:

  • 스크립트에서 Ansible 플레이북을 사용하는 경우 대화형으로 암호를 입력해야 하는 요구 사항은 불편할 수 있습니다.

Ansible vault에 암호를 저장하고 파일에 vault 암호를 저장하십시오.

이점:

  • 사용자 암호는 암호화되어 저장됩니다.
  • 새 Ansible 자격 증명 모음을 생성하여 사용자 암호를 쉽게 업데이트할 수 있습니다.
  • ansible-vault rekey --new-vault-password-file=NEW_VAULT_PASSWORD_FILE secret.yml 명령을 사용하여 ansible 자격 증명 모음을 쉽게 보호하는 암호 파일을 업데이트할 수 있습니다.
  • 스크립트에서 Ansible 플레이북을 사용하는 경우 Ansible 자격 증명 모음을 대화형으로 보호하는 암호를 입력하지 않아도 됩니다.

단점:

  • 중요한 일반 텍스트 암호가 포함된 파일은 파일 권한 및 기타 보안 조치를 통해 보호해야 합니다.

Ansible 자격 증명 모음에 암호 저장 및 대화형 자격 증명 모음 암호 입력

이점:

  • 사용자 암호는 암호화되어 저장됩니다.
  • 자격 증명 모음 암호는 아무데도 저장되지 않으므로 자격 증명 모음 암호를 훔칠 수 없습니다.
  • 새 Ansible 자격 증명 모음을 생성하여 사용자 암호를 쉽게 업데이트할 수 있습니다.
  • ansible-vault rekey file_name 명령을 사용하여 vault 암호를 쉽게 업데이트할 수 있습니다.

단점:

  • 스크립트에서 Ansible 플레이북을 사용하는 경우 자격 증명 모음 암호를 대화형으로 입력해야 합니다.

5.3. ansible-freeipa의 인벤토리 플러그인

ansible-freeipa freeipa 인벤토리 플러그인을 사용하여 ansible-freeipa 플레이북에서 사용할 IdM(Identity Management) 서버의 동적 인벤토리를 생성할 수 있습니다. 플러그인은 도메인의 IdM 서버에 대한 데이터를 수집하고 지정된 IdM 서버 역할 또는 역할이 할당된 역할만 선택합니다. ansible-playbook 명령과 함께 플러그인을 사용하려면 -i 옵션의 값을 freeipa 플러그인을 사용하는 인벤토리 파일로 설정합니다. 결과적으로 플레이북의 플레이는 인벤토리 파일에 지정된 역할이 있는 서버에 대해서만 실행됩니다.

아래 예제에서는 freeipa 플러그인을 사용하여 DNS 역할이 있는 토폴로지의 IdM 서버에서 bind 패키지 버전을 결정하는 방법을 설명합니다.

프로세스

  1. inventory.yml 과 같은 파일을 생성하여 선택한 IdM 서버 역할 또는 역할을 기반으로 동적 인벤토리를 생성합니다. 예를 들어 IdM DNS 서버 역할이 있는 서버의 인벤토리를 생성하려면 다음을 수행합니다.

    ---
    plugin: freeipa
    server: server.idm.example.com
    ipaadmin_password: Secret123
    verify: ca.crt
    role: DNS server
    • server 는 스캔을 시작할 호스트의 정규화된 도메인 이름을 정의합니다.
    • 확인을 위해 서버 TLS 인증서 파일을 정의합니다.
    • role 은 호스트가 반환되려면 호스트에 있어야 하는 모든 서버 역할을 정의합니다.
  2. freeipa 인벤토리 플러그인으로 식별되는 IdM 서버에 대해 실행할 플레이북(예: bind-playbook.yml )을 생성합니다. 예를 들어 IdM DNS 서버에 설치된 bind 패키지의 릴리스 버전을 확인하려면 다음을 수행합니다.

    ---
    - name: Check bind version
      hosts: ipaservers
    
      tasks:
        - name: Query bind package version
          package:
            name: bind
            state: present
          register: bind_version
    
        - name: Display bind release info
          debug:
            msg: "Bind release: {{ bind_version.results[0].version }}"
  3. [선택 사항] 플러그인으로 식별되는 IdM 서버의 그래프 표시를 생성합니다.

    $ ansible-inventory -i inventory.yml --graph
    @all:
      |--@ungrouped
      |--@ipaservers:
      |  |--replica01.idm.example.com
  4. Ansible 플레이북을 실행합니다. inventory.yml 파일을 인벤토리로 지정합니다.

    $ ansible-playbook -i inventory.yml bind-playbook.yml
    [...]
    TASK [Display bind release info]
    ok: [10.0.193.174] => {
        "msg": "Bind release: 9.20.3"
    }
    [...]

6장. Ansible 플레이북을 사용하여 IdM 서버 백업 및 복원

ipabackup Ansible 역할을 사용하여 IdM 서버 백업, 서버와 Ansible 컨트롤러 간에 백업 파일을 전송하고 백업에서 IdM 서버를 복원하는 작업을 자동화할 수 있습니다.

6.1. Ansible을 사용하여 IdM 서버 백업 생성

Ansible 플레이북에서 ipabackup 역할을 사용하여 IdM 서버의 백업을 생성하고 IdM 서버에 저장할 수 있습니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks 디렉터리에 있는 backup-server.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/backup-server.yml backup-my-server.yml
  3. 편집할 backup-my-server.yml Ansible 플레이북 파일을 엽니다.
  4. hosts 변수를 인벤토리 파일의 호스트 그룹으로 설정하여 파일을 조정합니다. 이 예에서는 ipaserver 호스트 그룹으로 설정합니다.

    ---
    - name: Playbook to backup IPA server
      hosts: ipaserver
      become: true
    
      roles:
      - role: freeipa.ansible_freeipa.ipabackup
        state: present
  5. 파일을 저장합니다.
  6. 인벤토리 파일과 플레이북 파일을 지정하여 Ansible 플레이북을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory backup-my-server.yml

검증

  1. 백업한 IdM 서버에 로그인합니다.
  2. 백업이 /var/lib/ipa/backup 디렉터리에 있는지 확인합니다.

    [root@server ~]# ls /var/lib/ipa/backup/
    ipa-full-2021-04-30-13-12-00

6.2. Ansible을 사용하여 Ansible 컨트롤러에 IdM 서버 백업 생성

Ansible 플레이북에서 ipabackup 역할을 사용하여 IdM 서버의 백업을 생성하고 Ansible 컨트롤러에서 자동으로 전송할 수 있습니다. 백업 파일 이름은 IdM 서버의 호스트 이름으로 시작됩니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 백업을 저장하려면 Ansible 컨트롤러의 홈 디렉터리에 하위 디렉터리를 생성합니다.

    $ mkdir ~/ipabackups
  2. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  3. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks 디렉터리에 있는 backup-server-to-controller.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/backup-server-to-controller.yml backup-my-server-to-my-controller.yml
  4. 편집할 backup-my-server-to-my-controller.yml 파일을 엽니다.
  5. 다음 변수를 설정하여 파일을 조정합니다.

    1. hosts 변수를 인벤토리 파일의 호스트 그룹으로 설정합니다. 이 예에서는 ipaserver 호스트 그룹으로 설정합니다.
    2. 선택 사항: IdM 서버에서 백업 사본을 유지하려면 다음 행의 주석을 제거합니다.

       # ipabackup_keep_on_server: true
  6. 기본적으로 백업은 Ansible 컨트롤러의 현재 작업 디렉터리에 저장됩니다. 1단계에서 생성한 백업 디렉토리를 지정하려면 ipabackup_controller_path 변수를 추가하고 /home/user/ipabackups 디렉터리로 설정합니다.

    ---
    - name: Playbook to backup IPA server to controller
      hosts: ipaserver
      become: true
      vars:
        ipabackup_to_controller: true
        # ipabackup_keep_on_server: true
        ipabackup_controller_path: /home/user/ipabackups
    
      roles:
      - role: freeipa.ansible_freeipa.ipabackup
        state: present
  7. 파일을 저장합니다.
  8. 인벤토리 파일과 플레이북 파일을 지정하여 Ansible 플레이북을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory backup-my-server-to-my-controller.yml

검증

  • 백업이 Ansible 컨트롤러의 /home/user/ipabackups 디렉터리에 있는지 확인합니다.

    [user@controller ~]$ ls /home/user/ipabackups
    server.idm.example.com_ipa-full-2021-04-30-13-12-00

6.3. Ansible을 사용하여 IdM 서버의 백업을 Ansible 컨트롤러에 복사

Ansible 플레이북을 사용하여 IdM 서버의 백업을 Ansible 컨트롤러로 복사할 수 있습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 백업을 저장하려면 Ansible 컨트롤러의 홈 디렉터리에 하위 디렉터리를 생성합니다.

    $ mkdir ~/ipabackups
  2. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  3. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks 디렉터리에 있는 copy-backup-from-server.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/copy-backup-from-server.yml copy-backup-from-my-server-to-my-controller.yml
  4. 편집을 위해 copy-my-backup-from-my-server-to-my-controller.yml 파일을 엽니다.
  5. 다음 변수를 설정하여 파일을 조정합니다.

    1. hosts 변수를 인벤토리 파일의 호스트 그룹으로 설정합니다. 이 예에서는 ipaserver 호스트 그룹으로 설정합니다.
    2. ipabackup_name 변수를 Ansible 컨트롤러에 복사할 IdM 서버의 ipabackup 이름으로 설정합니다.
    3. 기본적으로 백업은 Ansible 컨트롤러의 현재 작업 디렉터리에 저장됩니다. 1단계에서 생성한 디렉터리를 지정하려면 ipabackup_controller_path 변수를 추가하고 /home/user/ipabackups 디렉터리로 설정합니다.

      ---
      - name: Playbook to copy backup from IPA server
        hosts: ipaserver
        become: true
        vars:
          ipabackup_name: ipa-full-2021-04-30-13-12-00
          ipabackup_to_controller: true
          ipabackup_controller_path: /home/user/ipabackups
      
        roles:
        - role: freeipa.ansible_freeipa.ipabackup
          state: present
  6. 파일을 저장합니다.
  7. 인벤토리 파일과 플레이북 파일을 지정하여 Ansible 플레이북을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory copy-backup-from-my-server-to-my-controller.yml
참고

모든 IdM 백업을 컨트롤러에 복사하려면 Ansible 플레이북의 ipabackup_name 변수를 all 으로 설정합니다.

  vars:
    ipabackup_name: all
    ipabackup_to_controller: true

예를 들어 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks 디렉터리의 copy-all-backups-from-server.yml Ansible 플레이북을 참조하십시오.

검증

  • 백업이 Ansible 컨트롤러의 /home/user/ipabackups 디렉터리에 있는지 확인합니다.

    [user@controller ~]$ ls /home/user/ipabackups
    server.idm.example.com_ipa-full-2021-04-30-13-12-00

Ansible 플레이북을 사용하여 Ansible 컨트롤러에서 IdM 서버로 IdM 서버 백업을 복사할 수 있습니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks 디렉터리에 있는 copy-backup-from-controller.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/copy-backup-from-controller.yml copy-backup-from-my-controller-to-my-server.yml
  3. 편집을 위해 copy-my-backup-from-my-controller-to-my-server.yml 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. hosts 변수를 인벤토리 파일의 호스트 그룹으로 설정합니다. 이 예에서는 ipaserver 호스트 그룹으로 설정합니다.
    2. ipabackup_name 변수를 IdM 서버에 복사할 Ansible 컨트롤러의 ipabackup 이름으로 설정합니다.

      ---
      - name: Playbook to copy a backup from controller to the IPA server
        hosts: ipaserver
        become: true
      
        vars:
          ipabackup_name: server.idm.example.com_ipa-full-2021-04-30-13-12-00
          ipabackup_from_controller: true
      
        roles:
        - role: freeipa.ansible_freeipa.ipabackup
          state: copied
  5. 파일을 저장합니다.
  6. 인벤토리 파일과 플레이북 파일을 지정하여 Ansible 플레이북을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory copy-backup-from-my-controller-to-my-server.yml

6.5. Ansible을 사용하여 IdM 서버에서 백업 제거

Ansible 플레이북을 사용하여 IdM 서버에서 백업을 제거할 수 있습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks 디렉터리에 있는 remove-backup-from-server.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/remove-backup-from-server.yml remove-backup-from-my-server.yml
  3. 편집을 위해 remove-backup-from-my-server.yml 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. hosts 변수를 인벤토리 파일의 호스트 그룹으로 설정합니다. 이 예에서는 ipaserver 호스트 그룹으로 설정합니다.
    2. ipabackup_name 변수를 IdM 서버에서 제거하려면 ipabackup 의 이름으로 설정합니다.

      ---
      - name: Playbook to remove backup from IPA server
        hosts: ipaserver
        become: true
      
        vars:
          ipabackup_name: ipa-full-2021-04-30-13-12-00
      
        roles:
        - role: freeipa.ansible_freeipa.ipabackup
          state: absent
  5. 파일을 저장합니다.
  6. 인벤토리 파일과 플레이북 파일을 지정하여 Ansible 플레이북을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory remove-backup-from-my-server.yml
참고

IdM 서버에서 모든 IdM 백업을 제거하려면 Ansible 플레이북의 ipabackup_name 변수를 all 으로 설정합니다.

  vars:
    ipabackup_name: all

예를 들어 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks 디렉터리의 remove-all-backups-from-server.yml Ansible 플레이북을 참조하십시오.

6.6. Ansible을 사용하여 서버에 저장된 백업에서 IdM 서버를 복원

Ansible 플레이북을 사용하여 해당 호스트에 저장된 백업에서 IdM 서버를 복원할 수 있습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • LDAP Directory Manager 암호는 알고 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks 디렉터리에 있는 restore-server.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/restore-server.yml restore-my-server.yml
  3. 편집할 restore-my-server.yml Ansible 플레이북 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. hosts 변수를 인벤토리 파일의 호스트 그룹으로 설정합니다. 이 예에서는 ipaserver 호스트 그룹으로 설정합니다.
    2. ipabackup_name 변수를 복원할 ipabackup _name의 이름으로 설정합니다.
    3. ipabackup_password 변수를 LDAP Directory Manager 암호로 설정합니다.

      ---
      - name: Playbook to restore an IPA server
        hosts: ipaserver
        become: true
      
        vars:
          ipabackup_name: ipa-full-2021-04-30-13-12-00
          ipabackup_password: <your_LDAP_DM_password>
      
        roles:
        - role: freeipa.ansible_freeipa.ipabackup
          state: restored
  5. 파일을 저장합니다.
  6. 인벤토리 파일과 플레이북 파일을 지정하는 Ansible 플레이북을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory restore-my-server.yml

Ansible 플레이북을 사용하여 Ansible 컨트롤러에 저장된 백업에서 IdM 서버를 복원할 수 있습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • LDAP Directory Manager 암호는 알고 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks 디렉터리에 있는 restore-server-from-controller.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/restore-server-from-controller.yml restore-my-server-from-my-controller.yml
  3. 편집할 restore-my-server-from-my-controller.yml 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. hosts 변수를 인벤토리 파일의 호스트 그룹으로 설정합니다. 이 예에서는 ipaserver 호스트 그룹으로 설정합니다.
    2. ipabackup_name 변수를 복원할 ipabackup _name의 이름으로 설정합니다.
    3. ipabackup_password 변수를 LDAP Directory Manager 암호로 설정합니다.

      ---
      - name: Playbook to restore IPA server from controller
        hosts: ipaserver
        become: true
      
        vars:
          ipabackup_name: server.idm.example.com_ipa-full-2021-04-30-13-12-00
          ipabackup_password: <your_LDAP_DM_password>
          ipabackup_from_controller: true
      
        roles:
        - role: freeipa.ansible_freeipa.ipabackup
          state: restored
  5. 파일을 저장합니다.
  6. 인벤토리 파일과 플레이북 파일을 지정하여 Ansible 플레이북을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory restore-my-server-from-my-controller.yml

7장. Ansible 플레이북을 사용하여 글로벌 IdM 설정 구성

Ansible config 모듈을 사용하여 IdM(Identity Management)에 대한 글로벌 구성 매개변수를 검색하고 설정할 수 있습니다.

7.1. Ansible 플레이북을 사용하여 IdM 구성 검색

다음 절차에서는 Ansible 플레이북을 사용하여 현재 글로벌 IdM 구성에 대한 정보를 검색하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. [optional] /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/config/retrieve-config.yml Ansible 플레이북 파일을 확인합니다.

    ---
    - name: Playbook to handle global IdM configuration
      hosts: ipaserver
      become: no
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Query IPA global configuration
        freeipa.ansible_freeipa.ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
        register: serverconfig
    
      - debug:
          msg: "{{ serverconfig }}"
  2. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/config/retrieve-config.yml
    [...]
    TASK [debug]
    ok: [server.idm.example.com] => {
        "msg": {
            "ansible_facts": {
                "discovered_interpreter_
            },
            "changed": false,
            "config": {
                "ca_renewal_master_server": "server.idm.example.com",
                "configstring": [
                    "AllowNThash",
                    "KDC:Disable Last Success"
                ],
                "defaultgroup": "ipausers",
                "defaultshell": "/bin/bash",
                "emaildomain": "idm.example.com",
                "enable_migration": false,
                "groupsearch": [
                    "cn",
                    "description"
                ],
                "homedirectory": "/home",
                "maxhostname": "64",
                "maxusername": "64",
                "pac_type": [
                    "MS-PAC",
                    "nfs:NONE"
                ],
                "pwdexpnotify": "4",
                "searchrecordslimit": "100",
                "searchtimelimit": "2",
                "selinuxusermapdefault": "unconfined_u:s0-s0:c0.c1023",
                "selinuxusermaporder": [
                    "guest_u:s0$xguest_u:s0$user_
                ],
                "usersearch": [
                    "uid",
                    "givenname",
                    "sn",
                    "telephonenumber",
                    "ou",
                    "title"
                ]
            },
            "failed": false
        }
    }

7.2. Ansible 플레이북을 사용하여 IdM CA 갱신 서버 구성

CA(인증 기관)를 사용하는 IdM(Identity Management) 배포에서 CA 갱신 서버는 IdM 시스템 인증서를 유지 관리하고 갱신합니다. 강력한 IdM 배포를 보장합니다.

IdM CA 갱신 서버의 역할에 대한 자세한 내용은 IdM CA 갱신 서버 사용을 참조하십시오.

다음 절차에서는 Ansible 플레이북을 사용하여 IdM CA 갱신 서버를 구성하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 선택 사항: 현재 IdM CA 갱신 서버를 식별합니다.

    $ ipa config-show | grep 'CA renewal'
      IPA CA renewal master: server.idm.example.com
  2. 편집을 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/config/set-ca-renewal-master-server.yml Ansible 플레이북 파일을 엽니다.

    ---
    - name: Playbook to handle global DNS configuration
      hosts: ipaserver
      become: no
      gather_facts: no
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: set ca_renewal_master_server
        freeipa.ansible_freeipa.ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          ca_renewal_master_server: carenewal.idm.example.com
  3. ca_renewal_master_server 변수를 사용하여 CA 갱신 서버의 이름을 설정합니다.
  4. 파일을 저장합니다.
  5. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/config/set-ca-renewal-master-server.yml

검증

CA 갱신 서버가 변경되었는지 확인할 수 있습니다.

  1. IdM 관리자로 ipaserver 에 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. IdM CA 갱신 서버의 ID를 요청합니다.

    $ ipa config-show | grep ‘CA renewal'
    IPA CA renewal master:  carenewal02.idm.example.com

    출력에는 carenewal.idm.example.com 서버가 새 CA 갱신 서버임을 보여줍니다.

7.3. Ansible 플레이북을 사용하여 IdM 사용자의 기본 쉘 구성

쉘은 명령을 수락하고 해석하는 프로그램입니다. bash, sh,ksh ,zsh,Fish 등 여러 쉘을 RHEL(Red Hat Enterprise Linux)에서 사용할 수 있습니다. Bash, 또는 /bin/bash 는 대부분의 Linux 시스템에서 널리 사용되는 쉘이며 일반적으로 RHEL의 사용자 계정에 대한 기본 쉘입니다.

다음 절차에서는 Ansible 플레이북을 사용하여 IdM 사용자의 기본 쉘로 대체 쉘인 sh 를 구성하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 선택 사항: retrieve-config.yml Ansible 플레이북을 사용하여 IdM 사용자의 현재 쉘을 식별합니다. 자세한 내용은 Ansible 플레이북을 사용하여 IdM 구성 검색을 참조하십시오.
  2. 편집을 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/config/ensure-config-options-are-set.yml Ansible 플레이북 파일을 엽니다.

    ---
    - name: Playbook to ensure some config options are set
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      # Set defaultlogin and maxusername
      - freeipa.ansible_freeipa.ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          defaultshell: /bin/bash
          maxusername: 64
  3. defaultshell 변수를 사용하여 IdM 사용자의 기본 쉘/bin/sh 로 설정합니다.
  4. 파일을 저장합니다.
  5. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/config/ensure-config-options-are-set.yml

검증

IdM에서 새 세션을 시작하여 기본 사용자 쉘이 변경되었는지 확인할 수 있습니다.

  1. IdM 관리자로 ipaserver 에 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 현재 쉘을 표시합니다.

    [admin@server /]$ echo "$SHELL"
    /bin/sh

    로그인한 사용자는 sh 쉘을 사용합니다.

7.4. Ansible을 사용하여 IdM 도메인의 NetBIOS 이름 구성

NetBIOS 이름은 Microsoft Windows의 SMB(Microsoft Windows) 유형의 공유 및 메시징에 사용됩니다. NetBIOS 이름을 사용하여 드라이브를 매핑하거나 프린터에 연결할 수 있습니다.

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management) 도메인의 NetBIOS 이름을 구성하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. netbios-domain-name-present.yml Ansible 플레이북 파일을 생성합니다.
  3. 파일에 다음 내용을 추가합니다.

    ---
    - name: Playbook to change IdM domain netbios name
      hosts: ipaserver
      become: no
      gather_facts: no
    
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Set IdM domain netbios name
        freeipa.ansible_freeipa.ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          netbios_name: IPADOM
  4. 파일을 저장합니다.
  5. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory netbios-domain-name-present.yml

    메시지가 표시되면 vault 파일 암호를 입력합니다.

7.5. Ansible을 사용하여 IdM 사용자 및 그룹에 SID가 있는지 확인

RHEL IdM(Identity Management) 서버는 로컬 도메인의 ID 범위에 있는 데이터를 기반으로 IdM 사용자 및 그룹에 고유한 SID(보안 식별자)를 할당할 수 있습니다. SID는 사용자 및 그룹 개체에 저장됩니다.

IdM 사용자 및 그룹에 SID가 있는지 확인하는 목적은 IdM-IdM 트러스트를 위한 첫 번째 단계인 PAC(권한 있는 속성 인증서) 생성을 허용하는 것입니다. IdM 사용자 및 그룹에 SID가 있는 경우 IdM은 PAC 데이터로 Kerberos 티켓을 발행할 수 있습니다.

다음 목표를 달성하려면 다음 절차를 따르십시오.

  • 기존 IdM 사용자 및 사용자 그룹에 대한 SID를 생성합니다.
  • IdM 새 사용자 및 그룹의 SID 생성을 활성화합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. sids-for-users-and-groups-present.yml Ansible 플레이북 파일을 생성합니다.
  3. 파일에 다음 내용을 추가합니다.

    ---
    - name: Playbook to ensure SIDs are enabled and users and groups have SIDs
      hosts: ipaserver
      become: no
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Enable SID and generate users and groups SIDS
        freeipa.ansible_freeipa.ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          enable_sid: true
          add_sids: true

    enable_sid 변수는 향후 IdM 사용자 및 그룹에 SID 생성을 활성화합니다. add_sids 변수는 기존 IdM 사용자 및 그룹에 대한 SID를 생성합니다.

    참고

    add_sids: true 를 사용하는 경우 enable_sid 변수도 true 로 설정해야 합니다.

  4. 파일을 저장합니다.
  5. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory sids-for-users-and-groups-present.yml

    메시지가 표시되면 vault 파일 암호를 입력합니다.

8장. Ansible 플레이북을 사용하여 사용자 계정 관리

Ansible 플레이북을 사용하여 IdM에서 사용자를 관리할 수 있습니다. 사용자 라이프사이클을 표시한 후 이 장에서는 다음 작업에 Ansible 플레이북을 사용하는 방법을 설명합니다.

8.1. 사용자 라이프 사이클

IdM(Identity Management)은 세 가지 사용자 계정 상태를 지원합니다( 단계,Active,Preserved ). 자세한 내용은 IdM 사용자, 그룹, 호스트 및 액세스 제어 규칙 설명서의 사용자 라이프 사이클 섹션을 참조하십시오.

8.2. Ansible 플레이북을 사용하여 IdM 사용자가 있는지 확인

다음 절차에서는 Ansible 플레이북을 사용하여 IdM에 사용자가 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 확인하려는 IdM에 있는 사용자의 데이터로 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/user/add-user.yml 파일에서 예제를 복사하고 수정할 수 있습니다. 예를 들어 idm_user 라는 사용자를 만들고 Password123 을 사용자 암호로 추가하려면 다음을 수행합니다.

    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create user idm_user
        freeipa.ansible_freeipa.ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: idm_user
          first: Alice
          last: Acme
          uid: 1000111
          gid: 10011
          phone: "+555123457"
          email: idm_user@acme.com
          passwordexpiration: "2023-01-19 23:59:59"
          password: "Password123"
          update_password: on_create

    사용자를 추가하려면 다음 옵션을 사용해야 합니다.

    • name: 로그인 이름
    • first: 첫 번째 이름 문자열
    • last name string

    사용 가능한 사용자 옵션의 전체 목록은 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/README-user.md Markdown 파일을 참조하십시오.

    참고

    update_password: on_create 옵션을 사용하는 경우 Ansible은 사용자를 생성할 때만 사용자 암호를 생성합니다. 사용자가 이미 암호를 사용하여 생성된 경우 Ansible은 새 암호를 생성하지 않습니다.

  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-IdM-user.yml

검증

  • ipa user-show 명령을 사용하여 IdM에 새 사용자 계정이 있는지 확인할 수 있습니다.

    1. admin으로 ipaserver 에 로그인합니다.

      $ ssh admin@server.idm.example.com
      Password:
      [admin@server /]$
    2. admin에 Kerberos 티켓을 요청합니다.

      $ kinit admin
      Password for admin@IDM.EXAMPLE.COM:
    3. idm_user 에 대한 정보 요청 :

      $ ipa user-show idm_user
        User login: idm_user
        First name: Alice
        Last name: Acme
        ....

    idm_user 라는 사용자가 IdM에 있습니다.

8.3. Ansible 플레이북을 사용하여 여러 IdM 사용자가 있는지 확인

다음 절차에서는 Ansible 플레이북을 사용하여 IdM에 여러 사용자가 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. IdM에서 확인하려는 사용자의 데이터로 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/user/ensure-users-present.yml 파일에서 예제를 복사하고 수정할 수 있습니다. 예를 들어, idm_user_1,idm_user_2idm_user_3 사용자를 생성하고 idm_user_1 의 암호로 Password123 을 추가합니다.

    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create user idm_users
        freeipa.ansible_freeipa.ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          users:
          - name: idm_user_1
            first: Alice
            last: Acme
            uid: 10001
            gid: 10011
            phone: "+555123457"
            email: idm_user@acme.com
            passwordexpiration: "2023-01-19 23:59:59"
            password: "Password123"
          - name: idm_user_2
            first: Bob
            last: Acme
            uid: 100011
            gid: 10011
          - name: idm_user_3
            first: Eve
            last: Acme
            uid: 1000111
            gid: 10011
    참고

    update_password: on_create 옵션을 지정하지 않으면 Ansible에서 플레이북을 실행할 때마다 사용자 암호를 다시 설정합니다. 사용자가 플레이북을 마지막으로 실행한 후 암호를 변경한 경우 Ansible은 암호를 다시 설정합니다.

  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-users.yml

검증

  • ipa user-show 명령을 사용하여 IdM에 사용자 계정이 있는지 확인할 수 있습니다.

    1. 관리자로 ipaserver 에 로그인합니다.

      $ ssh administrator@server.idm.example.com
      Password:
      [admin@server /]$
    2. idm_user_1 에 대한 정보를 표시합니다.

      $ ipa user-show idm_user_1
        User login: idm_user_1
        First name: Alice
        Last name: Acme
        Password: True
        ....

    idm_user_1 이라는 사용자는 IdM에 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 IdM에 여러 사용자가 있는지 확인하는 방법을 설명합니다. 사용자는 JSON 파일에 저장됩니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 필요한 작업을 사용하여 Ansible 플레이북 파일을 생성합니다. 확인하려는 사용자의 데이터로 JSON 파일을 참조합니다. 이 단계를 단순화하려면 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/README-user.md 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Ensure users' presence
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Include users_present.json
        include_vars:
          file: users_present.json
    
      - name: Users present
        freeipa.ansible_freeipa.ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          users: "{{ users }}"
  2. users.json 파일을 생성하고 IdM 사용자를 추가합니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/README-user.md 파일에서 예제를 복사하고 수정할 수 있습니다. 예를 들어, idm_user_1,idm_user_2idm_user_3 사용자를 생성하고 idm_user_1 의 암호로 Password123 을 추가합니다.

    {
      "users": [
       {
        "name": "idm_user_1",
        "first": "First 1",
        "last": "Last 1",
        "password": "Password123"
       },
       {
        "name": "idm_user_2",
        "first": "First 2",
        "last": "Last 2"
       },
       {
        "name": "idm_user_3",
        "first": "First 3",
        "last": "Last 3"
       }
      ]
    }
  3. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-users-present-jsonfile.yml

검증

  • ipa user-show 명령을 사용하여 사용자 계정이 IdM에 있는지 확인할 수 있습니다.

    1. 관리자로 ipaserver 에 로그인합니다.

      $ ssh administrator@server.idm.example.com
      Password:
      [admin@server /]$
    2. idm_user_1 에 대한 정보를 표시합니다.

      $ ipa user-show idm_user_1
        User login: idm_user_1
        First name: Alice
        Last name: Acme
        Password: True
        ....

    idm_user_1 이라는 사용자는 IdM에 있습니다.

8.5. Ansible 플레이북을 사용하는 사용자가 없는지 확인

다음 절차에서는 Ansible 플레이북을 사용하여 특정 사용자가 IdM에 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 확인하려는 IdM에서 없는 사용자로 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/user/ensure-users-present.yml 파일에서 예제를 복사하고 수정할 수 있습니다. 예를 들어 사용자 idm_user_1,idm_user_2, idm_user_3 사용자를 삭제하려면 다음을 실행합니다.

    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Delete users idm_user_1, idm_user_2, idm_user_3
        freeipa.ansible_freeipa.ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          users:
          - name: idm_user_1
          - name: idm_user_2
          - name: idm_user_3
          state: absent
  2. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/delete-users.yml

검증

ipa user-show 명령을 사용하여 사용자 계정이 IdM에 없는지 확인할 수 있습니다.

  1. 관리자로 ipaserver 에 로그인합니다.

    $ ssh administrator@server.idm.example.com
    Password:
    [admin@server /]$
  2. idm_user_1 에 대한 정보 요청:

    $ ipa user-show idm_user_1
    ipa: ERROR: idm_user_1: user not found

    idm_user_1 이라는 사용자는 IdM에 존재하지 않습니다.

9장. Ansible 플레이북을 사용하여 사용자 그룹 관리

이 섹션에서는 Ansible 플레이북을 사용하여 사용자 그룹 관리를 소개합니다.

사용자 그룹은 공통 권한, 암호 정책 및 기타 특성을 사용하는 사용자 집합입니다.

RHEL IdM(Identity Management)의 사용자 그룹에는 다음이 포함될 수 있습니다.

  • IdM 사용자
  • 기타 IdM 사용자 그룹
  • IdM 외부에 존재하는 사용자인 외부 사용자

9.1. Ansible 플레이북을 사용하여 IdM 그룹 및 그룹 멤버가 있는지 확인

다음 절차에서는 Ansible 플레이북을 사용하여 사용자와 사용자 그룹 모두 IdM 그룹 및 그룹 멤버가 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • Ansible 플레이북에서 참조하려는 사용자는 IdM에 있습니다. Ansible을 사용하여 사용자가 있는지 확인하는 방법에 대한 자세한 내용은 Ansible 플레이북을 사용하여 사용자 계정 관리를 참조하십시오.

프로세스

  1. 필요한 사용자 및 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다.

    ---
    - name: Playbook to handle groups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create group ops with gid 1234
        freeipa.ansible_freeipa.ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          gidnumber: 1234
    
      - name: Create group sysops
        freeipa.ansible_freeipa.ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: sysops
          user:
          - idm_user
    
      - name: Create group appops
        freeipa.ansible_freeipa.ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: appops
    
      - name: Add group members sysops and appops to group ops
        freeipa.ansible_freeipa.ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          group:
          - sysops
          - appops
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-group-members.yml

검증

ipa group-show 명령을 사용하여 ops 그룹에 직접 멤버로 sysopsappops 가 포함되어 있고 idm_user 가 간접 멤버로 포함되어 있는지 확인할 수 있습니다.

  1. 관리자로 ipaserver 에 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. ops 에 대한 정보를 표시합니다.

    ipaserver]$ ipa group-show ops
      Group name: ops
      GID: 1234
      Member groups: sysops, appops
      Indirect Member users: idm_user

    appopssysops 그룹 - idm_user 사용자를 포함한 후자는 IdM에 있습니다.

9.2. Ansible을 사용하여 단일 작업에 여러 IdM 그룹 추가

ansible-freeipa ipagroup 모듈을 사용하여 단일 Ansible 작업으로 여러 IdM(Identity Management) 사용자 그룹을 추가, 수정, 삭제할 수 있습니다. 이를 위해 ipagroup 모듈의 groups 옵션을 사용합니다.

groups 옵션을 사용하여 특정 그룹에만 적용되는 그룹 변수를 여러 개 지정할 수도 있습니다. groups 옵션의 유일한 필수 변수인 name 변수로 이 그룹을 정의합니다.

단일 작업에서 IdM에 sysopsappops 그룹이 있는지 확인하려면 다음 절차를 완료합니다. sysops 그룹을 비posix 그룹으로 정의하고 appops 그룹을 외부 그룹으로 정의합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 add-nonposix-and-external-groups.yml 을 생성합니다.

    ---
    - name: Playbook to add nonposix and external groups
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Add nonposix group sysops and external group appops
        freeipa.ansible_freeipa.ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          groups:
          - name: sysops
            nonposix: true
          - name: appops
            external: true
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/add-nonposix-and-external-groups.yml

9.3. Ansible을 사용하여 AD 사용자가 IdM을 관리 가능

Ansible 플레이북을 사용하여 사용자 ID 덮어쓰기가 RHEL IdM(Identity Management) 그룹에 있는지 확인하십시오. 사용자 ID 덮어쓰기는 AD로 신뢰를 설정한 후 Default Trust View에서 생성한 {AD}(AD) 사용자의 재정의입니다. 플레이북을 실행하면 AD 사용자(예: AD 관리자)가 두 개의 서로 다른 계정과 암호 없이 IdM을 완전히 관리할 수 있습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • AD에 신뢰를 설치했습니다.
  • AD 사용자의 사용자 ID 재정의는 IdM에 이미 존재합니다. 그렇지 않은 경우 ipa idoverrideuser-add 'default trust view' ad_user@ad.example.com 명령을 사용하여 생성합니다.
  • 사용자 ID 재정의를 추가하는 그룹이 IdM에 이미 존재합니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 다음 콘텐츠를 사용하여 add-useridoverride-to-group.yml 플레이북을 생성합니다.

    ---
    - name: Playbook to ensure presence of users in a group
      hosts: ipaserver
    
      tasks:
      - name: Ensure the ad_user@ad.example.com user ID override is a member of the admins group:
        freeipa.ansible_freeipa.ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: admins
          idoverrideuser:
          - ad_user@ad.example.com

    예에서는 다음을 수행합니다.

    • 관리자는 ad_user@ad.example.com ID 덮어쓰기를 추가하는 IdM POSIX 그룹의 이름입니다. 이 그룹의 멤버에는 전체 관리자 권한이 있습니다.
    • ad_user@ad.example.com 는 AD 관리자의 사용자 ID 덮어쓰기입니다. 사용자는 신뢰가 설정된 AD 도메인에 저장됩니다.
  3. 파일을 저장합니다.
  4. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-useridoverride-to-group.yml

다음 절차에서는 Ansible 플레이북을 사용하여 사용자와 사용자 그룹 모두 IdM 멤버 관리자가 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 멤버 관리자로 추가하는 사용자 또는 그룹의 이름과 관리할 그룹의 이름이 있어야 합니다.

프로세스

  1. 필요한 사용자 및 그룹 멤버 관리 정보로 Ansible 플레이북 파일을 생성합니다.

    ---
    - name: Playbook to handle membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure user test is present for group_a
        freeipa.ansible_freeipa.ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_user: test
    
      - name: Ensure group_admins is present for group_a
        freeipa.ansible_freeipa.ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_group: group_admins
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-user-groups.yml

검증

ipa group-show 명령을 사용하여 group_a 그룹에 멤버 관리자로 test 가 포함되어 있고 group_adminsgroup_a 의 멤버 관리자인지 확인할 수 있습니다.

  1. 관리자로 ipaserver 에 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. managergroup1 에 대한 정보를 표시합니다.

    ipaserver]$ ipa group-show group_a
      Group name: group_a
      GID: 1133400009
      Membership managed by groups: group_admins
      Membership managed by users: test

다음 절차에서는 Ansible 플레이북을 사용하여 사용자와 사용자 그룹 모두 IdM 멤버 관리자가 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장한다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 제거 중인 기존 멤버 관리자 사용자 또는 그룹의 이름과 관리 중인 그룹의 이름이 있어야 합니다.

프로세스

  1. 필요한 사용자 및 그룹 멤버 관리 정보로 Ansible 플레이북 파일을 생성합니다.

    ---
    - name: Playbook to handle membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure member manager user and group members are absent for group_a
        freeipa.ansible_freeipa.ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_user: test
          membermanager_group: group_admins
          action: member
          state: absent
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-are-absent.yml

검증

ipa group-show 명령을 사용하여 group_a 그룹에 member manager로 test 를 포함하고 group_adminsgroup_a 의 멤버 관리자로 포함되어 있지 않은지 확인할 수 있습니다.

  1. 관리자로 ipaserver 에 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. group_a에 대한 정보를 표시합니다.

    ipaserver]$ ipa group-show group_a
      Group name: group_a
      GID: 1133400009

10장. Ansible을 사용하여 IdM에서 그룹 멤버십 자동화

자동 그룹 멤버십을 사용하면 특성에 따라 사용자와 호스트 그룹 및 호스트 그룹을 자동으로 할당할 수 있습니다. 예를 들면 다음을 수행할 수 있습니다.

  • 직원의 사용자 항목을 직원의 관리자, 위치, 위치 또는 기타 특성에 따라 그룹으로 나눕니다. 명령줄에서 ipa user-add --help 를 입력하여 모든 속성을 나열할 수 있습니다.
  • 호스트를 클래스, 위치 또는 기타 특성을 기반으로 그룹으로 나눕니다. 명령줄에서 ipa host-add --help 를 입력하여 모든 속성을 나열할 수 있습니다.
  • 모든 사용자 또는 모든 호스트를 단일 글로벌 그룹에 추가합니다.

Ansible을 사용하여 RHEL IdM(Identity Management)에서 자동 그룹 멤버십 관리를 자동화할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 RHEL IdM(Identity Management) 그룹에 대한 자동 멤버 규칙이 있는지 확인하는 방법을 설명합니다. 이 예제에서는 testing_group 사용자 그룹에 대해 automember 규칙이 있는지 확인합니다.

사전 요구 사항

  • testing_group 사용자 그룹이 IdM에 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automember/ 디렉터리에 있는 automember-group-present.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automember/automember-group-present.yml automember-group-present-copy.yml
  3. 편집할 automember-group-present-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaautomember 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
    • name 변수를 testing_group 으로 설정합니다.
    • automember_type 변수를 group 로 설정합니다.
    • state 변수가 present 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Automember group present example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure group automember rule admins is present
        freeipa.ansible_freeipa.ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: present
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-present-copy.yml

다음 절차에서는 Ansible 플레이북을 사용하여 RHEL IdM(Identity Management) 그룹의 automember 규칙에 지정된 조건이 있는지 확인하는 방법을 설명합니다. 이 예제에서는 test _group 그룹에 UID 관련 조건이 automember 규칙에 있는지 확인합니다. .* 조건을 지정하면 향후 모든 IdM 사용자가 자동으로 testing_group 의 멤버가 되도록 합니다.

사전 요구 사항

  • testing_group 사용자 그룹과 automember 사용자 그룹 규칙이 IdM에 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automember/ 디렉터리에 있는 automember-hostgroup-rule-present.yml Ansible 플레이북 파일을 복사하고 이름을 (예: automember-usergroup-rule-present.yml:) :

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-usergroup-rule-present.yml
  3. 편집을 위해 automember-usergroup-rule-present.yml 파일을 엽니다.
  4. 다음 매개변수를 수정하여 파일을 조정합니다.

    • 사용 사례에 맞게 플레이북의 이름을 변경합니다(예: 있는 Automember 사용자 그룹 규칙 멤버 ).
    • 사용 사례에 해당하도록 작업의 이름을 변경합니다(예: 사용자 그룹의 자동 구성원 조건이 있는지 확인 ).
    • freeipa.ansible_freeipa.ipaautomember 작업 섹션에서 다음 변수를 설정합니다.

      • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
      • name 변수를 testing_group 으로 설정합니다.
      • automember_type 변수를 group 로 설정합니다.
      • state 변수가 present 로 설정되어 있는지 확인합니다.
      • action 변수가 member 로 설정되어 있는지 확인합니다.
      • 포함 변수를 UID 로 설정합니다.
      • 포함 표현식 변수를 . *로 설정합니다 .*

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Automember user group rule member present
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is present
        freeipa.ansible_freeipa.ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: present
          action: member
          inclusive:
            - key: UID
              expression: .*
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-present.yml

검증

  1. IdM 관리자로 로그인합니다.

    $ kinit admin
  2. 사용자를 추가합니다. 예를 들면 다음과 같습니다.

    $ ipa user-add user101 --first user --last 101
    -----------------------
    Added user "user101"
    -----------------------
      User login: user101
      First name: user
      Last name: 101
      ...
      Member of groups: ipausers, testing_group
      ...

다음 절차에서는 Ansible 플레이북을 사용하여 RHEL IdM(Identity Management) 그룹의 자동 멤버 규칙에 조건이 없는지 확인하는 방법을 설명합니다. 이 예제에서는 automember 규칙에 초기 항목이 dp 인 사용자를 포함해야 함을 지정하는 조건이 있는지 확인합니다. automember 규칙은 testing_group 그룹에 적용됩니다. 조건을 적용하면 초기 항목이 test_group인 향후 IdM 사용자가 testing_group 의 멤버가 되도록 합니다.

사전 요구 사항

  • testing_group 사용자 그룹과 automember 사용자 그룹 규칙이 IdM에 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automember/ 디렉터리에 있는 automember-hostgroup-rule-absent.yml Ansible 플레이북 파일을 복사하여 이름을 (예: automember-usergroup-rule-absent.yml:)로 지정합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automember/automember-hostgroup-rule-absent.yml automember-usergroup-rule-absent.yml
  3. 편집할 automember-usergroup-rule-absent.yml 파일을 엽니다.
  4. 다음 매개변수를 수정하여 파일을 조정합니다.

    • 사용 사례에 해당하도록 플레이북의 이름을 변경합니다(예: Automember 사용자 그룹 규칙 멤버 absent ).
    • 사용 사례에 해당하도록 작업의 이름을 변경합니다(예: 사용자 그룹의 자동 구성원 조건이 없는지 확인 ).
    • freeipa.ansible_freeipa.ipaautomember 작업 섹션에서 다음 변수를 설정합니다.

      • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
      • name 변수를 testing_group 으로 설정합니다.
      • automember_type 변수를 group 로 설정합니다.
      • state 변수가 absent 로 설정되어 있는지 확인합니다.
      • action 변수가 member 로 설정되어 있는지 확인합니다.
      • 포함 변수를 initials 로 설정합니다.
      • 포함 표현식 변수를 dp 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Automember user group rule member absent
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is absent
        freeipa.ansible_freeipa.ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: absent
          action: member
          inclusive:
            - key: initials
              expression: dp
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-absent.yml

검증

  1. IdM 관리자로 로그인합니다.

    $ kinit admin
  2. automember 그룹을 확인합니다.

    $ ipa automember-show --type=group testing_group
     Automember Rule: testing_group

출력에 Inclusive Cryostat: initials=dp 항목이 없으면 testing_group automember 규칙에 지정된 조건이 포함되어 있지 않음을 확인합니다.

다음 절차에서는 Ansible 플레이북을 사용하여 RHEL IdM(Identity Management) 그룹에 대한 automember 규칙이 없는지 확인하는 방법을 설명합니다. 이 예제에서는 testing_group 그룹에 대해 automember 규칙이 있는지 확인합니다.

참고

자동 멤버 규칙을 삭제하면 규칙과 관련된 모든 조건도 삭제됩니다. 규칙에서 특정 조건만 제거하려면 Ansible을 사용하여 IdM 사용자 그룹 automember 규칙에 조건이 없는지 확인합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automember/ 디렉터리에 있는 automember-group-absent.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automember/automember-group-absent.yml automember-group-absent-copy.yml
  3. 편집할 automember-group-absent-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaautomember 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
    • name 변수를 testing_group 으로 설정합니다.
    • automember_type 변수를 group 로 설정합니다.
    • state 변수가 absent 로 설정되어 있는지 확인합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

      ---
      - name: Automember group absent example
        hosts: ipaserver
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
        - name: Ensure group automember rule admins is absent
          freeipa.ansible_freeipa.ipaautomember:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: testing_group
            automember_type: group
            state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-absent.yml

Ansible을 사용하여 IdM 호스트 그룹 automember 규칙에 조건이 있는지 확인합니다. 이 예제에서는 FQDN.*.idm.example.com 인 호스트가 primary_dns_domain_hosts 호스트 그룹과 FQDN.*.example.orgprimary_dns_domain_hosts 호스트 그룹의 멤버가 아닌지 확인하는 방법을 설명합니다.

사전 요구 사항

  • primary_dns_domain_hosts 호스트 그룹과 IdM에 automember 호스트 그룹 규칙이 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automember/ 디렉터리에 있는 automember-hostgroup-rule-present.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-hostgroup-rule-present-copy.yml
  3. 편집을 위해 automember-hostgroup-rule-present-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaautomember 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
    • name 변수를 primary_dns_domain_hosts 로 설정합니다.
    • automember_type 변수를 hostgroup 으로 설정합니다.
    • state 변수가 present 로 설정되어 있는지 확인합니다.
    • action 변수가 member 로 설정되어 있는지 확인합니다.
    • 포함 변수가 fqdn;로 설정되어 있는지 확인합니다.
    • 해당 포함 표현식 변수를 .*.idm.example.com 으로 설정합니다.
    • 전용 변수를 fqdn;로 설정합니다.
    • 해당 전용 표현식 변수를 .*.example.org 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Automember user group rule member present
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is present
        freeipa.ansible_freeipa.ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: primary_dns_domain_hosts
          automember_type: hostgroup
          state: present
          action: member
          inclusive:
            - key: fqdn
              expression: .*.idm.example.com
          exclusive:
            - key: fqdn
              expression: .*.example.org
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-hostgroup-rule-present-copy.yml

11장. Ansible 플레이북을 사용하여 IdM에서 셀프 서비스 규칙 관리

이 섹션에서는 IdM(Identity Management)의 셀프 서비스 규칙을 소개하고 Ansible 플레이북을 사용하여 셀프 서비스 액세스 규칙을 생성하고 편집하는 방법을 설명합니다. 셀프 서비스 액세스 제어 규칙을 사용하면 IdM 엔티티가 IdM Directory Server 항목에서 지정된 작업을 수행할 수 있습니다.

11.1. Ansible을 사용하여 셀프 서비스 규칙이 있는지 확인

다음 절차에서는 Ansible 플레이북을 사용하여 셀프 서비스 규칙을 정의하고 RHEL IdM(Identity Management) 서버에서 해당 존재를 확인하는 방법을 설명합니다. 이 예에서 새 사용자는 자신의 이름 세부 정보 규칙을 관리할 수 있습니다. 사용자에게 고유한 지정된 이름,표시 이름 ,제목초기 속성을 변경할 수 있습니다. 이를 통해 원하는 경우 표시 이름 또는 초기 값을 변경할 수 있습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/selfservice/ 디렉터리에 있는 selfservice-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/selfservice/selfservice-present.yml selfservice-present-copy.yml
  3. 편집할 selfservice-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaselfservice 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 새 셀프 서비스 규칙의 이름으로 설정합니다.
    • 권한 변수를 콤마로 구분된 권한 목록( 읽기쓰기 )으로 설정합니다.
    • 특성 변수를 사용자가 자체적으로 관리할 수 있는 속성 목록으로 설정합니다( 지정 이름,표시 이름,제목초기 ).

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Self-service present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure self-service rule "Users can manage their own name details" is present
        freeipa.ansible_freeipa.ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          permission: read, write
          attribute:
          - givenname
          - displayname
          - title
          - initials
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-present-copy.yml

11.2. Ansible을 사용하여 셀프 서비스 규칙이 없는지 확인합니다.

다음 절차에서는 Ansible 플레이북을 사용하여 지정된 셀프 서비스 규칙이 IdM 구성에 없는지 확인하는 방법을 설명합니다. 아래 예제에서는 사용자가 IdM에 고유한 이름 세부 정보 셀프 서비스 규칙을 관리할 수 있는지 확인하는 방법을 설명합니다. 이를 통해 사용자는 예를 들어 자체 표시 이름 또는 초기화를 변경할 수 없습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/selfservice/ 디렉터리에 있는 selfservice-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/selfservice/selfservice-absent.yml selfservice-absent-copy.yml
  3. 편집을 위해 selfservice-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaselfservice 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 셀프 서비스 규칙의 이름으로 설정합니다.
    • state 변수를 absent 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Self-service absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure self-service rule "Users can manage their own name details" is absent
        freeipa.ansible_freeipa.ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-absent-copy.yml

11.3. Ansible을 사용하여 셀프 서비스 규칙에 특정 속성이 있는지 확인

다음 절차에서는 Ansible 플레이북을 사용하여 기존의 셀프 서비스 규칙에 특정 설정이 있는지 확인하는 방법을 설명합니다. 이 예제에서는 사용자가 자체 이름 세부 정보 셀프 서비스 규칙에 surname member 특성도 관리할 수 있는지 확인합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
  • 사용자는 IdM에 자체 이름 세부 정보 셀프 서비스 규칙을 관리할 수 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/selfservice/ 디렉터리에 있는 selfservice-member-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/selfservice/selfservice-member-present.yml selfservice-member-present-copy.yml
  3. 편집을 위해 selfservice-member-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaselfservice 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 수정할 셀프 서비스 규칙의 이름으로 설정합니다.
    • 특성 변수를 surname 으로 설정합니다.
    • action 변수를 member 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Self-service member present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure selfservice "Users can manage their own name details" member attribute surname is present
        freeipa.ansible_freeipa.ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          attribute:
          - surname
          action: member
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-present-copy.yml

다음 절차에서는 Ansible 플레이북을 사용하여 셀프 서비스 규칙에 특정 설정이 없는지 확인하는 방법을 설명합니다. 이 플레이북을 사용하여 셀프 서비스 규칙이 원하지 않는 액세스 권한을 부여하지 않도록 할 수 있습니다. 이 예제에서는 사용자가 고유한 이름 세부 정보 셀프 서비스 규칙에 지정된 이름 및 멤버 속성이 없는 자체 이름 세부 정보를 관리할 수 있는지 확인합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 사용자는 IdM에 자체 이름 세부 정보 셀프 서비스 규칙을 관리할 수 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/selfservice/ 디렉터리에 있는 selfservice-member-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/selfservice/selfservice-member-absent.yml selfservice-member-absent-copy.yml
  3. 편집을 위해 selfservice-member-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaselfservice 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 수정할 셀프 서비스 규칙의 이름으로 설정합니다.
    • 특성 변수를 givennamesurname 으로 설정합니다.
    • action 변수를 member 로 설정합니다.
    • state 변수를 absent 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Self-service member absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure selfservice "Users can manage their own name details" member attributes givenname and surname are absent
        freeipa.ansible_freeipa.ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          attribute:
          - givenname
          - surname
          action: member
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-absent-copy.yml

위임은 셀프 서비스 규칙 및 RBAC(역할 기반 액세스 제어)와 함께 IdM의 액세스 제어 방법 중 하나입니다. 위임을 사용하여 한 사용자 그룹에 다른 사용자 그룹의 항목을 관리할 수 있는 권한을 할당할 수 있습니다.

위임 규칙 일반 정보에 대한 자세한 내용은 위임 규칙 섹션을 참조하십시오.

12.1. Ansible을 사용하여 위임 규칙이 있는지 확인

다음 절차에서는 Ansible 플레이북을 사용하여 새 IdM 위임 규칙에 대한 권한을 정의하고 해당 존재 여부를 확인하는 방법을 설명합니다. 이 예제에서 새로운 기본 관리자 속성 위임 규칙은 managers 그룹에 employees 그룹 멤버에 대해 다음 속성을 읽고 쓸 수 있는 기능을 부여합니다.

  • businesscategory
  • 부서 번호
  • CryostatNumber
  • employeetype

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/delegation/ 디렉터리에 있는 delegation-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/delegation/delegation-present.yml delegation-present-copy.yml
  3. 편집을 위해 위임-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadelegation 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 새 위임 규칙의 이름으로 설정합니다.
    • 권한 변수를 콤마로 구분된 권한 목록( 읽기쓰기 )으로 설정합니다.
    • 위임된 사용자 그룹이 관리할 수 있는 속성 목록: businesscategory,departmentnumber,employeenumber, employeetype.
    • 특성을 보거나 수정할 수 있는 액세스 권한이 있는 그룹의 이름으로 그룹 변수를 설정합니다.
    • membergroup 변수를 특성을 보거나 수정할 수 있는 그룹의 이름으로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to manage a delegation rule
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" is present
        freeipa.ansible_freeipa.ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          permission: read, write
          attribute:
          - businesscategory
          - departmentnumber
          - employeenumber
          - employeetype
          group: managers
          membergroup: employees
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-present-copy.yml

12.2. Ansible을 사용하여 위임 규칙이 없는지 확인

다음 절차에서는 Ansible 플레이북을 사용하여 지정된 위임 규칙이 IdM 구성에 없는지 확인하는 방법을 설명합니다. 아래 예제에서는 IdM에 사용자 정의 기본 관리자 속성 위임 규칙이 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks>/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/delegation/ 디렉터리에 있는 delegation-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/delegation/delegation-present.yml delegation-absent-copy.yml
  3. 편집을 위해 delegation-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadelegation 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 위임 규칙 이름으로 설정합니다.
    • state 변수를 absent 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Delegation absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" is absent
        freeipa.ansible_freeipa.ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-absent-copy.yml

12.3. Ansible을 사용하여 위임 규칙에 특정 특성이 있는지 확인

다음 절차에서는 Ansible 플레이북을 사용하여 위임 규칙에 특정 설정이 있는지 확인하는 방법을 설명합니다. 이 플레이북을 사용하여 이전에 생성한 위임 역할을 수정할 수 있습니다. 이 예제에서는 기본 관리자 속성 위임 규칙에 departmentnumber member 속성만 있는지 확인합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • IdM에 기본 관리자 속성 위임 규칙이 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/delegation/ 디렉터리에 있는 delegation-member-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/delegation/delegation-member-present.yml delegation-member-present-copy.yml
  3. 편집을 위해 delegation-member-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadelegation 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 수정할 위임 규칙의 이름으로 설정합니다.
    • 특성 변수를 departmentnumber 로 설정합니다.
    • action 변수를 member 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Delegation member present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" member attribute departmentnumber is present
        freeipa.ansible_freeipa.ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          attribute:
          - departmentnumber
          action: member
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-member-present-copy.yml

12.4. Ansible을 사용하여 위임 규칙에 특정 특성이 없는지 확인합니다.

다음 절차에서는 Ansible 플레이북을 사용하여 위임 규칙에 특정 설정이 없는지 확인하는 방법을 설명합니다. 이 플레이북을 사용하여 위임 역할이 원하지 않는 액세스 권한을 부여하지 않도록 할 수 있습니다. 이 예제에서는 기본 관리자 속성 위임 규칙에 employeenumberemployeetype 멤버 속성이 없는지 확인합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • IdM에 기본 관리자 속성 위임 규칙이 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/delegation/ 디렉터리에 있는 delegation-member-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/delegation/delegation-member-absent.yml delegation-member-absent-copy.yml
  3. 편집을 위해 delegation-member-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadelegation 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 수정할 위임 규칙의 이름으로 설정합니다.
    • 특성 변수를 employeenumberemployeetype 으로 설정합니다.
    • action 변수를 member 로 설정합니다.
    • state 변수를 absent 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Delegation member absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" member attributes employeenumber and employeetype are absent
        freeipa.ansible_freeipa.ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          attribute:
          - employeenumber
          - employeetype
          action: member
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-member-absent-copy.yml

13장. Ansible 플레이북을 사용하여 IdM에서 역할 기반 액세스 제어 관리

RBAC(역할 기반 액세스 제어)는 역할 및 권한과 관련하여 정의된 정책 중립 액세스 제어 메커니즘입니다. RHEL IdM(Identity Management)의 RBAC 구성 요소는 역할, 권한 및 권한입니다.

  • 권한 은 사용자 추가 또는 삭제, 그룹 수정, 읽기 액세스 활성화와 같은 특정 작업을 수행할 수 있는 권한을 부여합니다.
  • 권한 에서는 새 사용자를 추가하는 데 필요한 모든 권한(예: 새 권한)을 결합합니다.
  • 역할은 사용자, 사용자 그룹, 호스트 또는 호스트 그룹에 일련의 권한을 부여합니다.

특히 대규모 회사에서 RBAC를 사용하면 개별 책임이 있는 관리자의 계층적 시스템을 생성하는 데 도움이 될 수 있습니다.

이 장에서는 Ansible 플레이북을 사용하여 RBAC를 관리할 때 수행되는 작업을 설명합니다.

13.1. IdM의 권한

권한은 역할 기반 액세스 제어의 가장 낮은 수준이며 해당 작업이 적용되는 LDAP 항목과 함께 작업을 정의합니다. 블록 빌드와 비교하면 필요한 수만큼 권한을 할당할 수 있습니다.
하나 이상의 권한 은 허용되는 작업을 정의합니다.

  • 쓰기
  • read
  • search
  • 비교
  • add
  • 삭제
  • all

이러한 작업은 세 가지 기본 대상에 적용됩니다.

  • 하위 트리: 도메인 이름(DN), 이 DN 아래의 하위 트리
  • 대상 필터: LDAP 필터
  • target: 항목을 지정할 수 있는 와일드카드가 있는 DN

또한 다음의 편의성 옵션은 해당 속성을 설정합니다.

  • type: 오브젝트 유형(사용자, 그룹 등)은 하위 트리대상 필터를설정합니다.
  • memberOf: 그룹 멤버; 대상 필터를 설정합니다.

    참고

    대상 LDAP 항목에 그룹 멤버십에 대한 참조가 포함되지 않은 경우 memberof 속성 권한을 설정하지 않습니다.

  • TargetGroup : 특정 그룹을 수정할 수 있는 액세스 권한 부여(예: 그룹 멤버십을 관리할 수 있는 권한 부여);

IdM 권한을 사용하면 어떤 사용자가 어떤 오브젝트에 액세스할 수 있는지, 이러한 오브젝트의 속성을 제어할 수 있습니다. IdM을 사용하면 개별 속성을 허용하거나 차단하거나 사용자, 그룹 또는 sudo와 같은 특정 IdM 기능의 전체 가시성을 모든 익명 사용자, 모든 인증된 사용자 또는 특정 권한 있는 사용자 그룹으로 변경할 수 있습니다.
예를 들어, 권한에 대한 이 접근 방식의 유연성은 사용자 또는 그룹의 액세스를 특정 섹션으로 제한하려는 관리자에게 유용합니다. 이러한 사용자 또는 그룹은 액세스 권한이 필요하고 다른 섹션을 완전히 숨겨야 합니다.

참고

권한에는 다른 권한이 포함될 수 없습니다.

13.2. 기본 관리 권한

관리 권한은 기본적으로 IdM과 함께 제공되는 권한입니다. 사용자가 생성한 다른 권한처럼 작동하며 다음과 같은 차이점이 있습니다.

  • 해당 항목을 삭제하거나 이름, 위치 및 대상 속성을 수정할 수 없습니다.
  • 여기에는 세 가지 속성 세트가 있습니다.

    • IdM에서 관리하므로 기본 속성, 사용자는 수정할 수 없습니다.
    • 포함된 속성: 사용자가 추가한 추가 속성
    • 사용자가 제거한 속성인 제외된 속성

관리되는 권한은 기본 및 포함된 속성 세트에 표시되지만 제외된 세트에는 표시되지 않는 모든 속성에 적용됩니다.

참고

관리 권한을 삭제할 수는 없지만 바인딩 유형을 권한으로 설정하고 모든 권한에서 관리 권한을 제거하면 효과적으로 비활성화합니다.

모든 관리 권한의 이름은 시스템(예: 시스템: Sudo 규칙 추가 또는 시스템: 서비스 수정 )으로 시작됩니다. 이전 버전의 IdM은 기본 권한에 다른 스키마를 사용했습니다. 예를 들어 사용자는 삭제할 수 없으며 권한에만 할당할 수 있었습니다. 이러한 기본 권한의 대부분은 관리 권한으로 전환되었지만 다음 권한은 여전히 이전 체계를 사용합니다.

  • Automember Rebuild 멤버십 작업 추가
  • 구성 하위 항목 추가
  • 복제 계약 추가
  • 인증서 제거 보류
  • CA에서 인증서 상태 가져오기
  • Read DNA Range
  • Modify DNA Range
  • Read PassSync Managers Configuration
  • PassSync Manager 설정 수정
  • 복제 계약 읽기
  • 복제 계약 수정
  • 복제 계약 제거
  • LDBM 데이터베이스 구성 읽기
  • 인증서 요청
  • CA ACL을 무시하는 인증서 요청
  • 다른 호스트에서 인증서 요청
  • CA에서 인증서 검색
  • 인증서 취소
  • IPA 구성 작성
참고

명령줄에서 관리 권한을 수정하려고 하면 수정할 수 없는 속성을 변경할 수 없으므로 명령이 실패합니다. 웹 UI에서 관리되는 권한을 수정하려고 하면 수정할 수 없는 특성이 비활성화됩니다.

13.3. IdM의 권한

권한은 역할에 적용되는 권한 그룹입니다.
권한은 단일 작업을 수행할 수 있는 권한을 제공하지만 성공하려면 여러 권한이 필요한 특정 IdM 작업이 있습니다. 따라서 권한은 특정 작업을 수행하는 데 필요한 다양한 권한을 결합합니다.
예를 들어 새 IdM 사용자의 계정을 설정하려면 다음 권한이 필요합니다.

  • 새 사용자 항목 생성
  • 사용자 암호 재설정
  • 기본 IPA 사용자 그룹에 새 사용자 추가

이러한 세 가지 하위 수준 작업을 사용자 지정 권한(예: 사용자 추가 ) 형식의 상위 수준 작업으로 결합하면 시스템 관리자가 역할을 더 쉽게 관리할 수 있습니다. IdM에는 이미 여러 기본 권한이 포함되어 있습니다. 사용자 및 사용자 그룹 외에도 권한이 호스트 및 호스트 그룹 및 네트워크 서비스에 할당됩니다. 이 방법을 사용하면 특정 네트워크 서비스를 사용하여 호스트 집합에서 사용자 집합을 통해 작업을 세밀하게 제어할 수 있습니다.

참고

권한에는 다른 권한이 포함되어 있지 않을 수 있습니다.

13.4. IdM의 역할

역할은 역할에 지정된 사용자가 보유한 권한 목록입니다.
실제로 권한은 지정된 하위 수준 작업(예: 사용자 항목 생성 및 그룹에 항목을 추가하는 등)을 수행할 수 있는 기능을 부여하며, 권한은 상위 수준 작업(예: 지정된 그룹에서 새 사용자를 만드는 등)에 필요한 이러한 권한 중 하나 이상을 결합합니다. 역할은 필요에 따라 권한을 함께 수집합니다. 예를 들어 사용자 관리자 역할은 사용자를 추가, 수정 및 삭제할 수 있습니다.

중요

역할은 허용된 작업을 분류하는 데 사용됩니다. 권한 분리를 구현하거나 권한 에스컬레이션으로부터 보호하는 도구로 사용되지 않습니다.

참고

역할에는 다른 역할을 포함할 수 없습니다.

13.5. Identity Management에서 사전 정의된 역할

Red Hat Enterprise Linux Identity Management는 다음과 같은 사전 정의된 역할을 제공합니다.

Expand
표 13.1. Identity Management의 사전 정의된 역할
Role권한설명

등록 관리자

호스트 등록

클라이언트 또는 호스트 등록 책임이 있음

helpdesk

사용자 수정 및 암호 재설정, 그룹 멤버십 수정

간단한 사용자 관리 작업 수행 담당

IT 보안 전문가

netgroups Administrators, HBAC Administrator, Sudo Administrator

호스트 기반 액세스 제어, sudo 규칙과 같은 보안 정책 관리를 담당합니다.

IT 전문가

호스트 관리자, 호스트 그룹 관리자, 서비스 관리자, 자동 마운트 관리자

호스트 관리 담당

보안 아키텍트

위임 관리자, 복제 관리자, IPA 쓰기 구성, 암호 정책 관리자

Identity Management 환경 관리, 신뢰 생성, 복제 계약 생성 담당

사용자 관리자

사용자 관리자, 그룹 관리자, 단계 사용자 관리자

사용자 및 그룹 생성 담당

13.6. Ansible을 사용하여 권한이 있는 IdM RBAC 역할이 있는지 확인

RHEL IdM(Identity Management)의 리소스에 대한 RBAC(역할 기반 액세스)를 기본 역할에서 제공하는 것보다 더 세밀하게 제어하려면 사용자 지정 역할을 생성합니다.

다음 절차에서는 Ansible 플레이북을 사용하여 새 IdM 사용자 지정 역할에 대한 권한을 정의하고 해당 역할이 있는지 확인하는 방법을 설명합니다. 이 예제에서 새 user_and_host_administrator 역할에는 기본적으로 IdM에 있는 다음 권한의 고유한 조합이 포함되어 있습니다.

  • 그룹 관리자
  • 사용자 관리자
  • 단계 사용자 관리자
  • 그룹 관리자

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/ <MyPlaybooks> / 디렉터리로 이동합니다.

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/ 디렉터리에 있는 role-member-user-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/role-member-user-present.yml role-member-user-present-copy.yml
  3. 편집할 role-member-user-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.iparole 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 새 역할의 이름으로 설정합니다.
    • 권한 목록을 새 역할에 포함할 IdM 권한의 이름으로 설정합니다.
    • 선택적으로 사용자 변수를 새 역할을 부여하려는 사용자의 이름으로 설정합니다.
    • 필요한 경우 그룹 변수를 새 역할을 부여할 그룹의 이름으로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - freeipa.ansible_freeipa.iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: user_and_host_administrator
          user: idm_user01
          group: idm_group01
          privilege:
          - Group Administrators
          - User Administrators
          - Stage User Administrators
          - Group Administrators
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-user-present-copy.yml

13.7. Ansible을 사용하여 IdM RBAC 역할이 없는지 확인

RHEL IdM(Identity Management)에서 RBAC(역할 기반 액세스 제어)를 관리하는 시스템 관리자로서 관리자가 실수로 사용자를 할당하지 않도록 더 이상 사용되지 않는 역할이 없는지 확인할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 역할이 없는지 확인하는 방법을 설명합니다. 아래 예제에서는 IdM에 사용자 지정 user_and_host_administrator 역할이 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/ <MyPlaybooks> / 디렉터리로 이동합니다.

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/ 디렉터리에 있는 role-is-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/role-is-absent.yml role-is-absent-copy.yml
  3. 편집을 위해 role-is-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.iparole 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 역할의 이름으로 설정합니다.
    • state 변수가 absent 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - freeipa.ansible_freeipa.iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: user_and_host_administrator
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-is-absent-copy.yml

RHEL IdM(Identity Management)에서 RBAC(역할 기반 액세스 제어)를 관리하는 시스템 관리자로서 특정 사용자 그룹(예: 주니어 관리자)에 역할을 할당할 수 있습니다.

다음 예제에서는 Ansible 플레이북을 사용하여 기본 제공 IdM RBAC helpdesk 역할이 junior_sysadmins 에 할당되었는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/ <MyPlaybooks> / 디렉터리로 이동합니다.

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/ 디렉터리에 있는 role-member-group-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/role-member-group-present.yml role-member-group-present-copy.yml
  3. 편집할 role-member-group-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.iparole 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 할당하려는 역할의 이름으로 설정합니다.
    • 그룹 변수를 그룹 이름으로 설정합니다.
    • action 변수를 member 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - freeipa.ansible_freeipa.iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: helpdesk
          group: junior_sysadmins
          action: member
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-group-present-copy.yml

RHEL IdM(Identity Management)에서 RBAC(역할 기반 액세스 제어)를 관리하는 시스템 관리자로서, 예를 들어 회사의 다른 위치로 이동한 후 RBAC 역할이 특정 사용자에게 할당되지 않도록 할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 user_01user_02 라는 사용자가 helpdesk 역할에 할당되지 않도록 하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/ <MyPlaybooks> / 디렉터리로 이동합니다.

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/ 디렉터리에 있는 role-member-user-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/role-member-user-absent.yml role-member-user-absent-copy.yml
  3. 편집할 role-member-user-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.iparole 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 할당하려는 역할의 이름으로 설정합니다.
    • 사용자 목록을 사용자 이름으로 설정합니다.
    • action 변수를 member 로 설정합니다.
    • state 변수를 absent 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - freeipa.ansible_freeipa.iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: helpdesk
          user
          - user_01
          - user_02
          action: member
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-user-absent-copy.yml

13.10. Ansible을 사용하여 서비스가 IdM RBAC 역할의 멤버인지 확인

RHEL IdM(Identity Management)에서 RBAC(역할 기반 액세스 제어)를 관리하는 시스템 관리자는 IdM에 등록된 특정 서비스가 특정 역할의 멤버인지 확인할 수 있습니다. 다음 예제에서는 사용자 지정 web_administrator 역할에서 client01.idm.example.com 서버에서 실행 중인 HTTP 서비스를 관리할 수 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • web_administrator 역할은 IdM에 있습니다.
  • HTTP/client01.idm.example.com@IDM.EXAMPLE.COM 서비스는 IdM에 있습니다.

프로세스

  1. ~/ <MyPlaybooks> / 디렉터리로 이동합니다.

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/ 디렉터리에 있는 role-member-service-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/role-member-service-present-absent.yml role-member-service-present-copy.yml
  3. 편집할 role-member-service-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.iparole 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 할당하려는 역할의 이름으로 설정합니다.
    • 서비스 목록을 서비스 이름으로 설정합니다.
    • action 변수를 member 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - freeipa.ansible_freeipa.iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: web_administrator
          service:
          - HTTP/client01.idm.example.com
          action: member
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-service-present-copy.yml

13.11. Ansible을 사용하여 호스트가 IdM RBAC 역할의 멤버인지 확인

RHEL IdM(Identity Management)에서 역할 기반 액세스 제어를 관리하는 시스템 관리자로서 특정 호스트 또는 호스트 그룹이 특정 역할과 연결되어 있는지 확인할 수 있습니다. 다음 예제에서는 사용자 지정 web_administrator 역할에서 HTTP 서비스가 실행 중인 client01.idm.example.com IdM 호스트를 관리할 수 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • web_administrator 역할은 IdM에 있습니다.
  • client01.idm.example.com 호스트가 IdM에 있습니다.

프로세스

  1. ~/ <MyPlaybooks> / 디렉터리로 이동합니다.

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/ 디렉터리에 있는 role-member-host-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/role-member-host-present.yml role-member-host-present-copy.yml
  3. 편집을 위해 role-member-host-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.iparole 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 할당하려는 역할의 이름으로 설정합니다.
    • 호스트 목록을 호스트 이름으로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - freeipa.ansible_freeipa.iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: web_administrator
          host:
          - client01.idm.example.com
          action: member
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-host-present-copy.yml

RHEL IdM(Identity Management)에서 역할 기반 액세스 제어를 관리하는 시스템 관리자로서 특정 호스트 또는 호스트 그룹이 특정 역할과 연결되어 있는지 확인할 수 있습니다. 다음 예제에서는 사용자 지정 web_administrator 역할에서 HTTP 서비스가 실행 중인 IdM 호스트의 web_servers 그룹을 관리할 수 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • web_administrator 역할은 IdM에 있습니다.
  • web_servers 호스트 그룹이 IdM에 있습니다.

프로세스

  1. ~/ <MyPlaybooks> / 디렉터리로 이동합니다.

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/ 디렉터리에 있는 role-member-hostgroup-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/role/role-member-hostgroup-present.yml role-member-hostgroup-present-copy.yml
  3. 편집할 role-member-hostgroup-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.iparole 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 할당하려는 역할의 이름으로 설정합니다.
    • hostgroup 목록을 호스트 그룹의 이름으로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: true
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - freeipa.ansible_freeipa.iparole:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: web_administrator
          hostgroup:
          - web_servers
          action: member
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-hostgroup-present-copy.yml

14장. Ansible 플레이북을 사용하여 RBAC 권한 관리

RBAC(역할 기반 액세스 제어)는 역할, 권한 및 권한에 대해 정의된 정책 중립 액세스 제어 메커니즘입니다. 특히 대규모 회사에서 RBAC를 사용하면 개별 책임이 있는 관리자의 계층적 시스템을 생성하는 데 도움이 될 수 있습니다.

이 장에서는 RHEL IdM(Identity Management)에서 Ansible 플레이북을 사용하여 RBAC 권한을 관리할 때 수행되는 작업에 대해 설명합니다.

사전 요구 사항

14.1. Ansible을 사용하여 사용자 정의 IdM RBAC 권한이 있는지 확인

RHEL IdM(Identity Management) 역할 기반 액세스 제어(RBAC)에서 완전히 작동하는 사용자 정의 권한을 유지하려면 단계를 진행해야 합니다.

  1. 연결된 권한 없이 권한을 생성합니다.
  2. 선택한 권한을 권한에 추가합니다.

다음 절차에서는 나중에 권한을 추가할 수 있도록 Ansible 플레이북을 사용하여 빈 권한을 생성하는 방법을 설명합니다. 이 예제에서는 호스트 관리와 관련된 모든 IdM 권한을 결합하기 위한 full_host_administration 이라는 권한을 생성하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/privilege/ 디렉터리에 있는 privilege-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/privilege/privilege-present.yml privilege-present-copy.yml
  3. 편집할 privilege-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaprivilege 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 새 권한인 full_host_administration 의 이름으로 설정합니다.
    • 선택적으로 description 변수를 사용하여 권한을 설명합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Privilege present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure privilege full_host_administration is present
        freeipa.ansible_freeipa.ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: full_host_administration
          description: This privilege combines all IdM permissions related to host administration
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-present-copy.yml

RHEL IdM(Identity Management) 역할 기반 액세스 제어(RBAC)에서 완전히 작동하는 사용자 정의 권한을 유지하려면 단계를 진행해야 합니다.

  1. 연결된 권한 없이 권한을 생성합니다.
  2. 선택한 권한을 권한에 추가합니다.

다음 절차에서는 Ansible 플레이북을 사용하여 이전 단계에서 생성한 권한에 권한을 추가하는 방법을 설명합니다. 이 예제에서는 호스트 관리와 관련된 모든 IdM 권한을 full_host_administration 이라는 권한에 추가하는 방법을 설명합니다. 기본적으로 권한은 호스트 등록, 호스트 관리자 및 호스트 그룹 관리자 권한 간에 배포됩니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • full_host_administration 권한이 있습니다. Ansible을 사용하여 권한을 생성하는 방법에 대한 자세한 내용은 사용자 정의 IdM RBAC 권한이 있는지 확인하기 위해 Ansible 사용을 참조하십시오.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/privilege/ 디렉터리에 있는 privilege-member-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/privilege/privilege-member-present.yml privilege-member-present-copy.yml
  3. 편집을 위해 privilege-member-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. ipaprivilege 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 권한 이름으로 설정합니다.
    • 권한 목록을 권한에 포함할 권한 이름으로 설정합니다.
    • action 변수가 member 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Privilege member present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that permissions are present for the "full_host_administration" privilege
        ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: full_host_administration
          permission:
          - "System: Add krbPrincipalName to a Host"
          - "System: Enroll a Host"
          - "System: Manage Host Certificates"
          - "System: Manage Host Enrollment Password"
          - "System: Manage Host Keytab"
          - "System: Manage Host Principals"
          - "Retrieve Certificates from the CA"
          - "Revoke Certificate"
          - "System: Add Hosts"
          - "System: Add krbPrincipalName to a Host"
          - "System: Enroll a Host"
          - "System: Manage Host Certificates"
          - "System: Manage Host Enrollment Password"
          - "System: Manage Host Keytab"
          - "System: Manage Host Keytab Permissions"
          - "System: Manage Host Principals"
          - "System: Manage Host SSH Public Keys"
          - "System: Manage Service Keytab"
          - "System: Manage Service Keytab Permissions"
          - "System: Modify Hosts"
          - "System: Remove Hosts"
          - "System: Add Hostgroups"
          - "System: Modify Hostgroup Membership"
          - "System: Modify Hostgroups"
          - "System: Remove Hostgroups"
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-member-present-copy.yml

RHEL IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어를 사용자 지정할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 권한에서 권한을 제거하는 방법을 설명합니다. 이 예제에서는 예를 들어 관리자가 보안 위험으로 간주하기 때문에 기본 인증서 관리자 권한에서 CA ACL을 무시한 요청 인증서를 제거하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/privilege/ 디렉터리에 있는 privilege-member-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/privilege/privilege-member-absent.yml privilege-member-absent-copy.yml
  3. 편집할 privilege-member-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaprivilege 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 권한 이름으로 설정합니다.
    • 권한 목록에서 제거할 권한의 이름으로 설정합니다.
    • action 변수가 member 로 설정되어 있는지 확인합니다.
    • state 변수가 absent 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Privilege absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "Request Certificate ignoring CA ACLs" permission is absent from the "Certificate Administrators" privilege
        freeipa.ansible_freeipa.ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: Certificate Administrators
          permission:
          - "Request Certificate ignoring CA ACLs"
          action: member
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-member-absent-copy.yml

14.4. Ansible을 사용하여 사용자 정의 IdM RBAC 권한의 이름을 변경

RHEL IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어를 사용자 지정할 수 있습니다.

다음 절차에서는 예를 들어 몇 가지 권한을 제거했기 때문에 권한 이름을 변경하는 방법을 설명합니다. 결과적으로 권한 이름이 더 이상 정확하지 않습니다. 이 예제에서 관리자는 full_host_administration 권한의 이름을 limited_host_administration 으로 변경합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • full_host_administration 권한이 있습니다. 권한을 추가하는 방법에 대한 자세한 내용은 Ansible을 사용하여 사용자 정의 IdM RBAC 권한이 있는지 를 참조하십시오.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/privilege/ 디렉터리에 있는 privilege-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/privilege/privilege-present.yml rename-privilege.yml
  3. 편집할 rename-privilege.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaprivilege 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 현재 권한 이름으로 설정합니다.
    • rename 변수를 추가하고 권한의 새 이름으로 설정합니다.
    • state 변수를 추가하고 이름을 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Rename a privilege
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the full_host_administration privilege is renamed to limited_host_administration
        freeipa.ansible_freeipa.ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: full_host_administration
          rename: limited_host_administration
          state: renamed
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory rename-privilege.yml

14.5. Ansible을 사용하여 IdM RBAC 권한이 없는지 확인

RHEL IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어를 사용자 지정할 수 있습니다. 다음 절차에서는 Ansible 플레이북을 사용하여 RBAC 권한이 없는지 확인하는 방법을 설명합니다. 이 예제에서는 CA 관리자 권한이 없는지 확인하는 방법을 설명합니다. 절차로 인해 관리자는 IdM에서 인증 기관을 관리할 수 있는 유일한 사용자가 됩니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/privilege/ 디렉터리에 있는 privilege-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/privilege/privilege-absent.yml privilege-absent-copy.yml
  3. 편집할 privilege-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaprivilege 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 제거할 권한의 이름으로 설정합니다.
    • state 변수가 absent 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Privilege absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure privilege "CA administrator" is absent
        freeipa.ansible_freeipa.ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: CA administrator
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-absent-copy.yml

15장. Ansible 플레이북을 사용하여 IdM에서 RBAC 권한 관리

RBAC(역할 기반 액세스 제어)는 역할, 권한 및 권한에 대해 정의된 정책 중립 액세스 제어 메커니즘입니다. 특히 대규모 회사에서 RBAC를 사용하면 개별 책임이 있는 관리자의 계층적 시스템을 생성하는 데 도움이 될 수 있습니다.

이 장에서는 Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)에서 RBAC 권한을 관리할 때 수행되는 작업을 설명합니다.

사전 요구 사항

15.1. Ansible을 사용하여 RBAC 권한이 있는지 확인

RHEL IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어(RBAC)를 사용자 지정할 수 있습니다.

다음 절차에서는 권한에 추가할 수 있도록 Ansible 플레이북을 사용하여 IdM에 권한이 있는지 확인하는 방법을 설명합니다. 이 예제에서는 다음 대상 상태를 확인하는 방법을 설명합니다.

  • MyPermission 권한이 있습니다.
  • MyPermission 권한은 호스트에만 적용할 수 있습니다.
  • 권한이 포함된 사용자에게 권한이 부여된 사용자는 항목에 대해 다음과 같은 가능한 작업을 모두 수행할 수 있습니다.

    • 쓰기
    • 읽기
    • 검색
    • 비교
    • 추가
    • 삭제

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/ 디렉터리에 있는 permission-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/permission-present.yml permission-present-copy.yml
  3. 편집할 permission-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipapermission 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 권한 이름으로 설정합니다.
    • object_type 변수를 host 로 설정합니다.
    • 올바른 변수를 모두 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Permission present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "MyPermission" permission is present
        freeipa.ansible_freeipa.ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          object_type: host
          right: all
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-present-copy.yml

15.2. Ansible을 사용하여 속성에 RBAC 권한이 있는지 확인

RHEL IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어(RBAC)를 사용자 지정할 수 있습니다.

다음 절차에서는 권한에 추가할 수 있도록 Ansible 플레이북을 사용하여 IdM에 권한이 있는지 확인하는 방법을 설명합니다. 이 예제에서는 다음 대상 상태를 확인하는 방법을 설명합니다.

  • MyPermission 권한이 있습니다.
  • MyPermission 권한은 호스트를 추가하는 데만 사용할 수 있습니다.
  • 권한이 포함된 권한이 부여된 사용자에게 호스트 항목에서 다음 가능한 모든 작업을 수행할 수 있습니다.

    • 쓰기
    • 읽기
    • 검색
    • 비교
    • 추가
    • 삭제
  • MyPermission 권한이 포함된 권한이 부여된 사용자가 생성한 호스트 항목에 설명 값이 있을 수 있습니다.
참고

권한을 생성하거나 수정할 때 지정할 수 있는 속성 유형은 IdM LDAP 스키마에 의해 제한되지 않습니다. 그러나 예를 들어 object_type 이 나중에 host 인 경우 attrs: car_licence 를 지정하면 권한을 실행하고 호스트에 특정 자동차를 추가하려고 할 때 ipa: ERROR: attribute "car-license" not allowed 오류 메시지가 표시되지 않습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/ 디렉터리에 있는 permission-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/permission-present.yml permission-present-with-attribute.yml
  3. 편집할 permission-present-with-attribute.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipapermission 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 권한 이름으로 설정합니다.
    • object_type 변수를 host 로 설정합니다.
    • 올바른 변수를 모두 로 설정합니다.
    • attrs 변수를 description 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Permission present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "MyPermission" permission is present with an attribute
        freeipa.ansible_freeipa.ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          object_type: host
          right: all
          attrs: description
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-present-with-attribute.yml

15.3. Ansible을 사용하여 RBAC 권한이 없는지 확인

RHEL IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어(RBAC)를 사용자 지정할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 IdM에 권한이 없는지 확인하여 권한에 추가할 수 없도록 하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/ 디렉터리에 있는 permission-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/permission-absent.yml permission-absent-copy.yml
  3. 편집할 permission-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipapermission 작업 섹션의 name 변수를 권한 이름으로 설정합니다.
  5. state 변수를 absent 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Permission absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "MyPermission" permission is absent
        freeipa.ansible_freeipa.ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          state: absent
  6. 파일을 저장합니다.
  7. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-absent-copy.yml

15.4. Ansible을 사용하여 속성이 IdM RBAC 권한의 멤버인지 확인

RHEL IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어(RBAC)를 사용자 지정할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 IdM에서 속성이 RBAC 권한의 멤버인지 확인하는 방법을 설명합니다. 결과적으로 권한이 있는 사용자는 속성이 있는 항목을 생성할 수 있습니다.

이 예제에서는 MyPermission 권한이 포함된 권한이 있는 사용자가 생성한 호스트 항목에 gecosdescription 값이 있는지 확인하는 방법을 설명합니다.

참고

권한을 생성하거나 수정할 때 지정할 수 있는 속성 유형은 IdM LDAP 스키마에 의해 제한되지 않습니다. 그러나 예를 들어 object_type 이 나중에 host 인 경우 attrs: car_licence 를 지정하면 권한을 실행하고 호스트에 특정 자동차를 추가하려고 할 때 ipa: ERROR: attribute "car-license" not allowed 오류 메시지가 표시되지 않습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • MyPermission 권한이 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/ 디렉터리에 있는 permission-member-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/permission-member-present.yml permission-member-present-copy.yml
  3. 편집할 permission-member-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipapermission 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 권한 이름으로 설정합니다.
    • attrs 목록을 descriptiongecos 변수로 설정합니다.
    • action 변수가 member 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Permission member present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "gecos" and "description" attributes are present in "MyPermission"
        freeipa.ansible_freeipa.ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          attrs:
          - description
          - gecos
          action: member
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-member-present-copy.yml

15.5. Ansible을 사용하여 속성이 IdM RBAC 권한의 멤버가 아닌지 확인

RHEL IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어(RBAC)를 사용자 지정할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 속성이 IdM에서 RBAC 권한의 멤버가 아닌지 확인하는 방법을 설명합니다. 결과적으로 권한이 있는 사용자가 IdM LDAP에 항목을 생성하면 해당 항목에 속성과 연결된 값이 있을 수 없습니다.

이 예제에서는 다음 대상 상태를 확인하는 방법을 설명합니다.

  • MyPermission 권한이 있습니다.
  • MyPermission 권한이 포함된 권한이 있는 사용자가 생성한 호스트 항목은 description 속성을 가질 수 없습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • MyPermission 권한이 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/ 디렉터리에 있는 permission-member-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/permission-member-absent.yml permission-member-absent-copy.yml
  3. 편집할 permission-member-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipapermission 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • name 변수를 권한 이름으로 설정합니다.
    • attrs 변수를 description 로 설정합니다.
    • action 변수를 member 로 설정합니다.
    • state 변수가 absent로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Permission absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that an attribute is not a member of "MyPermission"
        freeipa.ansible_freeipa.ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          attrs: description
          action: member
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-member-absent-copy.yml

15.6. Ansible을 사용하여 IdM RBAC 권한의 이름 변경

RHEL IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어를 사용자 지정할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 권한의 이름을 바꾸는 방법을 설명합니다. 이 예제에서는 MyPermission 의 이름을 MyNewPermission 으로 변경하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • MyPermission 은 IdM에 있습니다.
  • IdM에는 MyNewPermission 이 존재하지 않습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/ 디렉터리에 있는 permission-renamed.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/permission/permission-renamed.yml permission-renamed-copy.yml
  3. 편집할 permission-renamed-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipapermission 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 권한의 현재 이름으로 설정합니다.
    • rename 변수를 권한의 새 이름으로 설정합니다.
    • state 변수를 이름이 변경 되도록 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Permission present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Rename the "MyPermission" permission
        freeipa.ansible_freeipa.ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          rename: MyNewPermission
          state: renamed
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory permission-renamed-copy.yml

16장. Ansible을 사용하여 IdM에서 복제 토폴로지 관리

여러 RHEL IdM(Identity Management) 서버를 유지 관리하고 중복을 위해 서버 손실을 완화하거나 방지하기 위해 서로 복제하도록 할 수 있습니다. 예를 들어 한 서버가 실패하면 다른 서버에서 도메인에 서비스를 계속 제공합니다. 나머지 서버 중 하나를 기반으로 새 복제본을 생성하여 손실된 서버를 복구할 수도 있습니다.

IdM 서버에 저장된 데이터는 복제 계약을 기반으로 복제됩니다. 두 서버에 복제 계약이 구성된 경우 데이터를 공유합니다. 복제된 데이터는 토폴로지 접미사 에 저장됩니다. 두 복제본의 접미사 간에 복제 계약이 있는 경우 접미사는 토폴로지 세그먼트 를 형성합니다.

이 장에서는 Ansible을 사용하여 IdM 복제 계약, 토폴로지 세그먼트 및 토폴로지 접미사를 관리하는 방법을 설명합니다.

16.1. Ansible을 사용하여 IdM에 복제 계약이 있는지 확인

RHEL IdM(Identity Management) 서버에 저장된 데이터는 복제 계약을 기반으로 복제됩니다. 두 서버에 복제 계약이 구성된 경우 데이터를 공유합니다. 복제 계약은 항상 양방향입니다. 데이터는 첫 번째 복제본에서 다른 복제본으로 복제될 뿐만 아니라 다른 복제본에서 첫 번째 복제본으로 복제됩니다.

Ansible 플레이북을 사용하여 server.idm.example.comreplica.idm.example.com 사이에 도메인 유형의 복제 계약이 있는지 확인합니다.

사전 요구 사항

  • 토폴로지의 IdM 복제본 연결을 위해 지침에 나열된 IdM 토폴로지를 설계하기 위한 권장 사항을 이해해야 합니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. ansible-freeipa 패키지에서 제공하는 add-topologysegment.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/topology/add-topologysegment.yml add-topologysegment-copy.yml
  3. 편집을 위해 add-topologysegment-copy.yml 파일을 엽니다.
  4. ipatopologysegment 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • 추가하려는 세그먼트 유형에 따라 접미사 변수를 domain 또는 ca 로 설정합니다.
    • 왼쪽 변수를 복제 계약의 왼쪽 노드가 될 IdM 서버의 이름으로 설정합니다.
    • 올바른 변수를 복제 계약의 올바른 노드가 될 IdM 서버의 이름으로 설정합니다.
    • state 변수가 present 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to handle topologysegment
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Add topology segment
        ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: domain
          left: server.idm.example.com
          right: replica.idm.example.com
          state: present
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegment-copy.yml

16.2. Ansible을 사용하여 여러 IdM 복제본 간에 복제 계약이 있는지 확인

RHEL IdM(Identity Management) 서버에 저장된 데이터는 복제 계약을 기반으로 복제됩니다. 두 서버에 복제 계약이 구성된 경우 데이터를 공유합니다. 복제 계약은 항상 양방향입니다. 데이터는 첫 번째 복제본에서 다른 복제본으로 복제될 뿐만 아니라 다른 복제본에서 첫 번째 복제본으로 복제됩니다.

IdM의 여러 복제본 쌍 간에 복제 계약이 있는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 토폴로지의 복제본 연결에 나열된 IdM 토폴로지를 설계하기 위한 권장 사항을 이해해야 합니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. ansible-freeipa 패키지에서 제공하는 add-topologysegments.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/topology/add-topologysegments.yml add-topologysegments-copy.yml
  3. 편집을 위해 add-topologysegments-copy.yml 파일을 엽니다.
  4. vars 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • 모든 토폴로지 세그먼트에 대해 ipatopology_segments 섹션에 행을 추가하고 다음 변수를 설정합니다.

      • 추가하려는 세그먼트 유형에 따라 접미사 변수를 domain 또는 ca 로 설정합니다.
      • 왼쪽 변수를 복제 계약의 왼쪽 노드가 될 IdM 서버의 이름으로 설정합니다.
      • 올바른 변수를 복제 계약의 올바른 노드가 될 IdM 서버의 이름으로 설정합니다.
  5. add-topologysegments-copy.yml 파일의 tasks 섹션에서 state 변수가 present 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Add topology segments
      hosts: ipaserver
      gather_facts: false
    
      vars:
        ipaadmin_password: "{{ ipaadmin_password }}"
        ipatopology_segments:
        - {suffix: domain, left: replica1.idm.example.com , right: replica2.idm.example.com }
        - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com }
        - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com }
        - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com }
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Add topology segment
        freeipa.ansible_freeipa.ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: "{{ item.suffix }}"
          name: "{{ item.name | default(omit) }}"
          left: "{{ item.left }}"
          right: "{{ item.right }}"
          state: present
        loop: "{{ ipatopology_segments | default([]) }}"
  6. 파일을 저장합니다.
  7. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegments-copy.yml

16.3. Ansible을 사용하여 두 복제본 간에 복제 계약이 있는지 확인

RHEL IdM(Identity Management) 서버에 저장된 데이터는 복제 계약을 기반으로 복제됩니다. 두 서버에 복제 계약이 구성된 경우 데이터를 공유합니다. 복제 계약은 항상 양방향입니다. 데이터는 첫 번째 복제본에서 다른 복제본으로 복제될 뿐만 아니라 다른 복제본에서 첫 번째 복제본으로 복제됩니다.

다음 절차에 따라 IdM의 여러 복제본 쌍 간에 복제 계약이 있는지 확인합니다. IdM에 복제 계약이 존재하는지 확인하기 위해 Ansible을 사용하는 것과 달리 이 절차에서는 기존 구성을 수정하지 않습니다.

사전 요구 사항

  • 토폴로지의 복제본 연결에 나열된 IdM 토폴로지를 설계하기 위한 권장 사항을 이해해야 합니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. ansible-freeipa 패키지에서 제공하는 check-topologysegments.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/topology/check-topologysegments.yml check-topologysegments-copy.yml
  3. 편집을 위해 check-topologysegments-copy.yml 파일을 엽니다.
  4. vars 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • 모든 토폴로지 세그먼트에 대해 ipatopology_segments 섹션에 행을 추가하고 다음 변수를 설정합니다.

      • 추가 세그먼트 유형에 따라 접미사 변수를 domain 또는 ca 로 설정합니다.
      • 왼쪽 변수를 복제 계약의 왼쪽 노드가 될 IdM 서버의 이름으로 설정합니다.
      • 올바른 변수를 복제 계약의 올바른 노드가 될 IdM 서버의 이름으로 설정합니다.
  5. check-topologysegments-copy.yml 파일의 tasks 섹션에서 state 변수가 present 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Add topology segments
      hosts: ipaserver
      gather_facts: false
    
      vars:
        ipaadmin_password: "{{ ipaadmin_password }}"
        ipatopology_segments:
        - {suffix: domain, left: replica1.idm.example.com, right: replica2.idm.example.com }
        - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com }
        - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com }
        - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com }
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Check topology segment
        freeipa.ansible_freeipa.ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: "{{ item.suffix }}"
          name: "{{ item.name | default(omit) }}"
          left: "{{ item.left }}"
          right: "{{ item.right }}"
          state: checked
        loop: "{{ ipatopology_segments | default([]) }}"
  6. 파일을 저장합니다.
  7. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory check-topologysegments-copy.yml

16.4. Ansible을 사용하여 IdM에 토폴로지 접미사가 있는지 확인합니다.

RHEL IdM(Identity Management)의 복제 계약 컨텍스트에서 토폴로지 접미사는 복제된 데이터를 저장합니다. IdM은 domainca의 두 가지 유형의 토폴로지 접미사를 지원합니다. 각 접미사는 별도의 복제 토폴로지인 별도의 백엔드를 나타냅니다. 복제 계약이 구성되면 서로 다른 두 서버에서 동일한 유형의 두 토폴로지 접미사를 결합합니다.

domain 접미사에는 사용자, 그룹 및 정책에 대한 데이터와 같은 모든 도메인 관련 데이터가 포함됩니다. ca 접미사에는 인증서 시스템 구성 요소에 대한 데이터가 포함되어 있습니다. CA(인증 기관)가 설치된 서버에만 존재합니다.

Ansible 플레이북을 사용하여 IdM에 토폴로지 접미사가 있는지 확인하려면 다음 절차를 따르십시오. 이 예제에서는 IdM에 도메인 접미사가 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. ansible-freeipa 패키지에서 제공하는 verify-topologysuffix.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/topology/ verify-topologysuffix.yml verify-topologysuffix-copy.yml
  3. 편집을 위해 verify-topologysuffix-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipatopologysuffix 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • 접미사 변수를 domain 로 설정합니다. ca 접미사가 있는지 확인하려면 변수를 ca 로 설정합니다.
    • state 변수가 verified 로 설정되어 있는지 확인합니다. 다른 옵션은 불가능합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to handle topologysuffix
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Verify topology suffix
        freeipa.ansible_freeipa.ipatopologysuffix:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: domain
          state: verified
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory verify-topologysuffix-copy.yml

16.5. Ansible을 사용하여 IdM 복제본 다시 초기화

복제본이 장기간 오프라인 상태이거나 데이터베이스가 손상된 경우 다시 초기화할 수 있습니다. 업데이트된 데이터 세트를 사용하여 복제본을 다시 시작합니다. 예를 들어 백업에서 권한 있는 복원이 필요한 경우 다시 초기화할 수 있습니다.

참고

복제 업데이트와 달리 복제본에서 변경된 항목을 서로만 보내는 동안 다시 초기화가 전체 데이터베이스를 새로 고칩니다.

명령을 실행하는 로컬 호스트는 다시 초기화된 복제본입니다. 데이터를 가져오는 복제본을 지정하려면 direction 옵션을 사용합니다.

Ansible 플레이북을 사용하여 server.idm.example.comreplica.idm.example.com 에서 도메인 데이터를 다시 초기화하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. ansible-freeipa 패키지에서 제공하는 reinitialize-topologysegment.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/topology/reinitialize-topologysegment.yml reinitialize-topologysegment-copy.yml
  3. 편집을 위해 reinitialize-topologysegment-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipatopologysegment 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • 접미사 변수를 domain 로 설정합니다. ca 데이터를 다시 초기화하는 경우 변수를 ca 로 설정합니다.
    • 왼쪽 변수를 복제 연결의 왼쪽 노드로 설정합니다.
    • 올바른 변수를 복제 계약의 올바른 노드로 설정합니다.
    • direction 변수를 다시 초기화 데이터의 방향으로 설정합니다. 오른쪽 방향은 데이터가 왼쪽 노드에서 오른쪽 노드로 이동함을 나타냅니다.
    • state 변수가 다시 초기화 됨으로 설정되어 있는지 확인합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

      ---
      - name: Playbook to handle topologysegment
        hosts: ipaserver
      
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
        - name: Reinitialize topology segment
          freeipa.ansible_freeipa.ipatopologysegment:
            ipaadmin_password: "{{ ipaadmin_password }}"
            suffix: domain
            left: server.idm.example.com
            right: replica.idm.example.com
            direction: left-to-right
            state: reinitialized
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory reinitialize-topologysegment-copy.yml

16.6. Ansible을 사용하여 IdM에 복제 계약이 없는지 확인

RHEL IdM(Identity Management) 서버에 저장된 데이터는 복제 계약을 기반으로 복제됩니다. 두 서버에 복제 계약이 구성된 경우 데이터를 공유합니다. 복제 계약은 항상 양방향입니다. 데이터는 첫 번째 복제본에서 다른 복제본으로 복제될 뿐만 아니라 다른 복제본에서 첫 번째 복제본으로 복제됩니다.

다음 절차에 따라 두 복제본 간의 복제 계약이 IdM에 없는지 확인합니다. 이 예제에서는 replica01.idm.example.comreplica02.idm.example.com IdM 서버 간에 도메인 유형의 복제 계약이 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 토폴로지의 복제본 연결에 나열된 IdM 토폴로지를 설계하기 위한 권장 사항은 다음과 같습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. ansible-freeipa 패키지에서 제공하는 delete-topologysegment.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/topology/delete-topologysegment.yml delete-topologysegment-copy.yml
  3. 편집을 위해 delete-topologysegment-copy.yml 파일을 엽니다.
  4. ipatopologysegment 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • 접미사 변수를 domain 로 설정합니다. 또는 ca 데이터가 왼쪽과 오른쪽 노드 간에 복제되지 않도록 하는 경우 변수를 ca 로 설정합니다.
    • 왼쪽 변수를 복제 계약의 왼쪽 노드인 IdM 서버의 이름으로 설정합니다.
    • 올바른 변수를 복제 계약의 올바른 노드인 IdM 서버의 이름으로 설정합니다.
    • state 변수가 absent 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to handle topologysegment
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Delete topology segment
        ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: domain
          left: replica01.idm.example.com
          right: replica02.idm.example.com:
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory delete-topologysegment-copy.yml

17장. Ansible을 사용하여 IdM 서버 관리

Ansible을 사용하여 RHEL IdM(Identity Management) 토폴로지에서 서버를 관리할 수 있습니다. ansible-freeipa 패키지의 server 모듈을 사용하여 IdM 토폴로지에 서버가 있는지 확인할 수 있습니다. 복제본을 숨기거나 복제본을 볼 수도 있습니다.

17.1. Ansible을 사용하여 IdM 서버가 있는지 확인

Ansible 플레이북에서 ipaserver ansible-freeipa 모듈을 사용하여 RHEL IdM(Identity Management) 서버가 있는지 확인할 수 있습니다.

참고

ipaserver Ansible 모듈은 IdM 서버를 설치하지 않습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/ 디렉터리에 있는 server-present.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/server-present.yml server-present-copy.yml
  3. 편집할 server-present-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaserver 작업 섹션에서 name 변수를 서버의 FQDN 으로 설정합니다. 예제 서버의 FQDNserver123.idm.example.com 입니다.

    ---
    - name: Server present example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com is present
        freeipa.ansible_freeipa.ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행하고 플레이북 파일과 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-present-copy.yml

17.2. Ansible을 사용하여 IdM 서버가 IdM 토폴로지에 없는지 확인

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management) 서버가 호스트로도 IdM 토폴로지에 없는지 확인합니다.

ansible-freeipa ipaserver 역할과 달리 이 플레이북에 사용된 ipaserver 모듈은 서버에서 IdM 서비스를 제거하지 않습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/ 디렉터리에 있는 server-absent.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/server-absent.yml server-absent-copy.yml
  3. 편집할 server-absent-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaserver 작업 섹션에서 다음 변수를 설정하여 파일을 조정하고 파일을 저장합니다.

    • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
    • name 변수를 서버의 FQDN 으로 설정합니다. 예제 서버의 FQDNserver123.idm.example.com 입니다.
    • state 변수가 absent 로 설정되어 있는지 확인합니다.
    ---
    - name: Server absent example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com is absent
        freeipa.ansible_freeipa.ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          state: absent
  5. Ansible 플레이북을 실행하고 플레이북 파일과 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-copy.yml
  6. server123.idm.example.com 을 가리키는 모든 이름 서버(NS) DNS 레코드가 DNS 영역에서 삭제되었는지 확인합니다. 이는 IdM 또는 외부 DNS에서 관리하는 통합 DNS를 사용하는지 여부와 관계없이 적용됩니다.

Ansible을 사용하여 서버에서 마지막 IdM 서비스 인스턴스가 실행 중인 경우에도 RHEL IdM(Identity Management) 서버가 없는지 확인할 수 있습니다. CA(인증 기관), KRA(키 복구 기관) 또는 DNS 서버는 모두 IdM 서비스의 예입니다.

주의

CA, KRA 또는 DNS 서버로 사용되는 마지막 서버를 제거하면 IdM 기능이 심각하게 중단됩니다. ipa service-find 명령을 사용하여 어떤 IdM 서버에서 실행 중인지 수동으로 확인할 수 있습니다. CA 서버의 기본 이름은 dogtag/server_name/realM_NAME 입니다.

ansible-freeipa ipaserver 역할과 달리 이 플레이북에 사용된 ipaserver 모듈은 서버에서 IdM 서비스를 제거하지 않습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장한다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 인벤토리 파일에 정의된 IdM 서버로의 제어 노드에서 SSH 연결이 올바르게 작동합니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/ server/ 디렉터리에 있는 server-absent-ignore-last-last-of-role.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/server/server-absent-ignore-last-of-role.yml server-absent-ignore-last-of-role-copy.yml
  3. 편집을 위해 server-absent-ignore-last-of-role-copy.yml 파일을 엽니다.
  4. ipaserver 작업 섹션에서 다음 변수를 설정하여 파일을 조정하고 파일을 저장합니다.

    • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
    • name 변수를 서버의 FQDN 으로 설정합니다. 예제 서버의 FQDNserver123.idm.example.com 입니다.
    • ignore_last_of_role 변수가 true 로 설정되어 있는지 확인합니다.
    • state 변수를 absent 로 설정합니다.
    ---
    - name: Server absent with last of role skip example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server "server123.idm.example.com” is absent with last of role skip
        freeipa.ansible_freeipa.ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          ignore_last_of_role: true
          state: absent
  5. Ansible 플레이북을 실행하고 플레이북 파일과 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-ignore-last-of-role-copy.yml
  6. server123.idm.example.com 을 가리키는 모든 이름 서버(NS) DNS 레코드가 DNS 영역에서 삭제되었는지 확인합니다. 이는 IdM 또는 외부 DNS에서 관리하는 통합 DNS를 사용하는지 여부와 관계없이 적용됩니다.

토폴로지에서 RHEL IdM(Identity Management) 서버를 제거하는 경우 Ansible 플레이북과 함께 복제 계약을 그대로 유지할 수 있습니다. 또한 플레이북은 IdM 서버가 호스트로도 IdM에 존재하지 않도록 합니다.

중요

제거할 때 서버의 복제 계약을 무시하는 것은 다른 서버가 작동하지 않는 서버를 사용할 때만 사용하는 것이 좋습니다. 토폴로지에서 중앙 지점 역할을 하는 서버를 제거하면 토폴로지를 연결이 끊긴 두 클러스터로 분할할 수 있습니다.

ipa server-del 명령을 사용하여 토폴로지에서 dysfunctional 서버를 제거할 수 있습니다.

참고

CA(인증 기관), KRA(Key recovery authority) 또는 DNS 서버로 제공되는 마지막 서버를 제거하면 RHEL IdM(Identity Management) 기능이 중단됩니다. 이 문제를 방지하기 위해 Playbook은 CA, KRA 또는 DNS 서버로 사용되는 서버를 제거하기 전에 도메인의 다른 서버에서 이러한 서비스가 실행되고 있는지 확인합니다.

ansible-freeipa ipaserver 역할과 달리 이 플레이북에 사용된 ipaserver 모듈은 서버에서 IdM 서비스를 제거하지 않습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장한다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

    • 인벤토리 파일에 정의된 IdM 서버로의 제어 노드에서 SSH 연결이 올바르게 작동합니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/ 디렉터리에 있는 server-absent-ignore_topology_disconnect.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/server-absent-ignore_topology_disconnect.yml server-absent-ignore_topology_disconnect-copy.yml
  3. 편집을 위해 server-absent-ignore_topology_disconnect-copy.yml 파일을 엽니다.
  4. ipaserver 작업 섹션에서 다음 변수를 설정하여 파일을 조정하고 파일을 저장합니다.

    • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
    • name 변수를 서버의 FQDN 으로 설정합니다. 예제 서버의 FQDNserver123.idm.example.com 입니다.
    • ignore_topology_disconnect 변수가 true 로 설정되어 있는지 확인합니다.
    • state 변수가 absent 로 설정되어 있는지 확인합니다.
    ---
    - name: Server absent with ignoring topology disconnects example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server "server123.idm.example.com” with ignoring topology disconnects
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          ignore_topology_disconnect: true
          state: absent
  5. Ansible 플레이북을 실행하고 플레이북 파일과 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-ignore_topology_disconnect-copy.yml
  6. 선택 사항: server123.idm.example.com 을 가리키는 모든 이름 서버(NS) DNS 레코드가 DNS 영역에서 삭제되었는지 확인합니다. 이는 IdM 또는 외부 DNS에서 관리하는 통합 DNS를 사용하는지 여부와 관계없이 적용됩니다.

17.5. Ansible 플레이북을 사용하여 기존 IdM 서버가 숨겨져 있는지 확인

Ansible 플레이북에서 ipaserver ansible-freeipa 모듈을 사용하여 기존 RHEL IdM(Identity Management) 서버가 숨겨져 있는지 확인합니다. 이 플레이북은 IdM 서버를 설치하지 않습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/ 디렉터리에 있는 server-hidden.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/server-hidden.yml server-hidden-copy.yml
  3. 편집할 server-hidden-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaserver 작업 섹션에서 다음 변수를 설정하여 파일을 조정하고 파일을 저장합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 서버의 FQDN 으로 설정합니다. 예제 서버의 FQDNserver123.idm.example.com 입니다.
    • 숨겨진 변수가 True 로 설정되어 있는지 확인합니다.
    ---
    - name: Server hidden example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com is hidden
        freeipa.ansible_freeipa.ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          hidden: True
  5. Ansible 플레이북을 실행하고 플레이북 파일과 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-hidden-copy.yml

17.6. Ansible 플레이북을 사용하여 기존 IdM 서버가 표시되도록 합니다.

Ansible 플레이북에서 ipaserver ansible-freeipa 모듈을 사용하여 기존 RHEL IdM(Identity Management) 서버가 표시되는지 확인합니다. 이 플레이북은 IdM 서버를 설치하지 않습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장한다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

    • 인벤토리 파일에 정의된 IdM 서버로의 제어 노드에서 SSH 연결이 올바르게 작동합니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/ 디렉터리에 있는 server-not-hidden.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/server-not-hidden.yml server-not-hidden-copy.yml
  3. 편집할 server-not-hidden-copy.yml 파일을 엽니다.
  4. ipaserver 작업 섹션에서 다음 변수를 설정하여 파일을 조정하고 파일을 저장합니다.

    • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
    • name 변수를 서버의 FQDN 으로 설정합니다. 예제 서버의 FQDNserver123.idm.example.com 입니다.
    • 숨겨진 변수가 no 로 설정되어 있는지 확인합니다.
    ---
    - name: Server not hidden example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com is not hidden
        freeipa.ansible_freeipa.ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          hidden: no
  5. Ansible 플레이북을 실행하고 플레이북 파일과 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-not-hidden-copy.yml

17.7. 기존 IdM 서버에 IdM DNS 위치가 할당되었는지 확인

Ansible 플레이북에서 ipaserver ansible-freeipa 모듈을 사용하여 기존 RHEL IdM(Identity Management) 서버에 특정 IdM DNS 위치가 할당되었는지 확인합니다.

ipaserver Ansible 모듈은 IdM 서버를 설치하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • IdM DNS 위치가 있습니다. 예제 위치는 germany 입니다.
  • 서버에 대한 root 액세스 권한이 있습니다. 예제 서버는 server123.idm.example.com 입니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장한다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

    • 인벤토리 파일에 정의된 IdM 서버로의 제어 노드에서 SSH 연결이 올바르게 작동합니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/ 디렉터리에 있는 server-location.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/server-location.yml server-location-copy.yml
  3. 편집을 위해 server-location-copy.yml 파일을 엽니다.
  4. ipaserver 작업 섹션에서 다음 변수를 설정하여 파일을 조정하고 파일을 저장합니다.

    • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
    • name 변수를 server123.idm.example.com 으로 설정합니다.
    • 위치 변수를 germany 로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Server enabled example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com with location "germany” is present
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          location: germany
  5. Ansible 플레이북을 실행하고 플레이북 파일과 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-location-copy.yml
  6. SSH 를 사용하여 server123.idm.example.comroot 로 연결합니다.

    ssh root@server123.idm.example.com
  7. 업데이트를 즉시 적용하려면 서버에서 named 서비스를 다시 시작하십시오.

    [root@server123.idm.example.com ~]# systemctl restart named

17.8. 기존 IdM 서버에 IdM DNS 위치가 할당되지 않았는지 확인

Ansible 플레이북에서 ipaserver ansible-freeipa 모듈을 사용하여 기존 RHEL IdM(Identity Management) 서버에 IdM DNS 위치가 할당되지 않았는지 확인합니다. 지리적 위치를 자주 변경하는 서버에 DNS 위치를 할당하지 마십시오. 플레이북은 IdM 서버를 설치하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 서버에 대한 root 액세스 권한이 있습니다. 예제 서버는 server123.idm.example.com 입니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장한다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

    • 인벤토리 파일에 정의된 IdM 서버로의 제어 노드에서 SSH 연결이 올바르게 작동합니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/ 디렉터리에 있는 server-no-location.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/server/server-no-location.yml server-no-location-copy.yml
  3. 편집할 server-no-location-copy.yml 파일을 엽니다.
  4. ipaserver 작업 섹션에서 다음 변수를 설정하여 파일을 조정하고 파일을 저장합니다.

    • ipaadmin_password 변수를 IdM 관리자 의 암호로 설정합니다.
    • name 변수를 server123.idm.example.com 으로 설정합니다.
    • location 변수가 "" 로 설정되어 있는지 확인합니다.
    ---
    - name: Server no location example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure server server123.idm.example.com is present with no location
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          location: "”
  5. Ansible 플레이북을 실행하고 플레이북 파일과 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory server-no-location-copy.yml
  6. SSH 를 사용하여 server123.idm.example.comroot 로 연결합니다.

    ssh root@server123.idm.example.com
  7. 업데이트를 즉시 적용하려면 서버에서 named 서비스를 다시 시작하십시오.

    [root@server123.idm.example.com ~]# systemctl restart named

18장. Ansible 플레이북을 사용하여 호스트 관리

Ansible은 시스템 구성, 소프트웨어 배포 및 롤링 업데이트를 수행하는 데 사용되는 자동화 툴입니다. Ansible에는 IdM(Identity Management) 지원이 포함되어 있으며 Ansible 모듈을 사용하여 호스트 관리를 자동화할 수 있습니다.

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)에 호스트 항목이 있는지 확인하려면 다음 절차를 따르십시오. 호스트 항목은 FQDN( 정규화된 도메인 이름 )에서만 정의됩니다.

다음 조건 중 하나 이상이 적용되는 경우 호스트의 FQDN 이름을 지정하면 충분합니다.

  • IdM 서버는 DNS를 관리하도록 구성되지 않았습니다.
  • 호스트에 고정 IP 주소가 없거나 호스트가 구성된 시점에 IP 주소를 알 수 없습니다. FQDN 에서만 정의된 호스트를 추가하면 기본적으로 IdM DNS 서비스에 자리 표시자 항목이 생성됩니다. 예를 들어 랩탑은 IdM 클라이언트로 사전 구성할 수 있지만 구성할 때 IP 주소가 없습니다. DNS 서비스가 레코드를 동적으로 업데이트하면 호스트의 현재 IP 주소가 감지되고 해당 DNS 레코드가 업데이트됩니다.
참고

Ansible이 없으면 ipa host-add 명령을 사용하여 IdM에 호스트 항목이 생성됩니다. IdM에 호스트를 추가하는 결과는 IdM에 존재하는 호스트의 상태입니다. Ansible의 멱등성으로 인해 Ansible을 사용하여 IdM에 호스트를 추가하려면 호스트의 상태를 present: present로 정의하는 플레이북을 생성해야 합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 확인하려는 IdM에 있는 호스트의 FQDN 을 사용하여 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/host/add-host.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Host present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Host host01.idm.example.com present
        freeipa.ansible_freeipa.ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host01.idm.example.com
          state: present
          force: true
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-is-present.yml
참고

이 절차에서는 IdM LDAP 서버에 호스트 항목이 생성되지만 IdM Kerberos 영역에 호스트를 등록하지 않습니다. 이를 위해 IdM 클라이언트로 호스트를 배포해야 합니다. 자세한 내용은 Ansible 플레이북을 사용하여 Identity Management 클라이언트 설치를 참조하십시오.

검증

  1. IdM 서버에 admin 으로 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
  2. ipa host-show 명령을 입력하고 호스트 이름을 지정합니다.

    $ ipa host-show host01.idm.example.com
      Host name: host01.idm.example.com
      Principal name: host/host01.idm.example.com@IDM.EXAMPLE.COM
      Principal alias: host/host01.idm.example.com@IDM.EXAMPLE.COM
      Password: False
      Keytab: False
      Managed by: host01.idm.example.com

출력은 host01.idm.example.com 이 IdM에 있음을 확인합니다.

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)에 호스트 항목이 있는지 확인하려면 다음 절차를 따르십시오. 호스트 항목은 FQDN( 정규화된 도메인 이름 ) 및 해당 IP 주소로 정의됩니다.

참고

Ansible이 없으면 ipa host-add 명령을 사용하여 IdM에 호스트 항목이 생성됩니다. IdM에 호스트를 추가하는 결과는 IdM에 존재하는 호스트의 상태입니다. Ansible의 멱등성으로 인해 Ansible을 사용하여 IdM에 호스트를 추가하려면 호스트의 상태를 present: present로 정의하는 플레이북을 생성해야 합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 확인하려는 IdM에 있는 호스트의 FQDN( 정규화된 도메인 이름 )을 사용하여 Ansible 플레이북 파일을 생성합니다. 또한 IdM 서버가 DNS를 관리하도록 구성되어 호스트의 IP 주소를 알고 있는 경우 ip_address 매개변수 값을 지정합니다. 호스트가 DNS 리소스 레코드에 존재하는 데 IP 주소가 필요합니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/host/host-present.yml 파일에서 예제를 복사하고 수정할 수 있습니다. 다른 추가 정보를 포함할 수도 있습니다.

    ---
    - name: Host present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure host01.idm.example.com is present
        freeipa.ansible_freeipa.ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host01.idm.example.com
          description: Example host
          ip_address: 192.168.0.123
          locality: Lab
          ns_host_location: Lab
          ns_os_version: CentOS 7
          ns_hardware_platform: Lenovo T61
          mac_address:
          - "08:00:27:E3:B1:2D"
          - "52:54:00:BD:97:1E"
          state: present
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-is-present.yml
참고

이 절차에서는 IdM LDAP 서버에 호스트 항목이 생성되지만 IdM Kerberos 영역에 호스트를 등록하지 않습니다. 이를 위해 IdM 클라이언트로 호스트를 배포해야 합니다. 자세한 내용은 Ansible 플레이북을 사용하여 Identity Management 클라이언트 설치를 참조하십시오.

검증

  1. IdM 서버에 admin으로 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
  2. ipa host-show 명령을 입력하고 호스트 이름을 지정합니다.

    $ ipa host-show host01.idm.example.com
      Host name: host01.idm.example.com
      Description: Example host
      Locality: Lab
      Location: Lab
      Platform: Lenovo T61
      Operating system: CentOS 7
      Principal name: host/host01.idm.example.com@IDM.EXAMPLE.COM
      Principal alias: host/host01.idm.example.com@IDM.EXAMPLE.COM
      MAC address: 08:00:27:E3:B1:2D, 52:54:00:BD:97:1E
      Password: False
      Keytab: False
      Managed by: host01.idm.example.com

출력은 host01.idm.example.com 이 IdM에 있음을 확인합니다.

freeipa.ansible_freeipa.ipahost 모듈을 사용하면 시스템 관리자가 하나의 Ansible 작업을 사용하여 IdM에 여러 호스트 항목이 있는지 확인할 수 있습니다. FQDN( 정규화된 도메인 이름 )에서만 정의한 여러 호스트 항목이 있는지 확인하려면 다음 절차를 따르십시오. Ansible 플레이북을 실행하면 호스트에 대한 임의의 암호가 생성됩니다.

참고

Ansible이 없으면 ipa host-add 명령을 사용하여 IdM에 호스트 항목이 생성됩니다. IdM에 호스트를 추가하는 결과는 IdM에 존재하는 호스트의 상태입니다. Ansible의 멱등성으로 인해 Ansible을 사용하여 IdM에 호스트를 추가하려면 호스트의 상태를 present: present로 정의하는 플레이북을 생성해야 합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 확인하려는 IdM에 있는 호스트의 FQDN( 정규화된 도메인 이름 )을 사용하여 Ansible 플레이북 파일을 생성합니다. 호스트가 IdM에 이미 존재하고 update_passwordon_create 로 제한되는 경우에도 Ansible 플레이북에서 각 호스트에 대한 임의의 암호를 생성하려면 random: trueforce: true 옵션을 추가합니다. 이 단계를 단순화하려면 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/README-host.md Markdown 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Ensure hosts with random password
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Hosts host01.idm.example.com and host02.idm.example.com present with random passwords
        freeipa.ansible_freeipa.ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          hosts:
          - name: host01.idm.example.com
            random: true
            force: true
          - name: host02.idm.example.com
            random: true
            force: true
        register: ipahost
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-are-present.yml
    [...]
    TASK [Hosts host01.idm.example.com and host02.idm.example.com present with random passwords]
    changed: [server.idm.example.com] => {"changed": true, "host": {"host01.idm.example.com": {"randompassword": "0HoIRvjUdH0Ycbf6uYdWTxH"}, "host02.idm.example.com": {"randompassword": "5VdLgrf3wvojmACdHC3uA3s"}}}
참고

임의의 일회성 암호(OTP)를 사용하여 호스트를 IdM 클라이언트로 배포하려면 Ansible 플레이북을 사용하여 IdM 클라이언트 등록 또는 일회성 암호를 사용하여 클라이언트 설치 옵션을 참조하십시오.

검증

  1. IdM 서버에 admin으로 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
  2. ipa host-show 명령을 입력하고 호스트 중 하나의 이름을 지정합니다.

    $ ipa host-show host01.idm.example.com
      Host name: host01.idm.example.com
      Password: True
      Keytab: False
      Managed by: host01.idm.example.com

출력은 임의의 암호를 사용하여 IdM에 host01.idm.example.com 이 있는지 확인합니다.

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)에 호스트 항목이 있는지 확인하려면 다음 절차를 따르십시오. 호스트 항목은 FQDN( 정규화된 도메인 이름 ) 및 여러 IP 주소로 정의됩니다.

참고

ipa 호스트 유틸리티와 달리 Ansible freeipa.ansible_freeipa.ipahost 모듈은 호스트의 여러 IPv4 및 IPv6 주소가 있는지 확인할 수 있습니다. ipa host-mod 명령은 IP 주소를 처리할 수 없습니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. Ansible 플레이북 파일을 생성합니다. 확인하려는 IdM에 있는 호스트의 FQDN( 정규화된 도메인 이름 )인 freeipa.ansible_freeipa.ipahost 변수의 이름으로 지정합니다. ip_address 구문을 사용하여 별도의 행에서 여러 IPv4 및 IPv6 ip_address 값을 각각 지정합니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/host/host-member-ipaddresses-present.yml 파일에서 예제를 복사하고 수정할 수 있습니다. 추가 정보를 포함할 수도 있습니다.

    ---
    - name: Host member IP addresses present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure host101.example.com IP addresses present
        freeipa.ansible_freeipa.ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host01.idm.example.com
          ip_address:
          - 192.168.0.123
          - fe80::20c:29ff:fe02:a1b3
          - 192.168.0.124
          - fe80::20c:29ff:fe02:a1b4
          force: true
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-with-multiple-IP-addreses-is-present.yml
참고

이 절차에서는 IdM LDAP 서버에 호스트 항목을 생성하지만 IdM Kerberos 영역에 호스트를 등록하지는 않습니다. 이를 위해 IdM 클라이언트로 호스트를 배포해야 합니다. 자세한 내용은 Ansible 플레이북을 사용하여 Identity Management 클라이언트 설치를 참조하십시오.

검증

  1. IdM 서버에 admin으로 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
  2. ipa host-show 명령을 입력하고 호스트 이름을 지정합니다.

    $ ipa host-show host01.idm.example.com
      Principal name: host/host01.idm.example.com@IDM.EXAMPLE.COM
      Principal alias: host/host01.idm.example.com@IDM.EXAMPLE.COM
      Password: False
      Keytab: False
      Managed by: host01.idm.example.com

    출력은 host01.idm.example.com 이 IdM에 있음을 확인합니다.

  3. 호스트의 여러 IP 주소가 IdM DNS 레코드에 존재하는지 확인하려면 ipa dnsrecord-show 명령을 입력하고 다음 정보를 지정합니다.

    • IdM 도메인의 이름
    • 호스트 이름

      $ ipa dnsrecord-show idm.example.com host01
      [...]
        Record name: host01
        A record: 192.168.0.123, 192.168.0.124
        AAAA record: fe80::20c:29ff:fe02:a1b3, fe80::20c:29ff:fe02:a1b4

    출력은 플레이북에 지정된 모든 IPv4 및 IPv6 주소가 host01.idm.example.com 호스트 항목과 올바르게 연결되어 있음을 확인합니다.

18.5. Ansible 플레이북을 사용하여 IdM 호스트 항목이 없는지 확인

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)에 호스트 항목이 없는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 확인하려는 IdM에서 없는 호스트의 FQDN( 정규화된 도메인 이름 )을 사용하여 Ansible 플레이북 파일을 생성합니다. IdM 도메인에 통합 DNS가 있는 경우 updatedns: true 옵션을 사용하여 DNS에서 호스트에 대한 모든 종류의 관련 레코드를 제거합니다.

    이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/host/delete-host.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Host absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Host host01.idm.example.com absent
        freeipa.ansible_freeipa.ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host01.idm.example.com
          updatedns: true
          state: absent
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-absent.yml
참고

절차는 다음과 같습니다.

  • IdM Kerberos 영역에 존재하지 않는 호스트입니다.
  • IdM LDAP 서버에 없는 호스트 항목입니다.

클라이언트 호스트 자체에서 SSSD(System Security Services Daemon)와 같은 시스템 서비스의 특정 IdM 구성을 제거하려면 클라이언트에서 ipa-client-install --uninstall 명령을 실행해야 합니다. 자세한 내용은 IdM 클라이언트 설치 제거를 참조하십시오.

검증

  1. admin으로 ipaserver 에 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. host01.idm.example.com 에 대한 정보를 표시합니다.

    $ ipa host-show host01.idm.example.com
    ipa: ERROR: host01.idm.example.com: host not found

출력은 호스트가 IdM에 없음을 확인합니다.

19장. Ansible 플레이북을 사용하여 호스트 그룹 관리

IdM( Identity Management)의 호스트 그룹과 관련하여 Ansible을 사용하여 IdM(Identity Management)의 호스트 그룹과 관련된 작업을 수행하려면 다음을 참조하십시오.

19.1. IdM의 호스트 그룹

IdM 호스트 그룹을 사용하여 중요한 관리 작업, 특히 액세스 제어를 중앙 집중화할 수 있습니다.

호스트 그룹 정의

호스트 그룹은 공통 액세스 제어 규칙 및 기타 특성을 사용하여 IdM 호스트 세트를 포함하는 엔터티입니다. 예를 들어 회사 부서, 물리적 위치 또는 액세스 제어 요구 사항에 따라 호스트 그룹을 정의할 수 있습니다.

IdM의 호스트 그룹에는 다음이 포함될 수 있습니다.

  • IdM 서버 및 클라이언트
  • 기타 IdM 호스트 그룹

기본적으로 생성된 호스트 그룹

기본적으로 IdM 서버는 모든 IdM 서버 호스트에 대한 호스트 그룹 ipaservers 를 생성합니다.

직접 및 간접 그룹 멤버

IdM의 그룹 속성은 직접 및 간접 멤버 모두에 적용됩니다. 호스트 그룹 B가 호스트 그룹 A의 멤버인 경우 호스트 그룹 B의 모든 멤버가 호스트 그룹 A의 간접 멤버로 간주됩니다.

19.2. Ansible 플레이북을 사용하여 IdM 호스트 그룹이 있는지 확인

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)에 databases 라는 호스트 그룹이 있는지 확인하려면 다음 절차를 따르십시오.

참고

Ansible이 없으면 ipa hostgroup-add 명령을 사용하여 IdM에 호스트 그룹 항목이 생성됩니다. IdM에 호스트 그룹을 추가한 결과는 IdM에 있는 호스트 그룹의 상태입니다. Ansible은 멱등성 때문에 Ansible을 사용하여 IdM에 호스트 그룹을 추가하려면 호스트 그룹의 상태를 현재 상태로 정의하는 플레이북을 생성해야 합니다. state: present.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 필요한 호스트 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다. 절차를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/user/ensure-hostgroup-is-present.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure host-group databases is present
      - freeipa.ansible_freeipa.ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          state: present

    플레이북에서 state: present 는 이미 존재하지 않는 한 IdM에 호스트 그룹을 추가하라는 요청을 나타냅니다.

  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hostgroup-is-present.yml

검증

  1. ipaserveradmin 으로 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 관리자에 Kerberos 티켓을 요청하십시오.

    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. 확인하려는 IdM에 있는 호스트 그룹에 대한 정보를 표시합니다.

    $ ipa hostgroup-show databases
      Host-group: databases

데이터베이스 호스트 그룹은 IdM에 있습니다.

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)의 호스트 그룹에 호스트가 있는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • Ansible 플레이북에서 참조하려는 호스트가 IdM에 있습니다. 자세한 내용은 Ansible 플레이북을 사용하여 IdM 호스트 항목이 있는지 를 참조하십시오.
  • Ansible 플레이북 파일에서 참조하는 호스트 그룹이 IdM에 추가되었습니다. 자세한 내용은 Ansible 플레이북을 사용하여 IdM 호스트 그룹의 존재 여부를 참조하십시오.

프로세스

  1. 필요한 호스트 정보를 사용하여 Ansible 플레이북 파일을 생성합니다.

    • freeipa.ansible_freeipa.ipahostgroup 모듈의 name 변수를 사용하여 호스트 그룹의 이름을 지정합니다.
    • freeipa.ansible_freeipa.ipa host group 모듈의 host 변수를 사용하여 호스트 이름을 지정합니다.

    절차를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-present-in-hostgroup.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure host-group databases is present
      - freeipa.ansible_freeipa.ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          host:
          - db.idm.example.com
          action: member

    이 플레이북은 db.idm.example.com 호스트를 databases 호스트 그룹에 추가합니다. action: member 행은 플레이북이 실행될 때 데이터베이스 그룹 자체를 추가하려고 시도하지 않음을 나타냅니다. 대신 db.idm.example.com데이터베이스에 추가하려고 하면 됩니다.

  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-present-in-hostgroup.yml

검증

  1. ipaserveradmin 으로 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 관리자에 Kerberos 티켓을 요청하십시오.

    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. 호스트 그룹에 대한 정보를 표시하여 호스트 그룹에 있는 호스트를 확인합니다.

    $ ipa hostgroup-show databases
      Host-group: databases
      Member hosts: db.idm.example.com

db.idm.example.com 호스트는 databases 호스트 그룹의 멤버로 존재합니다.

19.4. Ansible 플레이북을 사용하여 IdM 호스트 그룹 중첩

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management) 호스트 그룹에 중첩된 호스트 그룹이 있는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • Ansible 플레이북 파일에서 참조하는 호스트 그룹은 IdM에 있습니다. 자세한 내용은 Ansible 플레이북을 사용하여 IdM 호스트 그룹의 존재 여부를 참조하십시오.

프로세스

  1. 필요한 호스트 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다.

    • Ansible 플레이북에서 중첩된 호스트 그룹 A 가 호스트 그룹 B 에 있는지 확인하려면 name 변수를 사용하여 freeipa.ansible_freeipa.ipahostgroup 작업의 변수 중에서 지정합니다.
    • hostgroup 변수를 사용하여 중첩된 호스트 그룹 A 의 이름을 지정합니다.

    이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-present-in-hostgroup.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure hosts and hostgroups are present in existing databases hostgroup
      - freeipa.ansible_freeipa.ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          hostgroup:
          - mysql-server
          - oracle-server
          action: member

    이 Ansible Playbook은 databases 호스트 그룹에 myqsl-serveroracle-server 호스트 그룹이 있는지 확인합니다. action: member 행은 플레이북이 실행될 때 데이터베이스 그룹 자체를 IdM에 추가하려고 시도하지 않음을 나타냅니다.

  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-present-in-hostgroup.yml

검증

  1. ipaserveradmin 으로 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 관리자에 Kerberos 티켓을 요청하십시오.

    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. 중첩된 호스트 그룹이 있는 호스트 그룹에 대한 정보를 표시합니다.

    $ ipa hostgroup-show databases
      Host-group: databases
      Member hosts: db.idm.example.com
      Member host-groups: mysql-server, oracle-server

mysql-serveroracle-server 호스트 그룹이 databases 호스트 그룹에 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 IdM 호스트 및 호스트 그룹에 멤버 관리자가 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 멤버 관리자로 추가하는 호스트 또는 호스트 그룹의 이름과 관리할 호스트 그룹의 이름이 있어야 합니다.

프로세스

  1. 필요한 호스트 및 호스트 그룹 멤버 관리 정보로 Ansible 플레이북 파일을 생성합니다.

    ---
    
    - name: Playbook to handle host group membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure member manager user example_member is present for group_name
          freeipa.ansible_freeipa.ipahostgroup:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: group_name
            membermanager_user: example_member
    
      - name: Ensure member manager group project_admins is present for group_name
          freeipa.ansible_freeipa.ipahostgroup:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: group_name
            membermanager_group: project_admins
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-host-groups.yml

검증

ipa group-show 명령을 사용하여 group_name 그룹에 example_memberproject_admins 가 멤버 관리자로 포함되어 있는지 확인할 수 있습니다.

  1. 관리자로 ipaserver 에 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. testhostgroup 에 대한 정보 표시 :

    ipaserver]$ ipa hostgroup-show group_name
      Host-group: group_name
      Member hosts: server.idm.example.com
      Member host-groups: testhostgroup2
      Membership managed by groups: project_admins
      Membership managed by users: example_member

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)의 호스트 그룹에서 호스트가 없는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • Ansible 플레이북에서 참조하려는 호스트가 IdM에 있습니다. 자세한 내용은 Ansible 플레이북을 사용하여 IdM 호스트 항목이 있는지 를 참조하십시오.
  • Ansible 플레이북 파일에서 참조하는 호스트 그룹은 IdM에 있습니다. 자세한 내용은 Ansible 플레이북을 사용하여 IdM 호스트 그룹의 존재 여부를 참조하십시오.

프로세스

  1. 필요한 호스트 및 호스트 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다.

    • freeipa.ansible_freeipa.ipahostgroup 모듈의 name 변수를 사용하여 호스트 그룹의 이름을 지정합니다.
    • freeipa.ansible_freeipa.ipahostgroup 모듈의 호스트 변수를 사용하도록 호스트 그룹에 없는 호스트의 이름을 지정합니다.

    절차를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-absent-in-hostgroup.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure host-group databases is absent
      - freeipa.ansible_freeipa.ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          host:
          - db.idm.example.com
          action: member
          state: absent

    이 Playbook은 databases 호스트 그룹에서 db.idm.example.com 호스트가 없음을 확인합니다. action: member 행은 플레이북이 실행될 때 데이터베이스 그룹 자체를 제거하려고 시도하지 않음을 나타냅니다.

  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-absent-in-hostgroup.yml

검증

  1. ipaserveradmin 으로 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 관리자에 Kerberos 티켓을 요청하십시오.

    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. 호스트 그룹 및 포함된 호스트에 대한 정보를 표시합니다.

    $ ipa hostgroup-show databases
      Host-group: databases
      Member host-groups: mysql-server, oracle-server

db.idm.example.com 호스트는 databases 호스트 그룹에 존재하지 않습니다.

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)의 외부 호스트 그룹에서 중첩된 호스트 그룹이 없는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • Ansible 플레이북 파일에서 참조하는 호스트 그룹은 IdM에 있습니다. 자세한 내용은 Ansible 플레이북을 사용하여 IdM 호스트 그룹의 존재 여부를 참조하십시오.

프로세스

  1. 필요한 호스트 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다.

    • name 변수를 사용하여 freeipa.ansible_freeipa.ipahostgroup 변수 중에서 외부 호스트 그룹의 이름을 지정합니다.
    • hostgroup 변수를 사용하여 중첩된 호스트 그룹의 이름을 지정합니다.

    이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-absent-in-hostgroup.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure hosts and hostgroups are absent in existing databases hostgroup
      - freeipa.ansible_freeipa.ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          hostgroup:
          - mysql-server
          - oracle-server
          action: member
          state: absent

    이 플레이북은 mysql-serverOracle-server 호스트 그룹이 databases 호스트 그룹에 없는지 확인합니다. action: member 행은 플레이북이 실행될 때 데이터베이스 그룹 자체가 IdM에서 삭제되었는지 확인하기 위한 시도가 이루어지지 않음을 나타냅니다.

  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-absent-in-hostgroup.yml

검증

  1. admin으로 ipaserver 에 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. admin에 Kerberos 티켓을 요청합니다.

    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. 중첩된 호스트 그룹이 없어야 하는 호스트 그룹에 대한 정보를 표시합니다.

    $ ipa hostgroup-show databases
      Host-group: databases

출력은 mysql-serverOracle-server 중첩된 호스트 그룹이 외부 데이터베이스 호스트 그룹에서 없음을 확인합니다.

19.8. Ansible 플레이북을 사용하여 IdM 호스트 그룹이 없는지 확인

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)에 호스트 그룹이 없는지 확인하려면 다음 절차를 따르십시오.

참고

Ansible이 없으면 ipa hostgroup-del 명령을 사용하여 IdM에서 호스트 그룹 항목이 제거됩니다. IdM에서 호스트 그룹을 제거하는 결과는 IdM에 없는 호스트 그룹의 상태입니다. Ansible은 idempotence에 따라 Ansible을 사용하여 IdM에서 호스트 그룹을 제거하려면 호스트 그룹의 상태를 absent: state: absent 로 정의하는 플레이북을 생성해야 합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 필요한 호스트 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/user/ensure-hostgroup-is-absent.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Playbook to handle hostgroups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - Ensure host-group databases is absent
        freeipa.ansible_freeipa.ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          state: absent

    이 Playbook은 IdM에서 데이터베이스 호스트 그룹이 없는지 확인합니다. state: absent 는 이미 삭제되지 않는 한 IdM에서 호스트 그룹을 삭제하라는 요청을 의미합니다.

  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hostgroup-is-absent.yml

검증

  1. ipaserveradmin 으로 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 관리자에 Kerberos 티켓을 요청하십시오.

    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. 보장이 없는 호스트 그룹에 대한 정보를 표시합니다.

    $ ipa hostgroup-show databases
    ipa: ERROR: databases: host group not found

데이터베이스 호스트 그룹은 IdM에 존재하지 않습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 IdM 호스트 및 호스트 그룹에 멤버 관리자가 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 멤버 관리자로 제거 중인 사용자 또는 사용자 그룹의 이름과 관리 중인 호스트 그룹의 이름이 있어야 합니다.

프로세스

  1. 필요한 호스트 및 호스트 그룹 멤버 관리 정보로 Ansible 플레이북 파일을 생성합니다.

    ---
    
    - name: Playbook to handle host group membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure member manager host and host group members are absent for group_name
        freeipa.ansible_freeipa.ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_name
          membermanager_user: example_member
          membermanager_group: project_admins
          action: member
          state: absent
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-host-groups-are-absent.yml

검증

ipa group-show 명령을 사용하여 group_name 그룹에 멤버 관리자로 example_member 또는 project_admins 가 포함되어 있지 않은지 확인할 수 있습니다.

  1. 관리자로 ipaserver 에 로그인합니다.

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. testhostgroup 에 대한 정보 표시 :

    ipaserver]$ ipa hostgroup-show group_name
      Host-group: group_name
      Member hosts: server.idm.example.com
      Member host-groups: testhostgroup2

20장. Ansible 플레이북을 사용하여 IdM 암호 정책 정의

이 장에서는 RHEL IdM(Identity Management) 암호 정책과 Ansible 플레이북을 사용하여 IdM에 새 암호 정책을 추가하는 방법을 설명합니다.

20.1. 암호 정책이란?

암호 정책은 암호가 충족되어야 하는 규칙 집합입니다. 예를 들어 암호 정책은 최소 암호 길이와 최대 암호 수명을 정의할 수 있습니다. 이 정책의 영향을 받는 모든 사용자는 충분히 긴 암호를 설정하고 지정된 조건을 충족시키기에 충분히 자주 변경해야 합니다. 이러한 방식으로 암호 정책은 사용자 암호를 검색하고 잘못 사용할 위험을 줄이는 데 도움이 됩니다.

20.2. IdM의 암호 정책

암호는 RHEL IdM(Identity Management) 사용자가 IdM Kerberos 도메인에 인증하는 가장 일반적인 방법입니다. 암호 정책은 IdM 사용자 암호가 충족해야 하는 요구 사항을 정의합니다.

참고

IdM 암호 정책은 기본 LDAP 디렉터리에 설정되지만 Kerberos KMS(Key Distribution Center)는 암호 정책을 적용합니다.

암호 정책 속성에 는 IdM에서 암호 정책을 정의하는 데 사용할 수 있는 속성이 나열됩니다.

Expand
표 20.1. 암호 정책 속성
속성설명

최대 라이프 사이클

사용자가 암호를 재설정하기 전에 유효한 최대 기간(일)입니다. 기본값은 90일입니다.

속성이 0으로 설정되면 암호가 만료되지 않습니다.

최대 수명 = 180

사용자 암호는 180일 동안만 유효합니다. 그 후 IdM은 사용자에게 변경하라는 메시지를 표시합니다.

최소 라이프 사이클

두 개의 암호 변경 작업 사이에 경과해야 하는 최소 시간(시간)입니다.

최소 수명 = 1

사용자가 암호를 변경한 후에는 암호를 다시 변경하기 전에 1시간 이상 기다려야 합니다.

기록 크기

저장된 이전 암호 수입니다. 사용자는 암호 기록에서 암호를 재사용할 수 없지만 저장되지 않은 이전 암호를 재사용할 수 있습니다.

기록 크기 = 0

이 경우 암호 기록이 비어 있으며 사용자는 이전 암호를 재사용할 수 있습니다.

문자 클래스

사용자가 암호에 사용해야 하는 다양한 문자 클래스 수입니다. 문자 클래스는 다음과 같습니다.

* 대문자

* 소문자

* 숫자

* 쉼표(,), 마침표(.), 별표(*)와 같은 특수 문자

* 다른 UTF-8 문자

행에 세 번 문자를 사용하면 문자 클래스가 하나씩 줄어듭니다. 예를 들면 다음과 같습니다.

* Secret1 에는 대문자, 소문자, 숫자 3자 클래스가 있습니다.

* Secret111 에는 대문자, 소문자, 숫자, 1 을 반복적으로 사용하기 위한 2자 클래스가 있습니다.

문자 클래스 = 0

기본 클래스 수는 0입니다. 번호를 구성하려면 --minclasses 옵션을 사용하여 ipa pwpolicy-mod 명령을 실행합니다.

이 표 아래의 중요한 참고 사항 도 참조하십시오.

최소 길이

암호의 최소 문자 수입니다.

추가 암호 정책 옵션이 설정되어 있으면 최소 암호 길이는 6자입니다.

최소 길이 = 8

사용자는 8자 미만의 암호를 사용할 수 없습니다.

최대 실패 수

IdM이 사용자 계정을 잠그기 전에 실패한 최대 로그인 시도 횟수입니다.

최대 실패 = 6

사용자가 행에 7번 잘못된 암호를 입력하면 IdM에서 사용자 계정을 잠급니다.

실패 재설정 간격

IdM이 현재 실패한 로그인 시도 횟수를 재설정한 후 시간(초)입니다.

실패 재설정 간격 = 60

사용자가 Max 실패에 정의된 실패한 로그인 시도 횟수 후 1분 이상 대기하면 사용자는 사용자 계정 잠금 위험을 감수하지 않고 다시 로그인할 수 있습니다.

Lockout 기간

최대 실패에 정의된 로그인 시도 실패 횟수 후에 사용자 계정이 잠긴 시간(초)입니다.

Lockout 기간 = 600

계정이 잠긴 사용자는 10분 동안 로그인할 수 없습니다.

중요

국제 문자 및 기호에 액세스할 수 없는 다양한 하드웨어 세트가 있는 경우 문자 클래스 요구 사항에 대한 영어 알파벳 및 일반 기호를 사용합니다. 암호의 문자 클래스 정책에 대한 자세한 내용은 Red Hat 지식베이스 솔루션에서 암호에서 유효한 문자를 참조하십시오.

20.3. IdM의 암호 정책 우선순위

암호 정책을 사용하면 사용자 암호를 검색하고 잘못 사용할 위험이 줄어듭니다. 기본 암호 정책은 글로벌 암호 정책입니다. 추가 그룹 암호 정책을 생성할 수도 있습니다. 글로벌 정책 규칙은 그룹 암호 정책이 없는 모든 사용자에게 적용됩니다. 그룹 암호 정책은 해당 사용자 그룹의 모든 멤버에게 적용됩니다.

모든 사용자에 대해 한 번에 하나의 암호 정책만 적용할 수 있습니다. 사용자에게 여러 암호 정책이 할당된 경우 다음 규칙에 따라 해당 정책 중 하나가 우선합니다.

  • 모든 그룹 암호 정책에는 우선순위가 설정되어 있습니다. 값이 낮을수록 정책의 우선 순위가 높습니다. 지원되는 가장 낮은 값은 0 입니다.
  • 여러 암호 정책을 사용자에게 적용할 수 있는 경우 우선순위가 가장 낮은 정책이 우선합니다. 다른 정책에 정의된 모든 규칙은 무시됩니다.
  • 우선순위가 가장 낮은 암호 정책은 정책에 정의되지 않은 속성도 모든 암호 정책 속성에 적용됩니다.

글로벌 암호 정책에 우선순위 값이 설정되어 있지 않습니다. 사용자에 대해 그룹 정책이 설정되지 않은 경우 대체 정책 역할을 합니다. 글로벌 정책은 그룹 정책보다 우선할 수 없습니다.

참고

ipa pwpolicy-show --user=user_name 명령은 특정 사용자에게 현재 적용되는 정책을 보여줍니다.

20.4. Ansible 플레이북을 사용하여 IdM에 암호 정책이 있는지 확인

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)에 암호 정책이 있는지 확인하려면 다음 절차를 따르십시오.

IdM의 기본 global_policy 암호 정책에서 암호의 다른 문자 클래스 수는 0으로 설정됩니다. 또한 기록 크기는 0으로 설정됩니다.

Ansible 플레이북을 사용하여 IdM 그룹에 대해 더 강력한 암호 정책을 적용하려면 다음 절차를 완료합니다.

참고

IdM 그룹에 대한 암호 정책만 정의할 수 있습니다. 개별 사용자의 암호 정책을 정의할 수 없습니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • IdM에 암호 정책이 있는지 확인하는 그룹이 있습니다.

프로세스

  1. 확인하려는 암호 정책을 정의하는 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하려면 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/pwpolicy/pwpolicy_present.yml 파일에서 예제를 복사하여 수정합니다.

    ---
    - name: Tests
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure presence of pwpolicy for group ops
        freeipa.ansible_freeipa.ipapwpolicy:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          minlife: 7
          maxlife: 49
          history: 5
          priority: 1
          lockouttime: 300
          minlength: 8
          minclasses: 4
          maxfail: 3
          failinterval: 5

    개별 변수의 의미에 대한 자세한 내용은 암호 정책 특성을 참조하십시오.

  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/new_pwpolicy_present.yml

Ansible 플레이북을 사용하여 ops 그룹의 암호 정책이 IdM에 있는지 확인합니다.

중요

ops 암호 정책의 우선순위는 1 로 설정되어 있지만 global_policy 암호 정책에는 우선순위가 설정되지 않습니다. 이러한 이유로 ops 정책은 ops 그룹에 대해 global_policy 를 자동으로 대체하며 즉시 적용됩니다.

global_policy 는 사용자에 대해 그룹 정책이 설정되지 않은 경우 폴백 정책 역할을 하며 그룹 정책보다 우선할 수 없습니다.

20.5. Ansible 플레이북을 사용하여 IdM 그룹에 추가 암호 정책 옵션 적용

Ansible 플레이북을 사용하여 추가 암호 정책 옵션을 적용하여 특정 IdM 그룹의 암호 정책 요구 사항을 강화할 수 있습니다. 이 목적을 위해 maxrepeat,maxsequence,dictcheck사용자 확인 암호 정책 옵션을 사용할 수 있습니다. 이 예제에서는 managers 그룹에 대해 다음 요구 사항을 설정하는 방법을 설명합니다.

  • 사용자의 새 암호에는 사용자의 각 사용자 이름이 포함되지 않습니다.
  • 암호에는 연속 두 개의 동일한 문자가 포함되어 있지 않습니다.
  • 암호의 단조 문자 시퀀스는 3자를 초과할 수 없습니다. 즉, 시스템은 1234 또는 abcd 와 같은 시퀀스가 있는 암호를 허용하지 않습니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • IdM에 암호 정책이 있는지 확인하는 그룹이 있습니다.

프로세스

  1. 확인하려는 암호 정책을 정의하는 Ansible 플레이북 파일 manager_pwpolicy_present.yml 을 생성합니다. 이 단계를 단순화하려면 다음 예제를 복사하고 수정합니다.

    ---
    - name: Tests
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure presence of usercheck and maxrepeat pwpolicy for group managers
        freeipa.ansible_freeipa.ipapwpolicy:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: managers
          usercheck: True
          maxrepeat: 2
          maxsequence: 3
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/manager_pwpolicy_present.yml

검증

  1. test_user 라는 테스트 사용자를 추가합니다.

    $ ipa user-add test_user
    First name: test
    Last name: user
    ----------------------------
    Added user "test_user"
    ----------------------------
  2. managers 그룹에 test 사용자를 추가합니다.

    1. IdM 웹 UI에서 ID 그룹 사용자 그룹을 클릭합니다.
    2. 관리자를 클릭합니다.
    3. 추가 를 클릭합니다.
    4. 사용자 그룹 'managers' 페이지에 사용자 추가 에서 test_user 를 확인합니다.
    5. &gt ; 화살표를 클릭하여 사용자를 Prospective 열로 이동합니다.
    6. 추가 를 클릭합니다.
  3. test 사용자의 암호를 재설정합니다.

    1. ID이동합니다.
    2. Click test_user.
    3. 작업 메뉴에서 암호 재설정 을 클릭합니다.
    4. 사용자의 임시 암호를 입력합니다.
  4. 명령줄에서 test_user 에 대한 Kerberos 티켓(TGT)을 가져옵니다.

    $ kinit test_user
    1. 임시 암호를 입력합니다.
    2. 시스템은 암호를 변경해야 함을 알려줍니다. 사용자 이름이 test_user 인 암호를 입력합니다.

      Password expired. You must change it now.
      Enter new password:
      Enter it again:
      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      참고

      Kerberos에는 세분화된 오류 암호 정책 보고가 없으며 경우에 따라 암호가 거부된 명확한 이유를 제공하지 않습니다.

    3. 시스템은 입력한 암호가 거부되었음을 알려줍니다. 연속으로 세 개 이상의 동일한 문자가 포함된 암호를 입력합니다.

      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
    4. 시스템은 입력한 암호가 거부되었음을 알려줍니다. 3자보다 긴 단조 문자 시퀀스를 포함하는 암호를 입력합니다. 이러한 시퀀스의 예는 1234fedc 를 포함합니다.

      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
    5. 시스템은 입력한 암호가 거부되었음을 알려줍니다. managers 암호 정책의 기준을 충족하는 암호를 입력합니다.

      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
  5. 유효한 암호를 입력한 후에만 가능한 TGT를 가져왔는지 확인합니다.

    $ klist
    Ticket cache: KCM:0:33945
    Default principal: test_user@IDM.EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    07/07/2021 12:44:44  07/08/2021 12:44:44  krbtgt@IDM.EXAMPLE.COM@IDM.EXAMPLE.COM

21장. Ansible 플레이북을 사용하여 sudo 액세스 관리

Ansible 플레이북을 사용하여 RHEL Identity Management에서 사용자의 sudo 액세스 관리에 대해 자세히 알아보십시오. RHEL Identity Management의 사용자에게 sudo 액세스 권한을 부여하는 방법에 대한 자세한 내용은 IdM 클라이언트의 IdM 사용자에게 sudo 액세스 권한 부여를 참조하십시오.

RHEL IdM(Identity Management)에서는 특정 IdM 호스트의 IdM 사용자 계정에 특정 명령에 대한 sudo 액세스 권한이 부여되었는지 확인할 수 있습니다.

idm_user_reboot 라는 sudo 규칙이 있는지 확인하려면 이 절차를 완료합니다. 이 규칙은 idmclient 시스템에서 /usr/sbin/reboot 명령을 실행할 수 있는 권한을 idm_user 에게 부여합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • IdM에 idm_user 사용자 계정이 있는지 확인하고 사용자의 암호를 생성하여 계정 잠금을 해제했습니다. 명령줄을 사용하여 새 IdM 사용자를 추가하는 방법에 대한 자세한 내용은 명령줄 을 사용하여 사용자 추가를 참조하십시오.
  • idmclient 에 로컬 idm_user 계정이 없습니다. idm_user 사용자는 idmclient/etc/passwd 파일에 나열되지 않습니다.

프로세스

  1. 하나 이상의 sudo 명령을 추가합니다.

    1. sudo 명령의 IdM 데이터베이스에 /usr/sbin/reboot 명령이 있는지 확인하는 ensure-reboot-sudocmd-is-present.yml Ansible 플레이북을 만듭니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/sudocmd/ensure-sudocmd-is-present.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

      ---
      - name: Playbook to manage sudo command
        hosts: ipaserver
      
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
        # Ensure sudo command is present
        - freeipa.ansible_freeipa.ipasudocmd:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: /usr/sbin/reboot
            state: present
    2. Playbook을 실행합니다.

      $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-reboot-sudocmd-is-present.yml
  2. 명령을 참조하는 sudo 규칙을 생성합니다.

    1. sudo 명령 항목을 사용하여 sudo 규칙이 있는지 확인하는 ensure-sudorule-for-idmuser-on-idmclient-is-present.yml Ansible 플레이북을 만듭니다. sudo 규칙을 사용하면 idm_useridmclient 시스템을 재부팅할 수 있습니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/sudorule/ensure-sudorule-is-present.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

      ---
      - name: Tests
        hosts: ipaserver
      
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
        # Ensure a sudorule is present granting idm_user the permission to run /usr/sbin/reboot on idmclient
        - freeipa.ansible_freeipa.ipasudorule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: idm_user_reboot
            description: A test sudo rule.
            allow_sudocmd: /usr/sbin/reboot
            host: idmclient.idm.example.com
            user: idm_user
            state: present
    2. Playbook을 실행합니다.

      $ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-sudorule-for-idmuser-on-idmclient-is-present.yml

검증

idm_usersudo 를 사용하여 idmclient 를 재부팅할 수 있는지 확인하여 IdM 서버에서 확인 중인 sudo 규칙이 idmclient 에서 작동하는지 테스트합니다. 서버 변경 사항을 클라이언트에 적용하는 데 몇 분이 걸릴 수 있습니다.

  1. idmclientidm_user 로 로그인합니다.
  2. sudo 를 사용하여 시스템을 재부팅합니다. 메시지가 표시되면 idm_user 의 암호를 입력합니다.

    $ sudo /usr/sbin/reboot
    [sudo] password for idm_user:

sudo 가 올바르게 구성된 경우 시스템이 재부팅됩니다.

21.2. 단일 Ansible 작업에서 여러 IdM sudo 규칙 관리

freeipa.ansible_freeipa.ipasudo collection 모듈에서 사용할 수 있는 sudo rules 옵션을 사용하면 단일 Ansible 작업에서 여러 IdM(Identity Management) sudo 규칙이 있는지 확인할 수 있습니다. 옵션을 사용하면 sudo 규칙을 더 쉽게 정의하고 더 효율적으로 실행할 수 있습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

이 예제에서는 다음을 가정합니다.

  • user01user02 사용자는 IdM에 있습니다.
  • usergroup01 사용자 그룹이 IdM에 있습니다.
  • hostgroup01hostgroup02 호스트 그룹이 IdM에 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 다음 콘텐츠를 사용하여 ensure-presence-of-sudorules-in-a-task.yml 파일을 생성합니다.

    ---
    - name: Playbook to handle sudorules
      hosts: ipaserver
      become: true
    
      tasks:
      # Ensure sudo command name: /usr/sbin/dmidecode is present
      - freeipa.ansible_freeipa.ipasudocmd:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: /usr/sbin/dmidecode
    
      # Ensure sudo command /usr/sbin/reboot is present
      - freeipa.ansible_freeipa.ipasudocmd:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: /usr/sbin/reboot
    
      # Ensure sudo command /usr/bin/yum is present
      - freeipa.ansible_freeipa.ipasudocmd:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: /usr/bin/yum
    
      # Ensure a sudo command group is present
      - freeipa.ansible_freeipa.ipasudocmdgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: sudogroup01
          sudocmd:
          - /usr/sbin/dmidecode
          - /usr/sbin/reboot
    
      - name: Ensure multiple sudo rules are present using batch mode
        freeipa.ansible_freeipa.ipasudorule:
          ipaadmin_password: "{{ ipaadmin_password }}"
          sudorules:
            - name: testrule01
              user:
                - user01
                - user02
              group:
                - usergroup01
              allow_sudocmd:
                - /usr/bin/yum
              allow_sudocmdgroup:
                - sudogroup01
            - name: testrule02
              hostgroup:
                - hostgroup01
                - hostgroup02
    참고
    sudo rules 옵션을 사용하여 특정 sudo 규칙에만 적용되는 여러 sudo 규칙 변수를 지정할 수 있습니다. 이 sudo 규칙은 sudorules 옵션에 대한 유일한 필수 변수인 name 변수로 정의됩니다. 이 예제에서는 사용자,그룹,allow_sudocmdallow_sudocmdgroup 변수가 testrule01 sudo 규칙에 적용됩니다.
  3. 파일을 저장합니다.
  4. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory ensure-presence-of-multiple-sudorules-in-a-task.yml

Ansible은 시스템 구성, 소프트웨어 배포 및 롤링 업데이트를 수행하는 데 사용되는 자동화 툴입니다. IdM(Identity Management) 지원이 포함됩니다.

IdM(Identity Management) 호스트 기반 액세스 정책과 Ansible 을 사용하여 정의하는 방법에 대해 자세히 알아보십시오.

22.1. IdM의 호스트 기반 액세스 제어 규칙

HBAC(Host-based Access Control) 규칙은 서비스 그룹의 서비스 또는 서비스를 사용하여 어떤 호스트 또는 호스트 그룹에 액세스할 수 있는 사용자 또는 사용자 그룹을 정의합니다. 시스템 관리자는 HBAC 규칙을 사용하여 다음과 같은 목표를 달성할 수 있습니다.

  • 도메인의 지정된 시스템에 대한 액세스를 특정 사용자 그룹의 멤버로 제한합니다.
  • 도메인의 시스템에 액세스하는 데 특정 서비스만 사용할 수 있도록 허용합니다.

기본적으로 IdM은 allow_all 이라는 기본 HBAC 규칙으로 구성됩니다. 즉, 전체 IdM 도메인의 모든 관련 서비스를 통해 모든 사용자의 모든 호스트에 대한 범용 액세스가 가능합니다.

기본 allow_all 규칙을 자체 HBAC 규칙 세트로 교체하여 다른 호스트에 대한 액세스를 미세 조정할 수 있습니다. 중앙 집중식으로 간소화된 액세스 제어 관리를 위해 HBAC 규칙을 개별 사용자, 호스트 또는 서비스 대신 사용자 그룹, 호스트 그룹 또는 서비스 그룹에 적용할 수 있습니다.

22.2. Ansible 플레이북을 사용하여 IdM에 HBAC 규칙이 있는지 확인

Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)에 HBAC(호스트 기반 액세스 제어) 규칙이 있는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

프로세스

  1. 확인하려는 HBAC 정책을 정의하는 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/hbacrule/ensure-hbacrule-hbacrule-allhosts-present.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Playbook to handle hbacrules
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure idm_user can access client.idm.example.com via the sshd service
      - freeipa.ansible_freeipa.ipahbacrule:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: login
          user: idm_user
          host: client.idm.example.com
          hbacsvc:
          - sshd
          state: present
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-new-hbacrule-present.yml

검증

  1. IdM 웹 UI에 관리자로 로그인합니다.
  2. 정책호스트 기반 액세스 제어HBAC 테스트로 이동합니다.
  3. who 탭에서 idm_user를 선택합니다.
  4. 액세스 탭에서 client.idm.example.com 을 선택합니다.
  5. Via 서비스 탭에서 sshd 를 선택합니다.
  6. Rules 탭에서 login 을 선택합니다.
  7. Run test 탭에서 Run test 버튼을 클릭합니다. ACCESS GRANTED가 표시되면 HBAC 규칙이 성공적으로 구현됩니다.

23장. Ansible을 사용하여 IdM 인증서 관리

ansible-freeipa ipacert 모듈을 사용하여 RHEL IdM(Identity Management) 사용자, 호스트 및 서비스에 대한 SSL 인증서를 요청, 취소 및 검색할 수 있습니다. 보류 중인 인증서를 복원할 수도 있습니다.

ansible-freeipa freeipa.ansible_freeipa.ipacert 모듈을 사용하여 RHEL IdM(Identity Management) 사용자, 호스트 및 서비스에 대한 SSL 인증서를 요청할 수 있습니다. 그런 다음 이러한 인증서를 사용하여 IdM에 인증할 수 있습니다.

Ansible 플레이북을 사용하여 IdM 인증 기관(CA)에서 HTTP 서버의 인증서를 요청하려면 다음 절차를 완료합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • IdM 배포에 통합 CA가 있습니다.

프로세스

  1. 사용자, 호스트 또는 서비스에 대한 CSR(인증서 서명 요청)을 생성합니다. 예를 들어 openssl 유틸리티를 사용하여 client.idm.example.com에서 실행되는 HTTP 서비스에 대한 CSR을 생성하려면 다음을 입력합니다.

    # openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout new.key \
    -out new.csr -subj '/CN=client.idm.example.com,O=IDM.EXAMPLE.COM'

    결과적으로 CSR은 new.csr 에 저장됩니다.

  2. 다음 내용으로 Ansible 플레이북 파일 request-certificate.yml 을 생성합니다.

    ---
    - name: Playbook to request a certificate
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Request a certificate for a web server
        freeipa.ansible_freeipa.ipacert:
          ipaadmin_password: "{{ ipaadmin_password }}"
          state: requested
          csr: |
            -----BEGIN CERTIFICATE REQUEST-----
            MIGYMEwCAQAwGTEXMBUGA1UEAwwOZnJlZWlwYSBydWxlcyEwKjAFBgMrZXADIQBs
            HlqIr4b/XNK+K8QLJKIzfvuNK0buBhLz3LAzY7QDEqAAMAUGAytlcANBAF4oSCbA
            5aIPukCidnZJdr491G4LBE+URecYXsPknwYb+V+ONnf5ycZHyaFv+jkUBFGFeDgU
            SYaXm/gF8cDYjQI=
            -----END CERTIFICATE REQUEST-----
          principal: HTTP/client.idm.example.com
        register: cert

    인증서 요청을 new.csr 의 CSR으로 바꿉니다.

  3. 인증서를 요청합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/request-certificate.yml

ansible-freeipa freeipa.ansible_freeipa.ipacert 모듈을 사용하여 IdM에 인증하는 RHEL IdM(Identity Management) 사용자, 호스트 및 서비스에서 사용하는 SSL 인증서를 취소할 수 있습니다.

Ansible 플레이북을 사용하여 HTTP 서버의 인증서를 취소하려면 다음 절차를 완료합니다. 인증서를 취소하는 이유는 "keyCompromise"입니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 예를 들어 openssl x509 -noout -text -in <path_to_certificate > 명령을 입력하여 인증서의 일련 번호를 가져왔습니다. 이 예에서 인증서의 일련 번호는 123456789입니다.
  • IdM 배포에 통합 CA가 있습니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 revoke-certificate.yml 을 생성합니다.

    ---
    - name: Playbook to revoke a certificate
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Revoke a certificate for a web server
        freeipa.ansible_freeipa.ipacert:
          ipaadmin_password: "{{ ipaadmin_password }}"
          serial_number: 123456789
          revocation_reason: "keyCompromise"
          state: revoked
  2. 인증서를 취소하십시오.

    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/revoke-certificate.yml

ansible-freeipa ipacert 모듈을 사용하여 이전에 RHEL IdM(Identity Management) 사용자, 호스트 또는 서비스에서 IdM을 인증하는 취소된 SSL 인증서를 복원할 수 있습니다.

참고

보류 중인 인증서만 복원할 수 있습니다. 예를 들어 개인 키가 손실되었는지 확실하지 않았기 때문에 보류 중일 수 있습니다. 그러나 이제 키를 복구했으며 그동안 아무나 액세스하지 않았으므로 인증서를 다시 사용하려고 합니다.

Ansible 플레이북을 사용하여 IdM에 등록된 서비스의 인증서를 해제하려면 다음 절차를 완료합니다. 이 예에서는 HTTP 서비스의 인증서를 보류에서 해제하는 방법을 설명합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • IdM 배포에 통합 CA가 있습니다.
  • 예를 들어 openssl x509 -noout -text -in path/to/certificate 명령을 입력하여 인증서의 일련 번호를 가져왔습니다. 이 예에서 인증서 일련 번호는 123456789 입니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 restore-certificate.yml 을 생성합니다.

    ---
    - name: Playbook to restore a certificate
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Restore a certificate for a web service
        ipacert:
          ipaadmin_password: "{{ ipaadmin_password }}"
          serial_number: 123456789
          state: released
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/restore-certificate.yml

ansible-freeipa freeipa.ansible_freeipa.ipacert 모듈을 사용하여 RHEL IdM(Identity Management) 사용자, 호스트 또는 서비스에 대해 발행된 SSL 인증서를 검색하고 관리 노드의 파일에 저장할 수 있습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 예를 들어 openssl x509 -noout -text -in <path_to_certificate > 명령을 입력하여 인증서의 일련 번호를 가져왔습니다. 이 예에서 인증서의 일련 번호는 123456789이고 검색된 인증서를 저장하는 파일은 cert.pem 입니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 retrieve-certificate.yml 을 생성합니다.

    ---
    - name: Playbook to retrieve a certificate and store it locally on the managed node
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Retrieve a certificate and save it to file 'cert.pem'
        freeipa.ansible_freeipa.ipacert:
          ipaadmin_password: "{{ ipaadmin_password }}"
          serial_number: 123456789
          certificate_out: cert.pem
          state: retrieved
  2. 인증서를 검색합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/retrieve-certificate.yml

24장. IdM의 자격 증명 모음

RHEL IdM(Identity Management)의 자격 증명 모음에 대해 자세히 알아보십시오.

24.1. 자격 증명 모음 및 해당 이점

RHEL IdM(Identity Management) 자격 증명 모음을 사용하여 중요한 모든 데이터를 안전하게 저장하지만 한 곳에서 편리하게 저장할 수 있습니다.

자격 증명 모음은 시크릿을 저장, 검색, 공유 및 복구하기 위한 IdM의 보안 위치입니다. 보안은 보안에 민감한 데이터(일반적으로 인증 자격 증명)이며 제한된 사용자 또는 엔티티 그룹만 액세스할 수 있습니다. 예를 들어 시크릿에는 다음이 포함됩니다.

  • 암호
  • Pins
  • 개인 SSH 키

자격 증명 모음은 암호 관리자와 비교할 수 있습니다. 암호 관리자와 마찬가지로 자격 증명 모음에는 일반적으로 사용자가 하나의 기본 암호를 생성하고 기억하여 자격 증명 모음에 저장된 모든 정보의 잠금을 해제하고 액세스해야 합니다. 그러나 사용자는 표준 자격 증명 모음을 사용하도록 결정할 수도 있습니다. 표준 자격 증명 모음은 사용자가 자격 증명 모음에 저장된 시크릿에 액세스하기 위해 암호를 입력할 필요가 없습니다.

참고

IdM의 자격 증명 모음은 IdM 관련 외부 서비스에 인증할 수 있는 인증 정보를 저장하는 것입니다.

IdM 자격 증명 모음은 다음과 같은 특징이 있습니다.

  • 자격 증명 모음 소유자는 vault 소유자와 vault 소유자가 Vault 멤버로 선택하는 IdM 사용자만 액세스할 수 있습니다. 또한 IdM 관리자는 모든 자격 증명 모음에 액세스할 수 있습니다.
  • 사용자에게 자격 증명 모음을 생성할 수 있는 충분한 권한이 없는 경우 IdM 관리자는 자격 증명 모음을 생성하고 사용자를 소유자로 설정할 수 있습니다.
  • 사용자 및 서비스는 IdM 도메인에 등록된 모든 시스템에서 자격 증명 모음에 저장된 보안에 액세스할 수 있습니다.
  • 하나의 자격 증명 모음은 하나의 시크릿(예: 하나의 파일)만 포함할 수 있습니다. 그러나 파일 자체는 암호, 키탭 또는 인증서와 같은 여러 시크릿을 포함할 수 있습니다.
참고

Vault는 IdM 웹 UI가 아닌 IdM CLI(명령줄)에서만 사용할 수 있습니다.

24.2. Vault 소유자, 멤버 및 관리자

RHEL IdM(Identity Management)은 다음과 같은 vault 사용자 유형을 구분합니다.

Vault 소유자

자격 증명 모음 소유자는 자격 증명 모음에 대한 기본 관리 권한이 있는 사용자 또는 서비스입니다. 예를 들어 자격 증명 모음 소유자는 자격 증명 모음의 속성을 수정하거나 새 vault 멤버를 추가할 수 있습니다.

각 자격 증명 모음에는 하나 이상의 소유자가 있어야 합니다. 자격 증명 모음에는 여러 소유자가 있을 수도 있습니다.

Vault 멤버
vault 멤버는 다른 사용자 또는 서비스에서 생성한 자격 증명 모음에 액세스할 수 있는 사용자 또는 서비스입니다.
Vault 관리자

Vault 관리자는 모든 자격 증명 모음에 대한 무제한 액세스 권한이 있으며 모든 vault 작업을 수행할 수 있습니다. IdM 역할 기반 액세스 제어(RBAC)의 컨텍스트에서 자격 증명 모음 관리자는 Vault 관리자 권한이 있는 IdM 사용자입니다.

참고

대칭 및 비대칭 자격 증명 모음은 암호 또는 키로 보호됩니다. 관리자가 다음을 수행하려면 특수 액세스 제어 규칙이 적용됩니다.

  • 대칭 및 비대칭 자격 증명 모음의 시크릿에 액세스합니다.
  • vault 암호 또는 키를 변경하거나 재설정합니다.
Vault 사용자

vault 사용자는 자격 증명 모음이 있는 컨테이너가 있는 사용자를 나타냅니다. Vault 사용자 정보는 ipa vault-show:과 같은 특정 명령의 출력에 표시됩니다.

$ ipa vault-show my_vault
  Vault name: my_vault
  Type: standard
  Owner users: user
  Vault user: user

vault 컨테이너 및 사용자 자격 증명 모음에 대한 자세한 내용은 Vault 컨테이너를 참조하십시오.

24.3. 표준, 대칭 및 비대칭 자격 증명 모음

보안 및 액세스 제어 수준에 따라 IdM은 자격 증명 모음을 다음 유형으로 분류합니다.

표준 자격 증명 모음
Vault 소유자 및 vault 멤버는 암호 또는 키를 사용하지 않고도 자격 증명 모음 내부에서 시크릿을 보관하고 검색할 수 있습니다.
대칭 자격 증명 모음
자격 증명 모음의 시크릿은 대칭 키로 보호됩니다. Vault 소유자와 멤버는 시크릿을 보관하고 검색할 수 있지만 vault 암호를 제공해야 합니다.
비대칭 자격 증명 모음
자격 증명 모음의 시크릿은 비대칭 키로 보호됩니다. 사용자는 공개 키를 사용하여 시크릿을 보관하고 개인 키를 사용하여 검색합니다. Vault 소유자는 시크릿을 보관하고 검색할 수 있습니다. Vault 멤버는 시크릿만 보관할 수 있습니다.

24.4. 사용자, 서비스 및 공유 자격 증명 모음

소유권을 기반으로 IdM은 자격 증명 모음을 여러 유형으로 분류합니다. 아래 표에 는 각 유형, 소유자 및 사용에 대한 정보가 포함되어 있습니다.

Expand
표 24.1. 소유권을 기반으로 하는 IdM 자격 증명 모음
유형설명소유자참고

사용자 자격 증명 모음

사용자의 개인 자격 증명 모음

단일 사용자

IdM 관리자가 허용하는 경우 모든 사용자가 하나 이상의 사용자 자격 증명 모음을 보유할 수 있습니다.

서비스 자격 증명 모음

서비스의 개인 자격 증명 모음

단일 서비스

IdM 관리자가 허용하는 경우 모든 서비스에서 하나 이상의 사용자 자격 증명 모음을 보유할 수 있습니다.

공유 자격 증명 모음

여러 사용자 및 서비스에서 공유하는 자격 증명 모음

자격 증명 모음을 생성한 자격 증명 모음 관리자

IdM 관리자가 허용하는 경우 사용자 및 서비스는 하나 이상의 사용자 자격 증명 모음을 소유할 수 있습니다. 자격 증명 모음을 생성한 자격 증명 모음 관리자는 자격 증명 모음에 대한 전체 액세스 권한도 있습니다.

24.5. Vault 컨테이너

자격 증명 모음 컨테이너는 자격 증명 모음의 컬렉션입니다. 아래 표에 는 RHEL IdM(Identity Management)에서 제공하는 기본 자격 증명 모음 컨테이너가 나열되어 있습니다.

Expand
표 24.2. IdM의 기본 자격 증명 모음 컨테이너
유형설명목적

사용자 컨테이너

사용자를 위한 개인 컨테이너

특정 사용자에 대한 사용자 자격 증명 모음 저장

서비스 컨테이너

서비스용 개인 컨테이너

특정 서비스에 대한 서비스 자격 증명 모음 저장

공유 컨테이너

여러 사용자 및 서비스를 위한 컨테이너

여러 사용자 또는 서비스에서 공유할 수 있는 자격 증명 모음 저장

사용자 또는 서비스에 대한 첫 번째 개인 자격 증명 모음이 생성되면 IdM은 각 사용자 또는 서비스에 대한 사용자 및 서비스 컨테이너를 자동으로 생성합니다. 사용자 또는 서비스가 삭제되면 IdM은 컨테이너와 해당 콘텐츠를 제거합니다.

24.6. 기본 IdM vault 명령

아래에 설명된 기본 명령을 사용하여 IdM(Identity Management) 자격 증명 모음을 관리할 수 있습니다. 아래 표에 는 용도에 대한 설명과 함께 ipa vault-* 명령 목록이 포함되어 있습니다.

참고

ipa vault-* 명령을 실행하기 전에 IdM 도메인의 서버 중 하나 이상에 KRA(Key Recovery Authority) 인증서 시스템 구성 요소를 설치합니다. 자세한 내용은 IdM에 키 복구 기관 설치를 참조하십시오.

Expand
표 24.3. 설명이 포함된 기본 IdM vault 명령
명령목적

IPA 도움말 vault

IdM 자격 증명 모음 및 샘플 자격 증명 모음 명령에 대한 개념 정보를 표시합니다.

ipa vault-add --help,ipa vault-find --help

특정 ipa vault-* 명령에 --help 옵션을 추가하면 해당 명령에 사용할 수 있는 옵션과 자세한 도움말이 표시됩니다.

ipa vault-show user_vault --user idm_user

vault 멤버로 사용자 vault에 액세스하는 경우 vault 소유자를 지정해야 합니다. vault 소유자를 지정하지 않으면 IdM에서 자격 증명 모음을 찾을 수 없음을 알립니다.

[admin@server ~]$ ipa vault-show user_vault
ipa: ERROR: user_vault: vault not found

ipa vault-show shared_vault --shared

공유 자격 증명 모음에 액세스할 때 액세스하려는 자격 증명 모음이 공유 자격 증명 모음임을 지정해야 합니다. 그러지 않으면 IdM에서 자격 증명 모음을 찾을 수 없음을 알려줍니다.

[admin@server ~]$ ipa vault-show shared_vault
ipa: ERROR: shared_vault: vault not found

24.7. IdM에 키 복구 기관 설치

특정 IdM 서버에 KRA(Key Recovery Authority) 인증 시스템(CS) 구성 요소를 설치하여 RHEL IdM(Identity Management)에서 자격 증명 모음을 활성화하려면 다음 절차를 따르십시오.

사전 요구 사항

  • IdM 서버에 root 로 로그인되어 있습니다.
  • IdM 인증 기관은 IdM 서버에 설치됩니다.
  • Directory Manager 자격 증명이 있습니다.

프로세스

  • KRA를 설치합니다.

    # ipa-kra-install
참고

vault 서비스의 가용성과 복원력을 높이려면 두 개의 IdM 서버에 KRA를 설치합니다. 여러 KRA 서버를 유지 관리하면 데이터 손실이 방지됩니다.

중요

숨겨진 복제본에 IdM 클러스터의 첫 번째 KRA를 설치할 수 있습니다. 그러나 KRA를 추가로 설치하려면 숨기지 않은 복제본에 KRA 복제본을 설치하기 전에 숨겨진 복제본을 일시적으로 활성화해야 합니다. 그런 다음 원래 숨겨진 복제본을 다시 숨길 수 있습니다.

이 장에서는 Ansible vault 모듈을 사용하여 RHEL IdM(Identity Management)에서 사용자 자격 증명 모음을 관리하는 방법을 설명합니다. 특히 IdM 사용자가 Ansible 플레이북을 사용하여 다음 세 가지 작업을 수행하는 방법을 설명합니다.

사용자는 저장 및 두 개의 다른 IdM 클라이언트에서 검색할 수 있습니다.

사전 요구 사항

  • KRA(Key Recovery Authority) 인증 시스템 구성 요소가 IdM 도메인의 하나 이상의 서버에 설치되었습니다. 자세한 내용은 IdM에 키 복구 기관 설치를 참조하십시오.

중요한 정보를 안전하게 저장하기 위해 Ansible 플레이북을 사용하여 하나 이상의 개인 자격 증명 모음 컨테이너를 생성하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예제에서 idm_user 사용자는 my_vault 라는 표준 유형의 자격 증명 모음을 생성합니다. 표준 자격 증명 모음 유형을 사용하면 파일에 액세스할 때 idm_user 가 인증할 필요가 없습니다. idm_user 는 사용자가 로그인한 IdM 클라이언트에서 파일을 검색할 수 있습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • idm_user 의 암호를 알고 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 컬렉션 디렉터리에서 ensure-standard-vault-is-present.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/ensure-standard-vault-is-present.yml ensure-standard-vault-is-present-copy.yml
  3. 편집을 위해 ensure-standard-vault-is-present-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipavault 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_principal 변수를 idm_user 로 설정합니다.
    • ipaadmin_password 변수를 idm_user 의 암호로 설정합니다.
    • 사용자 변수를 idm_user 로 설정합니다.
    • name 변수를 my_vault 로 설정합니다.
    • vault_type 변수를 standard 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      tasks:
      - freeipa.ansible_freeipa.ipavault:
          ipaadmin_principal: idm_user
          ipaadmin_password: idm_user_password
          user: idm_user
          name: my_vault
          vault_type: standard
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook -v -i inventory ensure-standard-vault-is-present-copy.yml

Ansible 플레이북을 사용하여 중요한 정보를 개인 자격 증명 모음에 저장하려면 다음 절차를 따르십시오. 사용된 예에서 idm_user 사용자는 my_vault 라는 자격 증명 모음에 password.txt 라는 중요한 정보가 있는 파일을 보관합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • idm_user 의 암호를 알고 있습니다.
  • idm_user 는 소유자이거나 최소한 my_vault 의 멤버 사용자입니다.
  • my_vault 에 보관하려는 시크릿인 password.txt 에 액세스할 수 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 data-archive-in-symmetric-vault.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/data-archive-in-symmetric-vault.yml data-archive-in-standard-vault-copy.yml
  3. 편집할 data-archive-in-standard-vault-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipavault 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_principal 변수를 idm_user 로 설정합니다.
    • ipaadmin_password 변수를 idm_user 의 암호로 설정합니다.
    • 사용자 변수를 idm_user 로 설정합니다.
    • name 변수를 my_vault 로 설정합니다.
    • in 변수를 중요한 정보가 있는 파일의 전체 경로로 설정합니다.
    • action 변수를 member 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      tasks:
      - freeipa.ansible_freeipa.ipavault:
          ipaadmin_principal: idm_user
          ipaadmin_password: idm_user_password
          user: idm_user
          name: my_vault
          in: /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/password.txt
          action: member
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook -v -i inventory data-archive-in-standard-vault-copy.yml

Ansible 플레이북을 사용하여 사용자 개인 자격 증명 모음에서 시크릿을 검색하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예에서 idm_user 사용자는 host01 이라는 IdM 클라이언트에 대해 my_vault 라는 표준 유형의 자격 증명 모음에서 중요한 데이터가 있는 파일을 검색합니다. idm_user 는 파일에 액세스할 때 인증할 필요가 없습니다. idm_user 는 Ansible을 사용하여 Ansible이 설치된 IdM 클라이언트에서 파일을 검색할 수 있습니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • idm_user 의 암호를 알고 있습니다.
  • idm_usermy_vault 의 소유자입니다.
  • idm_usermy_vault 에 시크릿을 저장했습니다.
  • Ansible은 시크릿을 검색할 IdM 호스트의 디렉터리에 쓸 수 있습니다.
  • idm_user 는 보안을 검색할 IdM 호스트의 디렉터리에서 읽을 수 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 인벤토리 파일을 열고 명확하게 정의된 섹션에서 시크릿을 검색할 IdM 클라이언트를 엽니다. 예를 들어 Ansible에서 host01.idm.example.com 에 시크릿을 검색하도록 지시하려면 다음을 입력합니다.

    [ipahost]
    host01.idm.example.com
  3. 관련 collections 디렉터리에서 retrive-data-symmetric-vault.yml Ansible 플레이북 파일을 복사합니다. "symmetric"을 "standard"로 바꿉니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/retrive-data-symmetric-vault.yml retrieve-data-standard-vault.yml-copy.yml
  4. 편집을 위해 retrieve-data-standard-vault.yml-copy.yml 파일을 엽니다.
  5. hosts 변수를 ipahost 로 설정하여 파일을 조정합니다.
  6. freeipa.ansible_freeipa.ipavault 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_principal 변수를 idm_user 로 설정합니다.
    • ipaadmin_password 변수를 idm_user 의 암호로 설정합니다.
    • 사용자 변수를 idm_user 로 설정합니다.
    • name 변수를 my_vault 로 설정합니다.
    • out 변수를 시크릿을 내보낼 파일의 전체 경로로 설정합니다.
    • 검색된 state 변수를 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Tests
      hosts: ipahost
      gather_facts: false
    
      tasks:
      - freeipa.ansible_freeipa.ipavault:
          ipaadmin_principal: idm_user
          ipaadmin_password: idm_user_password
          user: idm_user
          name: my_vault
          out: /tmp/password_exported.txt
          state: retrieved
  7. 파일을 저장합니다.
  8. Playbook을 실행합니다.

    $ ansible-playbook -v -i inventory retrieve-data-standard-vault.yml-copy.yml

검증

  1. user01host01 에 ssh를 실행하십시오.

    $ ssh user01@host01.idm.example.com
  2. Ansible Playbook 파일에서 out 변수에서 지정한 파일을 확인합니다.

    $ vim /tmp/password_exported.txt

이제 내보낸 시크릿을 볼 수 있습니다.

  • Ansible을 사용하여 IdM 자격 증명 모음 및 사용자 시크릿을 관리하고 플레이북 변수를 관리하는 방법에 대한 자세한 내용은 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/ freeipa/ansible_collections/freeipa/ansible_ collections/freeipa/freeipa/freeipa/playbooks/playbooks/playbooks/playbooks/playbooks/playbooks/에 있는 README-vault.md Markdown 파일을 참조하십시오.

이 섹션에서는 관리자가 ansible-freeipa vault 모듈을 사용하여 서비스 시크릿을 중앙 집중식 위치에 안전하게 저장하는 방법을 보여줍니다. 이 예제에 사용된 자격 증명 모음 은 비대칭이므로 이를 사용하려면 관리자가 다음 단계를 수행해야 합니다.

  1. 예를 들어 openssl 유틸리티를 사용하여 개인 키를 생성합니다.
  2. 개인 키를 기반으로 공개 키를 생성합니다.

서비스 시크릿은 관리자가 자격 증명 모음에 보관하면 공개 키로 암호화됩니다. 나중에 도메인의 특정 시스템에서 호스팅되는 서비스 인스턴스는 개인 키를 사용하여 시크릿을 검색합니다. 서비스와 관리자만 시크릿에 액세스할 수 있습니다.

시크릿이 손상된 경우 관리자는 서비스 자격 증명 모음에서 이를 교체한 다음 손상되지 않은 개별 서비스 인스턴스에 재배포할 수 있습니다.

사전 요구 사항

  • KRA(Key Recovery Authority) 인증 시스템 구성 요소가 IdM 도메인의 하나 이상의 서버에 설치되었습니다. 자세한 내용은 IdM에 키 복구 기관 설치를 참조하십시오.

다음 절차에서는 다음을 수행합니다.

  • admin 은 서비스 암호를 관리하는 관리자입니다.
  • private-key-to-externally-signed-certificate.pem 은 서비스 시크릿을 포함하는 파일입니다. 이 경우 외부 서명된 인증서에 대한 개인 키가 있습니다. 이 개인 키를 자격 증명 모음에서 시크릿을 검색하는 데 사용되는 개인 키와 혼동하지 마십시오.
  • secret_vault 는 서비스 시크릿을 저장하기 위해 생성된 자격 증명 모음입니다.
  • HTTP/webserver1.idm.example.com 은 자격 증명 모음의 소유자인 서비스입니다.
  • HTTP/webserver2.idm.example.comHTTP/webserver3.idm.example.com 은 vault 멤버 서비스입니다.
  • service-public.pempassword_vault 에 저장된 암호를 암호화하는 데 사용되는 서비스 공개 키입니다.
  • service-private.pemsecret_vault 에 저장된 암호를 해독하는 데 사용되는 서비스 개인 키입니다.

중요한 정보를 안전하게 저장하기 위해 Ansible 플레이북을 사용하여 하나 이상의 개인 자격 증명 모음 컨테이너를 생성하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예제에서 관리자는 secret_vault 라는 비대칭 자격 증명 모음을 만듭니다. 이렇게 하면 자격 증명 모음 멤버가 자격 증명 모음에서 시크릿을 검색하기 위해 개인 키를 사용하여 인증해야 합니다. vault 멤버는 IdM 클라이언트에서 파일을 검색할 수 있습니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 서비스 인스턴스의 공개 키를 가져옵니다. 예를 들어 openssl 유틸리티를 사용합니다.

    1. service-private.pem 개인 키를 생성합니다.

      $ openssl genrsa -out service-private.pem 2048
      Generating RSA private key, 2048 bit long modulus
      .+++
      ...........................................+++
      e is 65537 (0x10001)
    2. 개인 키를 기반으로 service-public.pem 공개 키를 생성합니다.

      $ openssl rsa -in service-private.pem -out service-public.pem -pubout
      writing RSA key
  3. 관련 collections 디렉터리에서 ensure-asymmetric-vault-is-present.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/ensure-asymmetric-vault-is-present.yml ensure-asymmetric-service-vault-is-present-copy.yml
  4. 편집을 위해 ensure-asymmetric-vault-is-present-copy.yml 파일을 엽니다.
  5. Ansible 컨트롤러에서 server.idm.example.com 서버로 service-public.pem 공개 키를 복사하는 작업을 추가합니다.
  6. freeipa.ansible_freeipa.ipavault 작업 섹션에서 다음 변수를 설정하여 나머지 파일을 수정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 사용하여 자격 증명 모음의 이름을 정의합니다(예: secret_vault ).
    • vault_type 변수를 asymmetric 로 설정합니다.
    • 서비스 변수를 자격 증명 모음을 소유하는 서비스의 주체로 설정합니다(예: HTTP/webserver1.idm.example.com ).
    • public_key_file 을 공개 키의 위치로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Copy public key to ipaserver.
        copy:
          src: /path/to/service-public.pem
          dest: /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/service-public.pem
          mode: 0600
      - name: Add data to vault, from a LOCAL file.
        freeipa.ansible_freeipa.ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          vault_type: asymmetric
          service: HTTP/webserver1.idm.example.com
          public_key_file: /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/service-public.pem
  7. 파일을 저장합니다.
  8. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.yml

26.2. Ansible을 사용하여 비대칭 자격 증명 모음에 멤버 서비스 추가

Ansible 플레이북을 사용하여 서비스 자격 증명 모음에 멤버 서비스를 추가하여 모두 자격 증명 모음에 저장된 시크릿을 검색할 수 있도록 다음 절차를 따르십시오. 아래 절차에 사용된 예에서 IdM 관리자는 HTTP/webserver2.idm.example.comHTTP/webserver3.idm.example.com 서비스 주체를 HTTP/webserver1.idm.example.com 이 소유한 secret_vault 자격 증명 모음에 추가합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 서비스 시크릿을 저장하기 위해 비대칭 자격 증명 모음을 생성 했습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. data-archive-in-asymmetric-vault.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml add-services-to-an-asymmetric-vault.yml
  3. 편집할 data-archive-in-asymmetric-vault-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipavault 작업 섹션에서 다음 변수를 설정하여 파일을 수정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 자격 증명 모음의 이름으로 설정합니다(예: secret_vault ).
    • 서비스 변수를 자격 증명 모음의 서비스 소유자(예: HTTP/webserver1.idm.example.com )로 설정합니다.
    • services 변수를 사용하여 vault 시크릿에 액세스할 서비스를 정의합니다.
    • action 변수를 member 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - freeipa.ansible_freeipa.ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver1.idm.example.com
          services:
          - HTTP/webserver2.idm.example.com
          - HTTP/webserver3.idm.example.com
          action: member
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file add-services-to-an-asymmetric-vault.yml

나중에 서비스에서 검색할 수 있도록 Ansible 플레이북을 사용하여 서비스 자격 증명 모음에 시크릿을 저장하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예제에서 관리자는 secret_vault 라는 비대칭 자격 증명 모음에 시크릿을 사용하여 PEM 파일을 저장합니다. 이렇게 하면 서비스가 개인 키를 사용하여 자격 증명 모음에서 시크릿을 검색하도록 인증해야 합니다. vault 멤버는 IdM 클라이언트에서 파일을 검색할 수 있습니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 서비스 시크릿을 저장하기 위해 비대칭 자격 증명 모음을 생성 했습니다.
  • 시크릿은 Ansible 컨트롤러에 로컬로 저장됩니다(예: ~/MyPlaybooks/private-key-to-externally-signed-certificate.pem 파일).

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. data-archive-in-asymmetric-vault.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
  3. 편집할 data-archive-in-asymmetric-vault-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipavault 작업 섹션에서 다음 변수를 설정하여 파일을 수정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 자격 증명 모음의 이름으로 설정합니다(예: secret_vault ).
    • 서비스 변수를 자격 증명 모음의 서비스 소유자(예: HTTP/webserver1.idm.example.com )로 설정합니다.
    • in 변수를 "{{ lookup('file', 'private-key-to-an-externally-certificate.pem') | b64encode }}" 로 설정합니다. 이렇게 하면 Ansible에서 IdM 서버가 아닌 Ansible 컨트롤러의 작업 디렉터리에서 개인 키가 있는 파일을 검색할 수 있습니다.
    • action 변수를 member 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - freeipa.ansible_freeipa.ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver1.idm.example.com
          in: "{{ lookup('file', 'private-key-to-an-externally-signed-certificate.pem') | b64encode }}"
          action: member
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml

26.4. Ansible을 사용하여 IdM 서비스의 서비스 시크릿 검색

Ansible 플레이북을 사용하여 서비스 대신 서비스 자격 증명 모음에서 시크릿을 검색하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예제에서 플레이북을 실행하면 secret_vault 라는 비대칭 자격 증명 모음의 시크릿을 사용하여 PEM 파일을 검색하고 Ansible 인벤토리 파일에 나열된 모든 호스트의 지정된 위치에 ipaservers 로 저장합니다.

서비스는 keytab을 사용하여 IdM에 인증하고 개인 키를 사용하여 자격 증명 모음에 인증합니다. ansible-freeipa 가 설치된 IdM 클라이언트에서 서비스를 대신하여 파일을 검색할 수 있습니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 서비스 시크릿을 저장하기 위해 비대칭 자격 증명 모음을 생성 했습니다.
  • 자격 증명 모음에 시크릿을 보관했습니다.
  • Ansible 컨트롤러의 private_key_file 변수에서 지정한 위치에 서비스 자격 증명 모음 시크릿을 검색하는 데 사용되는 개인 키를 저장했습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 인벤토리 파일을 엽니다.

    • Cryostat 섹션에서 시크릿을 검색할 호스트를 정의합니다. 예를 들어, Ansible에 webserver1.idm.example.com,webserver2.idm.example.com, webserver3.idm.example.com 에 대한 시크릿을 검색하도록 하려면 다음을 입력합니다.
    [ipaserver]
    server.idm.example.com
    
    [webservers]
    webserver1.idm.example.com
    webserver2.idm.example.com
    webserver3.idm.example.com
  3. 관련 컬렉션 디렉터리에서 retrieve-data-asymmetric-vault.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
  4. 편집을 위해 retrieve-data-asymmetric-vault-copy.yml 파일을 엽니다.
  5. freeipa.ansible_freeipa.ipavault 작업 섹션에서 다음 변수를 설정하여 파일을 수정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 자격 증명 모음의 이름으로 설정합니다(예: secret_vault ).
    • 서비스 변수를 자격 증명 모음의 서비스 소유자(예: HTTP/webserver1.idm.example.com )로 설정합니다.
    • private_key_file 변수를 서비스 자격 증명 모음 시크릿을 검색하는 데 사용되는 개인 키 위치로 설정합니다.
    • private-key-to-an-externally-signed-certificate.pem 시크릿을 검색할 IdM 서버의 위치로 설정합니다(예: 현재 작업 디렉터리).
    • action 변수를 member 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: no
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Retrieve data from the service vault
        freeipa.ansible_freeipa.ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver1.idm.example.com
          vault_type: asymmetric
          private_key: "{{ lookup('file', 'service-private.pem') | b64encode }}"
          out: private-key-to-an-externally-signed-certificate.pem
          state: retrieved
  6. IdM 서버에서 Ansible 컨트롤러로 데이터 파일을 검색하는 섹션에 섹션을 추가합니다.

    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: no
      gather_facts: false
      tasks:
    [...]
      - name: Retrieve data file
        fetch:
          src: private-key-to-an-externally-signed-certificate.pem
          dest: ./
          flat: true
          mode: 0600
  7. 검색된 private-key-to-an-externally-signed-certificate.pem 파일을 의 Ansible 컨트롤러에서 inventory 파일의 Cryostat 섹션에 나열된 Cryostat로 전송하는 섹션을 플레이북에 추가합니다.

    ---
    - name: Send data file to webservers
      become: no
      gather_facts: no
      hosts: webservers
      tasks:
      - name: Send data to webservers
        copy:
          src: private-key-to-an-externally-signed-certificate.pem
          dest: /etc/pki/tls/private/httpd.key
          mode: 0444
  8. 파일을 저장합니다.
  9. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml

서비스 인스턴스가 손상될 때 서비스 자격 증명 모음에 저장된 시크릿을 변경하기 위해 Ansible 플레이북을 재사용하려면 다음 절차를 따르십시오. 다음 예제의 시나리오는 webserver3.idm.example.com 에서 검색된 시크릿이 손상되었지만 시크릿을 저장하는 asymmetric 자격 증명 모음에 대한 키는 손상되었다고 가정합니다. 이 예에서 관리자는 비대칭 자격 증명 모음에 보안을 저장하고 IdM 호스트에 대한 asymmetric 자격 증명 모음에서 시크릿을 검색할 때 사용되는 Ansible 플레이북을 재사용합니다. 절차 시작 시 IdM 관리자는 새 PEM 파일을 asymmetric 자격 증명 모음에 새 시크릿을 저장하고, 손상된 웹 서버 webserver3.idm.example.com 에 대한 새 시크릿을 검색하지 않도록 인벤토리 파일을 조정한 다음 두 절차를 다시 실행합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 서비스 시크릿을 저장하기 위해 비대칭 자격 증명 모음을 생성 했습니다.
  • 손상된 이전 키를 교체하기 위해 IdM 호스트에서 실행 중인 웹 서비스에 대한 새 httpd 키를 생성했습니다.
  • httpd 키는 Ansible 컨트롤러에 로컬로 저장됩니다(예: /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/private-key-to-externally-signed-certificate.pem 파일).

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 인벤토리 파일을 열고 시크릿을 검색할 호스트가 Cryostat 섹션에 올바르게 정의되어 있는지 확인합니다. 예를 들어 webserver1.idm.example.comwebserver2.idm.example.com 에 시크릿을 검색하도록 Ansible에 지시하려면 다음을 입력합니다.

    [ipaserver]
    server.idm.example.com
    
    [webservers]
    webserver1.idm.example.com
    webserver2.idm.example.com
    중요

    현재 예제 webserver3.idm.example.com 에서 목록에 손상된 웹 서버가 포함되어 있지 않은지 확인합니다.

  3. 관련 collections 디렉터리에서 data-archive-in-asymmetric-vault.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
  4. 편집할 data-archive-in-asymmetric-vault-copy.yml 파일을 엽니다.
  5. freeipa.ansible_freeipa.ipavault 작업 섹션에서 다음 변수를 설정하여 파일을 수정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 자격 증명 모음의 이름으로 설정합니다(예: secret_vault ).
    • 서비스 변수를 자격 증명 모음의 서비스 소유자(예: HTTP/webserver.idm.example.com )로 설정합니다.
    • in 변수를 "{{ lookup('file', 'new-private-key-to-externally-signed-certificate.pem') | b64encode }}" 로 설정합니다. 이렇게 하면 Ansible에서 IdM 서버가 아닌 Ansible 컨트롤러의 작업 디렉터리에서 개인 키가 있는 파일을 검색할 수 있습니다.
    • action 변수를 member 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Tests
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - freeipa.ansible_freeipa.ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver.idm.example.com
          in: "{{ lookup('file', 'new-private-key-to-an-externally-signed-certificate.pem') | b64encode }}"
          action: member
  6. 파일을 저장합니다.
  7. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
  8. 편집을 위해 retrieve-data-asymmetric-vault-copy.yml 파일을 엽니다.
  9. freeipa.ansible_freeipa.ipavault 작업 섹션에서 다음 변수를 설정하여 파일을 수정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 자격 증명 모음의 이름으로 설정합니다(예: secret_vault ).
    • 서비스 변수를 자격 증명 모음의 서비스 소유자(예: HTTP/webserver1.idm.example.com )로 설정합니다.
    • private_key_file 변수를 서비스 자격 증명 모음 시크릿을 검색하는 데 사용되는 개인 키 위치로 설정합니다.
    • new-private-key-to-externally-signed-certificate.pem 시크릿(예: 현재 작업 디렉터리)을 검색하려는 IdM 서버의 위치로 out 변수를 설정합니다.
    • action 변수를 member 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: no
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Retrieve data from the service vault
        freeipa.ansible_freeipa.ipavault:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: secret_vault
          service: HTTP/webserver1.idm.example.com
          vault_type: asymmetric
          private_key: "{{ lookup('file', 'service-private.pem') | b64encode }}"
          out: new-private-key-to-an-externally-signed-certificate.pem
          state: retrieved
  10. IdM 서버에서 Ansible 컨트롤러로 데이터 파일을 검색하는 섹션에 섹션을 추가합니다.

    ---
    - name: Retrieve data from vault
      hosts: ipaserver
      become: true
      gather_facts: false
      tasks:
    [...]
      - name: Retrieve data file
        fetch:
          src: new-private-key-to-an-externally-signed-certificate.pem
          dest: ./
          flat: true
          mode: 0600
  11. 검색된 new-private-key-to-externally-signed-certificate.pem 파일을 인벤토리 파일의 Cryostat 섹션에 나열된 Ansible 컨트롤러에서 Ansible 컨트롤러로 전송하는 섹션을 플레이북에 추가합니다.

    ---
    - name: Send data file to webservers
      become: true
      gather_facts: no
      hosts: webservers
      tasks:
      - name: Send data to webservers
        copy:
          src: new-private-key-to-an-externally-signed-certificate.pem
          dest: /etc/pki/tls/private/httpd.key
          mode: 0444
  12. 파일을 저장합니다.
  13. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml

27장. Ansible을 사용하여 IdM에 서비스가 있는지 확인

Ansible 서비스 모듈을 사용하면 IdM(Identity Management) 관리자가 IdM에 네이티브가 없거나 IdM에 없는 특정 서비스가 있는지 확인할 수 있습니다. 예를 들어 service 모듈을 사용하여 다음을 수행할 수 있습니다.

27.1. Ansible 플레이북을 사용하여 IdM에 HTTP 서비스가 있는지 확인

Ansible 플레이북을 사용하여 IdM에 HTTP 서버가 있는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • HTTP 서비스를 호스팅할 시스템은 IdM 클라이언트입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 컬렉션 디렉터리에서 service-is-present.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/service/service-is-present.yml service-is-present-copy.yml
  3. 다음과 같이 service-is-present-copy.yml Ansible 플레이북 파일을 엽니다.

    ---
    - name: Playbook to manage IPA service.
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure service is present
      - freeipa.ansible_freeipa.ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
  4. freeipa.ansible_freeipa.ipaservice 작업의 name 변수에 정의된 대로 HTTP 서비스가 실행 중인 IdM 클라이언트의 이름을 변경합니다.
  5. 파일을 저장하고 종료합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file service-is-present-copy.yml

검증

  1. IdM 관리자로 IdM 웹 UI에 로그인합니다.
  2. ID서비스로 이동합니다.

HTTP/client.idm.example.com@IDM.EXAMPLE.COM서비스 목록에 나열되어 있는 경우 Ansible 플레이북이 IdM에 성공적으로 추가되었습니다.

ansible-freeipa freeipa.ansible_freeipa.ipaservice 모듈을 사용하여 단일 Ansible 작업에서 여러 IdM(Identity Management) 서비스를 추가, 수정, 삭제할 수 있습니다. 이를 위해 freeipa.ansible_freeipa.ipaservice 모듈의 services 옵션을 사용합니다.

services 옵션을 사용하여 특정 서비스에만 적용되는 여러 서비스 변수를 지정할 수도 있습니다. services 옵션에 대한 유일한 필수 변수인 name 변수로 이 서비스를 정의합니다.

단일 작업을 사용하여 IdM에 HTTP/client01.idm.example.com@IDM.EXAMPLE.COMftp/client02.idm.example.com@IDM.EXAMPLE.COM 서비스가 있는지 확인하려면 다음 절차를 완료합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 add-http-and-ftp-services.yml 을 생성합니다.

    ---
    - name: Playbook to add multiple services in a single task
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Add HTTP and ftp services
        freeipa.ansible_freeipa.ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          services:
          - name:  HTTP/client01.idm.example.com@IDM.EXAMPLE.COM
          - name: ftp/client02.idm.example.com@IDM.EXAMPLE.COM
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-http-and-ftp-services.yml

다음 절차에 따라 Ansible 플레이북을 사용하는 IdM 클라이언트가 아닌 호스트의 IdM에 HTTP 서버가 있는지 확인합니다. IdM에 HTTP 서버를 추가하면 IdM에 호스트를 추가합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 호스트에 HTTP 서비스를 설치했습니다.
  • HTTP를 설정한 호스트는 IdM 클라이언트가 아닙니다. 그렇지 않으면 HTTP 서비스를 IdM에 등록된 단계를 수행합니다.
  • 호스트의 IPv6를 사용할 수 있는 경우 DNS A 레코드 또는 AAAA 레코드입니다.
  • 서버에서 FIPS 모드가 활성화된 경우 클라이언트는 확장 마스터 시크릿(Extended Master Secret) 확장을 지원하거나 TLS 1.3을 사용해야 합니다. TLS 1.2 연결이 없는 경우 실패합니다. 자세한 내용은 Red Hat Knowledgebase 솔루션 TLS 확장 "확장 마스터 시크릿" 적용 을 참조하십시오.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 service-is-present-less-host-check.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/service/service-is-present-without-host-check.yml service-is-present-without-host-check-copy.yml
  3. 편집을 위해 복사된 파일 service-is-present-without-host-check-copy.yml 을 엽니다. freeipa.ansible_freeipa.ipaservice 작업에서 ipaadmin_passwordname 변수를 찾습니다.

    ---
    - name: Playbook to manage IPA service.
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure service is present
      - freeipa.ansible_freeipa.ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/www2.example.com
          skip_host_check: true
  4. 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 HTTP 서비스가 실행 중인 호스트의 이름으로 설정합니다.
  5. 파일을 저장하고 종료합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory service-is-present-without-host-check-copy.yml

검증

  1. IdM 관리자로 IdM 웹 UI에 로그인합니다.
  2. ID서비스로 이동합니다.

이제 서비스 목록에 나열된 HTTP/client.idm.example.com@IDM.EXAMPLE.COM 를 볼 수 있습니다.

Ansible 플레이북을 사용하는 DNS 항목이 없는 IdM 클라이언트에서 실행 중인 HTTP 서버가 있는지 확인하려면 다음 절차를 따르십시오. IPv4 대신 IPv6를 사용하는 경우 IdM 호스트에 DNS A 항목을 사용할 수 없거나 DNS AAAA 항목이 없다는 것입니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • HTTP 서비스를 호스팅하는 시스템이 IdM에 등록되어 있습니다.
  • 호스트의 DNS A 또는 DNS AAAA 레코드가 존재하지 않을 수 있습니다. 그렇지 않으면 호스트의 DNS 레코드가 있는 경우 Ansible 플레이북을 사용하여 IdM에 HTTP 서비스가 있는지 확인하는 절차를 따릅니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 service-is-present-with-host-force.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/service/service-is-present-with-host-force.yml service-is-present-with-host-force-copy.yml
  3. 편집을 위해 복사된 파일 service-is-present-with-host-force-copy.yml 을 엽니다. freeipa.ansible_freeipa.ipaservice 작업에서 ipaadmin_passwordname 변수를 찾습니다.

    ---
    - name: Playbook to manage IPA service.
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure service is present
      - freeipa.ansible_freeipa.ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/ihavenodns.info
          force: true
  4. 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 HTTP 서비스가 실행 중인 호스트의 이름으로 설정합니다.
  5. 파일을 저장하고 종료합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory service-is-present-with-host-force-copy.yml

검증

  1. IdM 관리자로 IdM 웹 UI에 로그인합니다.
  2. ID서비스로 이동합니다.

이제 서비스 목록에 나열된 HTTP/client.idm.example.com@IDM.EXAMPLE.COM 를 볼 수 있습니다.

ansible-freeipa service 모듈을 사용하여 외부 CA(인증 기관)에서 발급한 인증서가 HTTP 서비스의 IdM 항목에 연결되어 있는지 확인하려면 다음 절차를 따르십시오. IdM CA가 아닌 외부 CA에서 서명한 HTTP 서비스의 인증서가 있으면 IdM CA에서 자체 서명된 인증서를 사용하는 경우 특히 유용합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 호스트에 HTTP 서비스를 설치했습니다.
  • HTTP 서비스를 IdM에 등록했습니다.
  • 주체가 HTTP 서비스의 주체에 해당하는 외부 서명된 인증서가 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 service-member-certificate-present.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/service/service-member-certificate-present.yml service-member-certificate-present-copy.yml
  3. 선택 사항: 인증서가 Privacy Enhanced mail (PEM) 형식인 경우 CLI(명령줄)를 더 쉽게 처리하기 위해 인증서를 Distinguished Encoding Rules (DER) 형식으로 변환합니다.

    $ openssl x509 -outform der -in cert1.pem -out cert1.der
  4. base64 명령을 사용하여 DER 파일을 표준 출력에 디코딩합니다. 래핑을 비활성화하려면 -w0 옵션을 사용합니다.

    $ base64 cert1.der -w0
    MIIC/zCCAeegAwIBAgIUV74O+4kXeg21o4vxfRRtyJm...
  5. 표준 출력에서 클립보드에 인증서를 복사합니다.
  6. 편집할 service-member-certificate-present-copy.yml 파일을 열고 내용을 봅니다.

    ---
    - name: Service certificate present.
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure service certificate is present
      - freeipa.ansible_freeipa.ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
          certificate: |
            - MIICBjCCAW8CFHnm32VcXaUDGfEGdDL/...
          [...]
          action: member
          state: present
  7. 파일을 조정합니다.

    • 인증서 변수를 사용하여 정의한 인증서 를 CLI에서 복사한 인증서로 교체합니다. 표시된 "|" 파이프 문자와 함께 certificate: 변수를 사용하는 경우 한 줄에 입력하는 대신 인증서 THIS WAY를 입력할 수 있습니다. 이렇게 하면 인증서를 더 쉽게 읽을 수 있습니다.
    • ipaadmin_password 변수에 정의된 IdM 관리자 암호를 변경합니다.
    • name 변수에 정의된 HTTP 서비스가 실행 중인 IdM 클라이언트의 이름을 변경합니다.
    • 다른 관련 변수를 변경합니다.
  8. 파일을 저장하고 종료합니다.
  9. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory service-member-certificate-present-copy.yml

검증

  1. IdM 관리자로 IdM 웹 UI에 로그인합니다.
  2. ID서비스로 이동합니다.
  3. 새로 추가된 인증서가 있는 서비스 이름을 클릭합니다(예: HTTP/client.idm.example.com ).

오른쪽의 서비스 인증서 섹션에서 새로 추가된 인증서를 확인할 수 있습니다.

키탭은 Kerberos 주체와 암호화된 키 쌍을 포함하는 파일입니다. keytab 파일은 일반적으로 일반 텍스트 파일에 저장된 암호에 대한 상호 작용 또는 액세스 권한이 없어도 스크립트가 Kerberos를 사용하여 자동으로 인증할 수 있도록 하는 데 사용됩니다. 그런 다음 이 스크립트는 획득된 자격 증명을 사용하여 원격 시스템에 저장된 파일에 액세스할 수 있습니다.

IdM(Identity Management) 관리자는 다른 사용자가 IdM에서 실행되는 서비스에 대한 키탭을 검색하거나 생성하도록 허용할 수 있습니다. 특정 사용자 및 사용자 그룹이 키탭을 생성할 수 있도록 허용하면 IdM 관리자 암호를 공유하지 않고 서비스 관리를 해당 사용자에게 위임할 수 있습니다. 이 위임은 보다 세분화된 시스템 관리를 제공합니다.

특정 IdM 사용자, 사용자 그룹, 호스트 및 호스트 그룹이 IdM 클라이언트에서 실행되는 HTTP 서비스에 대한 키탭을 생성하도록 하려면 다음 절차를 따르십시오. 특히 user01 IdM 사용자가 client.idm.example.com 이라는 IdM 클라이언트에서 실행되는 HTTP 서비스에 대한 키탭을 생성하도록 허용하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • HTTP 서비스를 IdM에 등록했습니다.
  • HTTP 서비스를 호스팅할 시스템은 IdM 클라이언트입니다.
  • 키탭을 생성할 IdM 사용자 및 사용자 그룹이 IdM에 있습니다.
  • 키탭을 생성할 IdM 호스트 및 호스트 그룹이 IdM에 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 service-member-allow_create_keytab-present.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/service/service-member-allow_create_keytab-present.yml service-member-allow_create_keytab-present-copy.yml
  3. 편집을 위해 service-member-allow_create_keytab-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. 다음을 변경하여 파일을 조정합니다.

    • HTTP 서비스가 실행 중인 IdM 클라이언트의 이름입니다. 현재 예에서는 HTTP/client.idm.example.com입니다.
    • allow_create_keytab_user: 섹션에 나열된 IdM 사용자의 이름입니다. 현재 예에서는 user01 입니다.
    • allow_create_keytab_group: 섹션에 나열된 IdM 사용자 그룹의 이름입니다.
    • allow_create_keytab_host: 섹션에 나열된 IdM 호스트의 이름입니다.
    • allow_create_keytab_hostgroup: 섹션에 나열된 IdM 호스트 그룹의 이름입니다.
    • tasks 섹션의 name 변수에서 지정한 작업의 이름입니다.

      현재 예제에 맞게 조정된 후 복사된 파일은 다음과 같습니다.

    ---
    - name: Service member allow_create_keytab present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Service HTTP/client.idm.example.com members allow_create_keytab present for user01
        freeipa.ansible_freeipa.ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
          allow_create_keytab_user:
          - user01
          action: member
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory service-member-allow_create_keytab-present-copy.yml

검증

  1. 특정 HTTP 서비스에 대한 키탭을 생성할 수 있는 권한이 있는 IdM 사용자로 IdM 서버에 SSH를 수행합니다.

    $ ssh user01@server.idm.example.com
    Password:
  2. ipa-getkeytab 명령을 사용하여 HTTP 서비스의 새 키탭을 생성합니다.

    $ ipa-getkeytab -s server.idm.example.com -p HTTP/client.idm.example.com -k /etc/httpd/conf/krb5.keytab

    s 옵션은 keytab을 생성할 KDC(Key Distribution Center) 서버를 지정합니다.

    p 옵션은 생성하려는 키탭의 주체를 지정합니다.

    -k 옵션은 새 키를 추가할 키탭 파일을 지정합니다. 파일이 없는 경우 생성됩니다.

명령에서 오류가 발생하지 않으면 user01HTTP/client.idm.example.com 의 키탭을 성공적으로 생성했습니다.

키탭은 Kerberos 주체와 암호화된 키 쌍을 포함하는 파일입니다. keytab 파일은 일반적으로 일반 텍스트 파일에 저장된 암호에 대한 상호 작용 또는 액세스 권한이 없어도 스크립트가 Kerberos를 사용하여 자동으로 인증할 수 있도록 하는 데 사용됩니다. 그런 다음 이 스크립트는 획득된 자격 증명을 사용하여 원격 시스템에 저장된 파일에 액세스할 수 있습니다.

IdM 관리자는 다른 사용자가 IdM에서 실행되는 서비스에 대한 키탭을 검색하거나 생성할 수 있도록 허용할 수 있습니다.

특정 IdM 사용자, 사용자 그룹, 호스트 및 호스트 그룹이 IdM 클라이언트에서 실행되는 HTTP 서비스의 키탭을 검색하도록 하려면 다음 절차를 따르십시오. 특히 user01 IdM 사용자가 client.idm.example.com 에서 실행되는 HTTP 서비스의 키탭을 검색할 수 있도록 하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • HTTP 서비스를 IdM에 등록했습니다.
  • 키탭을 검색할 IdM 사용자 및 사용자 그룹이 IdM에 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 service-member-allow_retrieve_keytab-present.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/service/service-member-allow_retrieve_keytab-present.yml service-member-allow_retrieve_keytab-present-copy.yml
  3. 다음과 같이 복사된 파일 service-member-allow_retrieve_keytab-present-copy.yml 을 엽니다.
  4. 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • freeipa.ansible_freeipa.ipaservice 작업의 name 변수를 HTTP 서비스의 주체로 설정합니다. 현재 예에서는 HTTP/client.idm.example.com입니다.
    • allow_retrieve_keytab_group: 섹션에서 IdM 사용자의 이름을 지정합니다. 현재 예에서는 user01 입니다.
    • allow_retrieve_keytab_group: 섹션에서 IdM 사용자 그룹의 이름을 지정합니다.
    • allow_retrieve_keytab_group: 섹션에서 IdM 호스트의 이름을 지정합니다.
    • allow_retrieve_keytab_group: 섹션에서 IdM 호스트 그룹의 이름을 지정합니다.
    • tasks 섹션의 name 변수를 사용하여 작업 이름을 지정합니다.

      현재 예제에 맞게 조정된 후 복사된 파일은 다음과 같습니다.

    ---
    - name: Service member allow_retrieve_keytab present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Service HTTP/client.idm.example.com members allow_retrieve_keytab present for user01
        freeipa.ansible_freeipa.ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
          allow_retrieve_keytab_user:
          - user01
          action: member
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory service-member-allow_retrieve_keytab-present-copy.yml

검증

  1. HTTP 서비스의 키탭을 검색하는 권한을 사용하여 IdM 사용자로 IdM 서버에 SSH를 실행합니다.

    $ ssh user01@server.idm.example.com
    Password:
  2. ipa-getkeytab 명령을 -r 옵션과 함께 사용하여 keytab을 검색합니다.

    $ ipa-getkeytab -r -s server.idm.example.com -p HTTP/client.idm.example.com -k /etc/httpd/conf/krb5.keytab

    s 옵션은 키탭을 검색할 KDC(Key Distribution Center) 서버를 지정합니다.

    p 옵션은 검색할 키탭의 주체를 지정합니다.

    k 옵션은 검색된 키를 추가할 키탭 파일을 지정합니다. 파일이 없는 경우 생성됩니다.

명령에서 오류가 발생하지 않으면 HTTP/client.idm.example.com 의 키탭을 user01 으로 성공적으로 검색했습니다.

일부 시나리오에서는 IdM 관리자가 Kerberos 주체 별칭을 사용하여 Kerberos 애플리케이션 인증을 위해 IdM 사용자, 호스트 또는 서비스를 활성화하는 것이 좋습니다. 이러한 시나리오에는 다음이 포함됩니다.

  • 사용자 이름이 변경되었지만 사용자는 이전 사용자 이름과 새 사용자 이름을 사용하여 시스템에 로그인할 수 있어야 합니다.
  • IdM Kerberos 영역이 이메일 도메인과 다른 경우에도 사용자가 이메일 주소를 사용하여 로그인해야 합니다.

client.idm.example.com 에서 실행되는 HTTP 서비스에 대한 HTTP/mycompany.idm.example.com 의 주요 별칭을 생성하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 호스트에 HTTP 서비스를 설정했습니다.
  • HTTP 서비스를 IdM에 등록했습니다.
  • HTTP를 설정한 호스트는 IdM 클라이언트입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 service-member-principal-present.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/service/service-member-principal-present.yml service-member-principal-present-copy.yml
  3. 편집을 위해 service-member-principal-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. 다음을 변경하여 파일을 조정합니다.

    • name 변수에서 지정한 서비스의 이름입니다. 이는 서비스의 정식 사용자 이름입니다. 현재 예에서 HTTP/client.idm.example.com 입니다.
    • 보안 주체 변수에서 지정하는 Kerberos 주체 별칭입니다. name 변수로 정의된 서비스에 추가할 별칭입니다. 현재 예에서 host/mycompany.idm.example.com 입니다.
    • tasks 섹션의 name 변수에서 지정한 작업의 이름입니다.

      현재 예제에 맞게 조정된 후 복사된 파일은 다음과 같습니다.

    ---
    - name: Service member principal present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Service HTTP/client.idm.example.com member principals host/mycompany.idm.exmaple.com present
        freeipa.ansible_freeipa.ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
          principal:
            - host/mycompany.idm.example.com
          action: member
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory service-member-principal-present-copy.yml

플레이북을 실행하면 0 연결할 수 없는 작업과 0개의 실패한 작업이 생성되는 경우 HTTP/client.idm.example.com 서비스에 대한 host/mycompany.idm.example.com Kerberos 주체를 성공적으로 생성했습니다.

27.9. Ansible 플레이북을 사용하여 IdM에 HTTP 서비스가 없는지 확인

IdM에서 서비스를 등록 취소하려면 다음 절차를 따르십시오. 보다 구체적으로는 Ansible 플레이북을 사용하여 IdM에 HTTP/client.idm.example.com 이라는 HTTP 서버가 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 컬렉션 디렉터리에서 service-is-absent.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/service/service-is-absent.yml service-is-absent-copy.yml
  3. 편집을 위해 service-is-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • freeipa.ansible_freeipa.ipaservice 작업의 name 변수에 정의된 HTTP 서비스의 Kerberos 주체를 설정합니다.

      현재 예제에 맞게 조정된 후 복사된 파일은 다음과 같습니다.

    ---
    - name: Playbook to manage IPA service.
      hosts: ipaserver
      gather_facts: false
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      # Ensure service is absent
      - freeipa.ansible_freeipa.ipaservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: HTTP/client.idm.example.com
          state: absent
  5. 파일을 저장하고 종료합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory service-is-absent-copy.yml

검증

  1. IdM 관리자로 IdM 웹 UI에 로그인합니다.
  2. ID서비스로 이동합니다.

서비스 목록에 HTTP/client.idm.example.com@IDM.EXAMPLE.COM 서비스가 표시되지 않는 경우 IdM에 해당 서비스가 없는지 확인합니다.

28장. Ansible 플레이북을 사용하여 IdM의 글로벌 DNS 구성 관리

freeipa.ansible_freeipa.dnsconfig Ansible 모듈을 사용하면 RHEL IdM(Identity Management) DNS에 대한 글로벌 구성을 구성할 수 있습니다. 글로벌 DNS 구성에 정의된 설정은 모든 IdM DNS 서버에 적용됩니다. 그러나 글로벌 구성은 특정 IdM DNS 영역의 구성보다 우선 순위가 낮습니다.

dnsconfig 모듈은 다음 변수를 지원합니다.

  • 글로벌 전달자, 특히 IP 주소 및 통신에 사용되는 포트입니다.
  • 글로벌 전달 정책: only, first, or none. 이러한 유형의 DNS 전달 정책에 대한 자세한 내용은 IdM의 DNS 전달 정책을 참조하십시오.
  • 정방향 조회 및 역방향 조회 영역의 동기화입니다.

사전 요구 사항

 

통합 DNS를 사용하여 RHEL IdM(Identity Management)을 설치하면 127.0.0.1 localhost 주소를 가리키도록 /etc/resolv.conf 파일이 구성됩니다.

# Generated by NetworkManager
search idm.example.com
nameserver 127.0.0.1

DHCP( Dynamic Host Configuration Protocol )를 사용하는 네트워크와 같은 특정 환경에서는 NetworkManager 서비스가 /etc/resolv.conf 파일의 변경 사항을 되돌릴 수 있습니다. DNS 구성을 영구적으로 만들기 위해 IdM DNS 설치 프로세스도 다음과 같은 방식으로 NetworkManager 서비스를 구성합니다.

  1. DNS 설치 스크립트는 /etc/NetworkManager/conf.d/zzz-ipa.conf NetworkManager 구성 파일을 생성하여 검색 순서 및 DNS 서버 목록을 제어합니다.

    # auto-generated by IPA installer
    [main]
    dns=default
    
    [global-dns]
    searches=$DOMAIN
    
    [global-dns-domain-*]
    servers=127.0.0.1
  2. NetworkManager 서비스가 다시 로드됩니다. 이 파일은 항상 /etc/NetworkManager/conf.d/ 디렉터리에 있는 마지막 파일의 설정으로 /etc/resolv.conf 파일을 생성합니다. 이 경우 zzz-ipa.conf 파일입니다.
중요

/etc/resolv.conf 파일을 수동으로 수정하지 마십시오.

28.2. Ansible을 사용하여 IdM에 DNS 글로벌 전달자가 있는지 확인

Ansible 플레이북을 사용하여 IdM에 DNS 글로벌 전달자가 있는지 확인하려면 다음 절차를 따르십시오. 아래 예제 절차에서는 IdM 관리자가 인터넷 프로토콜(IP) v4 주소 7.7.9.9 및 포트 53 의 IP v6 주소 2001:db8::1:0 을 사용하여 DNS 서버에 DNS 글로벌 전달자가 있는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 forwarders-absent.yml Ansible 플레이북 파일의 사본을 만들고 이름을 바꿉니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig/forwarders-absent.yml ensure-presence-of-a-global-forwarder.yml
  3. 편집을 위해 ensure-presence-of-global-forwarder.yml 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. 플레이북의 name 변수를 Playbook으로 변경하여 IdM DNS에 글로벌 전달자가 있는지 확인합니다.
    2. tasks 섹션에서 DNS 글로벌 전달자가 있는지 확인하도록 작업의 이름을 변경합니다. 포트 53의 7.7.9.9 및 2001:db8::1:0.
    3. freeipa.ansible_freeipa.ipadnsconfig 부분의 전달자 섹션에서 다음을 수행합니다.

      1. 첫 번째 ip_address 값을 글로벌 전달자의 IPv4 주소로 변경합니다. 7.7.9.9.
      2. 두 번째 ip_address 값을 글로벌 전달자 2001:db8::1:0 의 IPv6 주소로 변경합니다.
      3. port 값이 53 으로 설정되어 있는지 확인합니다.
    4. statepresent 로 변경합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to ensure the presence of a global forwarder in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the presence of a DNS global forwarder to 7.7.9.9 and 2001:db8::1:0 on port 53
        freeipa.ansible_freeipa.ipadnsconfig:
          forwarders:
            - ip_address: 7.7.9.9
            - ip_address: 2001:db8::1:0
              port: 53
          state: present
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-of-a-global-forwarder.yml

28.3. Ansible을 사용하여 IdM에 DNS 글로벌 전달자가 있는지 확인

Ansible 플레이북을 사용하여 IdM에 DNS 글로벌 전달자가 없는지 확인하려면 다음 절차를 따르십시오. 아래 예제 절차에서는 IdM 관리자가 인터넷 프로토콜(IP) v4 주소가 8.8.6.6 이고 IP v6 주소가 2001:4860:4860::8800 인 DNS 글로벌 전달자가 없는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 forwarders-absent.yml Ansible 플레이북 파일의 사본을 만들고 이름을 바꿉니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig/forwarders-absent.yml ensure-absence-of-a-global-forwarder.yml
  3. 편집을 위해 ensure-absence-of-global-forwarder.yml 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. IdM DNS에 글로벌 전달자가 없는지 확인하기 위해 플레이북의 name 변수를 Playbook로 변경합니다.
    2. tasks 섹션에서 DNS 글로벌 전달자 가 없는지 확인하려면 포트 53의 DNS 글로벌 전달자가 8.8.6.6 및 2001:4860:4860::8800으로 변경되도록 작업 이름을 변경합니다.
    3. freeipa.ansible_freeipa.ipadnsconfig 부분의 전달자 섹션에서 다음을 수행합니다.

      1. 첫 번째 ip_address 값을 글로벌 전달자의 IPv4 주소로 변경합니다. 8.8.6.6.
      2. 두 번째 ip_address 값을 글로벌 전달자 2001:4860:4860::8800 의 IPv6 주소로 변경합니다.
      3. port 값이 53 으로 설정되어 있는지 확인합니다.
    4. action 변수를 member 로 설정합니다.
    5. 상태가 absent 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to ensure the absence of a global forwarder in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the absence of a DNS global forwarder to 8.8.6.6 and 2001:4860:4860::8800 on port 53
        freeipa.ansible_freeipa.ipadnsconfig:
          forwarders:
            - ip_address: 8.8.6.6
            - ip_address: 2001:4860:4860::8800
              port: 53
          action: member
          state: absent
    중요

    action: member 를 사용하지 않고 플레이북에서 state: absent 옵션만 사용하면 플레이북이 실패합니다.

  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-of-a-global-forwarder.yml

28.4. ipadnsconfig ansible-freeipa 모듈의 action: member 옵션

ansible-freeipa ipadnsconfig 모듈을 사용하여 RHEL IdM(Identity Management)에서 글로벌 전달자를 제외하려면 state: absent 옵션 외에 action: member 옵션을 사용해야 합니다. action: member 를 사용하지 않고 플레이북에서 state: absent 만 사용하는 경우 플레이북이 실패합니다. 따라서 모든 글로벌 전달자를 제거하려면 플레이북에서 모든 전달자를 개별적으로 지정해야 합니다. 반대로 state: present 옵션은 action: member 를 필요로 하지 않습니다.

다음 표에서 는 action: member 옵션의 올바른 사용을 보여주는 DNS 글로벌 전달자 추가 및 제거에 대한 구성 예제를 제공합니다. 테이블은 각 줄에서 다음을 보여줍니다.

  • 플레이북을 실행하기 전에 구성된 글로벌 전달자
  • 플레이북에서 발췌한 내용
  • 플레이북을 실행한 후 구성된 글로벌 전달자
Expand
표 28.1. 글로벌 전달자의 ipadnsconfig 관리
이전 버전플레이북 발췌 내용이후 전달자

8.8.6.6

[...]
tasks:
- name: Ensure the presence of DNS global forwarder 8.8.6.7
  ipadnsconfig:
    forwarders:
      - ip_address: 8.8.6.7
    state: present

8.8.6.7

8.8.6.6

[...]
tasks:
- name: Ensure the presence of DNS global forwarder 8.8.6.7
  ipadnsconfig:
    forwarders:
      - ip_address: 8.8.6.7
    action: member
    state: present

8.8.6.6, 8.8.6.7

8.8.6.6, 8.8.6.7

[...]
tasks:
- name: Ensure the absence of DNS global forwarder 8.8.6.7
  ipadnsconfig:
    forwarders:
      - ip_address: 8.8.6.7
    state: absent

플레이북을 실행하려고 하면 오류가 발생합니다. 원래 구성 - 8.8.6.6, 8.8.6.7은 변경되지 않습니다.

8.8.6.6, 8.8.6.7

[...]
tasks:
- name: Ensure the absence of DNS global forwarder 8.8.6.7
  ipadnsconfig:
    forwarders:
      - ip_address: 8.8.6.7
    action: member
    state: absent

8.8.6.6

28.5. IdM의 DNS 전달 정책

IdM은 번째 및 표준 BIND 전달 정책과 none IdM 특정 전달 정책을 지원합니다.

정방향 첫 번째 (기본값)
IdM BIND 서비스는 DNS 쿼리를 구성된 전달자에게 전달합니다. 서버 오류 또는 시간 초과로 인해 쿼리가 실패하면 BIND는 인터넷의 서버를 사용하여 재귀 확인으로 대체됩니다. forward 첫 번째 정책은 기본 정책이며 DNS 트래픽을 최적화하는 데 적합합니다.
앞으로만 해당
IdM BIND 서비스는 DNS 쿼리를 구성된 전달자에게 전달합니다. 서버 오류 또는 시간 초과로 인해 쿼리가 실패하면 BIND에서 클라이언트에 오류를 반환합니다. 분할 DNS 구성이 있는 환경에만 forward only 정책을 사용하는 것이 좋습니다.
none (전달 비활성화)
DNS 쿼리는 none 전달 정책으로 전달되지 않습니다. 전달 비활성화는 글로벌 전달 구성에 대한 영역별 재정의로만 유용합니다. 이 옵션은 BIND 구성에 빈 전달자 목록을 지정하는 것과 동일한 IdM 옵션입니다.
참고

전달을 사용하여 IdM의 데이터를 다른 DNS 서버의 데이터와 결합할 수 없습니다. IdM DNS의 기본 영역의 특정 하위 영역에 대한 쿼리를 전달할 수 있습니다.

쿼리된 DNS 이름이 IdM 서버가 권한이 있는 영역에 속하는 경우 기본적으로 BIND 서비스는 쿼리를 다른 서버에 전달하지 않습니다. 이러한 상황에서 쿼리된 DNS 이름을 IdM 데이터베이스에서 찾을 수 없는 경우 NXDOMAIN 응답이 반환됩니다. 전달은 사용되지 않습니다.

예 28.1. 시나리오 예

IdM 서버는 test.example에 대한 권한이 있습니다. DNS 영역. BIND는 192.0.2.254 IP 주소를 사용하여 DNS 서버로 쿼리를 전달하도록 구성됩니다.

클라이언트에서 존재하지 않는.test.example에대한 쿼리를 전송하는 경우 DNS 이름, BIND는 IdM 서버가 test.example. 영역에 대한 권한이 있음을 감지하고 쿼리를 192.0.2.254. 서버로 전달하지 않습니다. 결과적으로 DNS 클라이언트는 NXDomain 오류 메시지를 수신하여 사용자에게 쿼리된 도메인이 존재하지 않음을 알립니다.

Ansible 플레이북을 사용하여 IdM DNS의 글로벌 전달 정책이 먼저 전달되도록 설정하려면 다음 절차를 따르십시오.

정방향 첫 번째 DNS 전달 정책을 사용하면 DNS 쿼리가 구성된 전달자로 전달됩니다. 서버 오류 또는 시간 초과로 인해 쿼리가 실패하면 BIND는 인터넷의 서버를 사용하여 재귀 확인으로 대체됩니다. forward 첫 번째 정책은 기본 정책입니다. 트래픽 최적화에 적합합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • IdM 환경에는 통합된 DNS 서버가 포함되어 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 set-configuration.yml Ansible 플레이북 파일의 사본을 만들고 이름을 바꿉니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig/set-configuration.yml set-forward-policy-to-first.yml
  3. 편집할 set-forward-policy-to-first.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadnsconfig 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • forward_policy 변수를 번째로 설정합니다.

      관련 없는 원래 플레이북의 다른 모든 행을 삭제합니다. 현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to set global forwarding policy to first
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Set global forwarding policy to first.
        freeipa.ansible_freeipa.ipadnsconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          forward_policy: first
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file set-forward-policy-to-first.yml

Ansible 플레이북을 사용하여 IdM DNS에서 글로벌 전달자가 비활성화되었는지 확인하려면 다음 절차를 따르십시오. 비활성화는 forward_policy 변수를 none 으로 설정하여 수행됩니다.

글로벌 전달자를 비활성화하면 DNS 쿼리가 전달되지 않습니다. 전달 비활성화는 글로벌 전달 구성에 대한 영역별 재정의로만 유용합니다. 이 옵션은 BIND 구성에 빈 전달자 목록을 지정하는 것과 동일한 IdM 옵션입니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • IdM 환경에는 통합된 DNS 서버가 포함되어 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 disable-global-forwarders.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig/disable-global-forwarders.yml disable-global-forwarders-copy.yml
  3. 편집할 disable-global-forwarders-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadnsconfig 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • forward_policy 변수를 none 으로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to disable global DNS forwarders
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Disable global forwarders.
        freeipa.ansible_freeipa.ipadnsconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          forward_policy: none
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file disable-global-forwarders-copy.yml

Ansible 플레이북을 사용하여 IdM DNS에서 정방향 및 역방향 조회 영역이 동기화되지 않도록 하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • IdM 환경에는 통합된 DNS 서버가 포함되어 있습니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 관련 collections 디렉터리에서 disallow-reverse-sync.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig/disallow-reverse-sync.yml disallow-reverse-sync-copy.yml
  3. 편집할 disallow-reverse-sync-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadnsconfig 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • allow_sync_ptr 변수를 no 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to disallow reverse record synchronization
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Disallow reverse record synchronization.
        freeipa.ansible_freeipa.ipadnsconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          allow_sync_ptr: no
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file disallow-reverse-sync-copy.yml

29장. Ansible 플레이북을 사용하여 IdM DNS 영역 관리

RHEL IdM(Identity Management) 관리자는 ansible-freeipa 패키지에서 사용할 수 있는 dnszone 모듈을 사용하여 IdM DNS 영역이 작동하는 방법을 관리할 수 있습니다.

사전 요구 사항

29.1. 지원되는 DNS 영역 유형

RHEL IdM(Identity Management)은 기본전달 영역이라는 두 가지 유형의 DNS 영역을 지원합니다. DNS 전달 시나리오를 포함하여 이러한 두 가지 유형의 영역에 대해 설명합니다.

참고

이 가이드에서는 Microsoft Windows DNS에 사용되는 용어와 다른 영역 유형에 BIND 용어를 사용합니다. BIND의 기본 영역은 Microsoft Windows DNS의 정방향 조회 영역역방향 조회 영역 과 동일한 용도로 사용됩니다. BIND의 전달 영역은 Microsoft Windows DNS의 조건부 전달자 와 동일한 목적을 수행합니다.

기본 DNS 영역

기본 DNS 영역에는 권한 있는 DNS 데이터가 포함되어 있으며 동적 DNS 업데이트를 허용할 수 있습니다. 이 동작은 표준 BIND 구성의 유형 마스터 설정과 동일합니다. ipa dnszone-* 명령을 사용하여 기본 영역을 관리할 수 있습니다.

표준 DNS 규칙에 따라 모든 기본 영역에는 권한 시작 (SOA) 및 이름 서버 (NS) 레코드가 포함되어야 합니다. DNS 영역이 생성되면 IdM에서 이러한 레코드를 자동으로 생성하지만 적절한 위임을 생성하려면 NS 레코드를 상위 영역에 수동으로 복사해야 합니다.

표준 BIND 동작에 따라 서버가 권한이 없는 이름에 대한 쿼리는 다른 DNS 서버로 전달됩니다. 전달자라고 하는 이러한 DNS 서버는 쿼리에 대해 권한이 없을 수도 있습니다.

예 29.1. DNS 전달 시나리오 예

IdM 서버에는 test.example. 기본 영역이 포함되어 있습니다. 이 영역에는 하위.test.example. 이름에 대한 NS 위임 레코드가 포함되어 있습니다. 또한 test.example. 영역은 sub.text.example 하위 영역의 192.0.2.254 전달자 IP 주소로 구성됩니다.

존재하지 않는.test.example 이라는 이름을 쿼리하는 클라이언트는 NXDomain 응답을 수신하고 IdM 서버가 이 이름에 대해 권한이 있기 때문에 전달이 발생하지 않습니다.

반면 IdM 서버는 이 이름에 대해 권한이 없으므로 host1.sub.test.example. 이름을 쿼리하는 것이 구성된 forwarder 192.0.2.254 로 전달됩니다.

정방향 DNS 영역

IdM의 관점에서 전달 DNS 영역에는 권한 있는 데이터가 포함되어 있지 않습니다. 사실, forward "zone"은 일반적으로 다음 두 가지 정보만 포함합니다.

  • 도메인 이름
  • 도메인과 연결된 DNS 서버의 IP 주소

정의된 도메인에 속하는 이름에 대한 모든 쿼리는 지정된 IP 주소로 전달됩니다. 이 동작은 표준 BIND 구성의 type forward 설정과 동일합니다. ipa dnsforwardzone-* 명령을 사용하여 전달 영역을 관리할 수 있습니다.

정방향 DNS 영역은 IdM-Active Directory(AD) 신뢰 컨텍스트에서 특히 유용합니다. IdM DNS 서버가 idm.example.com 영역에 권한이 있고 AD DNS 서버가 ad.example.com 영역에 권한이 있는 경우 ad.example.comidm.example.com 기본 영역에 대한 DNS 전달 영역입니다. 즉, somehost.ad.example.com 의 IP 주소에 대한 IdM 클라이언트에서 쿼리가 제공되면 ad.example.com IdM DNS 전달 영역에 지정된 AD 도메인 컨트롤러로 쿼리가 전달됩니다.

29.2. Ansible을 사용할 때 기본 IdM DNS 영역의 구성 속성

RHEL IdM(Identity Management)은 새로 고침 기간, 전송 설정 또는 캐시 설정과 같은 특정 기본 구성을 사용하여 새 영역을 생성합니다. IdM DNS 영역 속성에서는 ipadnszone 모듈을 사용하는 Ansible 플레이북을 사용하여 수정할 수 있는 기본 영역 구성의 속성을 찾을 수 있습니다.

영역에 대한 실제 정보를 설정하는 것과 함께 설정은 DNS 서버가 권한 시작 (SOA) 레코드 항목을 처리하는 방법과 DNS 이름 서버에서 레코드를 업데이트하는 방법을 정의합니다.

Expand
표 29.1. IdM DNS 영역 속성
속성ansible-freeipa 변수설명

권한 있는 이름 서버

name_server

SOA MNAME이라고도 하는 기본 DNS 이름 서버의 도메인 이름을 설정합니다.

기본적으로 각 IdM 서버는 SOA MNAME 필드에 자신을 알립니다. 결과적으로 --name-server 를 사용하여 LDAP에 저장된 값이 무시됩니다.

관리자 이메일 주소

admin_email

영역 관리자에게 사용할 이메일 주소를 설정합니다. 기본값은 호스트의 root 계정입니다.

SOA 직렬

직렬

SOA 레코드에서 일련 번호를 설정합니다. IdM은 버전 번호를 자동으로 설정하고 사용자는 수정할 필요가 없습니다.

SOA 새로 고침

새로고침

보조 DNS 서버가 기본 DNS 서버에서 업데이트를 요청하기 전에 대기하는 간격(초)을 설정합니다.

SOA 재시도

retry

실패한 새로 고침 작업을 다시 시도하기 전에 대기하는 시간(초)을 설정합니다.

SOA 만료

만료

작업 시도를 종료하기 전에 보조 DNS 서버가 새로 고침 업데이트를 수행하려고 하는 시간(초)을 설정합니다.

SOA 최소

최소

RFC 2308 에 따른 음수 캐싱을 위해 time을 live(TTL) 값으로 설정합니다.

SOA 시간

ttl

영역 apex에서 레코드에 대한 TTL을 초 단위로 설정합니다. 영역 example.com 에서 example.com이라는 이름의 모든 레코드(A, NS 또는 SOA)가 구성되지만 test.example.com 과 같은 다른 도메인 이름은 영향을 받지 않습니다.

기본 활성화 시간

default_ttl

이전에 설정한 개별 TTL 값이 없는 영역의 모든 값에 대한 음수 캐싱의 경우 기본값을 live(TTL) 값으로 설정합니다.

BIND 업데이트 정책

update_policy

DNS 영역에서 클라이언트에 허용되는 권한을 설정합니다.

동적 업데이트

dynamic_update=TRUE|FALSE

클라이언트의 DNS 레코드에 대한 동적 업데이트를 활성화합니다.

이 값을 false로 설정하면 IdM 클라이언트 시스템에서 IP 주소를 추가하거나 업데이트할 수 없습니다.

전송 허용

allow_transfer=string

지정된 영역(;)으로 구분된 지정된 영역을 전송할 수 있는 IP 주소 또는 네트워크 이름 목록을 지정합니다.

영역 전송은 기본적으로 비활성화되어 있습니다. 기본 allow_transfer 값은 none 입니다.

쿼리 허용

allow_query

parameters(;)로 구분된 DNS 쿼리를 실행할 수 있는 IP 주소 또는 네트워크 이름 목록을 제공합니다.

PTR 동기화 허용

allow_sync_ptr=1|0

영역의 A 또는 AAAA 레코드(전달 레코드)가 PTR(반복) 레코드와 자동으로 동기화되는지 여부를 설정합니다.

영역 전달자

forwarder=IP_address

DNS 영역에 대해 특별히 구성된 전달자를 지정합니다. 이는 IdM 도메인에 사용된 글로벌 전달자와 다릅니다.

여러 전달자를 지정하려면 옵션을 여러 번 사용합니다.

전달 정책

forward_policy=none|only|first

전달 정책을 지정합니다. 지원되는 정책에 대한 자세한 내용은 IdM의 DNS 전달 정책을 참조하십시오.

29.3. Ansible을 사용하여 IdM DNS에 기본 영역 생성

Ansible 플레이북을 사용하여 기본 DNS 영역이 있는지 확인하려면 다음 절차를 따르십시오. 아래 절차에서 사용된 예제에서는 zone.idm.example.com DNS 영역이 있는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • IdM 관리자 암호를 알고 있습니다.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnszone 디렉터리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnszone
  2. 인벤토리 파일을 열고 구성할 IdM 서버가 [ipaserver] 섹션에 나열되어 있는지 확인합니다. 예를 들어, Ansible에 server.idm.example.com 을 구성하도록 지시하려면 다음을 입력합니다.

    [ipaserver]
    server.idm.example.com
  3. dnszone-present.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp dnszone-present.yml dnszone-present-copy.yml
  4. 편집을 위해 dnszone-present-copy.yml 파일을 엽니다.
  5. ipadnszone 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • zone_name 변수를 zone.idm.example.com 으로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Ensure dnszone present
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure zone is present.
        ipadnszone:
          ipaadmin_password: "{{ ipaadmin_password }}"
          zone_name: zone.idm.example.com
          state: present
  6. 파일을 저장합니다.
  7. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-present-copy.yml

Ansible 플레이북을 사용하여 기본 DNS 영역이 있는지 확인하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예제에서 IdM 관리자는 zone.idm.example.com DNS 영역이 있는지 확인합니다. Ansible 플레이북은 영역의 여러 매개 변수를 구성합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnszone 디렉터리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnszone
  2. dnszone-all-params.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp dnszone-all-params.yml dnszone-all-params-copy.yml
  3. 편집을 위해 dnszone-all-params-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadnszone 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • zone_name 변수를 zone.idm.example.com 으로 설정합니다.
    • 정방향 및 역방향 레코드 동기화, 즉 PTR 레코드와 AAAA 레코드의 동기화를 허용하려면 allow_sync_ptr 변수를 true로 설정합니다.
    • IdM 클라이언트 시스템이 IP 주소를 추가하거나 업데이트할 수 있도록 dynamic_update 변수를 true로 설정합니다.
    • 영역에 있는 레코드 인라인 DNSSEC 서명을 허용하려면 dnssec 변수를 true로 설정합니다.
    • allow_transfer 변수를 영역에 있는 보조 이름 서버의 IP 주소로 설정합니다.
    • allow_query 변수를 쿼리를 발행할 수 있는 IP 주소 또는 네트워크로 설정합니다.
    • forwarders 변수를 글로벌 전달자의 IP 주소로 설정합니다.
    • serial 변수를 SOA 레코드 일련 번호로 설정합니다.
    • 영역의 DNS 레코드에 대한 새로 고침,재시도,만료,최소,ttldefault_ttl 값을 정의합니다.
    • nsec3param_rec 변수를 사용하여 영역의 NSEC3PARAM 레코드를 정의합니다.
    • skip_overlap_check 변수를 true로 설정하여 기존 영역과 겹치는 경우에도 DNS 생성을 강제 적용합니다.
    • 이름 서버를 확인할 수 없는 경우에도 skip_nameserver_check 를 true로 설정하여 DNS 영역 생성을 강제 적용합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Ensure dnszone present
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure zone is present.
        freeipa.ansible_freeipa.ipadnszone:
          ipaadmin_password: "{{ ipaadmin_password }}"
          zone_name: zone.idm.example.com
          allow_sync_ptr: true
          dynamic_update: true
          dnssec: true
          allow_transfer:
            - 1.1.1.1
            - 2.2.2.2
          allow_query:
            - 1.1.1.1
            - 2.2.2.2
          forwarders:
            - ip_address: 8.8.8.8
            - ip_address: 8.8.4.4
              port: 52
          serial: 1234
          refresh: 3600
          retry: 900
          expire: 1209600
          minimum: 3600
          ttl: 60
          default_ttl: 90
          name_server: server.idm.example.com.
          admin_email: admin.admin@idm.example.com
          nsec3param_rec: "1 7 100 0123456789abcdef"
          skip_overlap_check: true
          skip_nameserver_check: true
          state: present
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-all-params-copy.yml

Ansible 플레이북을 사용하여 역방향 DNS 영역이 있는지 확인하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예에서 IdM 관리자는 IdM 호스트의 IP 주소 및 접두사 길이를 사용하여 역방향 DNS 조회 영역이 있는지 확인합니다.

name_from_ip 변수를 사용하여 DNS 서버의 IP 주소 접두사 길이를 제공하면 영역 이름을 제어할 수 있습니다. 접두사 길이를 지정하지 않으면 시스템은 DNS 서버에 영역 및 name_from_ip 값을 기반으로 DNS 서버를 쿼리하지 않으면 쿼리에서 다음 DNS 영역 중 하나를 반환할 수 있습니다.

  • 1.168.192.in-addr.arpa.
  • 168.192.in-addr.arpa.
  • 192.in-addr.arpa.

쿼리에서 반환된 영역이 예상하지 않을 수 있으므로 name_from_ip 는 영역의 실수로 제거되지 않도록 state 옵션 집합에서만 사용할 수 있습니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnszone 디렉터리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnszone
  2. dnszone-reverse-from-ip.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp dnszone-reverse-from-ip.yml dnszone-reverse-from-ip-copy.yml
  3. 편집을 위해 dnszone-reverse-from-ip-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadnszone 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name_from_ip 변수를 IdM 이름 서버의 IP로 설정하고 접두사 길이를 제공합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

      ---
      - name: Ensure dnszone present
        hosts: ipaserver
        become: true
      
        tasks:
        - name: Ensure zone for reverse DNS lookup is present.
          freeipa.ansible_freeipa.ipadnszone:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name_from_ip: 192.168.1.2/24
            state: present
          register: result
        - name: Display inferred zone name.
          debug:
            msg: "Zone name: {{ result.dnszone.name }}"

    플레이북은 192.168.1.2 IP 주소 및 접두사 길이 24에서 역방향 DNS 조회를 위한 영역을 생성합니다. 다음으로 플레이북에 결과 영역 이름이 표시됩니다.

  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-reverse-from-ip-copy.yml

30장. Ansible을 사용하여 IdM의 DNS 위치 관리

IdM(Identity Management) 관리자는 ansible-freeipa 패키지에서 사용할 수 있는 location 모듈을 사용하여 IdM DNS 위치를 관리할 수 있습니다.

30.1. DNS 기반 서비스 검색

DNS 기반 서비스 검색은 클라이언트가 DNS 프로토콜을 사용하여 LDAP 또는 Kerberos 와 같은 특정 서비스를 제공하는 네트워크에서 서버를 찾는 프로세스입니다. 일반적인 작업 유형 중 하나는 클라이언트가 더 높은 처리량과 네트워크 대기 시간을 줄여 전체 비용을 낮추기 때문에 가장 가까운 네트워크 인프라 내에서 인증 서버를 찾을 수 있도록 하는 것입니다.

서비스 검색의 주요 이점은 다음과 같습니다.

  • 가까운 서버의 이름으로 클라이언트를 명시적으로 구성할 필요가 없습니다.
  • DNS 서버는 정책의 중앙 공급자로 사용됩니다. 동일한 DNS 서버를 사용하는 클라이언트는 서비스 공급자 및 선호하는 순서에 대한 동일한 정책에 액세스할 수 있습니다.

RHEL IdM(Identity Management) 도메인에는 LDAP,Kerberos 및 기타 서비스에 대한 DNS 서비스 레코드(SRV 레코드)가 있습니다. 예를 들어 다음 명령은 IdM DNS 도메인에 TCP 기반 Kerberos 서비스를 제공하는 호스트의 DNS 서버를 쿼리합니다.

예 30.1. DNS 위치 독립적인 결과

$ dig -t SRV +short _kerberos._tcp.idm.example.com
0 100 88 idmserver-01.idm.example.com.
0 100 88 idmserver-02.idm.example.com.

출력에는 다음 정보가 포함됩니다.

  • 0 (우선 순위): 대상 호스트의 우선 순위입니다. 더 낮은 값이 우선합니다.
  • 100 (중량). 우선순위가 동일한 항목의 상대적 가중치를 지정합니다. 자세한 내용은 RFC 2782, section 3 에서 참조하십시오.
  • 88 (포트 번호): 서비스 포트 번호.
  • 서비스를 제공하는 호스트의 표준 이름입니다.

이 예제에서는 반환된 두 호스트 이름의 우선순위와 weight가 동일합니다. 이 경우 클라이언트는 결과 목록의 임의의 항목을 사용합니다.

클라이언트가 DNS 위치에 구성된 DNS 서버를 쿼리하도록 구성된 대신 출력은 다릅니다. 위치에 할당된 IdM 서버의 경우 맞춤형 값이 반환됩니다. 아래 예제에서 클라이언트는 germany 위치에서 DNS 서버를 쿼리하도록 구성되어 있습니다.

예 30.2. DNS 위치 기반 결과

$ dig -t SRV +short _kerberos._tcp.idm.example.com
_kerberos._tcp.germany._locations.idm.example.com.
0 100 88 idmserver-01.idm.example.com.
50 100 88 idmserver-02.idm.example.com.

IdM DNS 서버는 로컬 서버를 선호하는 DNS 위치별 SRV 레코드를 가리키는 CNAME(DNS 별칭)을 자동으로 반환합니다. 이 CNAME 레코드는 출력의 첫 번째 행에 표시됩니다. 이 예에서 호스트 idmserver-01.idm.example.com 은 가장 낮은 우선순위 값을 가지므로 선호됩니다. idmserver-02.idm.example.com 은 우선 순위가 높으므로 기본 호스트를 사용할 수 없는 경우 백업으로만 사용됩니다.

30.2. DNS 위치에 대한 배포 고려 사항

RHEL IdM(Identity Management)은 통합 DNS를 사용할 때 위치별 서비스(SRV) 레코드를 생성할 수 있습니다. 각 IdM DNS 서버는 위치별 SRV 레코드를 생성하므로 각 DNS 위치에 하나 이상의 IdM DNS 서버를 설치해야 합니다.

DNS 위치에 대한 클라이언트의 선호도는 클라이언트에서 수신한 DNS 레코드에 의해서만 정의됩니다. 이러한 이유로 DNS 서비스 검색을 수행하는 클라이언트가 IdM DNS 서버에서 위치별 레코드를 확인하는 경우 IdM DNS 서버와 IdM DNS 소비자 서버를 결합하고 반복기를 결합할 수 있습니다.

대부분의 배포에서는 IdM 및 비 IdM DNS 서비스가 포함된 대부분의 배포에서 DNS 재귀자가 라운드트립 시간 지표를 사용하여 가장 가까운 IdM DNS 서버를 자동으로 선택합니다. 일반적으로 IdM이 아닌 DNS 서버를 사용하는 클라이언트가 가장 가까운 DNS 위치에 대한 레코드를 가져오고, 따라서 최적의 IdM 서버 세트를 사용합니다.

30.3. 라이브 DNS 시간 (TTL)

클라이언트는 영역 구성에 설정된 시간 동안 DNS 리소스 레코드를 캐시할 수 있습니다. 이 캐싱으로 인해 TTL(TTL) 값이 만료될 때까지 클라이언트는 변경 사항을 수신하지 못할 수 있습니다. RHEL IdM(Identity Management)의 기본 TTL 값은 1일 입니다.

클라이언트 컴퓨터가 사이트 간 로밍하는 경우 IdM DNS 영역의 TTL 값을 조정해야 합니다. 클라이언트가 사이트 간에 로밍하는 데 필요한 시간보다 낮은 값으로 값을 설정합니다. 이렇게 하면 클라이언트에서 캐시된 DNS 항목이 다른 사이트에 다시 연결되기 전에 만료되므로 DNS 서버를 쿼리하여 위치별 SRV 레코드를 새로 고칩니다.

30.4. Ansible을 사용하여 IdM 위치가 있는지 확인

RHEL IdM(Identity Management)의 시스템 관리자는 클라이언트가 가장 가까운 네트워크 인프라 내에서 인증 서버를 찾을 수 있도록 IdM DNS 위치를 구성할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 DNS 위치가 IdM에 있는지 확인하는 방법을 설명합니다. 이 예제에서는 IdM에 germany DNS 위치가 있는지 확인하는 방법을 설명합니다. 결과적으로 로컬 IdM 클라이언트가 서버 응답 시간을 단축하는 데 사용할 수 있도록 특정 IdM 서버를 이 위치에 할당할 수 있습니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • DNS 위치에 대한 배포 고려 사항을 이해하십시오.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/location/ 디렉터리에 있는 location-present.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/location/location-present.yml location-present-copy.yml
  3. 편집할 location-present-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipalocation 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 위치 이름으로 설정합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: location present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "germany" location is present
        freeipa.ansible_freeipa.ipalocation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: germany
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory location-present-copy.yml

30.5. Ansible을 사용하여 IdM 위치가 없는지 확인

RHEL IdM(Identity Management)의 시스템 관리자는 클라이언트가 가장 가까운 네트워크 인프라 내에서 인증 서버를 찾을 수 있도록 IdM DNS 위치를 구성할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 IdM에 DNS 위치가 없는지 확인하는 방법을 설명합니다. 이 예제에서는 IdM에 germany DNS 위치가 없는지 확인하는 방법을 설명합니다. 결과적으로 특정 IdM 서버를 이 위치에 할당할 수 없으며 로컬 IdM 클라이언트는 이를 사용할 수 없습니다.

사전 요구 사항

  • 많은 DNS 위치에 IdM 서버가 할당되지 않습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 이 예제에서는 ~/MyPlaybooks/ 디렉터리를 샘플 플레이북의 복사본을 저장할 중앙 위치로 생성 및 구성 했다고 가정합니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/location/ 디렉터리에 있는 location-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/location/location-absent.yml location-absent-copy.yml
  3. 편집할 location-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipalocation 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 DNS 위치의 이름으로 설정합니다.
    • state 변수가 absent 로 설정되어 있는지 확인합니다.

    현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: location absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "germany" location is absent
        freeipa.ansible_freeipa.ipalocation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: germany
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory location-absent-copy.yml

31장. IdM에서 DNS 전달 관리

IdM(Identity Management) 웹 UI, IdM CLI 및 Ansible 사용에서 DNS 글로벌 전달자 및 DNS 전달 영역을 구성하는 방법을 알아봅니다.

31.1. IdM DNS 서버의 두 가지 역할

DNS 전달은 DNS 서비스에서 DNS 쿼리에 응답하는 방법에 영향을 미칩니다. 기본적으로 IdM과 통합된 Berkeley Internet Name Domain(BIND) 서비스는 권한 있는 DNS 서버 및 재귀 DNS 서버 역할을 합니다.

권한 있는 DNS 서버
DNS 클라이언트가 IdM 서버가 권한이 있는 DNS 영역에 속하는 이름을 쿼리하면 BIND는 구성된 영역에 포함된 데이터로 응답합니다. 권한 있는 데이터는 항상 다른 데이터보다 우선합니다.
재귀 DNS 서버
DNS 클라이언트에서 IdM 서버가 권한이 없는 이름을 쿼리하면 BIND에서 다른 DNS 서버를 사용하여 쿼리를 확인하려고 합니다. 전달자가 정의되지 않은 경우 BIND에서 인터넷의 루트 서버를 요청하고 재귀 확인 알고리즘을 사용하여 DNS 쿼리에 응답합니다.

경우에 따라 BIND에서 다른 DNS 서버에 직접 연결하고 인터넷에서 사용 가능한 데이터를 기반으로 재귀를 수행하는 것이 바람직하지 않습니다. 쿼리를 확인하기 위해 다른 DNS 서버인 전달자 를 사용하도록 BIND를 구성할 수 있습니다.

전달자를 사용하도록 BIND를 구성할 때 IdM 서버와 전달자 간에 쿼리 및 응답이 전달되고 IdM 서버는 인증되지 않은 데이터에 대한 DNS 캐시 역할을 합니다.

31.2. IdM 웹 UI에 글로벌 전달자 추가

IdM(Identity Management) 웹 UI에 글로벌 DNS 전달자를 추가하려면 다음 절차를 따르십시오.

사전 요구 사항

  • IdM 관리자로 IdM WebUI에 로그인되어 있습니다.
  • 쿼리를 전달할 DNS 서버의 인터넷 프로토콜(IP) 주소를 알고 있습니다.

프로세스

  1. IdM 웹 UI에서 네트워크 서비스DNS 글로벌 구성 → DNS 를 선택합니다.

    DNS 메뉴에서 DNS 전달 영역 선택
  2. DNS 글로벌 구성 섹션에서 추가 를 클릭합니다.

    추가 버튼 선택
  3. 전달된 DNS 쿼리를 수신할 DNS 서버의 IP 주소를 지정합니다.

    글로벌 전달자의 IP 주소 입력
  4. Forward 정책을 선택합니다.

    DNS 전달 정책 선택 및 DNS 글로벌 구성 저장
  5. 창 상단에서 저장을 클릭합니다.

검증

  1. 네트워크 서비스DNS 글로벌 구성DNS 를 선택합니다.

    IdM 웹 UI에서 DNS 글로벌 구성 선택
  2. 지정한 전달 정책이 있고 IdM 웹 UI에 활성화되어 있는 글로벌 전달자가 있는지 확인합니다.

    글로벌 전달자의 존재 확인

31.3. CLI에서 글로벌 전달자 추가

CLI(명령줄)를 사용하여 글로벌 DNS 전달자를 추가하려면 다음 절차를 따르십시오.

사전 요구 사항

  • IdM 관리자로 로그인되어 있습니다.
  • 쿼리를 전달할 DNS 서버의 인터넷 프로토콜(IP) 주소를 알고 있습니다.

프로세스

  • ipa dnsconfig-mod 명령을 사용하여 새 글로벌 전달자를 추가합니다. --forwarder 옵션을 사용하여 DNS 전달자의 IP 주소를 지정합니다.

    [user@server ~]$ ipa dnsconfig-mod --forwarder=10.10.0.1
    Server will check DNS forwarder(s).
    This may take some time, please wait ...
      Global forwarders: 10.10.0.1
      IPA DNS servers: server.example.com

검증

  • dnsconfig-show 명령을 사용하여 글로벌 전달자를 표시합니다.

    [user@server ~]$ ipa dnsconfig-show
      Global forwarders: 10.10.0.1
      IPA DNS servers: server.example.com

31.4. IdM 웹 UI에 DNS 전달 영역 추가

IdM(Identity Management) 웹 UI에 DNS 전달 영역을 추가하려면 다음 절차를 따르십시오.

중요

전혀 필요하지 않은 한 전도 영역을 사용하지 마십시오. 전달 영역은 표준 솔루션이 아니며 이를 사용하면 예기치 않고 문제가 발생할 수 있습니다. 전달 영역을 사용해야 하는 경우 글로벌 전달 구성을 재정의하는 데 사용을 제한합니다.

새 DNS 영역을 생성할 때 Red Hat은 항상 이름 서버(NS) 레코드를 사용하여 표준 DNS 위임을 사용하고 전달 영역을 방지하는 것이 좋습니다. 대부분의 경우 글로벌 전달자를 사용하는 것으로 충분하며 전달 영역이 필요하지 않습니다.

사전 요구 사항

  • IdM 관리자로 IdM WebUI에 로그인되어 있습니다.
  • 쿼리를 전달할 DNS 서버의 인터넷 프로토콜(IP) 주소를 알고 있습니다.

프로세스

  1. IdM 웹 UI에서 네트워크 서비스DNS 전달 영역 → DNS 를 선택합니다.

    DNS 메뉴에서 DNS 전달 영역 선택
  2. DNS 전달 영역 섹션에서 추가 를 클릭합니다.

    추가 버튼 선택
  3. Add DNS forward zone 창에서 forward zone name을 지정합니다.

    새 전달 영역의 이름 입력
  4. 추가 버튼을 클릭하고 전달 요청을 수신할 DNS 서버의 IP 주소를 지정합니다. 전달 영역당 여러 전달자를 지정할 수 있습니다.

    전달자 DNS 서버의 IP 주소 지정
  5. Forward 정책을 선택합니다.

    Forward Policy 선택
  6. 창 하단에서 추가 를 클릭하여 새 전달 영역을 추가합니다.

검증

  1. IdM 웹 UI에서 네트워크 서비스DNS 전달 영역 → DNS 를 선택합니다.

    DNS 메뉴에서 DNS 전달 영역 선택
  2. 지정한 전달자 및 전달 정책을 사용하여 생성한 전달 영역이 IdM 웹 UI에 있고 활성화되어 있는지 확인합니다.

    새 정방향 영역이 있는지 확인

31.5. CLI에서 DNS 전달 영역 추가

CLI(명령줄)를 사용하여 DNS 전달 영역을 추가하려면 다음 절차를 따르십시오.

중요

전혀 필요하지 않은 한 전도 영역을 사용하지 마십시오. 전달 영역은 표준 솔루션이 아니며 이를 사용하면 예기치 않고 문제가 발생할 수 있습니다. 전달 영역을 사용해야 하는 경우 글로벌 전달 구성을 재정의하는 데 사용을 제한합니다.

새 DNS 영역을 생성할 때 Red Hat은 항상 이름 서버(NS) 레코드를 사용하여 표준 DNS 위임을 사용하고 전달 영역을 방지하는 것이 좋습니다. 대부분의 경우 글로벌 전달자를 사용하는 것으로 충분하며 전달 영역이 필요하지 않습니다.

사전 요구 사항

  • IdM 관리자로 로그인되어 있습니다.
  • 쿼리를 전달할 DNS 서버의 인터넷 프로토콜(IP) 주소를 알고 있습니다.

프로세스

  • dnsforwardzone-add 명령을 사용하여 새 forward 영역을 추가합니다. forward 정책이 none 이 아닌 경우 --forwarder 옵션을 사용하여 하나 이상의 전달자를 지정하고 --forward-policy 옵션을 사용하여 전달 정책을 지정합니다.

    [user@server ~]$ ipa dnsforwardzone-add forward.example.com. --forwarder=10.10.0.14 --forwarder=10.10.1.15 --forward-policy=first
    
    Zone name: forward.example.com.
    Zone forwarders: 10.10.0.14, 10.10.1.15
    Forward policy: first

검증

  • dnsforwardzone-show 명령을 사용하여 방금 생성한 DNS 전달 영역을 표시합니다.

    [user@server ~]$ ipa dnsforwardzone-show forward.example.com.
    
    Zone name: forward.example.com.
    Zone forwarders: 10.10.0.14, 10.10.1.15
    Forward policy: first

31.6. Ansible을 사용하여 IdM에 DNS 글로벌 전달자 설정

Ansible 플레이북을 사용하여 IdM에서 DNS 글로벌 전달자를 설정하려면 다음 절차를 따르십시오.

아래 예제 절차에서 IdM 관리자는 IP(Internet Protocol) v4 주소 8.8.6.6 및 포트 53 의 IPv6 주소 2001:4860:4860::8800 을 사용하여 DNS 서버에 대한 DNS 글로벌 전달자를 생성합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig
  2. set-configuration.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp set-configuration.yml establish-global-forwarder.yml
  3. 편집을 위해 establish-global-forwarder.yml 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. 플레이북의 name 변수를 Playbook으로 변경하여 IdM DNS에서 글로벌 전달자를 설정합니다.
    2. tasks 섹션에서 DNS 글로벌 전달자를 8.8.6.6 및 2001:4860:4860::8800으로 생성하도록 작업의 이름을 변경합니다.
    3. freeipa.ansible_freeipa.ipadnsconfig 부분의 전달자 섹션에서 다음을 수행합니다.

      1. 첫 번째 ip_address 값을 글로벌 전달자의 IPv4 주소로 변경합니다. 8.8.6.6.
      2. 두 번째 ip_address 값을 글로벌 전달자 2001:4860:4860::8800 의 IPv6 주소로 변경합니다.
      3. port 값이 53 으로 설정되어 있는지 확인합니다.
    4. forward_policy 번째로 변경합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to establish a global forwarder in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create a DNS global forwarder to 8.8.6.6 and 2001:4860:4860::8800
        freeipa.ansible_freeipa.ipadnsconfig:
          forwarders:
            - ip_address: 8.8.6.6
            - ip_address: 2001:4860:4860::8800
              port: 53
          forward_policy: first
          allow_sync_ptr: true
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file establish-global-forwarder.yml

다음 절차에 따라 Ansible 플레이북을 사용하여 IdM에서 DNS 글로벌 전달자가 비활성화되었는지 확인합니다. 아래 예제 절차에서는 IdM 관리자가 글로벌 전달자의 전달 정책이 none 으로 설정되어 글로벌 전달자를 효과적으로 비활성화합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig
  2. 모든 DNS 글로벌 전달자를 비활성화하도록 이미 구성된 disable-global-forwarders.yml Ansible 플레이북 파일의 내용을 확인합니다. 예를 들면 다음과 같습니다.

    $ cat disable-global-forwarders.yml
    ---
    - name: Playbook to disable global DNS forwarders
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Disable global forwarders.
        freeipa.ansible_freeipa.ipadnsconfig:
          forward_policy: none
  3. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file disable-global-forwarders.yml

31.8. Ansible을 사용하여 IdM에 DNS 전달 영역이 있는지 확인

Ansible 플레이북을 사용하여 IdM에 DNS 전달 영역이 있는지 확인하려면 다음 절차를 따르십시오. 아래 예제 절차에서 IdM 관리자는 IP(Internet Protocol) 주소가 8.8.8.8 인 DNS 서버로 example.com 의 DNS 전달 영역이 있는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig
  2. forwarders-absent.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp forwarders-absent.yml ensure-presence-forwardzone.yml
  3. 편집을 위해 ensure-presence-forwardzone.yml 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. 플레이북의 name 변수를 Playbook으로 변경하여 IdM DNS에 dnsforwardzone이 있는지 확인합니다.
    2. tasks 섹션에서 작업 이름을 example.com의 dnsforwardzone이 있는지 확인하도록 8.8.8.8로 변경합니다.
    3. tasks 섹션에서 freeipa.ansible_freeipa.ipadnsconfig 제목을 freeipa.ansible_freeipa.ipadnsforwardzone 로 변경합니다.
    4. freeipa.ansible_freeipa.ipadnsforwardzone 섹션에서 다음을 수행합니다.

      1. ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
      2. name 변수를 추가하고 example.com 으로 설정합니다.
      3. forwarders 섹션에서 다음을 수행합니다.

        1. ip_addressport 행을 제거합니다.
        2. 대시 후에 전달된 요청을 수신할 DNS 서버의 IP 주소를 추가합니다.

          - 8.8.8.8
      4. forwardpolicy 변수를 추가하고 먼저 설정합니다.
      5. skip_overlap_check 변수를 추가하고 true 로 설정합니다.
      6. state 변수를 present 로 변경합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to ensure the presence of a dnsforwardzone in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the presence of a dnsforwardzone for example.com to 8.8.8.8
      freeipa.ansible_freeipa.ipadnsforwardzone:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: example.com
          forwarders:
              - 8.8.8.8
          forwardpolicy: first
          skip_overlap_check: true
          state: present
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-forwardzone.yml

Ansible 플레이북을 사용하여 IdM의 DNS 전달 영역에 여러 전달자가 있는지 확인하려면 다음 절차를 따르십시오. 아래 예제 절차에서는 IdM 관리자가 example.com 의 DNS 전달 영역이 8.8.8.84.4.4.4 로 전달되는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig
  2. forwarders-absent.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp forwarders-absent.yml ensure-presence-multiple-forwarders.yml
  3. 편집을 위해 ensure-presence-multiple-forwarders.yml 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. 플레이북의 name 변수를 Playbook으로 변경하여 IdM DNS의 dnsforwardzone에 여러 전달자가 있는지 확인합니다.
    2. tasks 섹션에서 작업 이름을 dnsforwardzone의 8.8.8.8 및 4.4.4.4 전달자가 있는지 확인하도록 변경합니다.
    3. tasks 섹션에서 freeipa.ansible_freeipa.ipadnsconfig 제목을 freeipa.ansible_freeipa.ipadnsforwardzone 로 변경합니다.
    4. freeipa.ansible_freeipa.ipadnsforwardzone 섹션에서 다음을 수행합니다.

      1. ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
      2. name 변수를 추가하고 example.com 으로 설정합니다.
      3. forwarders 섹션에서 다음을 수행합니다.

        1. ip_addressport 행을 제거합니다.
        2. 확인하려는 DNS 서버의 IP 주소를 추가합니다. 대시 앞에 대시를 추가합니다.

          - 8.8.8.8
          - 4.4.4.4
      4. state 변수를 present로 변경합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: name: Playbook to ensure the presence of multiple forwarders in a dnsforwardzone in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure presence of 8.8.8.8 and 4.4.4.4 forwarders in dnsforwardzone for example.com
      freeipa.ansible_freeipa.ipadnsforwardzone:
          ipaadmin_password: "{{ ipaadmin_password }}"
         name: example.com
          forwarders:
              - 8.8.8.8
              - 4.4.4.4
          state: present
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-multiple-forwarders.yml

IdM에서 DNS 전달 영역이 비활성화되어 있는지 확인하려면 Ansible 플레이북을 사용하려면 다음 절차를 따르십시오. 아래 예제 절차에서는 IdM 관리자가 example.com 의 DNS 전달 영역이 비활성화되어 있는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig
  2. forwarders-absent.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp forwarders-absent.yml ensure-disabled-forwardzone.yml
  3. 편집할 ensure-disabled-forwardzone.yml 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. 플레이북의 name 변수를 Playbook으로 변경하여 IdM DNS에서 dnsforwardzone이 비활성화되었는지 확인합니다.
    2. tasks 섹션에서 작업 이름을 Ensure a dnsforwardzone for example.com is disabled 로 변경합니다.
    3. tasks 섹션에서 freeipa.ansible_freeipa.ipadnsconfig 제목을 freeipa.ansible_freeipa.ipadnsforwardzone 로 변경합니다.
    4. freeipa.ansible_freeipa.ipadnsforwardzone 섹션에서 다음을 수행합니다.

      1. ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
      2. name 변수를 추가하고 example.com 으로 설정합니다.
      3. 전체 forwarders 섹션을 제거하십시오.
      4. state 변수를 disabled 로 변경합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to ensure a dnsforwardzone is disabled in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure a dnsforwardzone for example.com is disabled
      freeipa.ansible_freeipa.ipadnsforwardzone:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: example.com
          state: disabled
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-disabled-forwardzone.yml

31.11. Ansible을 사용하여 IdM에 DNS 전달 영역이 없는지 확인

다음 절차에 따라 Ansible 플레이북을 사용하여 IdM에 DNS 전달 영역이 없는지 확인합니다. 아래 예제 절차에서는 IdM 관리자가 example.com 의 DNS 전달 영역이 없는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsconfig
  2. forwarders-absent.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp forwarders-absent.yml ensure-absence-forwardzone.yml
  3. 편집을 위해 ensure-absence-forwardzone.yml 파일을 엽니다.
  4. 다음 변수를 설정하여 파일을 조정합니다.

    1. 플레이북의 name 변수를 Playbook으로 변경하여 IdM DNS에 dnsforwardzone이 없는지 확인합니다.
    2. tasks 섹션에서 작업의 이름을 변경하여 example.com에 대한 dnsforwardzone이 없는지 확인합니다.
    3. tasks 섹션에서 freeipa.ansible_freeipa.ipadnsconfig 제목을 freeipa.ansible_freeipa.ipadnsforwardzone 로 변경합니다.
    4. freeipa.ansible_freeipa.ipadnsforwardzone 섹션에서 다음을 수행합니다.

      1. ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
      2. name 변수를 추가하고 example.com 으로 설정합니다.
      3. 전체 forwarders 섹션을 제거하십시오.
      4. state 변수를 absent 로 둡니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Playbook to ensure the absence of a dnsforwardzone in IdM DNS
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure the absence of a dnsforwardzone for example.com
        freeipa.ansible_freeipa.ipadnsforwardzone:
           ipaadmin_password: "{{ ipaadmin_password }}"
           name: example.com
           state: absent
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-forwardzone.yml

32장. Ansible을 사용하여 IdM에서 DNS 레코드 관리

이 장에서는 Ansible 플레이북을 사용하여 RHEL IdM(Identity Management)에서 DNS 레코드를 관리하는 방법을 설명합니다. IdM 관리자는 IdM에서 DNS 레코드를 추가, 수정, 삭제할 수 있습니다.

32.1. IdM의 DNS 레코드

RHEL IdM(Identity Management)은 다양한 DNS 레코드 유형을 지원합니다. 다음의 4가지가 가장 자주 사용됩니다:

A

호스트 이름과 IPv4 주소에 대한 기본 맵입니다. A 레코드의 레코드 이름은 호스트 이름(예: WWW) 입니다. A 레코드의 IP 주소 값은 192.0.2.1 과 같은 IPv4 주소입니다.

A 레코드에 대한 자세한 내용은 RFC 1035 를 참조하십시오.

AAAA

호스트 이름과 IPv6 주소에 대한 기본 맵입니다. AAAA 레코드의 레코드 이름은 WWW 과 같은 호스트 이름입니다. IP Address 값은 2001:DB8::1111 과 같은 IPv6 주소입니다.

AAAA 레코드에 대한 자세한 내용은 RFC 3596 을 참조하십시오.

SRV

서비스(SRV) 리소스 레코드 는 서비스 이름을 특정 서비스를 제공하는 서버의 DNS 이름에 매핑합니다. 예를 들어 이 레코드 유형은 LDAP 디렉터리와 같은 서비스를 관리하는 서버에 매핑할 수 있습니다.

SRV 레코드의 레코드 이름은 _service._protocol(예: _ldap. _tcp ) 형식을 갖습니다. SRV 레코드에 대한 구성 옵션에는 대상 서비스의 우선순위, 가중치, 포트 번호, 호스트 이름이 포함됩니다.

SRV 레코드에 대한 자세한 내용은 RFC 2782 를 참조하십시오.

PTR

포인터 레코드(PTR)는 IP 주소를 도메인 이름에 매핑하는 역방향 DNS 레코드를 추가합니다.

참고

IPv4 주소에 대한 모든 역방향 DNS 조회는 in-addr.arpa. 도메인에 정의된 역방향 항목을 사용합니다. 사람이 읽을 수 있는 형식의 역방향 주소는 일반 IP 주소의 정확한 역방향이며 in-addr.arpa. 도메인이 추가됩니다. 예를 들어 네트워크 주소 192.0.2.0/24 의 경우 역방향 영역은 2.0.192.in-addr.arpa 입니다.

PTR의 레코드 이름은 RFC 1035 에 지정된 표준 형식이어야 하며 RFC 2317RFC 3596 이어야 합니다. 호스트 이름 값은 레코드를 생성할 호스트의 정식 호스트 이름이어야 합니다.

참고

역방향 영역은 .ip6.arpa. 도메인에 영역을 사용하여 IPv6 주소에 대해 구성할 수도 있습니다. IPv6 역방향 영역에 대한 자세한 내용은 RFC 3596 을 참조하십시오.

DNS 리소스 레코드를 추가할 때 많은 레코드에는 다른 데이터가 필요합니다. 예를 들어 CNAME 레코드에는 호스트 이름이 필요하지만 A 레코드에는 IP 주소가 필요합니다. IdM 웹 UI에서 현재 선택한 레코드 유형에 필요한 데이터를 반영하도록 새 레코드를 추가하기 위한 양식의 필드가 자동으로 업데이트됩니다.

32.2. 일반적인 ipa dnsrecord-* 옵션

RHEL IdM(Identity Management)에서 가장 일반적인 DNS 리소스 레코드 유형을 추가, 수정 및 삭제할 때 다음 옵션을 사용할 수 있습니다.

  • A (IPv4)
  • AAAA (IPv6)
  • SRV
  • PTR

Bash 에서는 --val1,val2,val3} 과 같은 중괄호 내에 쉼표로 구분된 목록에 값을 나열하여 여러 항목을 정의할 수 있습니다.

Expand
표 32.1. 일반 레코드 옵션
옵션설명

--TTL=number

기록에 대한 라이브 시간을 설정합니다.

--structured

원시 DNS 레코드를 구문 분석하고 구조화된 형식으로 반환합니다.

Expand
표 32.2. "a" 레코드 옵션
옵션설명

--a-rec=ARECORD

단일 A 레코드 또는 A 레코드 목록을 전달합니다.

ipa dnsrecord-add idm.example.com host1 --a-rec=192.168.122.123

지정된 IP 주소를 사용하여 와일드카드 A 레코드를 생성할 수 있습니다.

ipa dnsrecord-add idm.example.com "*" --a-rec=192.168.122.123 [a]

--a-ip-address=string

레코드의 IP 주소를 지정합니다. 레코드를 만들 때 A 레코드 값을 지정하는 옵션은 --a-rec 입니다. 그러나 A 레코드를 수정할 때 --a-rec 옵션은 A 레코드의 현재 값을 지정하는 데 사용됩니다. 새 값은 --a-ip-address 옵션을 사용하여 설정됩니다.

ipa dnsrecord-mod idm.example.com --a-rec 192.168.122.123 --a-ip-address 192.168.122.124

[a] 이 예제에서는 IP 주소가 192.0.2.123인 와일드카드 A 레코드를 생성합니다.
Expand
표 32.3. "AAAA" 레코드 옵션
옵션설명

--aaaa-rec=AAAARECORD

단일 AAAA(IPv6) 레코드 또는 AAAA 레코드 목록을 전달합니다.

ipa dnsrecord-add idm.example.com www --aaaa-rec 2001:db8::1231:5675

--aaaa-ip-address=string

레코드에 IPv6 주소를 지정합니다. 레코드를 만들 때 A 레코드 값을 지정하는 옵션은 --aaa-rec 입니다. 그러나 A 레코드를 수정할 때 --aaaa-rec 옵션은 A 레코드의 현재 값을 지정하는 데 사용됩니다. 새 값은 --a-ip-address 옵션을 사용하여 설정됩니다.

IPA dnsrecord-mod idm.example.com --aaaa-rec 2001:db8::1231:5675 --aaaa-ip-address 2001:db8::1231:5676

Expand
표 32.4. "PTR" 레코드 옵션
옵션설명

--ptr-rec=PTRRECORD

단일 PTR 레코드 또는 PTR 레코드 목록을 전달합니다. 역방향 DNS 레코드를 추가할 때 ipa dnsrecord-add 명령과 함께 사용되는 영역 이름은 다른 DNS 레코드를 추가하는 사용법과 비교됩니다. 일반적으로 호스트 IP 주소는 지정된 네트워크에서 IP 주소의 마지막 옥텟입니다. 오른쪽의 첫 번째 예제에서는 IPv4 주소가 192.168.122.4인 server4.idm.example.com 에 대한 PTR 레코드를 추가합니다. 두 번째 예제는 역방향 DNS 항목을 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa에 추가합니다. IP 주소 2001:DB8::1111 이 있는 호스트 server2.example.com 의 IPv6 역방향 영역입니다.

ipa dnsrecord-add 122.168.192.in-addr.arpa 4 --ptr-rec server4.idm.example.com.

$ ipa dnsrecord-add 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. 1.1.1.0.0.0.0.0.0.0.0.0.0.0.0 --ptr-rec server2.idm.example.com.

--ptr-hostname=string

레코드의 호스트 이름을 지정합니다.

 
Expand
표 32.5. "SRV" 레코드 옵션
옵션설명

--srv-rec=SRVRECORD

단일 SRV 레코드 또는 SRV 레코드 목록을 전달합니다. 오른쪽에 있는 예제에서 _ldap._tcp 는 SRV 레코드에 대한 서비스 유형 및 연결 프로토콜을 정의합니다. --srv-rec 옵션은 우선순위, 가중치, 포트, 대상 값을 정의합니다. 예에서 51 및 49의 가중치 값은 최대 100을 추가하고 특정 레코드가 사용되는 확률을 백분율로 나타냅니다.

# ipa dnsrecord-add idm.example.com _ldap._tcp --srv-rec="0 51 389 server1.idm.example.com."

# IPA dnsrecord-add server.idm.example.com _ldap._tcp --srv-rec="1 49 389 server2.idm.example.com."

--srv-priority=number

레코드의 우선 순위를 설정합니다. 서비스 유형에 대한 SRV 레코드가 여러 개 있을 수 있습니다. 우선순위 (0 - 65535)는 레코드의 순위를 설정합니다. 숫자가 낮고 우선 순위가 높습니다. 서비스는 우선 순위가 가장 높은 레코드를 먼저 사용해야 합니다.

# IPA dnsrecord-mod server.idm.example.com _ldap._tcp --srv-rec="1 49 389 server2.idm.example.com." --srv-priority=0

--srv-weight=number

레코드의 가중치를 설정합니다. 이렇게 하면 우선 순위가 동일한 SRV 레코드 순서를 결정하는 데 도움이 됩니다. 설정 가중치는 특정 레코드가 사용되는 확률(%)을 나타내는 최대 100개를 추가해야 합니다.

# IPA dnsrecord-mod server.idm.example.com _ldap._tcp --srv-rec="0 49 389 server2.idm.example.com." --srv-weight=60

--srv-port=number

대상 호스트에서 서비스의 포트를 제공합니다.

# IPA dnsrecord-mod server.idm.example.com _ldap._tcp --srv-rec="0 60 389 server2.idm.example.com." --srv-port=636

--srv-target=string

대상 호스트의 도메인 이름을 지정합니다. 이는 도메인에서 서비스를 사용할 수 없는 경우 단일 기간(.)일 수 있습니다.

 

32.3. Ansible을 사용하여 IdM에 A 및 AAAA DNS 레코드가 있는지 확인

Ansible 플레이북을 사용하여 특정 IdM 호스트의 A 및 AAAA 레코드가 있는지 확인하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예에서 IdM 관리자는 idm.example.com DNS 영역에 host1 에 대한 A 및 AAAA 레코드가 있는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • idm.example.com 영역이 존재하며 IdM DNS에서 관리합니다. IdM DNS에 기본 DNS 영역을 추가하는 방법에 대한 자세한 내용은 Ansible 플레이북을 사용하여 IdM DNS 영역 관리를 참조하십시오.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsrecord 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsrecord
  2. ensure-A-and-AAAA-records-are-present.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp ensure-A-and-AAAA-records-are-present.yml ensure-A-and-AAAA-records-are-present-copy.yml
  3. 편집을 위해 ensure-A-and-AAAA-records-are-present-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadnsrecord 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • zone_name 변수를 idm.example.com 으로 설정합니다.
    • records 변수에서 name 변수를 host1 로 설정하고 a_ip_address 변수를 192.168.122.123 로 설정합니다.
    • records 변수에서 name 변수를 host1 로, aaaa_ip_address 변수를 ::1 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Ensure A and AAAA records are present
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      # Ensure A and AAAA records are present
      - name: Ensure that 'host1' has A and AAAA records.
        freeipa.ansible_freeipa.ipadnsrecord:
          ipaadmin_password: "{{ ipaadmin_password }}"
          zone_name: idm.example.com
          records:
          - name: host1
            a_ip_address: 192.168.122.123
          - name: host1
            aaaa_ip_address: ::1
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-A-and-AAAA-records-are-present-copy.yml

32.4. Ansible을 사용하여 IdM에 A 및 PTR DNS 레코드가 있는지 확인

Ansible 플레이북을 사용하여 특정 IdM 호스트의 A 레코드가 해당 PTR 레코드와 함께 있는지 확인하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예에서 IdM 관리자는 idm.example.com 영역에 IP 주소가 192.168.122.45host1 의 A 및 PTR 레코드가 있는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • idm.example.com DNS 영역이 존재하며 IdM DNS에서 관리합니다. IdM DNS에 기본 DNS 영역을 추가하는 방법에 대한 자세한 내용은 Ansible 플레이북을 사용하여 IdM DNS 영역 관리를 참조하십시오.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsrecord 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsrecord
  2. ensure-dnsrecord-with-reverse-is-present.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp ensure-dnsrecord-with-reverse-is-present.yml ensure-dnsrecord-with-reverse-is-present-copy.yml
  3. 편집을 위해 ensure-dnsrecord-with-reverse-is-present-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadnsrecord 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 host1 로 설정합니다.
    • zone_name 변수를 idm.example.com 으로 설정합니다.
    • ip_address 변수를 192.168.122.45 로 설정합니다.
    • create_reverse 변수를 true 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Ensure DNS Record is present.
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      # Ensure that dns record is present
      - freeipa.ansible_freeipa.ipadnsrecord:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host1
          zone_name: idm.example.com
          ip_address: 192.168.122.45
          create_reverse: true
          state: present
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-dnsrecord-with-reverse-is-present-copy.yml

32.5. Ansible을 사용하여 IdM에 여러 DNS 레코드가 있는지 확인

Ansible 플레이북을 사용하여 여러 값이 특정 IdM DNS 레코드와 연결되어 있는지 확인하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예에서 IdM 관리자는 idm.example.com DNS 영역에 host1 에 대한 여러 A 레코드가 있는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • idm.example.com 영역이 존재하며 IdM DNS에서 관리합니다. IdM DNS에 기본 DNS 영역을 추가하는 방법에 대한 자세한 내용은 Ansible 플레이북을 사용하여 IdM DNS 영역 관리를 참조하십시오.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsrecord 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsrecord
  2. ensure-presence-multiple-records.yml Ansible 플레이북 파일을 복사합니다. 예를 들면 다음과 같습니다.

    $ cp ensure-presence-multiple-records.yml ensure-presence-multiple-records-copy.yml
  3. 편집을 위해 ensure-presence-multiple-records-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadnsrecord 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • records 섹션에서 name 변수를 host1 로 설정합니다.
    • records 섹션에서 zone_name 변수를 idm.example.com 으로 설정합니다.
    • records 섹션에서 a_rec 변수를 192.168.122.112 로 설정하고 192.168.122.122.
    • records 섹션에서 두 번째 레코드를 정의합니다.

      • name 변수를 host1 로 설정합니다.
      • zone_name 변수를 idm.example.com 으로 설정합니다.
      • aaaa_rec 변수를 ::1 로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Test multiple DNS Records are present.
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      # Ensure that multiple dns records are present
      - freeipa.ansible_freeipa.ipadnsrecord:
          ipaadmin_password: "{{ ipaadmin_password }}"
          records:
            - name: host1
              zone_name: idm.example.com
              a_rec: 192.168.122.112
              a_rec: 192.168.122.122
            - name: host1
              zone_name: idm.example.com
              aaaa_rec: ::1
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-multiple-records-copy.yml

32.6. Ansible을 사용하여 IdM에 CNAME 레코드가 여러 개 있는지 확인

Canonical Name record(CNAME 레코드)는 하나의 도메인 이름, 별칭을 다른 이름, 표준 이름에 매핑하는 DNS(Domain Name System)의 리소스 레코드 유형입니다.

단일 IP 주소(예: FTP 서비스 및 웹 서비스)에서 여러 서비스를 실행할 때 CNAME 레코드가 유용할 수 있습니다. 각각 다른 포트에서 실행됩니다.

Ansible 플레이북을 사용하여 IdM DNS에 여러 CNAME 레코드가 있는지 확인하려면 다음 절차를 따르십시오. 아래 절차에서 사용되는 예제에서 host03 은 HTTP 서버와 FTP 서버입니다. IdM 관리자는 idm.example.com 영역에 host03 A 레코드에 대한 Cryostat 및 ftp CNAME 레코드가 있는지 확인합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • idm.example.com 영역이 존재하며 IdM DNS에서 관리합니다. IdM DNS에 기본 DNS 영역을 추가하는 방법에 대한 자세한 내용은 Ansible 플레이북을 사용하여 IdM DNS 영역 관리를 참조하십시오.
  • host03 A 레코드는 idm.example.com 영역에 있습니다.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsrecord 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsrecord
  2. ensure-CNAME-record-is-present.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp ensure-CNAME-record-is-present.yml ensure-CNAME-record-is-present-copy.yml
  3. 편집을 위해 ensure-CNAME-record-is-present-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadnsrecord 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • 선택 사항: 플레이 이름으로 제공된 설명을 조정합니다.
    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • zone_name 변수를 idm.example.com 으로 설정합니다.
    • records 변수 섹션에서 다음 변수와 값을 설정합니다.

      • name 변수를 Cryostat로 설정합니다.
      • cname_hostname 변수를 host03 으로 설정합니다.
      • name 변수를 ftp 로 설정합니다.
      • cname_hostname 변수를 host03 으로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Ensure that 'www.idm.example.com' and 'ftp.idm.example.com' CNAME records point to 'host03.idm.example.com'.
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      - freeipa.ansible_freeipa.ipadnsrecord:
          ipaadmin_password: "{{ ipaadmin_password }}"
          zone_name: idm.example.com
          records:
          - name: www
            cname_hostname: host03
          - name: ftp
            cname_hostname: host03
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-CNAME-record-is-present.yml

32.7. Ansible을 사용하여 IdM에 SRV 레코드가 있는지 확인

DNS 서비스(SRV) 레코드는 도메인에서 사용할 수 있는 서비스의 호스트 이름, 포트 번호, 전송 프로토콜, 우선 순위 및 가중치를 정의합니다. RHEL IdM(Identity Management)에서는 SRV 레코드를 사용하여 IdM 서버 및 복제본을 찾을 수 있습니다.

Ansible 플레이북을 사용하여 IdM DNS에 SRV 레코드가 있는지 확인하려면 다음 절차를 따르십시오. 아래 절차에 사용된 예에서 IdM 관리자는 값이 10 50 88 idm.example.com_kerberos._udp.idm.example.example.com SRV 레코드가 있는지 확인합니다. 이렇게 하면 다음 값이 설정됩니다.

  • 서비스의 우선 순위를 10으로 설정합니다.
  • 서비스의 weight를 50으로 설정합니다.
  • 서비스에서 사용할 포트를 88으로 설정합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • idm.example.com 영역이 존재하며 IdM DNS에서 관리합니다. IdM DNS에 기본 DNS 영역을 추가하는 방법에 대한 자세한 내용은 Ansible 플레이북을 사용하여 IdM DNS 영역 관리를 참조하십시오.

프로세스

  1. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsrecord 디렉토리로 이동합니다.

    $ cd /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/dnsrecord
  2. ensure-SRV-record-is-present.yml Ansible 플레이북 파일의 사본을 만듭니다. 예를 들면 다음과 같습니다.

    $ cp ensure-SRV-record-is-present.yml ensure-SRV-record-is-present-copy.yml
  3. 편집을 위해 ensure-SRV-record-is-present-copy.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipadnsrecord 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 _kerberos._udp.idm.example.com 으로 설정합니다.
    • srv_rec 변수를 '10 50 88 idm.example.com' 로 설정합니다.
    • zone_name 변수를 idm.example.com 으로 설정합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Test multiple DNS Records are present.
      hosts: ipaserver
      become: true
      gather_facts: false
    
      tasks:
      # Ensure a SRV record is present
      - freeipa.ansible_freeipa.ipadnsrecord:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: _kerberos._udp.idm.example.com
          srv_rec: '10 50 88 idm.example.com'
          zone_name: idm.example.com
          state: present
  5. 파일을 저장합니다.
  6. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-SRV-record-is-present.yml

33장. Ansible을 사용하여 IdM 사용자의 NFS 공유

자동 완성은 여러 시스템에서 디렉토리를 관리, 구성 및 액세스하는 방법입니다. 자동 마운트는 액세스가 요청될 때마다 디렉토리를 마운트합니다. 이는 도메인 내의 클라이언트의 디렉터리를 쉽게 공유할 수 있으므로 RHEL IdM(Identity Management) 도메인 내에서 원활하게 작동합니다.

Ansible을 사용하여 IdM 위치에 IdM 클라이언트에 로그인한 IdM 사용자가 자동으로 마운트되도록 NFS 공유를 구성할 수 있습니다.

이 장의 예제에서는 다음 시나리오를 사용합니다.

  • nfs-server.idm.example.com 은 NFS(Network File System) 서버의 FQDN(정규화된 도메인 이름)입니다.
  • nfs-server.idm.example.comraleigh workspace 위치에 있는 IdM 클라이언트입니다.
  • NFS 서버는 /exports/project 디렉터리를 읽기-쓰기로 내보냅니다.
  • developers 그룹에 속한 모든 IdM 사용자는 NFS 서버와 동일한 raleigh itting 위치에 있는 IdM 클라이언트에서 /devel/project/ 로 내보낸 디렉터리의 콘텐츠에 액세스할 수 있습니다.
  • IdM-client.idm.example.comraleigh Cryostat 위치에 있는 IdM 클라이언트입니다.
중요

NFS 서버 대신 Samba 서버를 사용하여 IdM 클라이언트의 공유를 제공하려면 Red Hat Knowledgebase 솔루션에서 IPA 환경에서 Autofs로 kerberized CIFS 마운트 구성 방법을 참조하십시오.

 

33.1. IdM의 경우,

Cryo stat 서비스는 필요에 따라 디렉터리 마운트를 통해 디렉터리 액세스 시 디렉터리 마운트 를 마운트하도록 데몬에 지시하여 필요에 따라 마운트를 자동화합니다. 또한 일정이 비활성화된 후 Cryostat는 자동 마운트된 디렉토리를 마운트 해제하도록 지시합니다. 정적 마운트와 달리 온디맨드 마운트로 시스템 리소스를 절약할 수 있습니다.

자동 완성 맵

Cryostat를 사용하는 시스템에서 구성은 여러 다른 파일에 저장됩니다. 기본 설정 파일은 시스템에 있는 /etc/auto.master 입니다. 이 파일에는 시스템에 있는 mount 지점의 마스터 매핑과 관련 리소스가 포함됩니다. 이 매핑을 map이라고 합니다.

/etc/auto.master 구성 파일에는 마스터 맵 이 포함되어 있습니다. 다른 맵에 대한 참조를 포함할 수 있습니다. 이러한 맵은 직접 또는 간접일 수 있습니다. 직접 맵은 마운트 지점에 절대 경로 이름을 사용하는 반면 간접 맵은 상대 경로 이름을 사용합니다.

IdM의 구성

일반적으로 Cryo stat는 로컬 /etc/auto.master 및 관련 파일에서 맵 데이터를 검색하지만 다른 소스에서 맵 데이터를 검색할 수도 있습니다. 일반적인 소스 중 하나는 LDAP 서버입니다. RHEL IdM(Identity Management)의 컨텍스트에서는 389 디렉토리 서버입니다.

Cryostat를 사용하는 시스템이 IdM 도메인의 클라이언트인 경우, 자동 설정 구성은 로컬 구성 파일에 저장되지 않습니다. 대신 맵, 위치 및 키와 같은 Cryostat 구성은 IdM 디렉터리에 LDAP 항목으로 저장됩니다. 예를 들어 idm.example.com IdM 도메인의 경우 기본 마스터 맵 은 다음과 같이 저장됩니다.

dn:
automountmapname=auto.master,cn=default,cn=automount,dc=idm,dc=example,dc=com
objectClass: automountMap
objectClass: top
automountMapName: auto.master

Red Hat Enterprise Linux IdM(Identity Management)을 사용하는 경우 NFS 서버를 IdM 도메인에 연결할 수 있습니다. 이를 통해 사용자와 그룹을 중앙에서 관리하고 인증, 무결성 보호 및 트래픽 암호화에 Kerberos를 사용할 수 있습니다.

사전 요구 사항

  • NFS 서버는 Red Hat Enterprise Linux IdM(Identity Management) 도메인에 등록되어 있습니다.
  • NFS 서버가 실행 중이고 구성되어 있습니다.

프로세스

  1. IdM 관리자로 kerberos 티켓을 받습니다.

    # kinit admin
  2. nfs/<FQDN> 서비스 주체를 생성합니다.

    # ipa service-add nfs/nfs_server.idm.example.com
  3. IdM에서 nfs 서비스 주체를 검색하여 /etc/krb5.keytab 파일에 저장합니다.

    # ipa-getkeytab -s idm_server.idm.example.com -p nfs/nfs_server.idm.example.com -k /etc/krb5.keytab
  4. 선택 사항: /etc/krb5.keytab 파일에서 주체를 표시합니다.

    # klist -k /etc/krb5.keytab
    Keytab name: FILE:/etc/krb5.keytab
    KVNO Principal
    ---- --------------------------------------------------------------------------
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM
       7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM

    기본적으로 IdM 클라이언트는 호스트를 IdM 도메인에 결합할 때 /etc/krb5.keytab 파일에 호스트 주체를 추가합니다. 호스트 주체가 없는 경우 ipa-getkeytab -s idm_server.idm.example.com -p host/nfs_server.idm.example.com -k /etc/krb5.keytab 명령을 사용하여 추가합니다.

  5. ipa-client-automount 유틸리티를 사용하여 IdM ID의 매핑을 구성합니다.

    #  ipa-client-automount
    Searching for IPA server...
    IPA server: DNS discovery
    Location: default
    Continue to configure the system with these values? [no]: yes
    Configured /etc/idmapd.conf
    Restarting sssd, waiting for it to become available.
    Started autofs
  6. /etc/exports 파일을 업데이트하고 Kerberos 보안 방법을 클라이언트 옵션에 추가합니다. 예를 들면 다음과 같습니다.

    /nfs/projects/      	192.0.2.0/24(rw,sec=krb5i)

    클라이언트가 여러 보안 방법 중에서 선택할 수 있도록 하려면 해당 방법을 콜론으로 구분하여 지정합니다.

    /nfs/projects/      	192.0.2.0/24(rw,sec=krb5:krb5i:krb5p)
  7. 내보낸 파일 시스템을 다시 로드합니다.

    # exportfs -r

33.3. Ansible을 사용하여 IdM의 위치, 맵 및 키 구성

RHEL IdM(Identity Management) 시스템 관리자는 지정된 위치의 IdM 사용자가 호스트의 특정 마운트 지점으로 이동하여 NFS 서버에서 내보낸 공유에 액세스할 수 있도록 IdM의 위치 및 맵을 구성할 수 있습니다. 내보낸 NFS 서버 디렉토리와 마운트 지점이 모두 맵에 지정됩니다. LDAP 용어에서 위치는 이러한 맵 항목의 컨테이너입니다.

이 예제에서는 Ansible을 사용하여 raleigh 위치를 구성하는 방법과 IdM 클라이언트의 /devel/project 마운트 지점에 nfs-server.idm.example.com:/exports/project 공유를 읽기-쓰기 디렉터리로 마운트하는 맵을 설명합니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. Ansible 제어 노드에서 ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automount/ 디렉터리에 있는 daily -location-present.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/playbooks/automount/automount-location-present.yml automount-location-map-and-key-present.yml
  3. 편집을 위해 조각화-location-map-and-key-present.yml 파일을 엽니다.
  4. freeipa.ansible_freeipa.ipaautomountlocation 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수 값이 secret.yml Ansible vault 파일에 정의되어 있음을 나타냅니다.
    • name 변수를 raleigh 로 설정합니다.
    • state 변수가 present 로 설정되어 있는지 확인합니다.

      현재 예에 대해 수정된 Ansible 플레이북 파일입니다.

    ---
    - name: Automount location present example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure automount location is present
        freeipa.ansible_freeipa.ipaautomountlocation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: raleigh
          state: present
  5. audit -location-map-and-key-present.yml 파일을 계속 편집합니다.

    1. tasks 섹션에서 tasks 맵이 있는지 확인하는 작업을 추가합니다.

      [...]
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
      [...]
        - name: ensure map named auto.devel in location raleigh is created
          freeipa.ansible_freeipa.ipaautomountmap:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: auto.devel
            location: raleigh
            state: present
    2. 다른 작업을 추가하여 마운트 지점 및 NFS 서버 정보를 맵에 추가합니다.

      [...]
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
      [...]
        - name: ensure automount key /devel/project is present
          freeipa.ansible_freeipa.ipaautomountkey:
            ipaadmin_password: "{{ ipaadmin_password }}"
            location: raleigh
            mapname: auto.devel
            key: /devel/project
            info: nfs-server.idm.example.com:/exports/project
            state: present
    3. auto.develauto.master 에 연결되어 있는지 확인하는 다른 작업을 추가합니다.

      [...]
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
      [...]
      - name: Ensure auto.devel is connected in auto.master:
        freeipa.ansible_freeipa.ipaautomountkey:
          ipaadmin_password: "{{ ipaadmin_password }}"
          location: raleigh
          mapname: auto.map
          key: /devel
          info: auto.devel
          state: present
  6. 파일을 저장합니다.
  7. Ansible 플레이북을 실행하고 플레이북 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automount-location-map-and-key-present.yml

33.4. Ansible을 사용하여 NFS 공유를 소유한 그룹에 IdM 사용자 추가

RHEL IdM(Identity Management) 시스템 관리자는 Ansible을 사용하여 NFS 공유에 액세스할 수 있는 사용자 그룹을 생성하고 이 그룹에 IdM 사용자를 추가할 수 있습니다.

이 예제에서는 Ansible 플레이북을 사용하여 idm_user 계정이 developers 그룹에 속하는지 확인하여 idm_user/exports/project NFS 공유에 액세스할 수 있도록 하는 방법을 설명합니다.

사전 요구 사항

  • raleigh workspace 위치에 있는 IdM 클라이언트인 nfs-server.idm.example.com NFS 서버에 대한 루트 액세스 권한이 있습니다.
  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. Ansible 제어 노드에서 ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 편집을 위해 조각화-location-map-and-key-present.yml 파일을 엽니다.
  3. tasks 섹션에서 IdM developers 그룹이 존재하고 idm_user 가 이 그룹에 추가되었는지 확인하는 작업을 추가합니다.

    [...]
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
    [...]
      - ipagroup:
         ipaadmin_password: "{{ ipaadmin_password }}"
          name: developers
          user:
          - idm_user
          state: present
  4. 파일을 저장합니다.
  5. Ansible 플레이북을 실행하고 플레이북 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automount-location-map-and-key-present.yml
  6. NFS 서버에서 /exports/project 디렉터리의 그룹 소유권을 developers 로 변경하여 그룹의 모든 IdM 사용자가 디렉터리에 액세스할 수 있도록 합니다.

    # chgrp developers /exports/project

33.5. IdM 클라이언트에서 자동 구성

RHEL IdM(Identity Management) 시스템 관리자는 클라이언트가 추가된 위치에 대해 구성된 NFS 공유를 클라이언트에 로그인하면 IdM 사용자에게 자동으로 액세스할 수 있도록 IdM 클라이언트에서 자동 자동 마운트 서비스를 구성할 수 있습니다. 이 예제에서는 raleigh 위치에서 사용할 수 있는 서비스를 사용하도록 IdM 클라이언트를 구성하는 방법을 설명합니다.

사전 요구 사항

  • IdM 클라이언트에 대한 루트 액세스 권한이 있어야 합니다.
  • IdM 관리자로 로그인되어 있습니다.
  • network location이 있습니다. 예제 위치는 raleigh 입니다.

프로세스

  1. IdM 클라이언트에서 ipa-client-automount 명령을 입력하고 위치를 지정합니다. 스크립트를 자동으로 실행하려면 -U 옵션을 사용합니다.

    # ipa-client-automount --location raleigh -U
  2. Cryostat 서비스를 중지하고 SSSD 캐시를 지우고, Cryostat 서비스를 시작하여 새 구성 설정을 로드합니다.

    # systemctl stop autofs ; sss_cache -E ; systemctl start autofs

RHEL IdM(Identity Management) 시스템 관리자는 특정 그룹의 멤버인 IdM 사용자가 특정 IdM 클라이언트에 로그인하면 NFS 공유에 액세스할 수 있는지 테스트할 수 있습니다.

이 예제에서는 다음 시나리오를 테스트합니다.

  • developers 그룹에 속하는 idm_user 라는 IdM 사용자는 raleigh Cryostat 위치에 있는 IdM 클라이언트인 idm-client.idm.example.com 에서 /devel/project 디렉토리에 있는 파일의 내용을 읽고 쓸 수 있습니다.

프로세스

  1. IdM 사용자가 읽기-쓰기 디렉터리에 액세스할 수 있는지 확인합니다.

    1. IdM 사용자로 IdM 클라이언트에 연결합니다.

      $ ssh idm_user@idm-client.idm.example.com
      Password:
    2. IdM 사용자의 TGT( ticket-granting ticket)를 가져옵니다.

      $ kinit idm_user
    3. 선택 사항: IdM 사용자의 그룹 멤버십을 확인합니다.

      $ ipa user-show idm_user
        User login: idm_user
        [...]
        Member of groups: developers, ipausers
    4. /devel/project 디렉터리로 이동합니다.

      $ cd /devel/project
    5. 디렉터리 콘텐츠를 나열합니다.

      $ ls
      rw_file
    6. 디렉터리의 파일에 행을 추가하여 쓰기 권한을 테스트합니다.

      $ echo "idm_user can write into the file" > rw_file
    7. 선택 사항: 파일의 업데이트된 콘텐츠를 확인합니다.

      $ cat rw_file
      this is a read-write file
      idm_user can write into the file

    출력은 idm_user 가 파일에 쓸 수 있음을 확인합니다.

34장. Ansible을 사용하여 NIS 도메인 및 netgroups와 IdM 통합

34.1. NIS 및 이점

UNIX 환경에서 NIS(네트워크 정보 서비스)는 ID 및 인증을 중앙에서 관리하는 일반적인 방법입니다. 원래 Yellow Pages (YP)라는 이름의 NIS는 다음과 같은 인증 및 ID 정보를 중앙에서 관리합니다.

  • 사용자 및 암호
  • 호스트 이름 및 IP 주소
  • POSIX 그룹

예를 들어 호스트 인증을 제공하지 않으며 네트워크를 통해 암호화된 데이터도 제공하지 않기 때문에 최신 네트워크 인프라의 경우 NIS는 너무 안전하지 않은 것으로 간주됩니다. 이러한 문제를 해결하기 위해 NIS는 보안을 강화하기 위해 다른 프로토콜과 통합되는 경우가 많습니다.

RHEL IdM(Identity Management)을 사용하는 경우 NIS 서버 플러그인을 사용하여 IdM으로 완전히 마이그레이션할 수 없는 클라이언트를 연결할 수 있습니다. IdM은 netgroups 및 기타 NIS 데이터를 IdM 도메인에 통합합니다. 또한 사용자 및 호스트 ID를 NIS 도메인에서 IdM으로 쉽게 마이그레이션할 수 있습니다.

netgroups는 NIS 그룹이 예상되는 모든 곳에서 사용할 수 있습니다.

34.2. IdM의 NIS

IdM의 NIS 오브젝트

NIS 오브젝트는 RFC 2307 을 준수하여 Directory Server 백엔드에 통합되어 저장됩니다. IdM은 LDAP 디렉터리에 NIS 오브젝트를 생성하고 클라이언트는 암호화된 LDAP 연결을 사용하여 SSSD(System Security Services Daemon) 또는 nss_ldap 를 통해 검색합니다.

IdM은 네트워크 그룹, 계정, 그룹, 호스트 및 기타 데이터를 관리합니다. IdM은 NIS 리스너를 사용하여 암호, 그룹 및 netgroups를 IdM 항목에 매핑합니다.

IdM의 NIS 플러그인

NIS 지원의 경우 IdM은 slapi-nis 패키지에 제공된 다음 플러그인을 사용합니다.

NIS 서버 플러그인
NIS 서버 플러그인을 사용하면 IdM 통합 LDAP 서버가 클라이언트의 NIS 서버 역할을 할 수 있습니다. 이 역할에서 디렉터리 서버는 구성에 따라 NIS 맵을 동적으로 생성하고 업데이트합니다. IdM은 플러그인을 사용하여 NIS 프로토콜을 NIS 서버로 사용하여 클라이언트를 제공합니다.
스키마 호환성 플러그인

스키마 호환성 플러그인을 사용하면 Directory Server 백엔드에서 디렉터리 정보 트리(DIT)의 일부에 저장된 항목의 대체 보기를 제공할 수 있습니다. 여기에는 속성 값 추가, 삭제 또는 이름 변경 및 필요에 따라 트리의 여러 항목에서 속성 값을 검색하는 작업이 포함됩니다.

자세한 내용은 /usr/share/doc/slapi-nis-version/sch-getting-started.txt 파일을 참조하십시오.

34.3. IdM의 NIS netgroups

NIS 엔터티는 netgroups에 저장할 수 있습니다. netgroups는 UNIX 그룹과 비교하여 다음을 지원합니다.

  • 중첩 그룹(다른 그룹의 멤버인 그룹).
  • 호스트 그룹화.

netgroup은 host, user, domain이라는 정보 세트를 정의합니다. 이 세트를 트리플 이라고 합니다. 다음 세 필드에는 다음이 포함될 수 있습니다.

  • 값.
  • 대시(--)는 "유효한 값 없음"을 지정합니다.
  • 값이 없습니다. 빈 필드는 와일드카드를 지정합니다.
(host.example.com,,nisdomain.example.com)
(-,user,nisdomain.example.com)

클라이언트가 NIS netgroup을 요청하면 IdM은 LDAP 항목을 변환합니다.

  • 기존 NIS 맵으로 NIS 플러그인을 사용하여 NIS 프로토콜을 통해 클라이언트에 보냅니다.
  • RFC 2307 또는 RFC 2307bis와 호환되는 LDAP 형식입니다.

34.4. Ansible을 사용하여 netgroup이 있는지 확인

Ansible 플레이북을 사용하여 IdM netgroup이 있는지 확인할 수 있습니다. 이 예제에서는 TestNetgroup1 그룹이 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 netgroup-present.yml 을 생성합니다.

    ---
    - name: Playbook to manage IPA netgroup.
      hosts: ipaserver
      become: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure netgroup members are present
        freeipa.ansible_freeipa.ipanetgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: TestNetgroup1
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/netgroup-present.yml

34.5. Ansible을 사용하여 멤버가 netgroup에 있는지 확인

Ansible 플레이북을 사용하여 IdM 사용자, 그룹 및 netgroups가 netgroup의 멤버인지 확인할 수 있습니다. 이 예제에서는 TestNetgroup1 그룹에 다음 멤버가 있는지 확인하는 방법을 설명합니다.

  • user1user2 IdM 사용자
  • group1 IdM 그룹
  • admins netgroup
  • IdM 클라이언트인 idmclient1 호스트

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • TestNetgroup1 IdM netgroup이 있습니다.
  • user1user2 IdM 사용자가 있습니다.
  • group1 IdM 그룹이 있습니다.
  • admins IdM netgroup이 있습니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 IdM-members-present-in-a-netgroup.yml 을 생성합니다.

    ---
    - name: Playbook to manage IPA netgroup.
      hosts: ipaserver
      become: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure netgroup members are present
        freeipa.ansible_freeipa.ipanetgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: TestNetgroup1
          user: user1,user2
          group: group1
          host: idmclient1
          netgroup: admins
          action: member
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/IdM-members-present-in-a-netgroup.yml

34.6. Ansible을 사용하여 netgroup에서 멤버가 없는지 확인합니다.

Ansible 플레이북을 사용하여 IdM 사용자가 netgroup의 멤버인지 확인할 수 있습니다. 이 예제에서는 TestNetgroup1 그룹에 해당 멤버 중 user1 IdM 사용자가 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • TestNetgroup1 netgroup이 있습니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 IdM-member-absent-from-a-netgroup.yml 을 생성합니다.

    ---
    - name: Playbook to manage IPA netgroup.
      hosts: ipaserver
      become: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure netgroup user, "user1", is absent
        freeipa.ansible_freeipa.ipanetgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: TestNetgroup1
          user: "user1"
          action: member
          state: absent
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/IdM-member-absent-from-a-netgroup.yml

34.7. Ansible을 사용하여 netgroup이 없는지 확인합니다.

Ansible 플레이북을 사용하여 netgroup이 RHEL IdM(Identity Management)에 없는지 확인할 수 있습니다. 이 예제에서는 TestNetgroup1 그룹이 IdM 도메인에 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 netgroup-absent.yml 을 생성합니다.

    ---
    - name: Playbook to manage IPA netgroup.
      hosts: ipaserver
      become: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure netgroup my_netgroup1 is absent
        freeipa.ansible_freeipa.ipanetgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: my_netgroup1
          state: absent
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/netgroup-absent.yml

35장. Ansible을 사용하여 IdM에서 HBAC 및 sudo 규칙 구성

RHEL IdM(Identity Management)에서 HBAC(Host-based Access Control)를 사용하여 다음을 기반으로 호스트 또는 서비스에 대한 액세스를 제한하는 정책을 정의할 수 있습니다.

  • 로그인하려는 사용자 및 이 사용자의 그룹
  • 사용자가 액세스하려고 하는 호스트 및 해당 호스트가 속하는 호스트 그룹
  • 호스트에 액세스하는 데 사용되는 서비스

sudo 를 사용하여 사용자는 다른 권한이 있는 다른 사용자로 프로그램을 실행할 수 있습니다(예: root 권한). IdM에서는 sudo 규칙을 중앙에서 관리할 수 있습니다. 사용자 그룹, 호스트 그룹 및 명령 그룹과 개별 사용자, 호스트 및 명령을 기반으로 sudo 규칙을 정의할 수 있습니다.

IdM 사용자에 대해 다음 HBAC 및 sudo 규칙이 있는지 확인하려면 다음 절차를 완료합니다.

  • Jane 은 호스트 client01.idm.example.com 에만 액세스할 수 있습니다.
  • 존은 호스트 client02.idm.example.com 에만 액세스할 수 있습니다.
  • 기본 admin 사용자와 일반 alice 사용자를 포함하는 admins 그룹의 멤버는 IdM 호스트에 액세스할 수 있습니다.
  • admins 그룹의 멤버는 IdM 호스트에서 다음 명령을 사용하여 sudo 를 실행할 수 있습니다.

    • /usr/sbin/reboot
    • /usr/bin/less
    • /usr/sbin/setenforce

다음 다이어그램은 위에서 설명한 원하는 구성을 나타냅니다.

그림 35.1. IdM HBAC 및 SUDO 규칙 다이어그램

다른 사용자의 다양한 호스트 액세스 및 sudo 권한을 표시하는 IdM 사용자 및 호스트의 이미지
참고
이 절차에서는 module_defaults 로 모듈 사용을 간소화하는 작업 그룹을 사용하는 방법을 보여줍니다. 이름이 freeipa.ansible_freeipa.modulesaction_group 을 사용하여 플레이북에서 사용되는 컬렉션의 모든 모듈에 기본값을 적용할 수 있습니다. 이 예제에서는 IdM 관리자 암호가 이러한 방식으로 정의됩니다.

사전 요구 사항

  • 제어 노드에서 다음을 수행합니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.
  • 사용자 jane,johnalice 는 IdM에 있습니다. 이러한 계정에 대해 암호가 구성됩니다.

프로세스

  1. 다음 콘텐츠를 사용하여 Ansible 플레이북 파일 add-hbac-and-sudo-rules-to-idm.yml 을 생성합니다.

    ---
    - name: Playbook to manage IPA HBAC and SUDO rules
      hosts: ipaserver
      become: false
      gather_facts: false
    
      vars_files:
      - /home/<user_name>/MyPlaybooks/secret.yml
    
      module_defaults:
        group/freeipa.ansible_freeipa.modules:
          ipaadmin_password: "{{ ipaadmin_password }}"
    
      tasks:
      - name: HBAC Rule for Jane - can log in to client01
        freeipa.ansible_freeipa.ipahbacrule: # Creates the rule
          name: Jane_rule
          hbacsvc:
          - sshd
          - login
          host: # Host name
          - client01.idm.example.com
          user:
          - jane
    
      - name: HBAC Rule for John - can log in to client02
        freeipa.ansible_freeipa.ipahbacrule: # Creates the rule
          name: john_rule
          hbacsvc:
          - sshd
          - login
          host: # Host name
          - client02.idm.example.com
          user:
          - john
    
      - name: Add user member alice to group admins
        freeipa.ansible_freeipa.ipagroup:
          name: admins
          action: member
          user:
          - alice
    
      - name: HBAC Rule for IdM administrators
        freeipa.ansible_freeipa.ipahbacrule: # Rule to allow admins full access
          name: admin_access # Rule name
          servicecat: all # All services
          hostcat: all # All hosts
          group: # User group
          - admins
    
        - name: Add reboot command to SUDO
          freeipa.ansible_freeipa.ipasudocmd:
            name: /usr/sbin/reboot
            state: present
        - name: Add less command to SUDO
          freeipa.ansible_freeipa.ipasudocmd:
            name: /usr/bin/less
            state: present
        - name: Add setenforce command to SUDO
          freeipa.ansible_freeipa.ipasudocmd:
            name: /usr/sbin/setenforce
            state: present
    
      - name: Create a SUDO command group
        freeipa.ansible_freeipa.ipasudocmdgroup:
          name: cmd_grp_1
          description: "Group of important commands"
          sudocmd:
          - /usr/sbin/setenforce
          - /usr/bin/less
          - /usr/sbin/reboot
          action: sudocmdgroup
          state: present
    
      - name: Create a SUDO rule with a SUDO command group
        freeipa.ansible_freeipa.ipasudorule:
          name: sudo_rule_1
          allow_sudocmdgroup:
          - cmd_grp_1
          group: admins
          state: present
    
      - name: Disable allow_all HBAC Rule
        freeipa.ansible_freeipa.ipahbacrule: # Rule to allow admins full access
          name: allow_all # Rule name
          state: disabled # Disables rule to allow everyone the ability to login
  2. Playbook을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -i inventory add-hbac-and-sudo-rules-to-idm.yml

검증

  1. jane 사용자로 client01에 연결합니다.

    ~]$ ssh jane@client01
    Password:
    
    Last login: Fri Aug 11 15:32:18 2023 from 192.168.122.1
    [jane@client01 ~]$

    jane이 client01에 로그인했는지 확인합니다.

  2. jane 사용자로 client02에 연결을 시도합니다.

    ~]$ ssh jane@client02
    Password:
    Connection closed by 192.168.122.47 port 22

    jane이 client02에 로그인할 수 없는지 확인합니다.

  3. alice 사용자로 client02에 연결합니다.

    ~]$ ssh alice@client02
    Password:
    
    Last login: Fri Aug 10 16:13:43 2023 from 192.168.122.1

    출력에서 alice가 client02에 로그인했는지 확인합니다.

  4. 슈퍼유저 권한을 호출하지 않고 less 를 사용하여 /etc/sssd/sssd.conf 파일의 내용을 봅니다.

    [alice@client02 ~]$ less /etc/sssd/sssd.conf
    /etc/sssd/sssd.conf: Permission denied

    root 인 파일의 소유자를 제외한 모든 사람이 파일을 읽을 수 없으므로 시도에 실패합니다.

  5. root 권한을 호출하여 less 를 사용하여 /etc/sssd/sssd.conf 파일의 내용을 봅니다.

    [alice@client02 ~]$ sudo less /etc/sssd/sssd.conf
    [sudo] password for alice:
    
    [domain/idm.example.com]
    
    id_provider = ipa
    ipa_server_mode = True
    [...]

    출력은 alice가 /etc/sssd/sssd.conf 파일에서 less 명령을 실행할 수 있는지 확인합니다.

36장. Ansible을 사용하여 IdM 사용자의 인증을 외부 ID 공급자에 위임

idp ansible-freeipa 모듈을 사용하여 OAuth 2 장치 권한 부여 흐름을 지원하는 외부 ID 공급자(IdP)와 사용자를 연결할 수 있습니다. IdP 참조 및 관련 IdP 사용자 ID가 있는 경우 이를 사용하여 사용자 ansible-freeipa 모듈로 IdM 사용자에 대해 IdP 인증을 활성화할 수 있습니다. 이후 이러한 사용자는 외부 IdP에서 인증 및 권한 부여를 수행한 후 Kerberos 티켓을 사용하여 RHEL RHEL IdM(Identity Management) SSO(Single Sign-On) 기능을 제공합니다.

36.1. IdM을 외부 IdP에 연결할 때의 이점

관리자는 클라우드 서비스 공급자와 같은 외부 ID 소스에 저장된 사용자가 IdM(Identity Management) 환경에 연결된 RHEL 시스템에 액세스할 수 있도록 허용할 수 있습니다. 이를 위해 이러한 사용자를 위해 Kerberos 티켓을 발행하는 인증 및 권한 부여 프로세스를 외부 엔티티에 위임할 수 있습니다.

이 기능을 사용하여 IdM의 기능을 확장하고 외부 ID 공급자(IdP)에 저장된 사용자가 IdM에서 관리하는 Linux 시스템에 액세스할 수 있도록 허용할 수 있습니다.

36.2. IdM이 외부 IdP를 통해 로그인을 통합하는 방법

SSSD 2.7.0에는 idp Kerberos 사전 인증 방법을 구현하는 sssd-idp 패키지가 포함되어 있습니다. 이 인증 방법은 OAuth 2.0 장치 권한 부여 흐름을 따라 권한 부여 결정을 외부 IdP에 위임합니다.

  1. IdM 클라이언트 사용자는 예를 들어 명령줄에서 kinit 유틸리티를 사용하여 Kerberos TGT를 검색하여 OAuth 2.0 장치 권한 부여 흐름을 시작합니다.
  2. 특수 코드 및 웹 사이트 링크는 권한 부여 서버에서 IdM KDC 백엔드로 전송됩니다.
  3. IdM 클라이언트는 링크와 코드를 사용자에게 표시합니다. 이 예에서 IdM 클라이언트는 명령줄에 링크 및 코드를 출력합니다.
  4. 사용자는 다른 호스트, 휴대폰 등에 있을 수 있는 브라우저에서 웹 사이트 링크를 엽니다.

    1. 사용자가 특수 코드를 입력합니다.
    2. 필요한 경우 사용자는 OAuth 2.0 기반 IdP에 로그인합니다.
    3. 사용자에게 정보에 액세스할 수 있도록 클라이언트에 권한을 부여하라는 메시지가 표시됩니다.
  5. 사용자는 원래 장치 프롬프트에서 액세스를 확인합니다. 이 예제에서 사용자는 명령줄에서 Enter 키를 누릅니다.
  6. IdM KDC 백엔드는 OAuth 2.0 인증 서버를 폴링하여 사용자 정보에 액세스합니다.

지원되는 기능:

  • 키보드-대화형 인증 방법이 활성화된 SSH를 통해 원격으로 로그인하면 PAM(Pluggable Authentication Module) 라이브러리를 호출할 수 있습니다.
  • 로그인 서비스를 통해 콘솔로 로컬 로그인.
  • kinit 유틸리티를 사용하여 Kerberos 티켓(TGT)을 검색합니다.

현재 지원되지 않는 기능:

  • IdM WebUI에 직접 로그인 IdM WebUI에 로그인하려면 먼저 Kerberos 티켓을 받아야 합니다.
  • Cockpit WebUI에 직접 로그인. Cockpit WebUI에 로그인하려면 먼저 Kerberos 티켓을 받아야 합니다.

36.3. Ansible을 사용하여 외부 ID 공급자에 대한 참조 생성

외부 ID 공급자(IdP)를 RHEL IdM(Identity Management) 환경에 연결하려면 IdM에서 IdP 참조를 생성합니다. idp ansible-freeipa 모듈을 사용하여 github 외부 IdP에 대한 참조를 구성하려면 다음 절차를 완료합니다.

사전 요구 사항

  • IdM을 외부 IdP에 OAuth 애플리케이션으로 등록하고 IdM 사용자가 IdM에 인증하는 데 사용할 장치에 클라이언트 ID 및 클라이언트 시크릿을 생성했습니다. 이 예제에서는 다음을 가정합니다.

    • my_github_account_name 은 IdM 사용자를 인증하는 데 사용할 계정인 github 사용자입니다.
    • 클라이언트 ID2efe1acffe9e8ab869f4 입니다.
    • 클라이언트 시크릿656a5228abc5f9545c85fa626aecbf69312d398c 입니다.
  • IdM 서버는 SSSD 2.7.0 이상을 사용하고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. Ansible 제어 노드에서 configure-external-idp-reference.yml 플레이북을 생성합니다.

    ---
    - name: Configure external IdP
      hosts: ipaserver
      become: false
      gather_facts: false
    
      tasks:
      - name: Ensure a reference to github external provider is available
        freeipa.ansible_freeipa.ipaidp:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: github_idp
          provider: github
          client_ID: 2efe1acffe9e8ab869f4
          secret: 656a5228abc5f9545c85fa626aecbf69312d398c
          idp_user_id: my_github_account_name
  2. 파일을 저장합니다.
  3. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory configure-external-idp-reference.yml

검증

  • IdM 클라이언트에서 ipa idp-show 명령의 출력에 생성한 IdP 참조가 표시되는지 확인합니다.

    [idmuser@idmclient ~]$ ipa idp-show github_idp

36.4. Ansible을 사용하여 IdM 사용자가 외부 IdP를 통해 인증할 수 있음

ansible-freeipa 모듈을 사용하여 RHEL IdM(Identity Management) 사용자가 외부 ID 공급자(IdP)를 통해 인증할 수 있습니다. 이렇게 하려면 이전에 생성한 외부 IdP 참조를 IdM 사용자 계정과 연결합니다. Ansible을 사용하여 github_idp 라는 외부 IdP 참조를 idm-user-with-external-idp 라는 IdM 사용자와 연결하려면 이 절차를 완료합니다. 절차의 결과로 사용자는 my_github_account_name github ID를 사용하여 IdM에 idm-user-with-external-idp 로 인증할 수 있습니다.

사전 요구 사항

  • IdM 클라이언트 및 IdM 서버는 SSSD 2.7.0 이상을 사용하고 있습니다.
  • IdM에 외부 IdP에 대한 참조가 생성되어 있습니다. Ansible을 사용하여 외부 ID 공급자에 대한 참조 생성을 참조하십시오.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. Ansible 제어 노드에서 enable-user-to-authenticate-via-external-idp.yml 플레이북을 생성합니다.

    ---
    - name: Ensure an IdM user uses an external IdP to authenticate to IdM
      hosts: ipaserver
      become: false
      gather_facts: false
    
      tasks:
      - name: Retrieve Github user ID
        ansible.builtin.uri:
          url: "https://api.github.com/users/my_github_account_name”
          method: GET
          headers:
            Accept: "application/vnd.github.v3+json”
        register: user_data
    
      - name: Ensure IdM user exists with an external IdP authentication
        freeipa.ansible_freeipa.ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: idm-user-with-external-idp
          first: Example
          last: User
          userauthtype: idp
          idp: github_idp
          idp_user_id: my_github_account_name
  2. 파일을 저장합니다.
  3. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory enable-user-to-authenticate-via-external-idp.yml

검증

  • IdM 클라이언트에 로그인하고 idm-user-with-external-idp 사용자에 대한 ipa user-show 명령의 출력이 IdP에 대한 참조를 표시하는지 확인합니다.

    $ ipa user-show idm-user-with-external-idp
    User login: idm-user-with-external-idp
    First name: Example
    Last name: User
    Home directory: /home/idm-user-with-external-idp
    Login shell: /bin/sh
    Principal name: idm-user-with-external-idp@idm.example.com
    Principal alias: idm-user-with-external-idp@idm.example.com
    Email address: idm-user-with-external-idp@idm.example.com
    ID: 35000003
    GID: 35000003
    User authentication types: idp
    External IdP configuration: github
    External IdP user identifier: idm-user-with-external-idp@idm.example.com
    Account disabled: False
    Password: False
    Member of groups: ipausers
    Kerberos keys available: False

36.5. IdM 티켓 수신 티켓을 외부 IdP 사용자로 검색

RHEL IdM(Identity Management) 사용자에 대한 인증을 외부 ID 공급자(IdP)에 위임한 경우 IdM 사용자는 외부 IdP에 인증하여 Kerberos ticket-granting ticket(TGT)을 요청할 수 있습니다.

다음 작업을 수행하려면 이 절차를 완료합니다.

  1. 익명 Kerberos 티켓을 로컬로 검색하고 저장합니다.
  2. kinit-T 옵션과 함께 사용하여 idm-user-with-external-idp 사용자에게 FAST(Secure tunneling) 채널을 통해 유연한 인증을 활성화하여 Kerberos 클라이언트와 KDC(Kerberos Distribution Center) 간에 보안 연결을 제공하도록 TGT를 요청합니다.

사전 요구 사항

프로세스

  1. 익명 PKINIT를 사용하여 Kerberos 티켓을 얻고 ./fast.ccache 라는 파일에 저장합니다.

    $ kinit -n -c ./fast.ccache
  2. 선택 사항: 검색된 티켓을 확인합니다.

    $ klist -c fast.ccache
    Ticket cache: FILE:fast.ccache
    Default principal: WELLKNOWN/ANONYMOUS@WELLKNOWN:ANONYMOUS
    
    Valid starting       Expires              Service principal
    03/03/2024 13:36:37  03/04/2024 13:14:28  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
  3. -T 옵션을 사용하여 IdM 사용자로 인증을 시작하여 gRPCST 통신 채널을 활성화합니다.

    [root@client ~]# kinit -T ./fast.ccache idm-user-with-external-idp
    Authenticate at https://oauth2.idp.com:8443/auth/realms/master/device?user_code=YHMQ-XKTL and press ENTER.:
  4. 브라우저에서 명령 출력에 제공된 웹 사이트에서 사용자로 인증합니다.
  5. 명령줄에서 Enter 키를 눌러 인증 프로세스를 완료합니다.

검증

  • Kerberos 티켓 정보를 표시하고 config: pa_type 에 외부 IdP를 사용한 사전 인증을 위한 152 줄이 표시되는지 확인합니다.

    [root@client ~]# klist -C
    Ticket cache: KCM:0:58420
    Default principal: idm-user-with-external-idp@IDM.EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    05/09/22 07:48:23  05/10/22 07:03:07  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: fast_avail(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = yes
    08/17/2022 20:22:45  08/18/2022 20:22:43  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: pa_type(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = 152

    pa_type = 152 는 외부 IdP 인증을 나타냅니다.

36.6. SSH를 통해 외부 IdP 사용자로 IdM 클라이언트에 로그인

SSH를 통해 외부 ID 공급자(IdP) 사용자로 IdM 클라이언트에 로그인하려면 명령행에서 로그인 프로세스를 시작합니다. 메시지가 표시되면 IdP와 연결된 웹 사이트에서 인증 프로세스를 수행하고 IdM(Identity Management) 클라이언트에서 프로세스를 완료합니다.

사전 요구 사항

프로세스

  1. SSH를 통해 IdM 클라이언트에 로그인합니다.

    [user@client ~]$ ssh idm-user-with-external-idp@client.idm.example.com
    (idm-user-with-external-idp@client.idm.example.com) Authenticate at https://oauth2.idp.com:8443/auth/realms/main/device?user_code=XYFL-ROYR and press ENTER.
  2. 브라우저에서 명령 출력에 제공된 웹 사이트에서 사용자로 인증합니다.
  3. 명령줄에서 Enter 키를 눌러 인증 프로세스를 완료합니다.

검증

  • Kerberos 티켓 정보를 표시하고 config: pa_type 에 외부 IdP를 사용한 사전 인증을 위한 152 줄이 표시되는지 확인합니다.

    [idm-user-with-external-idp@client ~]$ klist -C
    Ticket cache: KCM:0:58420
    Default principal: idm-user-with-external-idp@IDM.EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    05/09/22 07:48:23  05/10/22 07:03:07  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: fast_avail(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = yes
    08/17/2022 20:22:45  08/18/2022 20:22:43  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: pa_type(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = 152

36.7. ipaidp Ansible 모듈의 provider 옵션

다음 ID 공급자(IdP)는 OAuth 2.0 장치 권한 부여 흐름을 지원합니다.

  • Azure AD를 포함한 Microsoft Identity Platform
  • Google
  • GitHub
  • Keycloak (Red Hat Single Sign-On (SSO))
  • Okta

idp ansible-freeipa 모듈을 사용하여 이러한 외부 IdP 중 하나에 대한 참조를 생성하는 경우, 아래에 설명된 대로 추가 옵션으로 확장되는 ipaidp ansible-freeipa Playbook 작업의 provider 옵션으로 IdP 유형을 지정할 수 있습니다.

제공 업체:

Microsoft Azure IdP를 사용하면 조직 옵션으로 지정할 수 있는 Azure 테넌트 ID를 기반으로 parametrization을 사용할 수 있습니다. live.com IdP에 대한 지원이 필요한 경우 옵션 조직 common 을 지정합니다.

공급자 선택: Cryo stat는 다음 옵션을 사용하도록 확장됩니다. 조직 옵션의 값은 표의 ${ipaidporg} 문자열을 대체합니다.

Expand
옵션현재의

auth_uri: URI

https://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/authorize

dev_auth_uri: URI

https://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/devicecode

token_uri: URI

https://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/token

userinfo_uri: URI

https://graph.microsoft.com/oidc/userinfo

keys_uri: URI

https://login.microsoftonline.com/common/discovery/v2.0/keys

범위: STR

OpenID 이메일

idp_user_id: STR

email

제공 업체: Google

공급자 선택: Google 은 다음 옵션을 사용하도록 확장됩니다.

Expand
옵션현재의

auth_uri: URI

https://accounts.google.com/o/oauth2/auth

dev_auth_uri: URI

https://oauth2.googleapis.com/device/code

token_uri: URI

https://oauth2.googleapis.com/token

userinfo_uri: URI

https://openidconnect.googleapis.com/v1/userinfo

keys_uri: URI

https://www.googleapis.com/oauth2/v3/certs

범위: STR

OpenID 이메일

idp_user_id: STR

email

공급자: github

공급자 선택: github 는 다음 옵션을 사용하도록 확장됩니다.

Expand
옵션현재의

auth_uri: URI

https://github.com/login/oauth/authorize

dev_auth_uri: URI

https://github.com/login/device/code

token_uri: URI

https://github.com/login/oauth/access_token

userinfo_uri: URI

https://openidconnect.googleapis.com/v1/userinfo

keys_uri: URI

https://api.github.com/user

범위: STR

user

idp_user_id: STR

login

공급자: keycloak

Keycloak을 사용하면 여러 영역 또는 조직을 정의할 수 있습니다. 일반적으로 사용자 지정 배포의 일부이므로 기본 URL과 영역 ID가 모두 필요하며 ipaidp 플레이북 작업의 base_url조직 옵션으로 지정할 수 있습니다.

---
- name: Playbook to manage IPA idp
  hosts: ipaserver
  become: false

  tasks:
  - name: Ensure keycloak idp my-keycloak-idp is present using provider
    freeipa.ansible_freeipa.ipaidp:
      ipaadmin_password: "{{ ipaadmin_password }}"
      name: my-keycloak-idp
      provider: keycloak
      organization: main
      base_url: keycloak.domain.com:8443/auth
      client_id: my-keycloak-client-id

공급자 선택: keycloak 은 다음 옵션을 사용하도록 확장됩니다. base_url 옵션에 지정하는 값은 표의 ${ipaidpbaseurl} 문자열 ${ipaidpbaseurl} 을(를) 교체하고, 'option에 지정된 값은 '$ipaidporg} 문자열을 대체합니다.

Expand
옵션현재의

auth_uri: URI

https://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/auth

dev_auth_uri: URI

https://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/auth/device

token_uri: URI

https://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/token

userinfo_uri: URI

https://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/userinfo

범위: STR

OpenID 이메일

idp_user_id: STR

email

공급자: okta

Okta에서 새 조직을 등록하면 새 기본 URL이 연결됩니다. ipaidp 플레이북 작업에서 base_url 옵션을 사용하여 이 기본 URL을 지정할 수 있습니다.

---
- name: Playbook to manage IPA idp
  hosts: ipaserver
  become: false

  tasks:
  - name: Ensure okta idp my-okta-idp is present using provider
    freeipa.ansible_freeipa.ipaidp:
      ipaadmin_password: "{{ ipaadmin_password }}"
      name: my-okta-idp
      provider: okta
      base_url: dev-12345.okta.com
      client_id: my-okta-client-id

공급자 선택: okta 는 다음 옵션을 사용하도록 확장됩니다. base_url 옵션에 지정하는 값은 표의 ${ipaidpbaseurl} 문자열을 대체합니다.

Expand
옵션현재의

auth_uri: URI

https://${ipaidpbaseurl}/oauth2/v1/authorize

dev_auth_uri: URI

https://${ipaidpbaseurl}/oauth2/v1/device/authorize

token_uri: URI

https://${ipaidpbaseurl}/oauth2/v1/token

userinfo_uri: URI

https://${ipaidpbaseurl}/oauth2/v1/userinfo

범위: STR

OpenID 이메일

idp_user_id: STR

email

37장. IdM에서 제한된 위임 사용

제한된 위임을 사용하면 한 서비스가 사용자를 대신하여 다른 서비스에 액세스할 수 있습니다. 모든 인증 정보에 대한 전체 액세스 권한을 부여하는 대신 하나의 서비스에 대해 제한된 권한만 부여합니다.

37.1. Identity Management에서 제한된 위임

S4U2proxy (S4U2proxy) 확장 서비스는 사용자를 대신하여 다른 서비스에 서비스 티켓을 가져오는 서비스를 제공합니다. 이 기능을 제한된 위임 이라고 합니다. 두 번째 서비스는 일반적으로 사용자의 권한 부여 컨텍스트에서 첫 번째 서비스를 대신하여 일부 작업을 수행하는 프록시입니다. 제한된 위임을 사용하면 사용자가 전체 TGT( ticket-granting ticket)를 위임할 필요가 없습니다.

RHEL IdM(Identity Management)은 일반적으로 Kerberos S4U2proxy 기능을 사용하여 웹 서버 프레임워크가 사용자를 대신하여 LDAP 서비스 티켓을 가져올 수 있도록 합니다. IdM-AD 신뢰 시스템은 제한된 위임을 사용하여 cifs 주체를 가져옵니다.

S4U2proxy 기능을 사용하여 다음을 수행하기 위해 스마트 카드로 인증된 IdM 사용자가 웹 콘솔 클라이언트를 구성할 수 있습니다.

  • 다시 인증하지 않고 웹 콘솔 서비스가 실행 중인 RHEL 호스트에서 슈퍼유저 권한으로 명령을 실행합니다.
  • SSH 를 사용하여 원격 호스트에 액세스하고 다시 인증하라는 요청 없이 호스트의 서비스에 액세스합니다.

RHEL 웹 콘솔에서 사용자 계정에 로그인한 후 SSH 프로토콜을 사용하여 원격 머신에 연결할 수 있습니다. servicedelegationruleservicedelegationtarget Ansible 모듈을 사용하여 제한된 위임 기능에 대한 웹 콘솔을 구성할 수 있으므로 다시 인증할 수 없습니다.

예제 절차에서 웹 콘솔 세션은 myhost.idm.example.com 호스트에서 실행되며 인증된 사용자를 대신하여 SSH를 사용하여 remote.idm.example.com 호스트에 액세스하도록 구성합니다.

사전 요구 사항

  • myhost.idm.example.com 에서 IdM 관리자 티켓(TGT)을 가져왔습니다.
  • remote.idm.example.com 에 대한 루트 액세스 권한이 있어야 합니다.
  • 웹 콘솔을 실행하는 호스트는 IdM 도메인의 멤버입니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장한다고 가정합니다.
  • ansible-freeipa 모듈이 실행되는 노드인 대상 노드는 IdM 클라이언트, 서버 또는 복제본으로 IdM 도메인의 일부입니다.

프로세스

  1. ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 중요한 변수를 암호화된 파일에 저장합니다.

    1. 자격 증명 모음을 생성합니다.

      $ ansible-vault create secret.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create 명령이 편집기를 열고 < key > : < value > 형식으로 중요한 데이터를 입력합니다.

      ipaadmin_password: <admin_password>
    3. 변경 사항을 저장하고 편집기를 종료합니다. Ansible은 자격 증명 모음의 데이터를 암호화합니다.
  3. 터미널 페이지에서 사용자 세션에서 웹 콘솔이 User to Proxy(S4U2proxy) Kerberos 티켓을 생성한지 확인합니다.

    $ klist
    …
    Valid starting     Expires            Service principal
    05/20/25 09:19:06 05/21/25 09:19:06 HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM
  4. 다음 콘텐츠를 사용하여 web-console-smart-card-ssh.yml 플레이북을 생성합니다.

    1. 위임 대상의 존재를 확인하는 작업을 생성합니다.

      ---
      - name: Playbook to create a constrained delegation target
        hosts: ipaserver
      
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
        - name: Ensure servicedelegationtarget web-console-delegation-target is present
          ipaservicedelegationtarget:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: web-console-delegation-target
    2. 위임 대상에 대상 호스트를 추가하는 작업을 추가합니다.

        - name: Ensure servicedelegationtarget web-console-delegation-target member principal host/remote.idm.example.com@IDM.EXAMPLE.COM is present
          ipaservicedelegationtarget:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: web-console-delegation-target
            principal: host/remote.idm.example.com@IDM.EXAMPLE.COM
            action: member
    3. 위임 규칙이 있는지 확인하는 작업을 추가합니다.

        - name: Ensure servicedelegationrule delegation-rule is present
          ipaservicedelegationrule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: web-console-delegation-rule
    4. 웹 콘솔 클라이언트 서비스의 Kerberos 주체가 제한된 위임 규칙의 멤버인지 확인하는 작업을 추가합니다.

        - name: Ensure the Kerberos principal of the web console client service is added to the servicedelegationrule web-console-delegation-rule
          ipaservicedelegationrule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: web-console-delegation-rule
            principal: HTTP/myhost.idm.example.com
            action: member
    5. 제한된 위임 규칙이 web-console-delegation-target 위임 대상과 연결되어 있는지 확인하는 작업을 추가합니다.

        - name: Ensure a constrained delegation rule is associated with a specific delegation target
          ipaservicedelegationrule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: web-console-delegation-rule
            target: web-console-delegation-target
            action: member
    6. remote.idm.example.com 에서 Kerberos 인증을 활성화하는 작업을 추가합니다.

        - name: Enable Kerberos authentication
          hosts: remote.idm.example.com
          vars:
            sshd_config:
              GSSAPIAuthentication: true
          roles:
            - role: rhel-system-roles.sshd
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-ssh.yml

RHEL 웹 콘솔에서 사용자 계정에 로그인한 후 IdM(Identity Management) 시스템 관리자로 수퍼유저 권한으로 명령을 실행해야 할 수 있습니다. 제한된 위임 기능을 사용하여 다시 인증하라는 요청없이 시스템에서 sudo 를 실행할 수 있습니다.

제한된 위임을 사용하도록 웹 콘솔을 구성하려면 ipaservicedelegationruleipaservicedelegationtarget ansible-freeipa 모듈을 사용하려면 다음 절차를 따르십시오. 아래 예제에서 웹 콘솔 세션은 myhost.idm.example.com 호스트에서 실행됩니다.

사전 요구 사항

  • 스마트 카드로 웹 콘솔 세션에 인증하여 IdM 관리자 티켓(TGT)을 받았습니다.
  • 웹 콘솔 서비스가 IdM에 등록되었습니다.
  • myhost.idm.example.com 호스트가 IdM에 있습니다.
  • IdM 서버의 도메인 관리자에 대한 관리자 sudo 액세스를 활성화했습니다.
  • 웹 콘솔에서 사용자 세션에서 S4U2Proxy Kerberos 티켓을 생성했습니다. 이 경우 웹 콘솔에 IdM 사용자로 로그인하여 터미널 페이지를 열고 다음을 입력합니다.

    $ klist
    Ticket cache: FILE:/run/user/1894000001/cockpit-session-3692.ccache
    Default principal: user@IDM.EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    07/30/21 09:19:06 07/31/21 09:19:06 HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM
    07/30/21 09:19:06  07/31/21 09:19:06  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
            for client HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.15 이상을 사용하고 있습니다.
    • freeipa.ansible_freeipa 컬렉션을 설치했습니다.
    • 이 예제에서는 ~/MyPlaybooks/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible vault가 ipaadmin_password 를 저장하고 secret.yml 파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다.
  • freeipa.ansible_freeipa 모듈이 실행되는 대상 노드인 대상 노드는 IdM 도메인의 일부입니다. IdM 클라이언트, 서버 또는 복제본입니다.

프로세스

  1. Ansible 제어 노드에서 ~/MyPlaybooks/ 디렉터리로 이동합니다.

    $ cd ~/MyPlaybooks/
  2. 다음 콘텐츠를 사용하여 web-console-smart-card-sudo.yml 플레이북을 생성합니다.

    1. 위임 대상의 존재를 확인하는 작업을 생성합니다.

      ---
      - name: Playbook to create a constrained delegation target
        hosts: ipaserver
      
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
        - name: Ensure servicedelegationtarget named sudo-web-console-delegation-target is present
          freeipa.ansible_freeipa.ipaservicedelegationtarget:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: sudo-web-console-delegation-target
    2. 위임 대상에 대상 호스트를 추가하는 작업을 추가합니다.

        - name: Ensure that a member principal named host/myhost.idm.example.com@IDM.EXAMPLE.COM is present in a service delegation target named sudo-web-console-delegation-target
          freeipa.ansible_freeipa.ipaservicedelegationtarget:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: sudo-web-console-delegation-target
            principal: host/myhost.idm.example.com@IDM.EXAMPLE.COM
            action: member
    3. 위임 규칙이 있는지 확인하는 작업을 추가합니다.

        - name: Ensure servicedelegationrule named sudo-web-console-delegation-rule is present
          freeipa.ansible_freeipa.ipaservicedelegationrule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: sudo-web-console-delegation-rule
    4. 웹 콘솔 서비스의 Kerberos 주체가 제한된 위임 규칙의 멤버인지 확인하는 작업을 추가합니다.

        - name: Ensure the Kerberos principal of the web console service is added to the service delegation rule named sudo-web-console-delegation-rule
          freeipa.ansible_freeipa.ipaservicedelegationrule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: sudo-web-console-delegation-rule
            principal: HTTP/myhost.idm.example.com
            action: member
    5. 제한된 위임 규칙이 sudo-web-console-delegation-target 위임 대상과 연결되어 있는지 확인하는 작업을 추가합니다.

        - name: Ensure a constrained delegation rule is associated with a specific delegation target
          freeipa.ansible_freeipa.ipaservicedelegationrule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: sudo-web-console-delegation-rule
            target: sudo-web-console-delegation-target
            action: member
  3. 파일을 저장합니다.
  4. Ansible 플레이북을 실행합니다. 플레이북 파일을 지정하고 secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-sudo.yml
  5. SSSD(System Security Services Daemon)와 협력하여 GSSAPI(Generic Security Service Application Program Interface)를 통해 사용자를 인증하는 PAM 모듈인 pam_sss_gs 를 활성화합니다.

    1. 편집할 /etc/sssd/sssd.conf 파일을 엽니다.
    2. pam_sss_gss 가 도메인에서 IdM에서 sudosudo -i 명령에 대한 인증을 제공할 수 있도록 지정합니다.

      [domain/idm.example.com]
      pam_gssapi_services = sudo, sudo-i
    3. 파일을 저장하고 종료합니다.
    4. 편집을 위해 /etc/pam.d/sudo 파일을 엽니다.
    5. sudo 명령에 GSSAPI 인증을 허용하도록 #%PAM-1.0 목록 상단에 다음 행을 삽입합니다.

      auth sufficient pam_sss_gss.so
    6. 파일을 저장하고 종료합니다.
  6. 위의 변경 사항이 즉시 적용되도록 SSSD 서비스를 다시 시작하십시오.

    $ systemctl restart sssd

38장. ID 관리 기능을 제공하는 시스템 역할

다음 역할은 ansible-freeipa 패키지에 포함되어 있지 않습니다. rhel-system-roles 패키지의 일부입니다. Red Hat Enterprise Linux Server 서브스크립션이 연결된 시스템에 rhel-system-roles 를 설치할 수 있습니다.

인증서 시스템 역할, ad_integration 역할

조직에서 Microsoft AD(Active Directory)를 사용하여 사용자, 그룹 및 기타 리소스를 중앙에서 관리하는 경우 RHEL(Red Hat Enterprise Linux) 호스트를 이 AD에 결합할 수 있습니다. 그러면 AD 사용자가 RHEL에 로그인할 수 있으며 인증된 AD 사용자가 RHEL 호스트에서 서비스를 사용할 수 있도록 할 수 있습니다. ad_integration RHEL 시스템 역할을 사용하면 Red Hat Enterprise Linux 시스템을 AD(Active Directory) 도메인으로 통합을 자동화할 수 있습니다.

참고

ad_integration 역할은 IdM(Identity Management) 환경 없이 직접 AD 통합을 사용하는 배포용입니다. IdM 환경의 경우 ansible-freeipa 역할을 사용합니다.

법적 공지

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동