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

Red Hat Enterprise Linux 9

Ansible을 사용하여 IdM 환경 유지 관리

Red Hat Customer Content Services

초록

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

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

ID 관리에서 계획된 용어 교체는 다음과 같습니다.

  • 블록 목록 대체 블랙리스트
  • 허용 목록 대체 허용 목록
  • 보조 대체 슬레이브
  • 컨텍스트에 따라 master 라는 단어가 보다 정확한 언어로 교체될 것입니다.

    • IdM 서버 대체 IdM 마스터
    • CA 갱신 서버는 CA 갱신 마스터로 대체
    • CRL 게시자 서버는 CRL master를 대체합니다.
    • multi-supplier멀티 마스터교체

Red Hat 문서에 관한 피드백 제공

문서에 대한 피드백에 감사드립니다. 어떻게 개선할 수 있는지 알려주십시오.

Jira를 통해 피드백 제출 (등록 필요)

  1. Jira 웹 사이트에 로그인합니다.
  2. 상단 탐색 모음에서 생성 을 클릭합니다.
  3. Summary (요약) 필드에 설명 제목을 입력합니다.
  4. Description (설명) 필드에 개선을 위한 제안을 입력합니다. 문서의 관련 부분에 대한 링크를 포함합니다.
  5. 대화 상자 하단에서 생성 을 클릭합니다.

1장. Ansible 용어

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

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

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

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

사전 요구 사항

  • Ansible 및 IdM 개념을 이해할 수 있습니다.

    • Ansible 역할
    • Ansible 노드
    • Ansible 인벤토리
    • Ansible 작업
    • Ansible 모듈
    • Ansible 플레이 및 플레이북

2.1. Ansible 및 IdM 설치를 위한 이점

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

IdM을 설치하기 위해 Ansible을 사용할 때의 이점

다음 목록은 수동 설치와 달리 Ansible을 사용하여 Identity Management를 설치하는 이점이 있습니다.

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

2.2. ansible-freeipa 패키지 설치

IdM(Identity Management)을 설치하고 관리하기 위한 Ansible 역할 및 모듈을 제공하는 ansible-freeipa 패키지를 설치하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 관리형 노드에서 다음을 수행합니다.

    • 관리형 노드가 고정 IP 주소 및 작동 중인 패키지 관리자가 있는 Red Hat Enterprise Linux 8 시스템인지 확인합니다.
  • 컨트롤러 의 경우:

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

절차

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

  1. 시스템이 RHEL 8.5 및 이전 버전에서 실행중인 경우 필요한 리포지토리를 활성화합니다.

    # subscription-manager repos --enable ansible-2.8-for-rhel-8-x86_64-rpms
  2. 시스템이 RHEL 8.5 이하에서 실행 중인 경우 ansible 패키지를 설치합니다.

    # dnf install ansible
  3. ansible-freeipa 패키지를 설치합니다.

    # dnf install ansible-freeipa

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

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

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

  • /usr/share/ansible/roles/ 디렉터리는 Ansible 컨트롤러에 ipaserver,ipareplicaipaclient 역할을 저장합니다. 각 역할 디렉터리에는 README.md Markdown 파일의 역할에 대한 예제, 기본 개요, 라이센스 및 문서가 저장됩니다.

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

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

    [root@server]# ls -1 /usr/share/doc/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로 설치하기 위해 IdM 서버를 설치하기 위한 인벤토리 파일을 구성하려면 이 절차를 완료합니다.

참고

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

절차

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

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

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

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

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

      참고

      DNS 전달자가 없으면 환경이 격리되고 인프라의 다른 DNS 도메인의 이름은 확인되지 않습니다.

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

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

      참고

      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=yes
    ipaserver_auto_forwarders=yes
    [...]

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

    [ipaserver]
    server.idm.example.com
    
    [ipaserver:vars]
    ipaserver_domain=idm.example.com
    ipaserver_realm=IDM.EXAMPLE.COM
    ipaserver_setup_dns=yes
    ipaserver_auto_forwarders=yes
    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=yes
    ipaserver_auto_forwarders=yes
    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: ipaserver
        state: present

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

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

추가 리소스

  • 전달 정책 기본 설정은 ipa-dns-install(1) 매뉴얼 페이지의 --forward-policy 설명을 참조하십시오.
  • ipaserver 역할에서 사용하는 DNS 변수에 대한 자세한 내용은 /usr/share/doc/ansible-freeipa 디렉터리의 README-server.md 파일의 DNS 변수 섹션을 참조하십시오.
  • 인벤토리 파일에 대한 자세한 내용은 인벤토리 빌드 방법을 참조하십시오.

2.5. 외부 DNS 및 통합 CA를 루트 CA로 사용한 배포에 대한 매개변수 설정

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

참고

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

절차

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

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

    • 영숫자 및 하이픈(-)만 허용됩니다. 예를 들어 밑줄은 허용되지 않으며 DNS 오류가 발생할 수 있습니다.
    • 호스트 이름은 모두 소문자여야 합니다.
  4. IdM 도메인 및 영역 정보를 지정합니다.
  5. ipaserver_setup_dns 옵션이 no 로 설정되었거나 존재하지 않는지 확인합니다.
  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: ipaserver
        state: present

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

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

추가 리소스

  • 인벤토리 파일에 대한 자세한 내용은 인벤토리 빌드 방법을 참조하십시오.

2.6. Ansible 플레이북을 사용하여 통합 CA를 루트 CA로 IdM 서버 배포

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

참고

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

사전 요구 사항

  • 다음 절차 중 하나를 선택하여 시나리오에 해당하는 매개변수를 설정했습니다.

  • /usr/share/doc/ansible-freeipa/README-server.md 파일에 설명된 대로 ipaserver 역할과 함께 사용할 수 있는 변수를 읽고 이해했습니다.

절차

  1. 플레이북 파일 이름(예: install-server.yml )을 사용하여 ansible-playbook 명령을 실행합니다. -i 옵션으로 인벤토리 파일을 지정합니다.

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

    v , -vv 또는 - vv v 옵션을 사용하여 상세 정보 표시 수준을 지정합니다.

    CLI(명령줄 인터페이스)에서 Ansible 플레이북 스크립트의 출력을 볼 수 있습니다. 다음 출력은 스크립트가 0개 작업으로 성공적으로 실행된 것을 보여줍니다.

    PLAY RECAP
    server.idm.example.com : ok=18   changed=10   unreachable=0    failed=0    skipped=21   rescued=0    ignored=0
  2. 다음 옵션 중 하나를 선택합니다.

    • IdM 배포에서 외부 DNS를 사용하는 경우: /tmp/ipa.system. recordss.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=yes
  6. DNS 전달 설정을 지정합니다. 다음 옵션 중 하나를 선택합니다.

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

      참고

      DNS 전달자가 없으면 환경이 격리되고 인프라의 다른 DNS 도메인의 이름은 확인되지 않습니다.

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

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

      참고

      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=yes
    ipaserver_auto_forwarders=yes
    [...]

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

    [ipaserver]
    server.idm.example.com
    
    [ipaserver:vars]
    ipaserver_domain=idm.example.com
    ipaserver_realm=IDM.EXAMPLE.COM
    ipaserver_setup_dns=yes
    ipaserver_auto_forwarders=yes
    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=yes
    ipaserver_auto_forwarders=yes
    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: yes
    
      roles:
      - role: 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: yes
  11. 설치의 마지막 단계에 대해 다른 플레이북을 생성합니다.

    ---
    - name: Playbook to configure IPA server Step -1
      hosts: ipaserver
      become: true
      vars_files:
      - playbook_sensitive_data.yml
      vars:
        ipaserver_external_cert_files: "/root/chain.crt"
    
      pre_tasks:
      - name: Copy "{{ groups.ipaserver[0] + '-chain.crt' }}" to /root/chain.crt on node
        copy:
          src: "{{ groups.ipaserver[0] + '-chain.crt' }}"
          dest: "/root/chain.crt"
          force: yes
    
      roles:
      - role: ipaserver
        state: present

추가 리소스

  • 전달 정책 기본 설정은 ipa-dns-install(1) 매뉴얼 페이지의 --forward-policy 설명을 참조하십시오.
  • ipaserver 역할에서 사용하는 DNS 변수에 대한 자세한 내용은 /usr/share/doc/ansible-freeipa 디렉터리의 README-server.md 파일의 DNS 변수 섹션을 참조하십시오.
  • 인벤토리 파일에 대한 자세한 내용은 인벤토리 빌드 방법을 참조하십시오.

2.8. 외부 DNS 및 외부 CA를 사용하여 배포에 대한 매개변수 설정

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

참고

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

절차

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

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

    • 영숫자 및 하이픈(-)만 허용됩니다. 예를 들어 밑줄은 허용되지 않으며 DNS 오류가 발생할 수 있습니다.
    • 호스트 이름은 모두 소문자여야 합니다.
  4. IdM 도메인 및 영역 정보를 지정합니다.
  5. ipaserver_setup_dns 옵션이 no 로 설정되었거나 존재하지 않는지 확인합니다.
  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: yes
    
      roles:
      - role: 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: yes
  9. 설치의 마지막 단계에 대해 다른 플레이북을 생성합니다.

    ---
    - name: Playbook to configure IPA server Step -1
      hosts: ipaserver
      become: true
      vars_files:
      - playbook_sensitive_data.yml
      vars:
        ipaserver_external_cert_files: "/root/chain.crt"
    
      pre_tasks:
      - name: Copy "{{ groups.ipaserver[0] + '-chain.crt' }}" to /root/chain.crt on node
        copy:
          src: "{{ groups.ipaserver[0] + '-chain.crt' }}"
          dest: "/root/chain.crt"
          force: yes
    
      roles:
      - role: ipaserver
        state: present

추가 리소스

2.9. Ansible 플레이북을 사용하여 외부 CA를 루트 CA로 IdM 서버 배포

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

참고

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

사전 요구 사항

  • 다음 절차 중 하나를 선택하여 시나리오에 해당하는 매개변수를 설정했습니다.

  • /usr/share/doc/ansible-freeipa/README-server.md 파일에 설명된 대로 ipaserver 역할과 함께 사용할 수 있는 변수를 읽고 이해했습니다.

절차

  1. 설치의 첫 번째 단계에 대한 지침이 포함된 플레이북 파일의 이름으로 ansible-playbook 명령을 실행합니다(예: install-server-step1.yml ). -i 옵션으로 인벤토리 파일을 지정합니다.

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

    v , -vv 또는 - vv v 옵션을 사용하여 상세 정보 표시 수준을 지정합니다.

    CLI(명령줄 인터페이스)에서 Ansible 플레이북 스크립트의 출력을 볼 수 있습니다. 다음 출력은 스크립트가 0개 작업으로 성공적으로 실행된 것을 보여줍니다.

    PLAY RECAP
    server.idm.example.com : ok=18   changed=10   unreachable=0    failed=0    skipped=21   rescued=0    ignored=0
  2. 컨트롤러에서 ipa.csr 인증서 서명 요청 파일을 찾아 외부 CA에 제출합니다.
  3. 다음 단계의 플레이북에서 찾을 수 있도록 외부 CA가 컨트롤러 파일 시스템에 서명한 IdM CA 인증서를 배치합니다.
  4. 설치의 최종 단계(예: install-server-step2.yml )에 대한 지침이 포함된 플레이북 파일의 이름으로 ansible-playbook 명령을 실행합니다. -i 옵션으로 인벤토리 파일을 지정합니다.

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

    • IdM 배포에서 외부 DNS를 사용하는 경우: /tmp/ipa.system. recordss.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 서버에서 사용하는 시간 서버와 동기화되도록 향후 복제본 및 클라이언트 설치가 자동으로 구성됩니다.

추가 리소스

통합 CA를 사용하여 IdM 서버를 루트 CA로 배포하는 방법에 대한 자세한 내용은 Ansible 플레이북을 사용하여 통합 CA가 있는 IdM 서버배포를 참조하십시오.

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

참고

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

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

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

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • ansible-freeipa 패키지가 설치되어 있습니다.
    • ~/MyPlaybook/ 디렉터리에 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했습니다.
    • ipaadmin_passwordsecret.yml Ansible 자격 증명에 저장했습니다.
    • ipaserver_remove_from_topology 옵션이 작동하려면 RHEL 9.3 이상에서 시스템을 실행해야 합니다.
  • 관리 노드에서 다음을 수행합니다.

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

절차

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

    ---
    - name: Playbook to uninstall an IdM replica
      hosts: ipaserver
      become: true
    
      roles:
      - role: 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>/hosts <path_to_playbooks_directory>/uninstall-server.yml
  3. server123.idm.example.com 을 가리키는 모든 이름 서버(NS) DNS 레코드가 DNS 영역에서 삭제되었는지 확인합니다. 이는 IdM 또는 외부 DNS에서 관리하는 통합 DNS를 사용하는지 여부에 관계없이 적용됩니다. IdM에서 DNS 레코드를 삭제하는 방법에 대한 자세한 내용은 IdM CLI에서 DNS 레코드 삭제를 참조하십시오.

2.11. Ansible 플레이북을 사용하여 연결이 끊긴 토폴로지로 이어지는 경우에도 IdM 서버를 설치 제거

참고

기존 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.14 이상을 사용하고 있습니다.
    • 시스템은 RHEL 9.3 이상에서 실행되고 있습니다.
    • ansible-freeipa 패키지가 설치되어 있습니다.
    • ~/MyPlaybook/ 디렉터리에 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했습니다.
    • ipaadmin_passwordsecret.yml Ansible 자격 증명에 저장했습니다.
  • 관리 노드에서 다음을 수행합니다.

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

절차

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

    ---
    - name: Playbook to uninstall an IdM replica
      hosts: ipaserver
      become: true
    
      roles:
      - role: 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를 사용하는지 여부에 관계없이 적용됩니다. IdM에서 DNS 레코드를 삭제하는 방법에 대한 자세한 내용은 IdM CLI에서 DNS 레코드 삭제를 참조하십시오.

2.12. 추가 리소스

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

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

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

사전 요구 사항

  • Ansible 제어 노드에 ansible-freeipa 패키지를 설치했습니다.
  • Ansible 및 IdM 개념을 이해할 수 있습니다.

    • Ansible 역할
    • Ansible 노드
    • Ansible 인벤토리
    • Ansible 작업
    • Ansible 모듈
    • Ansible 플레이 및 플레이북

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

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

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  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] 섹션에 나열된 모든 복제본이 있는 경우 인벤토리 파일의 [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: ipareplica
        state: present
    
    - name: Playbook to configure IPA replicas (tier2)
      hosts: ipareplicas_tier2
      become: true
    
      roles:
      - role: ipareplica
        state: present

  3. [선택 사항] firewalld 및 DNS에 대한 추가 정보를 제공하십시오.

    시나리오 1

    복제본이 기본 영역 대신 지정된 firewalld 영역을 사용하도록 하려면 인벤토리 파일에 지정할 수 있습니다. 예를 들어, 기본적으로 설정된 퍼블릭 영역 대신 IdM 설치에 내부 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=yes 행을 [ipareplicas:vars] 섹션에 추가합니다. 또한 서버당 DNS 전달자를 사용할지 여부를 지정합니다.

    • 서버별 전달자를 구성하려면 ipareplica_forwarders 변수와 [ipareplicas:vars] 섹션에 문자열 목록을 추가합니다(예: ipareplica_forwarders=192.0.2.1,192.0.2.2).
    • per-server forwarders를 구성하지 않으려면 [ipareplicas:vars] 섹션에 다음 행을 추가합니다. ipareplica_no_forwarders=yes.
    • 복제본의 /etc/resolv.conf 파일에 나열된 forwarders에 따라 서버별 전달자를 구성하려면 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=yes
    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 주소만 포함되어야 합니다. 호스트 이름은 허용되지 않습니다.

추가 리소스

  • ipareplica 변수에 대한 자세한 내용은 /usr/share/ansible/roles/ipareplica/README.md Markdown 파일을 참조하십시오.

3.2. Ansible 플레이북을 사용하여 IdM 복제본을 설치하기 위한 자격 증명 지정

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

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    • Red Hat은 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: ipareplica
          state: present

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

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

      hosts.replica 파일의 예

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

      인벤토리 파일의 principal 및 password를 사용하는 플레이북의 예

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

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

      hosts.replica 파일의 예

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

      인벤토리 파일의 principal 및 password를 사용하는 플레이북의 예

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

추가 리소스

  • ipareplica Ansible 역할에서 허용하는 옵션에 대한 자세한 내용은 /usr/share/ansible/roles/ipareplica/README.md 마크다운 파일을 참조하십시오.

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

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

절차

  • Ansible 플레이북을 사용하여 IdM 복제본을 설치하려면 플레이북 파일의 이름과 함께 ansible-playbook 명령을 사용합니다(예: install-replica.yml ). -i 옵션으로 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts.replica <path_to_playbooks_directory>/install-replica.yml

    v , -vv 또는 - vv v 옵션을 사용하여 상세 정보 표시 수준을 지정합니다.

    Ansible은 Ansible 플레이북 스크립트 실행에 대해 알려줍니다. 다음 출력은 스크립트가 0개 작업으로 성공적으로 실행된 것을 보여줍니다.

    PLAY RECAP
    replica.idm.example.com : ok=18   changed=10   unreachable=0    failed=0    skipped=21   rescued=0    ignored=0

이제 IdM 복제본이 설치되어 있습니다.

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

참고

기존 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 및 IdM 개념을 이해할 수 있습니다.

    • Ansible 역할
    • Ansible 노드
    • Ansible 인벤토리
    • Ansible 작업
    • Ansible 모듈
    • Ansible 플레이 및 플레이북

4.1. 자동 검색 클라이언트 설치 모드에 대한 인벤토리 파일의 매개변수 설정

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

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

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

참고

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

사전 요구 사항

절차

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

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

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

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

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

  2. 클라이언트 등록 자격 증명을 지정합니다. 다음 인증 방법을 사용할 수 있습니다.

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

      • 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: ipaclient
            state: present

      • 더 안전하게 inventory/hosts 파일의 [ ipaclients:vars] 섹션에서 ipa admin _password 옵션을 사용하여 admin의 자격 증명을 제공하십시오. 또는 권한이 있는 다른 사용자를 지정하려면 사용자 이름에 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: ipaclient
            state: true

    • 이전 등록의 클라이언트 키탭 이 계속 사용 가능한 경우.

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

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

      • 예를 들어 inventory/hosts 파일 [ipaclients:vars] 섹션에 ipaadmin_password 값을 제공하여 클라이언트 등록 권한이 있는 사용자의 암호입니다.
      • 예를 들어 inventory/hosts[ipaclients:vars] 섹션에 ipaadmin_keytab 의 값을 제공하여 admin keytab.
  3. [선택 사항] [선택 사항] 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 주소만 포함되어야 합니다. 호스트 이름은 허용되지 않습니다.

  4. RHEL 9.3부터 ipaclient_subid: true 옵션을 지정하여 IdM 수준에서 IdM 사용자에 대해 하위 범위를 구성할 수도 있습니다.

추가 리소스

4.2. 클라이언트 설치 중 자동 검색을 수행할 수 없는 경우 인벤토리 파일의 매개변수 설정

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

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

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

참고

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

사전 요구 사항

절차

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

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

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

      인벤토리 호스트 파일 예

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

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

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

    • 이전 등록의 클라이언트 키탭 이 계속 사용 가능한 경우:

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

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

      • 예를 들어 inventory/hosts 파일 [ipaclients:vars] 섹션에 ipaadmin_password 값을 제공하여 클라이언트 등록 권한이 있는 사용자의 암호입니다.
      • 예를 들어 inventory/hosts[ipaclients:vars] 섹션에 ipaadmin_keytab 의 값을 제공하여 admin keytab.
  4. RHEL 9.3부터 ipaclient_subid: true 옵션을 지정하여 IdM 수준에서 IdM 사용자에 대해 하위 범위를 구성할 수도 있습니다.

추가 리소스

  • ipaclient Ansible 역할에서 허용하는 옵션에 대한 자세한 내용은 /usr/share/ansible/roles/ipaclient/README.md 파일을 참조하십시오.
  • 수동으로 subID 범위 관리

4.3. install-client.yml 파일에서 매개변수 확인

install-client.yml 플레이북 파일에는 IdM 클라이언트 배포에 대한 지침이 포함되어 있습니다.

절차

  • 파일을 열고 플레이북의 지침이 배포 계획과 일치하는지 확인합니다. 일반적으로 내용은 다음과 같습니다.

    ---
    - name: Playbook to configure IPA clients with username/password
      hosts: ipaclients
      become: true
    
      roles:
      - role: ipaclient
        state: present

    개별 항목이 나타내는 것은 다음과 같습니다.

    • hosts 항목은 ansible 스크립트가 ipa-client-install 스크립트를 실행할 호스트의 FQDN 을 검색하는 inventory/hosts 파일의 섹션을 지정합니다.
    • become: true 항목은 ipa-client-install 스크립트를 실행하는 동안 root의 자격 증명이 호출되도록 지정합니다.
    • role: ipaclient 항목은 호스트에 설치할 역할을 지정합니다. 이 경우 ipa 클라이언트 역할입니다.
    • state: present 항목은 클라이언트를 설치 제거하는 대신 설치하도록 지정합니다(없음없음).

4.4. Ansible Playbook을 사용하여 IdM 클라이언트 등록에 대한 권한 부여 옵션

인벤토리 및 플레이북 파일의 예와 함께 IdM 클라이언트 등록에 대한 개별 권한 부여 옵션은 다음과 같습니다.

표 4.1. Ansible을 사용하여 IdM 클라이언트 등록에 대한 권한 부여 옵션

권한 부여 옵션참고인벤토리 파일 예install-client.yml 플레이북 파일 예

클라이언트 등록 권한이 있는 사용자의 암호: 옵션 1

Ansible 자격 증명 모음에 저장된 암호

[ipaclients:vars]
[...]
- name: Playbook to configure IPA clients with username/password
  hosts: ipaclients
  become: true
  vars_files:
  - playbook_sensitive_data.yml

  roles:
  - role: ipaclient
    state: present

클라이언트 등록 권한이 있는 사용자의 암호: 옵션 2

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

[ipaclients:vars]
ipaadmin_password=Secret123
- name: Playbook to configure IPA clients
  hosts: ipaclients
  become: true

  roles:
  - role: ipaclient
    state: true

random, one-time password (OTP): 옵션 1

OTP + 관리자 암호

[ipaclients:vars]
ipaadmin_password=Secret123
ipaclient_use_otp=true
- name: Playbook to configure IPA clients
  hosts: ipaclients
  become: true

  roles:
  - role: ipaclient
    state: true

random, one-time password (OTP): 옵션 2

OTP + 관리자 키 탭

[ipaclients:vars]
ipaadmin_keytab=/root/admin.keytab
ipaclient_use_otp=true
- name: Playbook to configure IPA clients
  hosts: ipaclients
  become: true

  roles:
  - role: ipaclient
    state: true

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

 
[ipaclients:vars]
ipaclient_keytab=/root/krb5.keytab
- name: Playbook to configure IPA clients
  hosts: ipaclients
  become: true

  roles:
  - role: ipaclient
    state: true
참고

RHEL 9.2에서 위에서 설명한 두 개의 OTP 인증 시나리오에서 kinit 명령을 사용하여 관리자의 TGT 요청은 첫 번째 지정 또는 검색된 IdM 서버에서 실행됩니다. 따라서 Ansible 제어 노드를 추가로 수정할 필요가 없습니다. RHEL 9.2 이전에는 제어 노드에 CloudEvent5-workstation 패키지가 필요했습니다.

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

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

절차

  • Ansible 플레이북을 사용하여 IdM 클라이언트를 설치하려면 플레이북 파일의 이름과 함께 ansible-playbook 명령을 사용합니다(예: install-client.yml ). -i 옵션으로 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory/hosts install-client.yml

    v , -vv 또는 - vv v 옵션을 사용하여 상세 정보 표시 수준을 지정합니다.

    Ansible은 Ansible 플레이북 스크립트 실행에 대해 알려줍니다. 다음 출력은 작업이 실패하지 않았기 때문에 스크립트가 성공적으로 실행되었음을 보여줍니다.

    PLAY RECAP
    client1.idm.example.com : ok=18 changed=10 unreachable=0 failed=0 skipped=21 rescued=0 ignored=0
    참고

    Ansible은 다양한 색상을 사용하여 실행 중인 프로세스에 대한 다양한 유형의 정보를 제공합니다. /etc/ansible/ansible.cfg 파일의 [colors] 섹션에서 기본 색상을 수정할 수 있습니다.

    [colors]
    [...]
    #error = red
    #debug = dark gray
    #deprecate = purple
    #skip = cyan
    #unreachable = red
    #ok = green
    #changed = yellow
    [...]

이제 Ansible 플레이북을 사용하여 호스트에 IdM 클라이언트를 설치했습니다.

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

CLI(명령줄 인터페이스)는 ansible-playbook 명령이 성공했지만 자체 테스트를 수행할 수도 있음을 알려줍니다.

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 관리자 자격 증명.

절차

  • IdM 클라이언트를 설치 제거하려면 플레이북 파일의 이름과 함께 ansible-playbook 명령을 사용합니다(예: uninstall-client.yml ). -i 옵션으로 인벤토리 파일을 지정하고 선택적으로 -v, -vv 또는 - vv v 옵션을 사용하여 세부 정보 표시 수준을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory/hosts uninstall-client.yml
중요

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

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

제거 제거는 IdM CA에서 호스트에 대해 실행된 모든 인증서를 제거합니다.

추가 리소스

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

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

  • 홈 디렉터리에 있는 Ansible 플레이북 전용 하위 디렉터리를 유지합니다(예: ~/MyPlaybooks ).
  • /usr/share/doc/ansible-freeipa/*/usr/share/doc/rhel-system-roles/* 디렉터리 및 하위 디렉터리에서 샘플 Ansible 플레이북을 ~/MyPlaybooks 디렉터리에 복사 및 조정합니다.
  • ~/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 암호 파일을 정기적으로 제거하고 다시 생성합니다.

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

5.1. Ansible 플레이북을 사용하여 IdM 관리를 위해 제어 노드 및 관리형 노드 준비

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
    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 암호 파일을 제거하고 각 새 세션이 시작될 때 7-9단계를 반복합니다.

5.2. ansible-freeipa 플레이북에 필요한 인증 정보를 제공하는 다양한 방법

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 플레이북을 사용하는 경우 자격 증명 모음 암호를 대화형으로 입력해야 합니다.

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

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

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 편집할 /usr/share/doc/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
        ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
        register: serverconfig
    
      - debug:
          msg: "{{ serverconfig }}"
  2. 다음을 변경하여 파일을 조정합니다.

    • IdM 관리자의 암호입니다.
    • 필요한 경우 기타 값입니다.
  3. 파일을 저장합니다.
  4. Ansible 플레이북을 실행합니다. 플레이북 파일, secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/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
        }
    }

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

CA(인증 기관)를 사용하는 IdM(Identity Management) 배포에서 CA 갱신 서버는 IdM 시스템 인증서를 유지 관리하고 갱신합니다. 이를 통해 강력한 IdM 배포를 수행할 수 있습니다.

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ ipa config-show | grep 'CA renewal'
      IPA CA renewal master: server.idm.example.com
  2. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  3. 편집할 /usr/share/doc/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
        ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          ca_renewal_master_server: carenewal.idm.example.com
  4. 파일을 변경하여 수정합니다.

    • ipaadmin_password 변수에서 설정한 IdM 관리자의 암호입니다.
    • ca_renewal_master_server 변수에서 설정한 CA 갱신 서버의 이름입니다.
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일, secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/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:  carenewal.idm.example.com

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

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

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 선택 사항: retrieve-config.yml Ansible 플레이북을 사용하여 IdM 사용자의 현재 쉘을 식별합니다. 자세한 내용은 Ansible 플레이북을 사용하여 IdM 구성 검색에서 참조하십시오.
  2. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  3. 편집할 /usr/share/doc/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
      - ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          defaultshell: /bin/bash
          maxusername: 64
  4. 다음을 변경하여 파일을 조정합니다.

    • ipaadmin_password 변수에서 설정한 IdM 관리자의 암호입니다.
    • 기본shell 변수로 설정한 IdM 사용자의 기본 쉘은 /bin/sh 로 설정합니다.
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일, secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/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 쉘을 사용합니다.

6.4. Ansible을 사용하여 IdM 도메인의 name 구성

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

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

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • ansible-freeipa 패키지가 설치됩니다.

가정

  • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
  • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장하고 자격 증명 모음 파일 암호를 알고 있다고 가정합니다.

절차

  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
          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

    메시지가 표시되면 자격 증명 모음 파일 암호를 입력합니다.

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

IdM(Identity Management) 서버는 로컬 도메인의 ID 범위에 있는 데이터에 따라 내부적으로 IdM(보안 식별자)을 IdM 사용자 및 그룹에 할당할 수 있습니다. CloudEvents는 사용자 및 그룹 오브젝트에 저장됩니다.

IdM 사용자 및 그룹에LoadBalancer가 포함되도록 하는 목표는 IdM-IdM 신뢰를 위한 첫 번째 단계인 PAM(Privileged Attribute Certificate) 생성을 허용하는 것입니다. IdM 사용자 및 그룹에 CloudEvents가 있는 경우 IdM은 PAC 데이터로 Kerberos 티켓을 발행할 수 있습니다.

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

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

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • ansible-freeipa 패키지가 설치됩니다.

가정

  • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
  • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장하고 자격 증명 모음 파일 암호를 알고 있다고 가정합니다.

절차

  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
          ipaconfig:
            ipaadmin_password: "{{ ipaadmin_password }}"
            enable_sid: true
            add_sids: true

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

    참고

    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

    메시지가 표시되면 자격 증명 모음 파일 암호를 입력합니다.

6.6. 추가 리소스

  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-config.md 를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/config 디렉터리에서 샘플 플레이북을 참조하십시오.

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

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

7.1. 사용자 라이프 사이클

IdM(Identity Management)은 세 가지 사용자 계정 상태를 지원합니다.

  • 단계 사용자는 인증할 수 없습니다. 이는 초기 상태입니다. 활성 사용자에 필요한 일부 사용자 계정 속성은 설정할 수 없습니다(예: 그룹 멤버십).
  • 활성 사용자는 인증할 수 있습니다. 필요한 모든 사용자 계정 속성은 이 상태로 설정해야 합니다.
  • 보존 사용자는 비활성 상태로 간주되는 이전 활성 사용자이며 IdM에 인증할 수 없습니다. 보존 사용자는 활성 사용자로 가지고 있는 대부분의 계정 속성을 유지하지만 사용자 그룹의 일부가 아닙니다.

A flow chart displaying 4 items: Active users - Stage users - Preserved users - Deleted users. Arrows communicate the relationships between each kind of user: Active users can be "preserved" as Preserved users. Preserved users can be "restored" as Active users. Preserved users can be "staged" as Stage users and Stage users can be "activated" into Active users. All users can be deleted to become "Deleted users".

IdM 데이터베이스에서 사용자 항목을 영구적으로 삭제할 수 있습니다.

중요

삭제된 사용자 계정은 복원할 수 없습니다. 사용자 계정을 삭제하면 해당 계정과 연결된 모든 정보가 영구적으로 손실됩니다.

새 관리자는 기본 admin 사용자와 같은 관리자 권한이 있는 사용자만 만들 수 있습니다. 실수로 모든 관리자 계정을 삭제한 경우 Directory Manager는 Directory Server에서 수동으로 새 관리자를 생성해야 합니다.

주의

admin 사용자를 삭제하지 마십시오. admin 은 IdM에 필요한 사전 정의 사용자이므로 이 작업으로 인해 특정 명령에 문제가 발생합니다. 대체 admin 사용자를 정의하고 사용하려면 하나 이상의 다른 사용자에게 관리자 권한을 부여한 후 ipa user-disable admin 사용자로 사전 정의된 admin 사용자를 비활성화하십시오.

주의

로컬 사용자를 IdM에 추가하지 마십시오. NSS(Name Service Switch)는 로컬 사용자 및 그룹을 확인하기 전에 항상 IdM 사용자 및 그룹을 확인합니다. 즉, 예를 들어 IdM 그룹 멤버십이 로컬 사용자에게는 작동하지 않습니다.

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 다음을 보장하려는 IdM에 있는 사용자의 데이터를 사용하여 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/doc/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
        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

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

    • 이름: 로그인 이름
    • First: 첫 번째 이름 문자열
    • Last: 마지막 이름 문자열

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

    참고

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

  3. 플레이북을 실행합니다.

    $ 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. 관리자를 위한 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에 있습니다.

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. IdM에 확인하려는 사용자의 데이터를 사용하여 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/doc/ansible-freeipa/playbooks/user/ensure-users-present.yml 파일에서 예제를 복사하고 수정할 수 있습니다. 예를 들어 사용자 idm_user_1,idm_user_2, idm_user_3 을 만들고 Password123idm_user_1 의 암호로 추가하려면 다음을 수행합니다.

    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create user idm_users
        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은 암호를 다시 설정합니다.

  3. 플레이북을 실행합니다.

    $ 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에 있습니다.

7.4. Ansible 플레이북을 사용하여 JSON 파일에서 여러 IdM 사용자가 있는지 확인

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 작업을 사용하여 Ansible 플레이북 파일을 생성합니다. 확인하려는 사용자 데이터를 사용하여 JSON 파일을 참조합니다. 이 단계를 단순화하기 위해 /usr/share/doc/ansible-freeipa/ensure-users-present-ymlfile.yml 파일에서 예제를 복사하고 수정할 수 있습니다.

    ---
    - name: Ensure users' presence
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Include users.json
        include_vars:
          file: users.json
    
      - name: Users present
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          users: "{{ users }}"
  3. users.json 파일을 생성하고 IdM 사용자를 추가합니다. 이 단계를 단순화하기 위해 /usr/share/doc/ansible-freeipa/playbooks/user/users.json 파일에서 예제를 복사하고 수정할 수 있습니다. 예를 들어 사용자 idm_user_1,idm_user_2, idm_user_3 을 만들고 Password123idm_user_1 의 암호로 추가하려면 다음을 수행합니다.

    {
      "users": [
       {
        "name": "idm_user_1",
        "first": "Alice",
        "last": "Acme",
        "password": "Password123"
       },
       {
        "name": "idm_user_2",
        "first": "Bob",
        "last": "Acme"
       },
       {
        "name": "idm_user_3",
        "first": "Eve",
        "last": "Acme"
       }
      ]
    }
  4. 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에 있습니다.

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 보장하려는 IdM이 없는 사용자로 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/doc/ansible-freeipa/playbooks/user/ensure-users-present.yml 파일에서 예제를 복사하고 수정할 수 있습니다. 예를 들어 idm_user_1,idm_user_2idm_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
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          users:
          - name: idm_user_1
          - name: idm_user_2
          - name: idm_user_3
          state: absent
  3. 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에 없습니다.

7.6. 추가 리소스

  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-user.md Markdown 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/user 디렉터리에서 샘플 Ansible 플레이북을 참조하십시오.

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

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

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

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

  • IdM 사용자
  • 기타 IdM 사용자 그룹
  • 외부 사용자: IdM 외부에 있는 사용자

섹션에는 다음 주제가 포함되어 있습니다.

8.1. IdM의 다양한 그룹 유형

IdM은 다음 유형의 그룹을 지원합니다.

POSIX 그룹(기본값)

POSIX 그룹은 해당 멤버에 대해 Linux POSIX 속성을 지원합니다. Active Directory와 상호 작용하는 그룹에서는 POSIX 속성을 사용할 수 없습니다.

POSIX 속성은 사용자를 별도의 엔터티로 식별합니다. 사용자와 관련된 POSIX 속성의 예로는 uidNumber, UID(사용자 번호), gidNumber, 그룹 번호(GID)가 있습니다.

비POSIX 그룹

비POSIX 그룹은 POSIX 속성을 지원하지 않습니다. 예를 들어 이러한 그룹에는 GID가 정의되어 있지 않습니다.

이러한 유형의 그룹의 모든 멤버가 IdM 도메인에 속해야 합니다.

외부 그룹

외부 그룹을 사용하여 IdM 도메인 외부의 ID 저장소에 존재하는 그룹 멤버를 다음과 같이 추가합니다.

  • 로컬 시스템
  • Active Directory 도메인
  • 디렉터리 서비스

외부 그룹은 POSIX 속성을 지원하지 않습니다. 예를 들어 이러한 그룹에는 GID가 정의되어 있지 않습니다.

표 8.1. 기본적으로 생성된 사용자 그룹

그룹 이름기본 그룹 멤버

ipausers

모든 IdM 사용자

관리자

기본 admin 사용자를 포함하여 관리자 권한이 있는 사용자

editors

이는 더 이상 특별한 권한이 없는 레거시 그룹입니다.

신뢰 관리자

Active Directory 트러스트를 관리할 수 있는 권한이 있는 사용자

사용자 그룹에 사용자를 추가하면 사용자와 연결된 권한과 정책이 제공됩니다. 예를 들어 사용자에게 관리 권한을 부여하려면 사용자를 admins 그룹에 추가합니다.

주의

admins 그룹을 삭제하지 마십시오. 관리자는 IdM에 필요한 사전 정의된 그룹이므로 이 작업으로 인해 특정 명령에 문제가 발생합니다.

또한 IdM은 IdM에 새 사용자를 생성할 때마다 기본적으로 사용자 개인 그룹을 생성합니다. 개인 그룹에 대한 자세한 내용은 개인 그룹이 없는 사용자 추가를 참조하십시오.

8.2. 직접 및 간접 그룹 멤버

IdM의 사용자 그룹 속성은 직접 및 간접 멤버 모두에 적용됩니다. 그룹 B가 A 그룹의 멤버인 경우 B 그룹의 모든 사용자는 A 그룹의 간접 멤버로 간주됩니다.

예를 들어 다음 다이어그램에서:For example, in the following diagram:

  • 사용자 1과 사용자 2는 A 그룹의 직접적인 멤버 입니다.
  • 사용자 3, 사용자 4 및 사용자 5는 A 그룹의 간접 멤버 입니다.

그림 8.1. 직접 및 직접 그룹 멤버십

그룹 A(2명의 사용자 포함) 및 그룹 B(사용자 3 사용자 포함)가 포함된 차트입니다. 그룹 B는 그룹 A 내에 중첩되므로 그룹 A에는 총 5명의 사용자가 포함됩니다.

사용자 그룹 A에 대한 암호 정책을 설정하는 경우 정책은 사용자 그룹 B의 모든 사용자에게도 적용됩니다.

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • Ansible 플레이북에서 참조하려는 사용자는 IdM에 있습니다. Ansible을 사용하여 사용자가 있는지 확인하는 방법에 대한 자세한 내용은 Ansible 플레이북을 사용하여 사용자 계정 관리를 참조하십시오.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 사용자 및 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다.

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

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

검증 단계

ops 그룹에 sysopsapp ops 가 직접 멤버로 포함되어 있는지, ipa group-show 명령을 사용하여 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에 있습니다.

추가 리소스

  • /usr/share/doc/ansible-freeipa/README-group.md Markdown 파일을 참조하십시오.

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

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

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

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

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • ansible-freeipa 패키지가 설치되어 있습니다.
    • ~/MyPlaybook/ 디렉터리에 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했습니다.
    • RHEL 9.3 이상을 사용하고 있습니다.
    • ipaadmin_passwordsecret.yml Ansible 자격 증명에 저장했습니다.

절차

  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
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          groups:
          - name: sysops
            nonposix: true
          - name: appops
            external: true
  2. 플레이북을 실행합니다.

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

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

Ansible 플레이북을 사용하여 사용자 ID 덮어쓰기가 IdM(Identity Management) 그룹에 있는지 확인하려면 다음 절차를 따르십시오. AD에 대한 트러스트를 설정한 후 기본 신뢰 보기에서 만든 AD(Active Directory) 사용자를 재정의합니다. 플레이북을 실행하면 AD 사용자와 같은 AD 사용자가 두 개의 다른 계정과 암호 없이 IdM을 완전히 관리할 수 있습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • AD에 대한 트러스트를 설치했습니다.
  • AD 사용자의 사용자 ID 재정의는 IdM에 이미 있습니다. 그렇지 않은 경우 ipa idoverrideuser-add 'default trust view' ad_user@ad.example.com 명령을 사용하여 생성합니다.
  • 사용자 ID 재정의를 추가하는 그룹이 IdM에 이미 있습니다.
  • IdM 이상의 4.8.7 버전을 사용하고 있습니다. 서버에 설치된 IdM 버전을 보려면 ipa --version 을 입력합니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

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

    • Secret123은 IdM 관리자 암호입니다.
    • 관리자는 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

추가 리소스

8.6. Ansible 플레이북을 사용하여 IdM 사용자 그룹에 멤버 관리자가 있는지 확인

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • 멤버 관리자로 추가하는 사용자 또는 그룹의 이름과 관리할 그룹의 이름이 있어야 합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 사용자 및 그룹 멤버 관리 정보를 사용하여 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
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_user: test
    
      - name: Ensure group_admins is present for group_a
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_group: group_admins
  3. 플레이북을 실행합니다.

    $ 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

검증 단계

group_a 그룹에 멤버 관리자로 test 가 포함되어 있고 group_adminsipa group-show 명령을 사용하여 group_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

추가 리소스

  • ipa host-add-member-manager --help 를 참조하십시오.
  • ipa man 페이지를 참조하십시오.

8.7. Ansible 플레이북을 사용하여 IdM 사용자 그룹에 멤버 관리자가 없는지 확인

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • 제거 중인 기존 멤버 관리자 사용자 또는 그룹의 이름과 관리 중인 그룹의 이름이 있어야 합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 사용자 및 그룹 멤버 관리 정보를 사용하여 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
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_user: test
          membermanager_group: group_admins
          action: member
          state: absent
  3. 플레이북을 실행합니다.

    $ 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 그룹에 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

추가 리소스

  • ipa host-remove-member-manager --help 를 참조하십시오.
  • ipa man 페이지를 참조하십시오.

9장. Ansible을 사용하여 IdM의 그룹 멤버십 자동화

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

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

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

이 섹션에서는 다음 주제를 다룹니다.

9.1. Ansible을 사용하여 IdM 사용자 그룹에 대한 automember 규칙이 있는지 확인합니다.

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

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • name 변수를 testing_group 으로 설정합니다.
    • automember_type 변수를 그룹으로 설정합니다.
    • 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
        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

9.2. Ansible을 사용하여 IdM 사용자 그룹 automember 규칙에 지정된 조건이 있는지 확인

추가 리소스

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

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/automember/ directory(예: automember-usergroup-rule-present.yml )에 있는 automember-hostgroup-rule-present.yml Ansible 플레이북 파일을 복사합니다.

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

    • 플레이북의 이름을 사용 사례에 맞게 변경합니다(예: Automember 사용자 그룹 규칙 멤버 ).
    • 사용 사례에 맞게 작업 이름을 변경합니다. 예를 들어 사용자 그룹의 automember 조건이 있는지 확인하십시오.
    • ipaautomember 작업 섹션에서 다음 변수를 설정합니다.

      • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
      • name 변수를 testing_group 으로 설정합니다.
      • automember_type 변수를 그룹으로 설정합니다.
      • state 변수가 present 로 설정되어 있는지 확인합니다.
      • action 변수가 member 로 설정되어 있는지 확인합니다.
      • include 변수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
        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
      ...

9.3. Ansible을 사용하여 IdM 사용자 그룹 automember 규칙에 조건이 없는지 확인합니다.

추가 리소스

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

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • 플레이북의 이름을 사용 사례에 맞게 변경합니다(예: Automember 사용자 그룹 규칙 멤버 absent ).
    • 사용 사례에 해당하는 작업 이름 변경(예: 사용자 그룹의 automember 조건 확인)이 없습니다.
    • ipaautomember 작업 섹션에서 다음 변수를 설정합니다.

      • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
      • name 변수를 testing_group 으로 설정합니다.
      • automember_type 변수를 그룹으로 설정합니다.
      • state 변수가 absent 로 설정되어 있는지 확인합니다.
      • action 변수가 member 로 설정되어 있는지 확인합니다.
      • include 변수initial 로 설정합니다.
      • 포함 변수를 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
        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

출력에 결정된 Regex: initials=dp 항목이 없으면 testing_group automember 규칙에 지정된 조건이 포함되어 있지 않습니다.

9.4. Ansible을 사용하여 IdM 사용자 그룹의 automember 규칙이 없는지 확인합니다.

추가 리소스

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

참고

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • name 변수를 testing_group 으로 설정합니다.
    • automember_type 변수를 그룹으로 설정합니다.
    • 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
        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

추가 리소스

  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-automember.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/automember 디렉토리를 참조하십시오.

9.5. Ansible을 사용하여 IdM 호스트 그룹 automember 규칙에 조건이 있는지 확인합니다.

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

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • name 변수를 primary_dns_domain_hosts 로 설정합니다.
    • automember_type 변수를 hostgroup 으로 설정합니다.
    • state 변수가 present 로 설정되어 있는지 확인합니다.
    • action 변수가 member 로 설정되어 있는지 확인합니다.
    • inclusive 변수가 fqdn;으로 설정되어 있는지 확인합니다.
    • 해당하는 include 표현식 변수.*.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
        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

추가 리소스

  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-automember.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/automember 디렉토리를 참조하십시오.

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

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

10.1. IdM의 셀프 서비스 액세스 제어

셀프 서비스 액세스 제어 규칙은 IdM 디렉터리 서버 항목에서 수행할 수 있는 IdM(Identity Management) 엔티티의 작업을 정의합니다. 예를 들어 IdM 사용자는 자체 암호를 업데이트할 수 있습니다.

이 제어 방법을 사용하면 인증된 IdM 엔티티가 LDAP 항목 내에서 특정 속성을 편집할 수 있지만 전체 항목에 대한 작업 추가 또는 삭제 는 허용하지 않습니다.

주의

셀프 서비스 액세스 제어 규칙으로 작업할 때는 주의해야 합니다. 액세스 제어 규칙을 부적절하게 구성하면 엔터티의 권한이 실수로 상승할 수 있습니다.

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/selfservice/ 디렉터리에 있는 selfservice-present.yml 파일을 복사합니다.

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • name 변수를 새 셀프 서비스 규칙의 이름으로 설정합니다.
    • 권한 변수를 쉼표로 구분된 권한 목록으로 설정하여 부여할 권한( 읽기쓰기 )을 부여합니다.
    • 특성 변수를 사용자가 직접 관리할 수 있는 속성 목록( givenname,displayname,title, initials )으로 설정합니다.

    현재 예제에 대해 수정된 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
        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

추가 리소스

  • IdM의 셀프 서비스 액세스 제어를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉터리에서 README-selfservice.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/selfservice 디렉토리를 참조하십시오.

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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
        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

추가 리소스

  • IdM의 셀프 서비스 액세스 제어를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉터리에서 README-selfservice.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/selfservice 디렉터리에서 샘플 플레이북을 참조하십시오.

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • 사용자는 IdM에 자체 이름 세부 정보 셀프 서비스 규칙이 있을 수 있습니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/selfservice/ 디렉터리에 있는 selfservice-member-present.yml 파일을 복사합니다.

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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
        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

추가 리소스

  • IdM의 셀프 서비스 액세스 제어를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리에서 사용 가능한 README-selfservice.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/selfservice 디렉터리에서 샘플 플레이북을 참조하십시오.

10.5. Ansible을 사용하여 셀프 서비스 규칙에 특정 속성이 없는지 확인합니다.

다음 절차에서는 Ansible 플레이북을 사용하여 셀프 서비스 규칙에 특정 설정이 없는지 확인하는 방법을 설명합니다. 이 플레이북을 사용하여 셀프 서비스 규칙이 바람직하지 않은 액세스 권한을 부여하지 않도록 할 수 있습니다. 이 예제에서는 사용자가 자체 이름 세부 정보 self-service 규칙에 givennamesurname member 속성이 없는지 확인합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • 사용자는 IdM에 자체 이름 세부 정보 셀프 서비스 규칙이 있을 수 있습니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/selfservice/ 디렉터리에 있는 selfservice-member-absent.yml 파일을 복사합니다.

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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
        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

추가 리소스

  • IdM의 셀프 서비스 액세스 제어를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉터리에서 README-selfservice.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/selfservice 디렉터리에서 샘플 플레이북을 참조하십시오.

11장. Ansible 플레이북을 사용하여 사용자를 관리하기 위해 사용자 그룹에 권한 위임

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

이 섹션에서는 다음 주제를 다룹니다.

11.1. 위임 규칙

위임 규칙을 만들어 사용자를 관리하기 위해 사용자 그룹에 권한을 위임할 수 있습니다.

위임 규칙을 사용하면 특정 사용자 그룹에서 다른 사용자 그룹의 사용자에 대한 특정 속성에 대한 쓰기(편집) 작업을 수행할 수 있습니다. 이 형식의 액세스 제어 규칙은 위임 규칙에 지정한 속성의 하위 집합 값을 편집하도록 제한됩니다. 전체 항목을 추가하거나 제거하지 않은 속성을 제어하는 기능을 부여하지 않습니다.

위임 규칙은 IdM의 기존 사용자 그룹에 권한을 부여합니다. 예를 들어 managers 사용자 그룹이 employees 사용자 그룹에 있는 사용자의 선택된 특성을 관리할 수 있도록 위임을 사용할 수 있습니다.

11.2. IdM용 Ansible 인벤토리 파일 생성

Ansible을 사용하여 작업하는 경우 홈 디렉토리에서 /usr/share/doc/ansible-freeipa/*/usr/share/doc/rhel-system-roles/* 하위 디렉토리에서 복사하여 조정하는 하위 디렉터리를 생성하는 것이 좋습니다. 이 방법은 다음과 같은 장점이 있습니다.

  • 모든 플레이북을 한 곳에서 찾을 수 있습니다.
  • root 권한을 호출하지 않고 플레이북을 실행할 수 있습니다.

절차

  1. 홈 디렉터리에 Ansible 구성 및 플레이북의 디렉터리를 생성합니다.

    $ mkdir ~/MyPlaybooks/
  2. ~/MyPlaybooks/ 디렉터리로 변경합니다.

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

    [defaults]
    inventory = /home/<username>/MyPlaybooks/inventory
    
    [privilege_escalation]
    become=True
  4. 다음 콘텐츠를 사용하여 ~/MyPlaybooks/inventory 파일을 만듭니다.

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

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

11.3. Ansible을 사용하여 위임 규칙이 있는지 확인합니다.

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

  • businesscategory
  • departmentnumber
  • employeenumber
  • employeetype

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • name 변수를 새 위임 규칙의 이름으로 설정합니다.
    • 권한 변수를 쉼표로 구분된 권한 목록으로 설정하여 부여할 권한( 읽기쓰기 )을 부여합니다.
    • 특성 변수를 위임된 사용자 그룹이 관리할 수 있는 속성 목록으로 설정합니다. businesscategory,departmentnumber, staffnumber , and 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
        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

추가 리소스

  • 분류 규칙을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉터리에서 README-delegation.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/ipadelegation 디렉토리에서 샘플 플레이북을 참조하십시오.

11.4. Ansible을 사용하여 위임 규칙이 없는지 확인합니다.

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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
        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

추가 리소스

  • 분류 규칙을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉터리에서 README-delegation.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/ipadelegation 디렉토리에서 샘플 플레이북을 참조하십시오.

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

다음 절차에서는 위임 규칙에 특정 설정이 있도록 Ansible 플레이북을 사용하는 방법을 설명합니다. 이 플레이북을 사용하여 이전에 만든 위임 역할을 수정할 수 있습니다. 이 예제에서는 기본 관리자 속성 위임 규칙만 departmentnumber member 특성을 갖도록 합니다.In the example, you ensure the basic manager attributes delegation rule only has the departmentnumber member attribute.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • IdM에 기본 관리자 속성 의 위임 규칙이 있습니다.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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
        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

추가 리소스

  • 분류 규칙을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉터리에서 README-delegation.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/ipadelegation 디렉토리에서 샘플 플레이북을 참조하십시오.

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

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • IdM에 기본 관리자 속성 의 위임 규칙이 있습니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/delegation/ 디렉터리에 있는 delegation-member-absent.yml 파일을 복사합니다.

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • name 변수를 수정할 위임 규칙의 이름으로 설정합니다.
    • 특성 변수를 worker number 및 employee type 로 설정합니다.
    • 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
        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

추가 리소스

  • 분류 규칙을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉터리에서 README-delegation.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/ipadelegation 디렉토리에서 샘플 플레이북을 참조하십시오.

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

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

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

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

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

12.1. IdM의 권한

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

  • write
  • read
  • search
  • 비교
  • add
  • delete
  • all

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

  • subtree: 도메인 이름(DN); 이 DN 아래의 하위 트리
  • 대상 필터: LDAP 필터
  • target: 가능한 와일드카드가 있는 DN을 사용하여 항목을 지정

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

  • type: 개체 유형 (사용자, 그룹 등)은 하위 트리대상 필터를설정합니다.
  • memberOf: 그룹의 멤버이며, 대상 필터를 설정합니다.
  • TargetGroup : 특정 그룹을 수정할 수 있는 액세스 권한을 부여합니다(예: 그룹 멤버십을 관리할 수 있는 권한 부여)

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

참고

권한은 다른 권한을 포함할 수 없습니다.

12.2. 기본 관리 권한

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

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

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

관리 권한은 default 및 included 특성 세트에 표시되지만 제외 세트에는 표시되지 않는 모든 특성에 적용됩니다.

참고

관리 권한을 삭제할 수는 없지만 해당 bind 유형을 권한으로 설정하고 모든 권한에서 관리 권한을 제거하면 이를 효과적으로 비활성화합니다.

모든 관리 권한의 이름은 System: (예: System: Add Sudo rule or System: Modify Services )로 시작합니다. 이전 버전의 IdM에서는 기본 권한에 다른 스키마를 사용했습니다. 예를 들어 사용자는 해당 항목을 삭제할 수 없으며 해당 사용자를 권한에만 할당할 수 있었습니다. 이러한 기본 권한의 대부분은 관리되는 권한으로 전환되었지만 다음 권한에서는 여전히 이전 스키마를 사용합니다.

  • 멤버십 자동 작성 작업 추가
  • 설정 하위 항목 추가
  • 복제 계약 추가
  • 인증서 제거 Hold
  • CA에서 인증서 상태 가져오기
  • DNA 범위 읽기
  • DNA 범위 수정
  • PassSync Managers 설정 읽기
  • PassSync Managers 설정 수정
  • 복제 계약 읽기
  • 복제 계약 수정
  • 복제 계약 제거
  • LDBM 데이터베이스 구성 읽기
  • 요청 인증서
  • CA ACL을 무시하는 인증서 요청
  • 다른 호스트의 인증서 요청
  • CA에서 인증서 검색
  • 인증서 해지
  • IPA 설정 쓰기
참고

명령줄에서 관리 권한을 수정하려고 하면 시스템에서 수정할 수 없는 속성을 변경할 수 없으므로 명령이 실패합니다. 웹 UI에서 관리되는 권한을 수정하려고 하면 수정할 수 없는 특성이 비활성화됩니다.

12.3. IdM의 권한

권한은 역할에 적용 가능한 권한 그룹입니다.
권한은 단일 작업을 수행할 수 있는 권한을 제공하지만 성공하려면 여러 권한이 필요한 특정 IdM 작업이 있습니다. 따라서 권한은 특정 작업을 수행하는 데 필요한 다양한 권한을 결합합니다.
예를 들어 새 IdM 사용자에 대한 계정을 설정하려면 다음 권한이 필요합니다.

  • 새 사용자 항목 만들기
  • 사용자 암호 재설정
  • 기본 IPA 사용자 그룹에 새 사용자 추가

이러한 세 가지 하위 수준 작업을 라는 사용자 지정 권한 형식의 상위 수준 작업으로 결합하면 시스템 관리자가 역할을 보다 쉽게 관리할 수 있습니다. IdM에는 이미 여러 기본 권한이 포함되어 있습니다. 사용자 및 사용자 그룹 외에도 호스트 및 호스트 그룹과 네트워크 서비스에 권한이 할당됩니다. 이 방법을 사용하면 특정 네트워크 서비스를 사용하는 호스트 집합에서 일련의 사용자별로 작업을 세부적으로 제어할 수 있습니다.

참고

권한에는 다른 권한이 포함되지 않을 수 있습니다.

12.4. IdM의 역할

역할은 역할에 지정된 사용자가 보유한 권한 목록입니다.
실제로 권한은 지정된 하위 수준 작업(예: 사용자 항목 생성 및 그룹에 항목을 추가하는 등)을 수행할 수 있는 기능을 부여하며, 권한은 상위 수준 작업(예: 지정된 그룹에서 새 사용자를 만드는 등)에 필요한 이러한 권한 중 하나 이상을 결합합니다. 역할은 필요에 따라 권한을 함께 수집합니다. 예를 들어 사용자 관리자 역할은 사용자를 추가, 수정, 삭제할 수 있습니다.

중요

역할은 허용된 작업을 분류하는 데 사용됩니다. 권한 분리를 구현하거나 권한 에스컬레이션으로부터 보호하는 도구로는 사용되지 않습니다.

참고

역할에 다른 역할을 포함할 수 없습니다.

12.5. ID 관리에서 사전 정의된 역할

Red Hat Identity Management는 다음과 같은 다양한 사전 정의 역할을 제공합니다.

표 12.1. ID 관리에서 사전 정의된 역할

Role권한설명

등록 관리자

호스트 등록

클라이언트 또는 호스트, 등록

helpdesk

사용자 수정 및 암호 재설정, 그룹 멤버십 수정

간단한 사용자 관리 작업 수행

IT 보안 전문가

Netgroups 관리자, HBAC 관리자, Sudo 관리자

호스트 기반 액세스 제어와 같은 보안 정책 관리 sudo 규칙

IT 전문가

호스트 관리자, 호스트 그룹 관리자, 서비스 관리자, 자동 마운트 관리자

호스트 관리

보안 아키텍트

위임 관리자, 복제 관리자, 쓰기 IPA 구성, 암호 정책 관리자

ID 관리 환경 관리, 신뢰 생성, 복제 계약 생성

사용자 관리자

사용자 관리자, 그룹 관리자, 사용자 관리자 단계

사용자 및 그룹 생성

12.6. Ansible을 사용하여 권한이 있는 IdM RBAC 역할이 있는지 확인

기본 역할보다 IdM(Identity Management) 리소스에 대한 역할 기반 액세스(RBAC)를 보다 세밀하게 제어하려면 사용자 지정 역할을 생성합니다.

다음 절차에서는 Ansible 플레이북을 사용하여 새 IdM 사용자 지정 역할에 대한 권한을 정의하고 해당 역할이 있는지 확인하는 방법을 설명합니다. 이 예제에서 새 user_and_host_administrator 역할에는 기본적으로 IdM에 있는 다음 권한의 고유한 조합이 포함되어 있습니다.

  • 그룹 관리자
  • 사용자 관리자
  • 사용자 관리자 단계
  • 그룹 관리자

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/doc/ansible-freeipa/playbooks/role/ 디렉터리에 있는 role-member-user-present.yml 파일의 사본을 만듭니다.

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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:
      - 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

추가 리소스

  • Ansible Vault를 사용하여 콘텐츠 암호화를 참조하십시오.
  • IdM의 역할을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉터리에서 README-role 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/iparole 디렉터리에서 샘플 플레이북을 참조하십시오.

12.7. Ansible을 사용하여 IdM RBAC 역할이 없는지 확인

IdM(Identity Management)에서 RBAC(역할 기반 액세스 제어)를 관리하는 시스템 관리자는 관리자가 실수로 사용자에게 이를 할당하지 않도록 더 이상 사용되지 않도록 할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 역할이 없는지 확인하는 방법을 설명합니다. 아래 예제에서는 사용자 지정 user_and_host_administrator 역할이 IdM에 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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:
      - 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

추가 리소스

  • Ansible Vault를 사용하여 콘텐츠 암호화를 참조하십시오.
  • IdM의 역할을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-role Markdown 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/iparole 디렉터리에서 샘플 플레이북을 참조하십시오.

12.8. Ansible을 사용하여 IdM RBAC 역할에 사용자 그룹이 할당되었는지 확인

IdM(Identity Management)에서 RBAC(역할 기반 액세스 제어)를 관리하는 시스템 관리자는 특정 사용자 그룹(예: junior 관리자)에 역할을 할당할 수 있습니다.

다음 예제에서는 Ansible 플레이북을 사용하여 기본 제공 IdM RBAC 지원 datacenter 역할이 junior_sysadmins 에 할당되도록 하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/doc/ansible-freeipa/playbooks/role/ 디렉터리에 있는 role-member-group-present.yml 파일의 사본을 만듭니다.

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 이름 변수를 할당하려는 역할의 이름으로 설정합니다.
    • 그룹 변수를 그룹 이름으로 설정합니다.
    • 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:
      - 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

추가 리소스

  • Ansible Vault를 사용하여 콘텐츠 암호화를 참조하십시오.
  • IdM의 역할을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-role Markdown 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/iparole 디렉터리에서 샘플 플레이북을 참조하십시오.

12.9. Ansible을 사용하여 특정 사용자가 IdM RBAC 역할에 할당되지 않았는지 확인

IdM(Identity Management)에서 RBAC(역할 기반 액세스 제어)를 관리하는 시스템 관리자는 RBAC 역할이 회사 내의 다른 위치로 이동된 후 특정 사용자에게 할당되지 않도록 할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 user_01user_02 라는 사용자가 helpRuntimeConfig 역할에 할당되지 않도록 하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/doc/ansible-freeipa/playbooks/role/ 디렉터리에 있는 role-member-user-absent.yml 파일의 사본을 만듭니다.

    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-absent.yml role-member-user-absent-copy.yml
  3. 편집할 role-member-user-absent-copy.yml Ansible 플레이북 파일을 엽니다.
  4. iparole 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 이름 변수를 할당하려는 역할의 이름으로 설정합니다.
    • 사용자 목록을 사용자 이름으로 설정합니다.
    • 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:
      - 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

추가 리소스

  • Ansible Vault를 사용하여 콘텐츠 암호화를 참조하십시오.
  • IdM의 역할을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-role Markdown 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/iparole 디렉터리에서 샘플 플레이북을 참조하십시오.

12.10. Ansible을 사용하여 서비스가 IdM RBAC 역할의 멤버인지 확인

IdM(Identity Management)에서 RBAC(역할 기반 액세스 제어)를 관리하는 시스템 관리자는 IdM에 등록된 특정 서비스가 특정 역할의 멤버인지 확인할 수 있습니다. 다음 예제에서는 사용자 지정 web_administrator 역할이 client01.idm.example.com 서버에서 실행 중인 HTTP 서비스를 관리할 수 있도록 하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • IdM에 web_administrator 역할이 있습니다.
  • IdM에 HTTP/client01.idm.example.com@IDM.EXAMPLE.COM 서비스가 있습니다.

절차

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

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/doc/ansible-freeipa/playbooks/role/ 디렉터리에 있는 role-member-service-present.yml 파일을 복사합니다.

    $ cp /usr/share/doc/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. iparole 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 이름 변수를 할당하려는 역할의 이름으로 설정합니다.
    • 서비스 목록을 서비스 이름으로 설정합니다.
    • 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:
      - 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

추가 리소스

  • Ansible Vault를 사용하여 콘텐츠 암호화를 참조하십시오.
  • IdM의 역할을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-role Markdown 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/iparole 디렉터리에서 샘플 플레이북을 참조하십시오.

12.11. Ansible을 사용하여 호스트가 IdM RBAC 역할의 멤버인지 확인

IdM(Identity Management)에서 역할 기반 액세스 제어를 관리하는 시스템 관리자는 특정 호스트 또는 호스트 그룹이 특정 역할과 연결되도록 할 수 있습니다. 다음 예제에서는 사용자 지정 web_administrator 역할에서 HTTP 서비스가 실행 중인 client01.idm.example.com IdM 호스트를 관리할 수 있도록 하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • IdM에 web_administrator 역할이 있습니다.
  • client01.idm.example.com 호스트는 IdM에 있습니다.

절차

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

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/doc/ansible-freeipa/playbooks/role/ 디렉터리에 있는 role-member-host-present.yml 파일의 사본을 만듭니다.

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

    • ipaadmin_password 변수를 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:
      - 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

추가 리소스

  • Ansible Vault를 사용하여 콘텐츠 암호화를 참조하십시오.
  • IdM의 역할을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-role Markdown 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/iparole 디렉터리에서 샘플 플레이북을 참조하십시오.

12.12. Ansible을 사용하여 호스트 그룹이 IdM RBAC 역할의 멤버인지 확인

IdM(Identity Management)에서 역할 기반 액세스 제어를 관리하는 시스템 관리자는 특정 호스트 또는 호스트 그룹이 특정 역할과 연결되도록 할 수 있습니다. 다음 예제에서는 사용자 지정 web_administrator 역할이 HTTP 서비스가 실행 중인 IdM 호스트의 web_servers 그룹을 관리할 수 있도록 하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • IdM에 web_administrator 역할이 있습니다.
  • IdM에 web_servers 호스트 그룹이 있습니다.

절차

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

    $ cd ~/<MyPlaybooks>/
  2. /usr/share/doc/ansible-freeipa/playbooks/role/ 디렉터리에 있는 role-member-hostgroup-present.yml 파일의 사본을 만듭니다.

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 이름 변수를 할당하려는 역할의 이름으로 설정합니다.
    • 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:
      - 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

추가 리소스

  • Ansible Vault를 사용하여 콘텐츠 암호화를 참조하십시오.
  • IdM의 역할을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-role Markdown 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/iparole 디렉터리에서 샘플 플레이북을 참조하십시오.

13장. Ansible 플레이북을 사용하여 RBAC 권한 관리

RBAC(역할 기반 액세스 제어)는 역할, 권한 및 권한에 대해 정의된 정책 중립 액세스 제어 메커니즘입니다. 특히 대규모 회사에서 RBAC를 사용하면 개별 책임 영역이 있는 관리자의 계층적 시스템을 만드는 데 도움이 될 수 있습니다.

이 장에서는 Ansible 플레이북을 사용하여 IdM(Identity Management)에서 RBAC 권한을 관리하기 위한 다음 작업을 설명합니다.

사전 요구 사항

13.1. Ansible을 사용하여 사용자 정의 IdM RBAC 권한이 있는지 확인

IdM(Identity Management) 역할 기반 액세스 제어(RBAC)에서 완전한 사용자 정의 권한을 얻으려면 단계를 진행해야 합니다.

  1. 권한이 연결되어 있지 않은 권한을 생성합니다.
  2. 선택한 권한을 권한에 추가합니다.

다음 절차에서는 나중에 권한을 추가할 수 있도록 Ansible 플레이북을 사용하여 빈 권한을 생성하는 방법을 설명합니다. 이 예제에서는 호스트 관리와 관련된 모든 IdM 권한을 결합하는 데 사용되는 full_host_administration 이라는 권한을 생성하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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
        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

13.2. Ansible을 사용하여 사용자 정의 IdM RBAC 권한에 멤버 권한이 있는지 확인

IdM(Identity Management) 역할 기반 액세스 제어(RBAC)에서 완전한 사용자 정의 권한을 얻으려면 단계를 진행해야 합니다.

  1. 권한이 연결되어 있지 않은 권한을 생성합니다.
  2. 선택한 권한을 권한에 추가합니다.

다음 절차에서는 Ansible 플레이북을 사용하여 이전 단계에서 생성된 권한에 권한을 추가하는 방법을 설명합니다. 이 예제에서는 호스트 관리와 관련된 모든 IdM 권한을 full_host_administration 이라는 권한에 추가하는 방법을 설명합니다. 기본적으로 권한은 호스트 등록, 호스트 관리자 및 호스트 그룹 관리자 권한 간에 배포됩니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • full_host_administration 권한이 있습니다. Ansible을 사용하여 권한을 생성하는 방법에 대한 자세한 내용은 사용자 정의 IdM RBAC 권한이 있는지 확인하기 위해 Ansible 사용을 참조하십시오.

절차

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

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

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

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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

13.3. Ansible을 사용하여 IdM RBAC 권한에 권한이 포함되어 있지 않은지 확인

IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어를 사용자 지정할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 권한에서 권한을 제거하는 방법을 설명합니다. 이 예제에서는 기본 인증서 관리자 권한에서 CA ACL 권한을 무시하는 요청 인증서 제거 방법을 설명합니다. 예를 들어 관리자는 보안 위험을 고려합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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
        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

13.4. Ansible을 사용하여 사용자 정의 IdM RBAC 권한 이름 변경

IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어를 사용자 지정할 수 있습니다.

다음 절차에서는 예를 들어 권한에서 몇 가지 권한을 제거했기 때문에 권한 이름 변경 방법을 설명합니다. 결과적으로 권한 이름이 더 이상 정확하지 않습니다. 이 예제에서 관리자는 full_host_administration 권한의 이름을 limited_host_administration 으로 변경합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • full_host_administration 권한이 있습니다. 권한을 추가하는 방법에 대한 자세한 내용은 Ansible을 사용하여 사용자 정의 IdM RBAC 권한이 있는지 를 참조하십시오.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • name 변수를 현재 권한 이름으로 설정합니다.
    • rename 변수를 추가하고 권한의 새 이름으로 설정합니다.
    • state 변수를 추가하고 이름이 로 설정합니다.
  5. 플레이북 자체의 이름을 변경합니다. 예를 들면 다음과 같습니다.

    ---
    - name: Rename a privilege
      hosts: ipaserver
  6. 플레이북의 작업 이름을 변경합니다. 예를 들면 다음과 같습니다.

    [...]
    tasks:
    - name: Ensure the full_host_administration privilege is renamed to limited_host_administration
      ipaprivilege:
      [...]

    현재 예제에 대해 수정된 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
        ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: full_host_administration
          rename: limited_host_administration
          state: renamed
  7. 파일을 저장합니다.
  8. Ansible 플레이북을 실행합니다. 플레이북 파일, secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory rename-privilege.yml

13.5. Ansible을 사용하여 IdM RBAC 권한이 없는지 확인

IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어를 사용자 지정할 수 있습니다. 다음 절차에서는 Ansible 플레이북을 사용하여 RBAC 권한이 없는지 확인하는 방법을 설명합니다. 이 예제에서는 CA 관리자 권한이 없는지 확인하는 방법을 설명합니다. 이 절차를 통해 관리자 관리자는 IdM에서 인증 기관을 관리할 수 있는 유일한 사용자가 됩니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 이름 변수를 제거하려는 권한의 이름으로 설정합니다.
    • state 변수가 absent 로 설정되어 있는지 확인합니다.
  5. 플레이북의 작업 이름을 변경합니다. 예를 들면 다음과 같습니다.

    [...]
    tasks:
    - name: Ensure privilege "CA administrator" is absent
      ipaprivilege:
      [...]

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

    ---
    - name: Privilege absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure privilege "CA administrator" is absent
        ipaprivilege:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: CA administrator
          state: absent
  6. 파일을 저장합니다.
  7. Ansible 플레이북을 실행합니다. 플레이북 파일, secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

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

13.6. 추가 리소스

  • IdM의 권한 참조.
  • IdM의 권한을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉터리에서 사용 가능한 README-privilege 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/ipaprivilege 디렉터리에서 샘플 플레이북을 참조하십시오.

14장. Ansible 플레이북을 사용하여 IdM에서 RBAC 권한 관리

RBAC(역할 기반 액세스 제어)는 역할, 권한 및 권한에 대해 정의된 정책 중립 액세스 제어 메커니즘입니다. 특히 대규모 회사에서 RBAC를 사용하면 개별 책임 영역이 있는 관리자의 계층적 시스템을 만드는 데 도움이 될 수 있습니다.

이 장에서는 Ansible 플레이북을 사용하여 IdM(Identity Management)에서 RBAC 권한을 관리할 때 수행되는 다음 작업을 설명합니다.

사전 요구 사항

14.1. Ansible을 사용하여 RBAC 권한이 있는지 확인

IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어(RBAC)를 사용자 지정할 수 있습니다.

다음 절차에서는 권한에 추가할 수 있도록 Ansible 플레이북을 사용하여 IdM에 권한이 있는지 확인하는 방법을 설명합니다. 이 예제에서는 다음 대상 상태를 확인하는 방법을 설명합니다.

  • MyPermission 권한이 있습니다.
  • MyPermission 권한은 호스트에만 적용할 수 있습니다.
  • 권한이 포함된 권한이 부여된 사용자에게는 해당 항목에 대해 가능한 다음 모든 작업을 수행할 수 있습니다.

    • write
    • read
    • 검색
    • 비교
    • add
    • delete

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/permission/ 디렉터리에 있는 permission-present.yml 파일을 복사합니다.

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

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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
        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

14.2. Ansible을 사용하여 특성이 있는 RBAC 권한이 있는지 확인합니다.

IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어(RBAC)를 사용자 지정할 수 있습니다.

다음 절차에서는 권한에 추가할 수 있도록 Ansible 플레이북을 사용하여 IdM에 권한이 있는지 확인하는 방법을 설명합니다. 이 예제에서는 다음 대상 상태를 확인하는 방법을 설명합니다.

  • MyPermission 권한이 있습니다.
  • MyPermission 권한은 호스트를 추가하는 데만 사용할 수 있습니다.
  • 권한이 포함된 권한이 부여된 사용자에게는 호스트 항목에서 가능한 다음 모든 작업을 수행할 수 있습니다.

    • write
    • read
    • 검색
    • 비교
    • add
    • delete
  • MyPermission 권한이 포함된 권한이 부여된 사용자가 생성한 호스트 항목은 설명 값을 가질 수 있습니다.
참고

권한을 생성할 때 지정할 수 있는 속성 유형은 IdM LDAP 스키마에 의해 제한되지 않습니다. 그러나 예를 들어 object_type 이 호스트가 나중에 host 인 경우 attrs: car_licence 를 지정하면 권한을 수행하고 호스트에 특정 자동차 라이선스 값을 추가하려고 할 때 ipa: ERROR: attribute "car-license"가 오류 메시지를 허용하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/permission/ 디렉터리에 있는 permission-present.yml 파일을 복사합니다.

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

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • name 변수를 권한 이름으로 설정합니다.
    • object_type 변수를 host 로 설정합니다.
    • 올바른 변수를 모든 으로 설정합니다.
    • attrs 변수를 설명으로 설정합니다.

    현재 예제에 대해 수정된 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
        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

추가 리소스

  • RHEL 7의 Linux 도메인 ID, 인증 및 정책 가이드의 사용자 및 그룹 스키마 를 참조하십시오.

14.3. Ansible을 사용하여 RBAC 권한이 없는지 확인

IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어(RBAC)를 사용자 지정할 수 있습니다.

다음 절차에서는 권한에 추가할 수 없도록 Ansible 플레이북을 사용하여 IdM에 권한이 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

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

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

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • name 변수를 권한 이름으로 설정합니다.

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

    ---
    - name: Permission absent example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure that the "MyPermission" permission is absent
        ipapermission:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: MyPermission
          state: absent
  5. 파일을 저장합니다.
  6. Ansible 플레이북을 실행합니다. 플레이북 파일, secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

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

14.4. Ansible을 사용하여 속성이 IdM RBAC 권한의 멤버인지 확인

IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어(RBAC)를 사용자 지정할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 속성이 IdM의 RBAC 권한 멤버인지 확인하는 방법을 설명합니다. 결과적으로 권한이 있는 사용자는 특성이 있는 항목을 생성할 수 있습니다.

이 예제에서는 MyPermission 권한이 포함된 사용자가 생성한 호스트 항목에 gecosdescription 값을 가질 수 있는지 확인하는 방법을 설명합니다.

참고

권한을 생성할 때 지정할 수 있는 속성 유형은 IdM LDAP 스키마에 의해 제한되지 않습니다. 그러나 예를 들어 object_type 이 호스트가 나중에 host 인 경우 attrs: car_licence 를 지정하면 권한을 수행하고 호스트에 특정 자동차 라이선스 값을 추가하려고 할 때 ipa: ERROR: attribute "car-license"가 오류 메시지를 허용하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • MyPermission 권한이 있습니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/permission/ 디렉터리에 있는 permission-member-present.yml 파일을 복사합니다.

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

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • 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"
        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

14.5. Ansible을 사용하여 속성이 IdM RBAC 권한의 멤버가 아닌지 확인

IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어(RBAC)를 사용자 지정할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 속성이 IdM의 RBAC 권한 멤버가 아닌지 확인하는 방법을 설명합니다. 결과적으로 권한이 있는 사용자가 IdM LDAP에 항목을 생성하면 해당 항목에 속성과 연결된 값을 가질 수 없습니다.

이 예제에서는 다음 대상 상태를 확인하는 방법을 설명합니다.

  • MyPermission 권한이 있습니다.
  • MyPermission 권한이 포함된 권한이 있는 사용자가 생성한 호스트 항목은 description 속성을 가질 수 없습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • MyPermission 권한이 있습니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/permission/ 디렉터리에 있는 permission-member-absent.yml 파일을 복사합니다.

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

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • name 변수를 권한 이름으로 설정합니다.
    • attrs 변수를 설명으로 설정합니다.
    • 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"
        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

14.6. Ansible을 사용하여 IdM RBAC 권한 이름 변경

IdM(Identity Management)의 시스템 관리자는 IdM 역할 기반 액세스 제어를 사용자 지정할 수 있습니다.

다음 절차에서는 Ansible 플레이북을 사용하여 권한의 이름을 바꾸는 방법을 설명합니다. 이 예제에서는 MyPermission 의 이름을 MyNewPermission 으로 변경하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • IdM에 MyPermission 이 있습니다.
  • IdM에는 MyNewPermission 이 없습니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/permission/ 디렉터리에 있는 permission-renamed.yml 파일의 사본을 만듭니다.

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

    • 사용 사례에 맞게 작업 이름을 조정합니다.
    • ipaadmin_password 변수를 IdM 관리자의 암호로 설정합니다.
    • name 변수를 권한 이름으로 설정합니다.

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

    ---
    - name: Permission present example
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Rename the "MyPermission" permission
        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

14.7. 추가 리소스

  • IdM의 권한을 참조하십시오.
  • IdM의 권한 참조.
  • /usr/share/doc/ansible-freeipa/ 디렉터리에서 사용 가능한 README-permission 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/ipapermission 디렉터리에서 샘플 플레이북을 참조하십시오.

15장. Ansible을 사용하여 IdM의 복제 토폴로지 관리

여러 IdM(Identity Management) 서버를 유지 관리하고 중복을 위해 서버 손실을 완화하거나 방지하기 위해 서로 복제할 수 있습니다. 예를 들어, 한 서버가 실패하면 다른 서버에서 도메인에 서비스를 계속 제공합니다. 나머지 서버 중 하나를 기반으로 새 복제본을 생성하여 손실된 서버를 복구할 수도 있습니다.

IdM 서버에 저장된 데이터는 복제 계약을 기반으로 복제됩니다. 두 서버에 복제 계약이 구성된 경우 해당 데이터를 공유합니다. 복제된 데이터는 토폴로지 접미사 에 저장됩니다. 두 복제본의 접미사 간에 복제 계약이 있는 경우 접미사는 토폴로지 세그먼트 를 형성합니다.

이 장에서는 Red Hat Ansible Engine 을 사용하여 IdM 복제 계약, 토폴로지 세그먼트 및 토폴로지 접미사를 관리하는 방법을 설명합니다. 이 장에는 다음 섹션이 포함되어 있습니다.

15.1. Ansible을 사용하여 IdM에 복제 계약이 있는지 확인

IdM(Identity Management) 서버에 저장된 데이터는 복제 계약을 기반으로 복제됩니다. 두 서버에 복제 계약이 구성된 경우 해당 데이터가 공유됩니다. 복제 계약은 항상 서로 구분되며 데이터는 첫 번째 복제본에서 다른 복제본으로 복제되고 다른 복제본에서 첫 번째 복제본으로 복제됩니다.

Ansible 플레이북을 사용하여 server.idm.example.comreplica.idm.example.com 사이에 도메인 유형의 복제 계약이 있는지 확인합니다.

사전 요구 사항

  • 토폴로지의 IdM 복제본 연결을 위해 지침에 나열된 IdM 토폴로지를 설계하기 위한 권장 사항을 이해해야 합니다.
  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/topology/ 디렉터리에 있는 add-topologysegment.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegment.yml add-topologysegment-copy.yml
  3. 편집할 add-topologysegment-copy.yml 파일을 엽니다.
  4. ipatopologysegment 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • 추가할 세그먼트 유형에 따라 접미사 변수를 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

추가 리소스

  • 복제 계약, Topology Suffixes, Topology Segments를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리에 있는 README-topology.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/topology 디렉터리에서 샘플 플레이북을 참조하십시오.

15.2. Ansible을 사용하여 여러 IdM 복제본 간에 복제 계약이 존재하는지 확인

IdM(Identity Management) 서버에 저장된 데이터는 복제 계약을 기반으로 복제됩니다. 두 서버에 복제 계약이 구성된 경우 해당 데이터가 공유됩니다. 복제 계약은 항상 서로 구분되며 데이터는 첫 번째 복제본에서 다른 복제본으로 복제되고 다른 복제본에서 첫 번째 복제본으로 복제됩니다.

IdM의 여러 복제본 쌍 간에 복제 계약이 있는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • 토폴로지의 복제본 연결에 나열된 IdM 토폴로지를 설계하기 위한 권장 사항을 이해해야 합니다.
  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/topology/ 디렉터리에 있는 add-topologysegments.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegments.yml add-topologysegments-copy.yml
  3. 편집하기 위해 add-topologysegments-copy.yml 파일을 엽니다.
  4. vars 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • 모든 토폴로지 세그먼트에서 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
        ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: "{{ item.suffix }}"
          name: "{{ item.name | default(omit) }}"
          left: "{{ item.left }}"
          right: "{{ item.right }}"
          state: present
          #state: absent
          #state: checked
          #state: reinitialized
        loop: "{{ ipatopology_segments | default([]) }}"
  6. 파일을 저장합니다.
  7. Ansible 플레이북을 실행합니다. 플레이북 파일, secret.yml 파일을 보호하는 암호를 저장하는 파일 및 인벤토리 파일을 지정합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegments-copy.yml

추가 리소스

  • 복제 계약, Topology Suffixes, Topology Segments를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리에 있는 README-topology.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/topology 디렉터리에서 샘플 플레이북을 참조하십시오.

15.3. Ansible을 사용하여 두 개의 복제본 간에 복제 계약이 있는지 확인합니다.

IdM(Identity Management) 서버에 저장된 데이터는 복제 계약을 기반으로 복제됩니다. 두 서버에 복제 계약이 구성된 경우 해당 데이터가 공유됩니다. 복제 계약은 항상 서로 구분되며 데이터는 첫 번째 복제본에서 다른 복제본으로 복제되고 다른 복제본에서 첫 번째 복제본으로 복제됩니다.

다음 절차에 따라 IdM의 여러 복제본 쌍 간에 복제 계약이 있는지 확인합니다.

사전 요구 사항

  • 토폴로지의 복제본 연결에 나열된 IdM(Identity Management) 토폴로지를 설계하기 위한 권장 사항을 이해해야 합니다.
  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible -freeipa/playbooks/topology/ 디렉터리에 있는 check-topology.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/check-topologysegments.yml check-topologysegments-copy.yml
  3. 편집을 위해 check-topologysegments-copy.yml 파일을 엽니다.
  4. vars 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • 모든 토폴로지 세그먼트에서 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
        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

추가 리소스

  • 토폴로지 계약, 접미사 및 세그먼트의 개념에 대한 자세한 내용은 복제 계약, 토폴로지 Suffixes 및 토폴로지 시나리오 설명을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리에 있는 README-topology.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/topology 디렉터리에서 샘플 플레이북을 참조하십시오.

15.4. Ansible을 사용하여 IdM에 토폴로지 접미사가 있는지 확인합니다.

IdM(Identity Management)의 복제 계약 컨텍스트에서 토폴로지 접미사는 복제된 데이터를 저장합니다. IdM은 domainca 의 두 가지 유형의 토폴로지 접미사를 지원합니다. 각 접미사는 별도의 백엔드인 별도의 복제 토폴로지를 나타냅니다. 복제 계약이 구성되면 두 개의 다른 서버에 동일한 유형의 토폴로지 접미사가 사용됩니다.

도메인 접미사에는 사용자, 그룹 및 정책과 같은 모든 도메인 관련 데이터가 포함됩니다. ca 접미사에는 인증서 시스템 구성 요소에 대한 데이터가 포함되어 있습니다. CA(인증 기관)가 설치된 서버에만 존재합니다.

Ansible 플레이북을 사용하여 IdM에 토폴로지 접미사가 있는지 확인하려면 다음 절차를 따르십시오. 이 예제에서는 IdM에 도메인 접미사가 있는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/topology/ 디렉터리에 있는 verify-topologysuffix.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/ verify-topologysuffix.yml verify-topologysuffix-copy.yml
  3. 편집할 verify-topologysuffix-copy.yml Ansible 플레이북 파일을 엽니다.
  4. ipatopologysuffix 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • 접미사 변수를 domain 으로 설정합니다. ca 접미사가 있는지 확인하는 경우 변수를 ca 로 설정합니다.
    • state 변수가 검증 되도록 설정되어 있는지 확인합니다. 다른 옵션은 불가능합니다.

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

    ---
    - name: Playbook to handle topologysuffix
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Verify topology suffix
        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

추가 리소스

  • 복제 계약, Topology Suffixes, Topology Segments를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리에 있는 README-topology.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/topology 디렉터리에서 샘플 플레이북을 참조하십시오.

15.5. Ansible을 사용하여 IdM 복제본 다시 초기화

복제본이 오랜 기간 동안 오프라인된 경우 또는 해당 데이터베이스가 손상된 경우 다시 초기화할 수 있습니다. 업데이트된 데이터 세트로 복제본을 새로 고침합니다. 예를 들어 백업에서 신뢰할 수 있는 복원이 필요한 경우 다시 초기화할 수 있습니다.

참고

복제 업데이트와 달리 복제본에서 변경된 항목만 서로 다시 보내면 전체 데이터베이스를 새로 고칩니다.In contrast to replication updates, during which replicas only send changed entries to each other, reinitialization refreshes the whole database.

명령을 실행하는 로컬 호스트는 reinitialized 복제본입니다. 데이터를 가져올 복제본을 지정하려면 direction 옵션을 사용합니다.

Ansible 플레이북을 사용하여 server.idm.example.comreplica.idm.example.com 에서 도메인 데이터를 다시 초기화하려면 다음 절차를 따르십시오.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible -freeipa/playbooks/topology/ 디렉터리에 있는 reinitialize-topologys.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/reinitialize-topologysegment.yml reinitialize-topologysegment-copy.yml
  3. 편집할 reinitialize-topologysegment-copy.yml 파일을 엽니다.
  4. ipatopologysegment 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • 접미사 변수를 domain 으로 설정합니다. ca 데이터를 다시 시작하는 경우 변수를 ca 로 설정합니다.
    • 왼쪽 변수를 복제 계약의 왼쪽 노드로 설정합니다.
    • 올바른 변수를 복제 계약의 올바른 노드로 설정합니다.
    • direction 변수를 reinitializing 데이터의 방향으로 설정합니다. 왼쪽에서 오른쪽 방향은 데이터가 왼쪽 노드에서 오른쪽 노드로 전송됨을 의미합니다.
    • state 변수가 다시 초기화 되도록 설정되어 있는지 확인합니다.

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

      ---
      - name: Playbook to handle topologysegment
        hosts: ipaserver
      
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
        - name: Reinitialize topology segment
          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

추가 리소스

  • 복제 계약, Topology Suffixes, Topology Segments를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리에 있는 README-topology.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/topology 디렉터리에서 샘플 플레이북을 참조하십시오.

15.6. Ansible을 사용하여 IdM에 복제 주석이 없는지 확인

IdM(Identity Management) 서버에 저장된 데이터는 복제 계약을 기반으로 복제됩니다. 두 서버에 복제 계약이 구성된 경우 해당 데이터가 공유됩니다. 복제 계약은 항상 서로 구분되며 데이터는 첫 번째 복제본에서 다른 복제본으로 복제되고 다른 복제본에서 첫 번째 복제본으로 복제됩니다.

다음 절차에 따라 두 복제본 간의 복제 계약이 IdM에 없는지 확인합니다. 이 예제에서는 replica01.idm.example.comreplica02.idm.example.com IdM 서버 간에 도메인 유형의 복제 계약이 없는지 확인하는 방법을 설명합니다.

사전 요구 사항

  • 토폴로지의 복제본 연결목록에 나열된 IdM 토폴로지를 설계하기 위한 권장 사항을 이해해야 합니다.
  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/topology/ 디렉터리에 있는 delete-topologysegment.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/delete-topologysegment.yml delete-topologysegment-copy.yml
  3. 편집할 delete-topologysegment-copy.yml 파일을 엽니다.
  4. ipatopologysegment 작업 섹션에서 다음 변수를 설정하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • 접미사 변수를 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

추가 리소스

  • 복제 계약, Topology Suffixes, Topology Segments를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리에 있는 README-topology.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/topology 디렉터리에서 샘플 플레이북을 참조하십시오.

15.7. 추가 리소스

16장. Ansible을 사용하여 IdM 서버 관리

Red Hat Ansible Engine 을 사용하여 IdM(Identity Management) 토폴로지의 서버를 관리할 수 있습니다. ansible-freeipa 패키지에서 server 모듈을 사용하여 IdM 토폴로지에 서버가 있는지 확인할 수 있습니다. 복제본을 숨기거나 복제본을 볼 수도 있습니다.

섹션에는 다음 항목이 포함되어 있습니다.

16.1. Ansible을 사용하여 IdM 서버가 있는지 확인

Ansible 플레이북에서 ipaserver ansible-freeipa 모듈을 사용하여 IdM(Identity Management) 서버가 있는지 확인할 수 있습니다.

참고

ipaserver Ansible 모듈은 IdM 서버를 설치하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
    • 제어 노드에서 인벤토리 파일에 정의된 IdM 서버로의 SSH 연결이 제대로 작동합니다.

절차

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

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

    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-present.yml server-present-copy.yml
  3. 편집할 server-present-copy.yml 파일을 엽니다.
  4. ipaserver 작업 섹션에서 다음 변수를 설정하고 파일을 저장하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • 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
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
  5. Ansible 플레이북을 실행하고 플레이북 파일 및 인벤토리 파일을 지정합니다.

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

추가 리소스

16.2. Ansible을 사용하여 IdM 서버가 IdM 토폴로지에서 없음을 확인

Ansible 플레이북을 사용하여 IdM(Identity Management) 서버가 호스트로도 IdM 토폴로지에 없는지 확인합니다.

ansible-freeipa ipaserver 역할과 달리 이 플레이북에서 사용되는 ipaserver 모듈은 서버에서 IdM 서비스를 제거하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
    • 제어 노드에서 인벤토리 파일에 정의된 IdM 서버로의 SSH 연결이 제대로 작동합니다.

절차

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

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

    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent.yml server-absent-copy.yml
  3. 편집할 server-absent-copy.yml 파일을 엽니다.
  4. 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
        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를 사용하는지 여부에 관계없이 적용됩니다.

추가 리소스

  • IdM 서버 제거를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-server.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/server 디렉터리에서 샘플 플레이북을 참조하십시오.

16.3. 마지막 IdM 서버 역할을 호스팅해도 IdM 서버가 없는지 확인

Ansible을 사용하여 서버에서 마지막 IdM 서비스 인스턴스가 실행 중인 경우에도 IdM(Identity Management) 서버가 없는지 확인할 수 있습니다. CA(인증 기관), 키 복구 기관(KRA) 또는 DNS 서버는 모두 IdM 서비스의 예입니다.

주의

CA, KRA 또는 DNS 서버로 사용되는 마지막 서버를 제거하면 IdM 기능이 크게 중단됩니다. ipa service-find 명령을 사용하여 어떤 IdM 서버에서 실행 중인지 수동으로 확인할 수 있습니다. CA 서버의 기본 이름은 dogtag/server_name/tektonM_NAME 입니다.

ansible-freeipa ipaserver 역할과 달리 이 플레이북에서 사용되는 ipaserver 모듈은 서버에서 IdM 서비스를 제거하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
    • 제어 노드에서 인벤토리 파일에 정의된 IdM 서버로의 SSH 연결이 제대로 작동합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible -freeipa/playbooks/server/ 디렉터리에 있는 server-absent-ignore-last-role.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent-ignore-last-of-role.yml server-absent-ignore-last-of-role-copy.yml
  3. 편집할 server-absent-ignore-last-role-copy.yml 파일을 엽니다.
  4. ipaserver 작업 섹션에서 다음 변수를 설정하고 파일을 저장하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • name 변수를 서버의 FQDN 으로 설정합니다. 예제 서버의 FQDNserver123.idm.example.com 입니다.
    • ignore_last_of_role 변수가 yes 로 설정되어 있는지 확인합니다.
    • 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
        ipaserver:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: server123.idm.example.com
          ignore_last_of_role: yes
          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를 사용하는지 여부에 관계없이 적용됩니다.

추가 리소스

  • IdM 서버 제거를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-server.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/server 디렉터리에서 샘플 플레이북을 참조하십시오.

16.4. IdM 서버가 없음을 확인하지만 다른 IdM 서버와 분리할 필요는 없습니다.

토폴로지에서 IdM(Identity Management) 서버를 제거하는 경우 Ansible 플레이북을 사용하여 복제 계약을 그대로 유지할 수 있습니다. 또한 이 플레이북은 IdM 서버가 호스트로도 IdM에 존재하지 않도록 합니다.

중요

제거하려는 다른 서버가 제대로 작동하는 경우에만 서버의 복제 계약을 무시하는 것이 좋습니다. 토폴로지의 중앙 지점 역할을 하는 서버를 제거하면 토폴로지를 두 개의 연결이 끊긴 클러스터로 분할할 수 있습니다.

ipa server-del 명령을 사용하여 토폴로지에서 일관성 있는 서버를 제거할 수 있습니다.

참고

CA(인증 기관), 키 복구 기관(KRA) 또는 DNS 서버 역할을 하는 마지막 서버를 제거하면 IdM(Identity Management) 기능이 크게 손상됩니다. 이 문제를 방지하기 위해 플레이북에서는 CA, KRA 또는 DNS 서버 역할을 하는 서버를 제거하기 전에 이러한 서비스가 도메인의 다른 서버에서 실행 중인지 확인합니다.

ansible-freeipa ipaserver 역할과 달리 이 플레이북에서 사용되는 ipaserver 모듈은 서버에서 IdM 서비스를 제거하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
    • 제어 노드에서 인벤토리 파일에 정의된 IdM 서버로의 SSH 연결이 제대로 작동합니다.

절차

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

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

    $ cp /usr/share/doc/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 변수가 yes 로 설정되어 있는지 확인합니다.
    • 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: yes
          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를 사용하는지 여부에 관계없이 적용됩니다.

추가 리소스

  • IdM 서버 제거를 참조하십시오.
  • /usr/share/doc/ansible-freeipa/ 디렉토리의 README-server.md 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/server 디렉터리에서 샘플 플레이북을 참조하십시오.

16.5. Ansible 플레이북을 사용하여 기존 IdM 서버가 숨겨져 있는지 확인합니다.

Ansible 플레이북에서 ipaserver ansible-freeipa 모듈을 사용하여 기존 IdM(Identity Management) 서버가 숨겨졌는지 확인합니다. 이 Playbook은 IdM 서버를 설치하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
    • 제어 노드에서 인벤토리 파일에 정의된 IdM 서버로의 SSH 연결이 제대로 작동합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/server/ 디렉터리에 있는 server-hidden.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-hidden.yml server-hidden-copy.yml
  3. 편집할 server-hidden-copy.yml 파일을 엽니다.
  4. ipaserver 작업 섹션에서 다음 변수를 설정하고 파일을 저장하여 파일을 조정합니다.

    • ipaadmin_password 변수를 IdM 관리자 암호로 설정합니다.
    • 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
        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

추가 리소스

16.6. Ansible 플레이북을 사용하여 기존 IdM 서버가 표시되는지 확인합니다.

Ansible 플레이북에서 ipaserver ansible-freeipa 모듈을 사용하여 기존 IdM(Identity Management) 서버가 표시되는지 확인합니다. 이 Playbook은 IdM 서버를 설치하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
    • 제어 노드에서 인벤토리 파일에 정의된 IdM 서버로의 SSH 연결이 제대로 작동합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/server/ 디렉터리에 있는 server-not-hidden.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/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
        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

추가 리소스

16.7. 기존 IdM 서버에 IdM DNS 위치가 할당되어 있는지 확인합니다.

Ansible 플레이북에서 ipaserver ansible-freeipa 모듈을 사용하여 기존 IdM(Identity Management) 서버에 특정 IdM DNS 위치가 할당되었는지 확인합니다.

ipaserver Ansible 모듈은 IdM 서버를 설치하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • IdM DNS 위치가 있습니다. 예를 들어 location은 germany 입니다.
  • 서버에 대한 루트 액세스 권한이 있어야 합니다. 예제 서버는 server123.idm.example.com 입니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
    • 제어 노드에서 인벤토리 파일에 정의된 IdM 서버로의 SSH 연결이 제대로 작동합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/server/ 디렉터리에 있는 server-location.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/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-pkcs11 서비스를 다시 시작하십시오.

    [root@server123.idm.example.com ~]# systemctl restart named-pkcs11

추가 리소스

16.8. 기존 IdM 서버에 IdM DNS 위치가 할당되지 않았는지 확인합니다.

Ansible 플레이북에서 ipaserver ansible-freeipa 모듈을 사용하여 기존 IdM(Identity Management) 서버에 IdM DNS 위치가 할당되어 있지 않은지 확인합니다. 지리적 위치를 자주 변경하는 서버에 DNS 위치를 할당하지 마십시오. Playbook은 IdM 서버를 설치하지 않습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 서버에 대한 루트 액세스 권한이 있어야 합니다. 예제 서버는 server123.idm.example.com 입니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
    • 제어 노드에서 인벤토리 파일에 정의된 IdM 서버로의 SSH 연결이 제대로 작동합니다.

절차

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

    $ cd ~/MyPlaybooks/
  2. /usr/share/doc/ansible-freeipa/playbooks/server/ 디렉터리에 있는 server-no-location.yml Ansible 플레이북 파일을 복사합니다.

    $ cp /usr/share/doc/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 으로 설정합니다.
    • 위치 변수가 "" 로 설정되어 있는지 확인합니다.
    ---
    - 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-pkcs11 서비스를 다시 시작하십시오.

    [root@server123.idm.example.com ~]# systemctl restart named-pkcs11

추가 리소스

17장. Ansible 플레이북을 사용하여 호스트 관리

Ansible은 시스템 구성, 소프트웨어 배포 및 롤링 업데이트를 수행하는 데 사용되는 자동화 툴입니다. Ansible에는 IdM(Identity Management) 지원이 포함되어 있으며 Ansible 모듈을 사용하여 호스트 관리를 자동화할 수 있습니다.

Ansible 플레이북을 사용하여 호스트 및 호스트 항목을 관리할 때 다음 개념과 작업이 수행됩니다.

17.1. Ansible 플레이북을 사용하여 FQDN으로 IdM 호스트 항목이 있는지 확인

Ansible 플레이북을 사용하여 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의 idempotence on idempotence 때문에 Ansible을 사용하여 호스트를 IdM에 추가하려면 호스트 상태를 present: state: present 로 정의하는 플레이북을 생성해야 합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 확인하려는 IdM에 있는 호스트의 FQDN 으로 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/doc/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
        ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host01.idm.example.com
          state: present
          force: yes
  3. 플레이북을 실행합니다.

    $ 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

출력은 IdM에 host01.idm.example.com 이 있는지 확인합니다.

17.2. Ansible 플레이북을 사용하여 DNS 정보로 IdM 호스트 항목이 있는지 확인

Ansible 플레이북을 사용하여 IdM(Identity Management)에 호스트 항목이 있는지 확인하려면 다음 절차를 따르십시오. 호스트 항목은 FQDN( 정규화된 도메인 이름 ) 및 해당 IP 주소로 정의됩니다.

참고

Ansible이 없으면 ipa host-add 명령을 사용하여 IdM에 호스트 항목이 생성됩니다. IdM에 호스트를 추가하는 결과는 IdM에 호스트 상태가 됩니다. Ansible의 idempotence on idempotence 때문에 Ansible을 사용하여 호스트를 IdM에 추가하려면 호스트 상태를 present: state: present 로 정의하는 플레이북을 생성해야 합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 보장하려는 IdM에 있는 호스트의 FQDN( 정규화된 도메인 이름 )을 사용하여 Ansible 플레이북 파일을 생성합니다. 또한 IdM 서버가 DNS를 관리하도록 구성되어 호스트의 IP 주소를 알고 있는 경우 ip_address 매개 변수의 값을 지정합니다. 호스트가 DNS 리소스 레코드에 존재하려면 IP 주소가 필요합니다. 이 단계를 단순화하기 위해 /usr/share/doc/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
        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
  3. 플레이북을 실행합니다.

    $ 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

출력은 IdM에 host01.idm.example.com 이 있는지 확인합니다.

17.3. Ansible 플레이북을 사용하여 임의의 암호로 여러 IdM 호스트 항목이 있는지 확인

ipahost 모듈을 사용하면 시스템 관리자가 하나의 Ansible 작업만 사용하여 IdM에 여러 호스트 항목이 있거나 있는지 확인할 수 있습니다. FQDN( 정규화된 도메인 이름 )에서만 정의한 여러 호스트 항목이 있는지 확인하려면 다음 절차를 따르십시오. Ansible 플레이북을 실행하면 호스트에 대한 임의의 암호가 생성됩니다.

참고

Ansible이 없으면 ipa host-add 명령을 사용하여 IdM에 호스트 항목이 생성됩니다. IdM에 호스트를 추가하는 결과는 IdM에 호스트 상태가 됩니다. Ansible의 idempotence on idempotence 때문에 Ansible을 사용하여 호스트를 IdM에 추가하려면 호스트 상태를 present: state: present 로 정의하는 플레이북을 생성해야 합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 보장하려는 IdM에 있는 호스트의 FQDN( 정규화된 도메인 이름 )을 사용하여 Ansible 플레이북 파일을 생성합니다. Ansible 플레이북에서 호스트가 IdM에 이미 있고 update_passwordon_create 로 제한되더라도 각 호스트에 대해 임의의 암호를 생성하도록 하려면 random: yesforce: yes 옵션을 추가합니다. 이 단계를 단순화하기 위해 /usr/share/doc/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
        ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          hosts:
          - name: host01.idm.example.com
            random: yes
            force: yes
          - name: host02.idm.example.com
            random: yes
            force: yes
        register: ipahost
  3. 플레이북을 실행합니다.

    $ 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: [r8server.idm.example.com] => {"changed": true, "host": {"host01.idm.example.com": {"randompassword": "0HoIRvjUdH0Ycbf6uYdWTxH"}, "host02.idm.example.com": {"randompassword": "5VdLgrf3wvojmACdHC3uA3s"}}}
참고

임의의 일회성 암호(one-time passwords)를 사용하여 호스트를 IdM 클라이언트로 배포하려면 Ansible 플레이북을 사용하여 IdM 클라이언트 등록 또는 일회성 암호: Interactive 설치를 사용하여 클라이언트 설치를 참조하십시오.

검증 단계

  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 이 있는지 확인합니다.

17.4. Ansible 플레이북을 사용하여 여러 IP 주소로 IdM 호스트 항목이 있는지 확인

Ansible 플레이북을 사용하여 IdM(Identity Management)에 호스트 항목이 있는지 확인하려면 다음 절차를 따르십시오. 호스트 항목은 FQDN( 정규화된 도메인 이름 )과 해당 다중 IP 주소로 정의됩니다.

참고

ipa host 유틸리티와 달리 Ansible ipahost 모듈은 호스트에 여러 IPv4 및 IPv6 주소가 있는지 확인할 수 있습니다. ipa host-mod 명령은 IP 주소를 처리할 수 없습니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. Ansible 플레이북 파일을 생성합니다. ipahost 변수의 이름으로, 보장하려는 IdM에 있는 호스트의 FQDN( 정규화된 도메인 이름 )을 지정합니다. ip_address 구문을 사용하여 별도의 행에 여러 IPv4 및 IPv6 ip_address 값을 지정합니다. 이 단계를 단순화하기 위해 /usr/share/doc/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
        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: yes
  3. 플레이북을 실행합니다.

    $ 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

    출력은 IdM에 host01.idm.example.com 이 있는지 확인합니다.

  3. IdM DNS 레코드에 호스트의 여러 IP 주소가 있는지 확인하려면 ipa dnsHistory-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 호스트 항목과 올바르게 연결되었는지 확인합니다.

17.5. Ansible 플레이북을 사용하여 IdM 호스트 항목이 없는지 확인

Ansible 플레이북을 사용하여 IdM(Identity Management)에 호스트 항목이 없는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • IdM 관리자 인증 정보

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 보장하려는 IdM에 없는 호스트의 FQDN( 정규화된 도메인 이름 )을 사용하여 Ansible 플레이북 파일을 생성합니다. IdM 도메인에 DNS가 통합된 경우 updatedns: yes 옵션을 사용하여 DNS에서 호스트에 대한 모든 종류의 연결된 레코드를 제거합니다.

    이 단계를 단순화하기 위해 /usr/share/doc/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
        ipahost:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: host01.idm.example.com
          updatedns: yes
          state: absent
  3. 플레이북을 실행합니다.

    $ 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에 없음을 확인합니다.

17.6. 추가 리소스

  • /usr/share/doc/ansible-freeipa/README-host.md Markdown 파일을 참조하십시오.
  • /usr/share/doc/ansible-freeipa/playbooks/host 디렉터리에서 추가 플레이북을 참조하십시오.

18장. Ansible 플레이북을 사용하여 호스트 그룹 관리

IdM( Identity Management)의 호스트 그룹과 관련하여 Ansible을 사용하여 IdM(Identity Management)의 호스트 그룹과 관련된 작업을 수행하려면 다음을 참조하십시오.

18.1. IdM의 호스트 그룹

IdM 호스트 그룹은 중요한 관리 작업, 특히 액세스 제어에 대한 제어를 중앙 집중화하는 데 사용할 수 있습니다.

호스트 그룹의 정의

호스트 그룹은 공통 액세스 제어 규칙 및 기타 특성을 가진 IdM 호스트 세트가 포함된 엔터티입니다. 예를 들어 회사 부서, 물리적 위치 또는 액세스 제어 요구 사항에 따라 호스트 그룹을 정의할 수 있습니다.

IdM의 호스트 그룹에는 다음이 포함될 수 있습니다.

  • IdM 서버 및 클라이언트
  • 기타 IdM 호스트 그룹

기본적으로 생성된 호스트 그룹

기본적으로 IdM 서버는 모든 IdM 서버 호스트에 대한 호스트 그룹 ipaservers 를 생성합니다.

직접 및 간접 그룹 멤버

IdM의 그룹 속성은 직접 및 간접 멤버 모두에 적용됩니다. 호스트 그룹 B가 호스트 그룹 A의 멤버인 경우 호스트 그룹 B의 모든 멤버가 호스트 그룹 A의 간접 멤버로 간주됩니다.

18.2. Ansible 플레이북을 사용하여 IdM 호스트 그룹이 있는지 확인

Ansible 플레이북을 사용하여 IdM(Identity Management)에 호스트 그룹이 있는지 확인하려면 다음 절차를 따르십시오.

참고

Ansible이 없으면 ipa hostgroup-add 명령을 사용하여 IdM에 호스트 그룹 항목이 생성됩니다. IdM에 호스트 그룹을 추가하는 결과는 IdM에 호스트 그룹 상태가 됩니다. Ansible의 idempotence on idempotence 때문에 Ansible을 사용하여 호스트 그룹을 IdM에 추가하려면 호스트 그룹의 상태를 present: state: present 로 정의하는 플레이북을 생성해야 합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 타겟할 IdM 서버 목록으로 ipaserver 를 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 호스트 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다. 예를 들어 databases 라는 호스트 그룹이 있는지 확인하려면 - ipahostgroup 작업에 name: databases 를 지정합니다. 이 단계를 단순화하기 위해 /usr/share/doc/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
      - ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          state: present

    플레이북에서 state: present 는 이미 존재하지 않는 한 호스트 그룹을 IdM에 추가하라는 요청을 나타냅니다.

  3. 플레이북을 실행합니다.

    $ 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. admin으로 ipaserver 에 로그인합니다.

    $ 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에 데이터베이스 호스트 그룹이 있습니다.

18.3. Ansible 플레이북을 사용하여 IdM 호스트 그룹에 호스트가 있는지 확인

Ansible 플레이북을 사용하여 IdM(Identity Management)의 호스트 그룹에 호스트가 있는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 타겟할 IdM 서버 목록으로 ipaserver 를 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 호스트 정보로 Ansible 플레이북 파일을 생성합니다. ipahostgroup 변수의 name 매개 변수를 사용하여 호스트 그룹의 이름을 지정합니다. ipahostgroup 변수의 host 매개 변수를 사용하여 호스트 이름을 지정합니다. 이 단계를 단순화하기 위해 /usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-are-hostgroups-are-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
      - ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          host:
          - db.idm.example.com
          action: member

    이 플레이북은 db.idm.example.com 호스트를 databases 호스트 그룹에 추가합니다. action: member 행은 플레이북이 실행되면 databases 그룹 자체를 추가하려고 시도하지 않음을 나타냅니다. 대신 db.idm.example.com데이터베이스에 추가하려는 시도만 하면 됩니다.

  3. 플레이북을 실행합니다.

    $ 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. admin으로 ipaserver 에 로그인합니다.

    $ 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 호스트 그룹의 멤버로 제공됩니다.

18.4. Ansible 플레이북을 사용하여 IdM 호스트 그룹 중첩

Ansible 플레이북을 사용하여 IdM(Identity Management) 호스트 그룹에 중첩된 호스트 그룹이 있는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • Ansible 플레이북 파일에서 참조하는 호스트 그룹은 IdM에 있습니다. 자세한 내용은 Ansible 플레이북을 사용하여 IdM 호스트 그룹이 있는지 여부 를 참조하십시오.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 타겟할 IdM 서버 목록으로 ipaserver 를 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 호스트 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다. Ansible 플레이북에서 호스트 그룹 A 가 호스트 그룹 B:에 있는지 확인하려면 name 변수를 사용하여 호스트 그룹 B이름을 지정합니다. hostgroup 변수를 사용하여 중첩 호스트 그룹 A 의 이름을 지정합니다. 이 단계를 단순화하기 위해 /usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-are-hostgroups-are-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
      - ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          hostgroup:
          - mysql-server
          - oracle-server
          action: member

    이 Ansible 플레이북은 databases 호스트 그룹에 myqsl-serveroracle-server 호스트 그룹이 있는지 확인합니다. action: member 행은 플레이북이 실행되면 IdM에 데이터베이스 그룹 자체를 추가하려고 시도하지 않음을 나타냅니다.

  3. 플레이북을 실행합니다.

    $ 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. admin으로 ipaserver 에 로그인합니다.

    $ 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 호스트 그룹에 있습니다.

18.5. Ansible 플레이북을 사용하여 IDM 호스트 그룹에 멤버 관리자가 있는지 확인

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • 멤버 관리자로 추가하는 호스트 또는 호스트 그룹의 이름과 관리할 호스트 그룹의 이름이 있어야 합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 호스트 및 호스트 그룹 멤버 관리 정보로 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
          ipahostgroup:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: group_name
            membermanager_user: example_member
    
      - name: Ensure member manager group project_admins is present for group_name
          ipahostgroup:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: group_name
            membermanager_group: project_admins
  3. 플레이북을 실행합니다.

    $ 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

추가 리소스

  • ipa hostgroup-add-member-manager --help 를 참조하십시오.
  • ipa man 페이지를 참조하십시오.

18.6. Ansible 플레이북을 사용하여 IdM 호스트 그룹에 호스트가 없는지 확인

Ansible 플레이북을 사용하여 IdM(Identity Management)의 호스트 그룹에서 호스트가 없는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 타겟할 IdM 서버 목록으로 ipaserver 를 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 호스트 및 호스트 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다. ipahostgroup 변수의 name 매개 변수를 사용하여 호스트 그룹의 이름을 지정합니다. ipahostgroup 변수의 호스트 매개 변수를 사용하여 확인하려는 호스트 그룹이 없는 호스트의 이름을 지정합니다. 이 단계를 단순화하기 위해 /usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-are-hostgroups-are-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
      - ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          host:
          - db.idm.example.com
          action: member
          state: absent

    이 플레이북은 databases 호스트 그룹에서 db.idm.example.com 호스트가 없는지 확인합니다. action: member 행은 플레이북이 실행되면 databases 그룹 자체를 제거하려고 시도하지 않음을 나타냅니다.

  3. 플레이북을 실행합니다.

    $ 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. 관리자를 위한 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 호스트 그룹에 존재하지 않습니다.

18.7. Ansible 플레이북을 사용하여 IdM 호스트 그룹에서 중첩 호스트 그룹이 없는지 확인

Ansible 플레이북을 사용하여 IdM(Identity Management)의 외부 호스트 그룹에서 중첩된 호스트 그룹이 없는지 확인하려면 다음 절차를 따르십시오.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • Ansible 플레이북 파일에서 참조하는 호스트 그룹은 IdM에 있습니다. 자세한 내용은 Ansible 플레이북을 사용하여 IdM 호스트 그룹이 있는지 여부 를 참조하십시오.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 타겟할 IdM 서버 목록으로 ipaserver 를 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 호스트 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다. - ipahostgroup 변수 중에서 name 변수를 사용하여 외부 호스트 그룹의 이름을 지정합니다. hostgroup 변수를 사용하여 중첩 호스트 그룹의 이름을 지정합니다. 이 단계를 단순화하기 위해 /usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-are-hostgroups-are-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
      - ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          hostgroup:
          - mysql-server
          - oracle-server
          action: member
          state: absent

    이 플레이북은 mysql-serveroracle-server 호스트 그룹이 databases 호스트 그룹에 없는지 확인합니다. action: member 행은 플레이북이 실행되면 IdM에서 데이터베이스 그룹 자체가 삭제되도록 시도하지 않음을 나타냅니다.

  3. 플레이북을 실행합니다.

    $ 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. 관리자를 위한 Kerberos 티켓을 요청합니다.

    $ kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  3. 중첩 호스트 그룹이 없어야 하는 호스트 그룹에 대한 정보를 표시합니다.

    $ ipa hostgroup-show databases
      Host-group: databases

출력은 mysql-serveroracle-server 중첩 호스트 그룹이 외부 데이터베이스 호스트 그룹에 없음을 확인합니다.

18.8. Ansible 플레이북을 사용하여 IdM 호스트 그룹이 없는지 확인

Ansible 플레이북을 사용하여 IdM(Identity Management)에 호스트 그룹이 없는지 확인하려면 다음 절차를 따르십시오.

참고

Ansible이 없으면 ipa hostgroup-del 명령을 사용하여 IdM에서 호스트 그룹 항목이 제거됩니다. IdM에서 호스트 그룹을 제거하는 결과는 IdM에 호스트 그룹이 없는 상태입니다. Ansible의 idempotence on idempotence 때문에 Ansible을 사용하여 IdM에서 호스트 그룹을 제거하려면 호스트 그룹의 상태를 absent: state: absent 로 정의하는 플레이북을 생성해야 합니다.

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 타겟할 IdM 서버 목록으로 ipaserver 를 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 호스트 그룹 정보를 사용하여 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하기 위해 /usr/share/doc/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
        ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: databases
          state: absent

    이 플레이북은 IdM에서 databases 호스트 그룹이 없는지 확인합니다. state: absent 는 이미 삭제되지 않는 한 IdM에서 호스트 그룹을 삭제하라는 요청을 의미합니다.

  3. 플레이북을 실행합니다.

    $ 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. admin으로 ipaserver 에 로그인합니다.

    $ 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에는 데이터베이스 호스트 그룹이 없습니다.

18.9. Ansible 플레이북을 사용하여 IdM 호스트 그룹에서 멤버 관리자가 없는지 확인

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

사전 요구 사항

  • IdM 관리자 암호를 알고 있습니다.
  • 다음 요구 사항을 충족하도록 Ansible 제어 노드를 구성했습니다.

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • 멤버 관리자로 제거하고 관리하는 호스트 그룹의 이름을 제거하는 사용자 또는 사용자 그룹의 이름이 있어야 합니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 ipaserver 를 이 파일에 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 필요한 호스트 및 호스트 그룹 멤버 관리 정보로 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
        ipahostgroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_name
          membermanager_user: example_member
          membermanager_group: project_admins
          action: member
          state: absent
  3. 플레이북을 실행합니다.

    $ 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

추가 리소스

  • ipa hostgroup-add-member-manager --help 를 참조하십시오.
  • ipa man 페이지를 참조하십시오.

19장. IdM 암호 정책 정의

이 장에서는 IdM(Identity Management) 암호 정책 및 Ansible 플레이북을 사용하여 IdM에 새 암호 정책을 추가하는 방법을 설명합니다.

19.1. 암호 정책이란 무엇입니까?

암호 정책은 암호가 충족해야 하는 일련의 규칙입니다. 예를 들어 암호 정책은 최소 암호 길이 및 최대 암호 수명을 정의할 수 있습니다. 이 정책의 영향을 받는 모든 사용자는 충분히 긴 암호를 설정하고 지정된 조건을 충족하기에 충분히 자주 변경해야 합니다. 이렇게 하면 암호 정책을 사용하면 누군가가 사용자의 암호를 검색하고 잘못 사용할 위험을 줄일 수 있습니다.

19.2. IdM의 암호 정책

암호는 IdM(Identity Management) 사용자가 IdM Kerberos 도메인에 인증하는 가장 일반적인 방법입니다. 암호 정책은 이러한 IdM 사용자 암호가 충족해야 하는 요구 사항을 정의합니다.

참고

IdM 암호 정책은 기본 LDAP 디렉터리에 설정되어 있지만 Kerberos KDC(Key Distribution Center)는 암호 정책을 적용합니다.

암호 정책 속성에 는 IdM에서 암호 정책을 정의하는 데 사용할 수 있는 속성이 나열됩니다.

표 19.1. 암호 정책 속성

속성설명예제

최대 수명

사용자가 암호를 재설정하기 전에 암호가 유효한 최대 시간(일)입니다. 기본값은 90일입니다.

속성이 0으로 설정되면 암호가 만료되지 않습니다.

최대 수명 = 180

사용자 암호는 180일 동안만 유효합니다. 그러면 IdM에서 사용자에게 변경하라는 메시지를 표시합니다.

최소 수명

두 암호 변경 작업 간에 전달해야 하는 최소 시간(시간)입니다.

최소 수명 = 1

사용자가 암호를 변경한 후에는 암호를 변경하기 전에 1시간 이상 기다려야 합니다.

기록 크기

저장된 이전 암호 수입니다. 사용자는 암호 기록에서 암호를 재사용할 수 없지만 저장되지 않은 이전 암호를 재사용할 수 있습니다.

기록 크기 = 0

이 경우 암호 기록이 비어 있으며 사용자는 이전 암호를 재사용할 수 있습니다.

문자 클래스

사용자가 암호에서 사용해야 하는 다른 문자 클래스의 수입니다. 문자 클래스는 다음과 같습니다.

* 대문자

* 소문자

* 숫자

* comma (,), 마침표(.), 별표(*)와 같은 특수 문자

* 다른 UTF-8 문자

행에서 문자를 세 번 이상 사용하면 문자 클래스가 하나씩 감소합니다. 예를 들어 다음과 같습니다.

* Secret1 에는 대문자, 소문자, 숫자 3개가 있습니다.

* Secret111 에는 대문자, 소문자, 숫자 및 1 을 반복적으로 사용하기 위한 -1의 문자 클래스가 있습니다.

문자 클래스 = 0

기본 클래스 수는 0입니다. 번호를 구성하려면 --minclasses 옵션과 함께 ipa pwpolicy-mod 명령을 실행합니다.

이 표 아래에 있는 중요한 참고 사항도 참조하십시오.

최소 길이

암호의 최소 문자 수입니다.

추가 암호 정책 옵션이 설정되어 있으면 최소 암호 길이는 6자입니다.

최소 길이 = 8

사용자는 8자 미만의 암호를 사용할 수 없습니다.

최대 실패

IdM이 사용자 계정을 잠기 전에 실패한 로그인 시도 횟수입니다.

최대 실패 = 6

사용자가 행에 잘못된 암호 7번을 입력하면 IdM에서 사용자 계정을 잠급니다.

실패 재설정 간격

IdM이 현재 실패한 로그인 시도 횟수를 재설정한 후 시간(초)입니다.

실패 재설정 간격 = 60

사용자가 최대 실패에 정의된 로그인 시도 횟수가 1분 이상 대기하는 경우 사용자는 사용자 계정 잠금에 위험을 주지 않고 다시 로그인을 시도할 수 있습니다.

Lockout 기간

최대 실패 시 정의된 로그인 시도 횟수 후 사용자 계정이 잠겼는 시간(초)입니다.

Lockout 기간 = 600

연결된 계정이 있는 사용자는 10분 동안 로그인할 수 없습니다.

중요

국제 문자 및 기호에 액세스할 수 없는 다양한 하드웨어 세트가 있는 경우 문자 클래스 요구 사항에 대한 영어 알파벳과 공통 기호를 사용하십시오. 암호의 문자 클래스 정책에 대한 자세한 내용은 Red Hat Knowledgebase의 암호에서 유효한 문자는 무엇입니까? 를 참조하십시오.

19.3. Ansible 플레이북을 사용하여 IdM에 암호 정책이 있는지 확인

Ansible 플레이북을 사용하여 IdM(Identity Management)에 암호 정책이 있는지 확인하려면 다음 절차를 따르십시오.

IdM의 기본 global_policy 암호 정책에서 암호에 있는 다른 문자 클래스의 수는 0으로 설정됩니다. 또한 기록 크기는 0으로 설정됩니다.

Ansible 플레이북을 사용하여 IdM 그룹에 대해 강력한 암호 정책을 적용하려면 이 절차를 완료합니다.

참고

IdM 그룹에 대한 암호 정책만 정의할 수 있습니다. 개별 사용자의 암호 정책을 정의할 수 없습니다.

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • 이 예제에서는 ~/MyPlaybook/ 디렉터리에서 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했다고 가정합니다.
    • 이 예제에서는 secret.yml Ansible 자격 증명 모음이 ipaadmin_password 를 저장한다고 가정합니다.
  • IdM 관리자 암호를 알고 있습니다.
  • IdM에 암호 정책이 있는지 확인하는 그룹입니다.

절차

  1. 인벤토리 파일(예: inventory.file )을 생성하고 [ipaserver] 섹션에 IdM 서버의 FQDN 을 정의합니다.

    [ipaserver]
    server.idm.example.com
  2. 확인하려는 암호 정책을 정의하는 Ansible 플레이북 파일을 생성합니다. 이 단계를 단순화하려면 /usr/share/doc/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
        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

    개별 변수가 무엇을 의미하는지에 대한 자세한 내용은 Password policy attributes 을 참조하십시오.

  3. 플레이북을 실행합니다.

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/new_pwpolicy_present.yml

Ansible 플레이북을 성공적으로 사용하여 IdM에 대한 암호 정책이 IdM에 있는지 확인합니다.

중요

controlPlane 암호 정책 우선 순위는 1 로 설정되지만 global_policy 암호 정책에는 우선순위가 설정되지 않습니다. 이러한 이유로 EgressIP 정책은 ActiveDirectory 그룹의 전역_policy자동으로 대체하며 즉시 적용됩니다.

global_policy 는 사용자에 대해 그룹 정책이 설정되지 않은 경우 대체 정책 역할을 하며 그룹 정책보다 우선할 수 없습니다.

추가 리소스

  • /usr/share/doc/ansible-freeipa/ 디렉토리에서 README-pwpolicy.md 파일을 참조하십시오.
  • 암호 정책 우선 순위를 참조하십시오.

19.4. IdM의 추가 암호 정책 옵션

IdM(Identity Management) 관리자는 libpwquality 기능 세트를 기반으로 추가 암호 정책 옵션을 활성화하여 기본 암호 요구 사항을 강화할 수 있습니다. 추가 암호 정책 옵션에는 다음이 포함됩니다.

--maxrepeat
새 암호에서 허용되는 최대 연속 문자 수를 지정합니다.
--maxsequence
새 암호에서 monotonic 문자 시퀀스의 최대 길이를 지정합니다. 이러한 시퀀스의 예로는 12345 또는 fedcb 가 있습니다. 이러한 암호의 대부분은 단순성 검사를 통과하지 않습니다.
--dictcheck
0이 아닌 경우 가능한 수정 사항이 있는 암호가 사전의 단어와 일치하는지 확인합니다. 현재 libpwqualityCracklib 라이브러리를 사용하여 사전 검사를 수행합니다.
--usercheck
0이 아닌 경우 가능한 수정 가능한 암호에 일부 형식의 사용자 이름이 포함되어 있는지 확인합니다. 3자 미만의 사용자 이름에는 적용되지 않습니다.

추가 암호 정책 옵션을 기존 암호에 적용할 수 없습니다. 추가 옵션을 적용하면 IdM에서 --minlength 옵션, 최소 문자 수를 6 자로 설정합니다.

참고

RHEL 7, RHEL 8 및 RHEL 9 서버와 혼합된 환경에서는 RHEL 8.4 이상에서 실행되는 서버에만 추가 암호 정책 설정을 적용할 수 있습니다. 사용자가 IdM 클라이언트에 로그인되어 있고 IdM 클라이언트가 RHEL 8.3 이상에서 실행되는 IdM 서버와 통신하는 경우 시스템 관리자가 설정한 새로운 암호 정책 요구 사항이 적용되지 않습니다. 일관된 동작을 위해 모든 서버를 RHEL 8.4 이상으로 업그레이드하거나 업데이트합니다.

추가 리소스:

19.5. IdM 그룹에 추가 암호 정책 옵션 적용

IdM(Identity Management)의 추가 암호 정책 옵션을 적용하려면 다음 절차를 따르십시오. 이 예제에서는 새 암호에 사용자의 각 사용자 이름이 포함되지 않고 암호에 두 개 이상의 동일한 문자가 포함되어 있는지 확인하여 managers 그룹에 대한 암호 정책을 적용하는 방법을 설명합니다.

사전 요구 사항

  • IdM 관리자로 로그인되어 있습니다.
  • managers 그룹은 IdM에 있습니다.
  • managers 암호 정책은 IdM에 있습니다.

절차

  1. managers 그룹의 사용자가 지정한 모든 새 암호에 사용자 이름 검사를 적용합니다.

    $ ipa pwpolicy-mod --usercheck=True managers
    참고

    암호 정책의 이름을 지정하지 않으면 기본 global_policy 가 수정됩니다.

  2. managers 암호 정책에서 동일한 연속 문자의 최대 수를 2로 설정합니다.

    $ ipa pwpolicy-mod --maxrepeat=2 managers

    2개 이상의 연속 문자가 포함된 경우 암호를 사용할 수 없습니다. 예를 들어 eR873mUi111YJQ 조합은 연속 3 s가 포함되어 있기 때문에 허용되지 않습니다.

검증

  1. test_user 라는 테스트 사용자를 추가합니다.

    $ ipa user-add test_user
    First name: test
    Last name: user
    ----------------------------
    Added user "test_user"
    ----------------------------
  2. managers 그룹에 test 사용자를 추가합니다.

    1. IdM 웹 UI에서 IdentityGroupsUser Groups (사용자 그룹) 를 클릭합니다.
    2. 관리자.
    3. 추가를 클릭합니다.
    4. 사용자 그룹 'managers'에 사용자 사용자 추가 페이지에서 test_user 를 확인합니다.
    5. &gt ; 화살표를 클릭하여 사용자를 Prospective 열로 이동합니다.
    6. 추가를 클릭합니다.
  3. test 사용자의 암호를 재설정합니다.

    1. IdentityUsers 로 이동합니다.
    2. test_user 를 클릭합니다.
    3. 작업 메뉴에서 암호 재설정 을 클릭합니다.
    4. 사용자에 대한 임시 암호를 입력합니다.
  4. 명령줄에서 test_user 에 대한 Kerberos TGT( ticket-granting ticket)를 받으십시오.

    $ 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. 시스템에서 입력한 암호가 거부되었음을 알려줍니다. 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. 시스템에서 입력한 암호가 거부되었음을 알려줍니다. 관리자 암호 정책의 기준을 충족하는 암호를 입력합니다.

      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

이제 managers 암호 정책이 managers 그룹의 사용자에게 올바르게 작동합니다.

추가 리소스

19.6. Ansible 플레이북을 사용하여 IdM 그룹에 추가 암호 정책 옵션 적용

Ansible Playbook을 사용하여 특정 IdM 그룹에 대한 암호 정책 요구 사항을 강화하기 위해 추가 암호 정책 옵션을 적용할 수 있습니다. 이를 위해 maxrepoy,maxsequence,dictcheckusercheck 암호 정책 옵션을 사용할 수 있습니다. 이 예제에서는 managers 그룹에 다음 요구 사항을 설정하는 방법을 설명합니다.

  • 사용자의 새 암호에는 사용자의 각 사용자 이름이 포함되어 있지 않습니다.
  • 암호에는 연속에 두 개 이상의 동일한 문자가 포함되어 있지 않습니다.
  • 암호의 단조 문자 시퀀스는 3자를 넘지 않습니다. 즉, 시스템은 1234 또는 abcd 와 같은 시퀀스의 암호를 허용하지 않습니다.

사전 요구 사항

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

    • Ansible 버전 2.14 이상을 사용하고 있습니다.
    • Ansible 컨트롤러에 ansible-freeipa 패키지가 설치되어 있습니다.
    • ~/MyPlaybook/ 디렉터리에 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했습니다.
    • ipaadmin_passwordsecret.yml Ansible 자격 증명에 저장했습니다.
  • 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
        ipapwpolicy:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: managers
          usercheck: True
          maxrepeat: 2
          maxsequence: 3
  2. 플레이북을 실행합니다.

    $ 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에서 IdentityGroupsUser Groups (사용자 그룹) 를 클릭합니다.
    2. 관리자.
    3. 추가를 클릭합니다.
    4. 사용자 그룹 'managers'에 사용자 사용자 추가 페이지에서 test_user 를 확인합니다.
    5. &gt ; 화살표를 클릭하여 사용자를 Prospective 열로 이동합니다.
    6. 추가를 클릭합니다.
  3. test 사용자의 암호를 재설정합니다.

    1. IdentityUsers 로 이동합니다.
    2. test_user 를 클릭합니다.
    3. 작업 메뉴에서 암호 재설정 을 클릭합니다.
    4. 사용자에 대한 임시 암호를 입력합니다.
  4. 명령줄에서 test_user 에 대한 Kerberos TGT( ticket-granting ticket)를 받으십시오.

    $ 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. 시스템에서 입력한 암호가 거부되었음을 알려줍니다. 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. 시스템에서 입력한 암호가 거부되었음을 알려줍니다. 관리자 암호 정책의 기준을 충족하는 암호를 입력합니다.

      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

추가 리소스

20장. IdM 클라이언트의 IdM 사용자에게 sudo 액세스 권한 부여

Identity Management에서 사용자에게 sudo 액세스 권한을 부여하는 방법에 대해 자세히 알아보십시오.

20.1. IdM 클라이언트의 sudo 액세스

시스템 관리자는 루트가 아닌 사용자가 일반적으로 root 사용자에 대해 예약된 관리 명령을 실행할 수 있도록 sudo 액세스 권한을 부여할 수 있습니다. 따라서 사용자가 일반적으로 root 사용자를 위해 예약한 관리 명령을 수행해야 하는 경우 sudo 를 사용하여 명령을 앞에 놓습니다. 암호를 입력한 후 root 사용자인 것처럼 명령이 실행됩니다. 데이터베이스 서비스 계정과 같은 다른 사용자 또는 그룹으로 sudo 명령을 실행하려면 sudo 규칙에 대해 RunAs alias 을 구성할 수 있습니다.

RHEL(Red Hat Enterprise Linux) 8 호스트가 IdM(Identity Management) 클라이언트로 등록된 경우 다음 방법으로 호스트에서 어떤 IdM 사용자를 실행할 수 있는 sudo 규칙을 지정할 수 있습니다.

  • 로컬로 /etc/sudoers 파일
  • IdM 중앙

CLI(명령줄 인터페이스) 및 IdM 웹 UI를 사용하여 IdM 클라이언트에 대한 중앙 sudo 규칙을 생성할 수 있습니다.

또한 UNIX 기반 운영 체제에서 Kerberos 서비스에 액세스하고 인증하는 기본 방법인 GSSAPI(Generic Security Service Application Programming Interface)를 사용하여 sudo 에 대해 암호 없는 인증을 구성할 수도 있습니다. pam_sss_gs.so Pluggable Authentication Module(PAM)을 사용하여 SSSD 서비스를 통해 GSSAPI 인증을 호출하여 사용자가 유효한 Kerberos 티켓을 사용하여 sudo 명령을 인증할 수 있습니다.

추가 리소스

20.2. CLI를 사용하여 IdM 클라이언트의 IdM 사용자에게 sudo 액세스 권한 부여

IdM(Identity Management)에서는 특정 명령에 대한 sudo 액세스 권한을 특정 IdM 호스트의 IdM 사용자 계정에 부여할 수 있습니다. 먼저 sudo 명령을 추가한 다음 하나 이상의 명령에 대한 sudo 규칙을 만듭니다.

예를 들어 idm_user _reboot sudo 규칙을 생성하여 idmclient 시스템에서 /usr/sbin/reboot 명령을 실행할 수 있는 권한을 부여합니다.

사전 요구 사항

  • IdM 관리자로 로그인되어 있습니다.
  • IdM에 idm_user 의 사용자 계정을 생성하고 사용자 암호를 생성하여 계정 잠금을 해제합니다. CLI를 사용하여 새 IdM 사용자를 추가하는 방법에 대한 자세한 내용은 명령줄을 사용하여 사용자 추가를 참조하십시오.
  • idmclient 호스트에 로컬 idm_user 계정이 없습니다. idm_user 사용자는 로컬 /etc/passwd 파일에 나열되지 않습니다.

절차

  1. IdM 관리자로 Kerberos 티켓을 검색합니다.

    [root@idmclient ~]# kinit admin
  2. sudo 명령의 IdM 데이터베이스에 /usr/sbin/reboot 명령을 추가합니다.

    [root@idmclient ~]# ipa sudocmd-add /usr/sbin/reboot
    -------------------------------------
    Added Sudo Command "/usr/sbin/reboot"
    -------------------------------------
      Sudo Command: /usr/sbin/reboot
  3. idm_user_reboot:라는 sudo 규칙을 만듭니다.

    [root@idmclient ~]# ipa sudorule-add idm_user_reboot
    ---------------------------------
    Added Sudo Rule "idm_user_reboot"
    ---------------------------------
      Rule name: idm_user_reboot
      Enabled: TRUE
  4. /usr/sbin/reboot 명령을 idm_user_reboot 규칙에 추가합니다.

    [root@idmclient ~]# ipa sudorule-add-allow-command idm_user_reboot --sudocmds '/usr/sbin/reboot'
      Rule name: idm_user_reboot
      Enabled: TRUE
      Sudo Allow Commands: /usr/sbin/reboot
    -------------------------
    Number of members added 1
    -------------------------
  5. IdM idmclient 호스트에 idm_user_reboot 규칙을 적용합니다.

    [root@idmclient ~]# ipa sudorule-add-host idm_user_reboot --hosts idmclient.idm.example.com
    Rule name: idm_user_reboot
    Enabled: TRUE
    Hosts: idmclient.idm.example.com
    Sudo Allow Commands: /usr/sbin/reboot
    -------------------------
    Number of members added 1
    -------------------------
  6. idm_user 계정을 idm_user_reboot 규칙에 추가합니다.

    [root@idmclient ~]# ipa sudorule-add-user idm_user_reboot --users idm_user
    Rule name: idm_user_reboot
    Enabled: TRUE
    Users: idm_user
    Hosts: idmclient.idm.example.com
    Sudo Allow Commands: /usr/sbin/reboot
    -------------------------
    Number of members added 1
    -------------------------
  7. 선택적으로 idm_user_reboot 규칙의 유효성을 정의합니다.

    1. sudo 규칙이 유효한 시간을 정의하려면 ipa sudo rule-mod sudo_rule_name 명령과 --setattr sudonotbefore=DATE 옵션을 사용합니다. DATE 값은 yyyymmddHHMMSSZ 형식을 따라야 하며, 초는 명시적으로 지정해야 합니다. 예를 들어, idm_user_reboot 규칙의 유효성 시작을 2025년 12월 31일 12:34:00으로 설정하려면 다음을 입력합니다.

      [root@idmclient ~]# ipa sudorule-mod idm_user_reboot --setattr sudonotbefore=20251231123400Z
    2. sudo 규칙이 유효한 중지 시간을 정의하려면 --setattr sudonotafter=DATE 옵션을 사용합니다. 예를 들어, idm_user_reboot 규칙 유효 기간을 2026년 12월 31일 12:34:00으로 설정하려면 다음을 입력합니다.

      [root@idmclient ~]# ipa sudorule-mod idm_user_reboot --setattr sudonotafter=20261231123400Z
참고

서버에서 클라이언트로 변경 사항을 전파하는 데 몇 분이 걸릴 수 있습니다.

검증 단계

  1. idmclient 호스트에 idm_user 계정으로 로그인합니다.
  2. idm_user 계정에서 수행할 수 있는 sudo 규칙을 표시합니다.

    [idm_user@idmclient ~]$ sudo -l
    Matching Defaults entries for idm_user on idmclient:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
        env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
        env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
        env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
        env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME",
        secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User idm_user may run the following commands on idmclient:
        (root) /usr/sbin/reboot
  3. sudo 를 사용하여 시스템을 재부팅합니다. 메시지가 표시되면 idm_user 의 암호를 입력합니다.

    [idm_user@idmclient ~]$ sudo /usr/sbin/reboot
    [sudo] password for idm_user:

20.3. CLI를 사용하여 IdM 클라이언트의 AD 사용자에게 sudo 액세스 권한 부여

IdM(Identity Management) 시스템 관리자는 IdM 사용자 그룹을 사용하여 IdM 사용자에 대한 액세스 권한, 호스트 기반 액세스 제어, sudo 규칙 및 기타 제어를 설정할 수 있습니다. IdM 사용자 그룹은 IdM 도메인 리소스에 대한 액세스 권한을 부여하고 제한합니다.

AD(Active Directory) 사용자와 AD 그룹을 모두 IdM 사용자 그룹에 추가할 수 있습니다. 다음을 수행하려면 다음을 수행합니다.

  1. POSIX가 아닌 외부 IdM 그룹에 AD 사용자 또는 그룹을 추가합니다.
  2. POSIX 이외의 외부 IdM 그룹을 IdM POSIX 그룹에 추가합니다.

그런 다음 POSIX 그룹의 권한을 관리하여 AD 사용자의 권한을 관리할 수 있습니다. 예를 들어 특정 IdM 호스트의 IdM POSIX 사용자 그룹에 특정 명령에 대한 sudo 액세스 권한을 부여할 수 있습니다.

참고

AD 사용자 그룹을 IdM 외부 그룹의 멤버로 추가할 수도 있습니다. 이렇게 하면 단일 AD 영역 내에서 사용자와 그룹 관리를 유지하여 Windows 사용자에 대한 정책을 보다 쉽게 정의할 수 있습니다.

중요

IdM의 SUDO 규칙에 AD 사용자의 ID 덮어쓰기를 사용하지 마십시오. AD 사용자의 ID 덮어쓰기는 AD 사용자가 아닌 AD 사용자의 POSIX 속성만 나타냅니다.

그룹 멤버로 ID 덮어쓰기를 추가할 수 있습니다. 그러나 이 기능은 IdM API에서 IdM 리소스를 관리하는 데만 사용할 수 있습니다. 그룹 멤버가 POSIX 환경으로 확장되지 않으므로 ID 덮어쓰기를 POSIX 환경으로 확장할 수 없으므로 sudo 또는 HBAC(Host-based Access Control) 규칙의 멤버십에는 사용할 수 없습니다.

다음 절차에 따라 일반적으로 root 사용자에게 예약되는 idmclient IdM 호스트에서 /usr/sbin/reboot 명령을 실행할 수 있는 권한을 administrator@ad-domain.com AD 사용자에게 부여할 수 있는 ad_users_reboot sudo 규칙을 생성합니다. administrator@ad-domain.comad_users_external 비POSIX 그룹의 멤버이며, 이는 ad_users POSIX 그룹의 멤버입니다.

사전 요구 사항

  • IdM admin Kerberos 티켓(TGT)이 있습니다.
  • IdM 도메인과 ad-domain.com AD 도메인 사이에 교차 신뢰가 있습니다.
  • idmclient 호스트에 로컬 관리자 계정이 없습니다. administrator 사용자는 로컬 /etc/passwd 파일에 나열되지 않습니다.

절차

  1. administrator@ad-domain 멤버가 있는 ad_users _external 그룹이 포함된 ad_users 그룹을 생성합니다.

    1. 선택 사항: IdM 영역의 AD 사용자를 관리하는 데 사용할 AD 도메인에서 해당 그룹을 생성하거나 선택합니다. 여러 AD 그룹을 사용하여 IdM 측면의 다른 그룹에 추가할 수 있습니다.
    2. ad_users_external 그룹을 생성하고 --external 옵션을 추가하여 IdM 도메인 외부에서 멤버가 포함되어 있음을 나타냅니다.

      [root@ipaserver ~]# ipa group-add --desc='AD users external map' ad_users_external --external
      -------------------------------
      Added group "ad_users_external"
      -------------------------------
        Group name: ad_users_external
        Description: AD users external map
      참고

      여기에서 지정하는 외부 그룹이 Active Directory 보안 그룹 문서에 정의된 대로 글로벌 또는 Universal 그룹 범위가 있는 AD 보안 그룹 인지 확인합니다. 예를 들어, 해당 그룹 범위가 도메인 로컬 이므로 도메인 사용자 또는 도메인 관리자 AD 보안 그룹을 사용할 수 없습니다.

    3. ad_users 그룹을 생성합니다.

      [root@ipaserver ~]# ipa group-add --desc='AD users' ad_users
      ----------------------
      Added group "ad_users"
      ----------------------
        Group name: ad_users
        Description: AD users
        GID: 129600004
    4. administrator@ad-domain.com AD 사용자를 ad_users_external 에 외부 멤버로 추가합니다.

      [root@ipaserver ~]# ipa group-add-member ad_users_external --external "administrator@ad-domain.com"
       [member user]:
       [member group]:
        Group name: ad_users_external
        Description: AD users external map
        External member: S-1-5-21-3655990580-1375374850-1633065477-513
      -------------------------
      Number of members added 1
      -------------------------

      AD 사용자는 DOMAIN\user_name 또는 user_name@DOMAIN 과 같은 정규화된 이름으로 식별되어야 합니다. 그러면 AD ID가 사용자의 AD SID에 매핑됩니다. AD 그룹 추가에도 동일하게 적용됩니다.

    5. ad_users_externalad_users 에 멤버로 추가합니다.

      [root@ipaserver ~]# ipa group-add-member ad_users --groups ad_users_external
        Group name: ad_users
        Description: AD users
        GID: 129600004
        Member groups: ad_users_external
      -------------------------
      Number of members added 1
      -------------------------
  2. ad_users 의 멤버에게 idmclient 호스트에서 /usr/sbin/reboot 를 실행할 수 있는 권한을 부여합니다.

    1. sudo 명령의 IdM 데이터베이스에 /usr/sbin/reboot 명령을 추가합니다.

      [root@idmclient ~]# ipa sudocmd-add /usr/sbin/reboot
      -------------------------------------
      Added Sudo Command "/usr/sbin/reboot"
      -------------------------------------
        Sudo Command: /usr/sbin/reboot
    2. ad_users_reboot:라는 sudo 규칙을 만듭니다.

      [root@idmclient ~]# ipa sudorule-add ad_users_reboot
      ---------------------------------
      Added Sudo Rule "ad_users_reboot"
      ---------------------------------
        Rule name: ad_users_reboot
        Enabled: True
    3. ad_users_reboot 규칙에 /usr/sbin/reboot 명령을 추가합니다.

      [root@idmclient ~]# ipa sudorule-add-allow-command ad_users_reboot --sudocmds '/usr/sbin/reboot'
        Rule name: ad_users_reboot
        Enabled: True
        Sudo Allow Commands: /usr/sbin/reboot
      -------------------------
      Number of members added 1
      -------------------------
    4. IdM idmclient 호스트에 ad_users_reboot 규칙을 적용합니다.

      [root@idmclient ~]# ipa sudorule-add-host ad_users_reboot --hosts idmclient.idm.example.com
      Rule name: ad_users_reboot
      Enabled: True
      Hosts: idmclient.idm.example.com
      Sudo Allow Commands: /usr/sbin/reboot
      -------------------------
      Number of members added 1
      -------------------------
    5. ad_users _ reboot 규칙에 ad_users 그룹을 추가합니다.

      [root@idmclient ~]# ipa sudorule-add-user ad_users_reboot --groups ad_users
      Rule name: ad_users_reboot
      Enabled: TRUE
      User Groups: ad_users
      Hosts: idmclient.idm.example.com
      Sudo Allow Commands: /usr/sbin/reboot
      -------------------------
      Number of members added 1
      -------------------------
참고

서버에서 클라이언트로 변경 사항을 전파하는 데 몇 분이 걸릴 수 있습니다.

검증 단계

  1. idmclient 호스트에 administrator@ad-domain.com, ad_users 그룹의 간접 멤버로 로그인합니다.

    $ ssh administrator@ad-domain.com@ipaclient
    Password:
  2. 필요한 경우 administrator@ad-domain.com 을 실행할 수 있는 sudo 명령을 표시합니다.

    [administrator@ad-domain.com@idmclient ~]$ sudo -l
    Matching Defaults entries for administrator@ad-domain.com on idmclient:
        !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
        env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
        env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
        env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
        env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME",
        secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User administrator@ad-domain.com may run the following commands on idmclient:
        (root) /usr/sbin/reboot
  3. sudo 를 사용하여 시스템을 재부팅합니다. 메시지가 표시되면 administrator@ad-domain.com 의 암호를 입력합니다.

    [administrator@ad-domain.com@idmclient ~]$ sudo /usr/sbin/reboot
    [sudo] password for administrator@ad-domain.com:

20.4. IdM 웹 UI를 사용하여 IdM 클라이언트의 IdM 사용자에게 sudo 액세스 권한 부여

IdM(Identity Management)에서는 특정 명령에 대한 sudo 액세스 권한을 특정 IdM 호스트의 IdM 사용자 계정에 부여할 수 있습니다. 먼저 sudo 명령을 추가한 다음 하나 이상의 명령에 대한 sudo 규칙을 만듭니다.

idm_user_reboot sudo 규칙을 생성하여 idm_user 계정에 idmclient 시스템에서 /usr/sbin/reboot 명령을 실행할 수 있는 권한을 부여하려면 이 절차를 완료합니다.

사전 요구 사항

  • IdM 관리자로 로그인되어 있습니다.
  • 사용자 암호를 생성하여 IdM에서 idm_user 에 대한 사용자 계정을 생성하고 계정을 잠금 해제했습니다. 명령줄 인터페이스를 사용하여 새 IdM 사용자를 추가하는 방법에 대한 자세한 내용은 명령줄을 사용하여 사용자 추가를 참조하십시오.
  • idmclient 호스트에 로컬 idm_user 계정이 없습니다. idm_user 사용자는 로컬 /etc/passwd 파일에 나열되어 있지 않습니다.

절차

  1. sudo 명령의 IdM 데이터베이스에 /usr/sbin/reboot 명령을 추가합니다.

    1. 정책SudoSudo 명령으로 이동합니다.
    2. 오른쪽 상단에서 Add 를 클릭하여 sudo 명령 추가 대화 상자를 엽니다.
    3. sudo:/usr/sbin/reboot 를 사용하여 사용자가 수행할 수 있는 명령을 입력합니다.

      그림 20.1. IdM sudo 명령 추가

      "Add sudo command"라는 팝업 창의 스크린샷입니다. "/usr/sbin/reboot" 콘텐츠를 사용하여 "Sudo 명령"이라는 레이블이 지정된 필수 필드가 있습니다. "설명" 필드가 비어 있습니다. 창의 오른쪽 아래에는 "추가" - "추가 및 추가" - "추가 및 편집" - "취소"의 네 개의 버튼이 있습니다.
    4. 추가를 클릭합니다.
  2. idm_useridmclient 시스템을 재부팅할 수 있도록 새 sudo 명령 항목을 사용하여 sudo 규칙을 생성합니다.

    1. 정책SudoSudo 규칙으로 이동합니다.
    2. 오른쪽 상단에서 Add 를 클릭하여 sudo 규칙 추가 대화 상자를 엽니다.
    3. sudo 규칙의 이름을 입력합니다. idm_user_reboot.
    4. 추가를 클릭하고 편집 을 클릭합니다.
    5. 사용자를 지정합니다.

      1. who 섹션에서 지정된 사용자 및 그룹 라디오 버튼을 선택합니다.
      2. 사용자 카테고리에서 규칙이 하위 섹션에 적용되는 규칙 에서 Add users into sudo rule "idm_user_reboot" 대화 상자를 엽니다.
      3. Add users into sudo rule "idm_user_reboot" 대화 상자에서 Available 열에 idm_user 확인란을 선택하고 Prospective 열로 이동합니다.
      4. 추가를 클릭합니다.
    6. 호스트를 지정합니다.

      1. 액세스 이 호스트 섹션에서 지정된 호스트 및 그룹 라디오 버튼을 선택합니다.
      2. 호스트 카테고리에서 이 규칙이 하위 섹션에 적용되면 Add 를 클릭하여 sudo 규칙 "idm_user_reboot" 대화 상자에 호스트 추가 대화 상자를 엽니다.
      3. 사용 가능 열의 sudo 규칙 "idm_user_reboot" 대화 상자에 호스트 추가 상자에서 idmclient.idm.example.com 확인란을 선택하고 Prospective 열로 이동합니다.
      4. 추가를 클릭합니다.
    7. 명령을 지정합니다.

      1. 명령 카테고리에서 규칙은 실행 명령 섹션의 하위 섹션에 적용되며 지정된 명령 및 그룹 라디오 버튼을 선택합니다.
      2. Sudo Allow Commands (명령 허용) 하위 섹션에서 Add allow sudo commands into sudo rule "idm_user_reboot" 대화 상자가 열립니다.
      3. Add allow sudo commands into sudo rule "idm_user_reboot" 대화 상자의 Available (사용 가능) 열에서 /usr/sbin/reboot 확인란을 선택한 후 Prospective 열로 이동합니다.
      4. Add 를 클릭하여 idm_sudo_reboot 페이지로 돌아갑니다.

      그림 20.2. IdM sudo 규칙 추가

      추가된 sudo 규칙의 개요의 스크린샷입니다. 규칙이 적용되는 사용자 테이블이 있는 "Who" 섹션이 있습니다. 규칙이 적용되는 호스트 테이블이 있는 "이 호스트 액세스" 섹션이 있습니다. 규칙과 관련된 명령 테이블이 포함된 "명령 실행" 섹션이 있습니다.
    8. 왼쪽 상단 모서리에서 저장을 클릭합니다.

새 규칙은 기본적으로 활성화되어 있습니다.

참고

서버에서 클라이언트로 변경 사항을 전파하는 데 몇 분이 걸릴 수 있습니다.

검증 단계

  1. idmclientidm_user 로 로그인합니다.
  2. sudo 를 사용하여 시스템을 재부팅합니다. 메시지가 표시되면 idm_user 의 암호를 입력합니다.

    $ sudo /usr/sbin/reboot
    [sudo] password for idm_user:

sudo 규칙이 올바르게 구성된 경우 시스템이 재부팅됩니다.

20.5. IdM 클라이언트에서 서비스 계정으로 명령을 실행하는 CLI에 sudo 규칙 생성

IdM에서는 RunAs 별칭 을 사용하여 sudo 규칙을 구성하여 다른 사용자 또는 그룹으로 sudo 명령을 실행할 수 있습니다. 예를 들어 데이터베이스 애플리케이션을 호스팅하는 IdM 클라이언트가 있을 수 있으며 해당 애플리케이션에 해당하는 로컬 서비스 계정으로 명령을 실행해야 합니다.

이 예제를 사용하여 run_third-party-app_report 라는 명령 줄에 sudo 규칙을 생성하여 idmclient 호스트의 thirdpartyapp 서비스 계정으로 idm_user 계정에서 /opt/ third-party-app/bin/report 명령을 실행할 수 있습니다.

사전 요구 사항

  • IdM 관리자로 로그인되어 있습니다.
  • 사용자 암호를 생성하여 IdM에서 idm_user 에 대한 사용자 계정을 생성하고 계정을 잠금 해제했습니다. CLI를 사용하여 새 IdM 사용자를 추가하는 방법에 대한 자세한 내용은 명령줄을 사용하여 사용자 추가를 참조하십시오.
  • idmclient 호스트에 로컬 idm_user 계정이 없습니다. idm_user 사용자는 로컬 /etc/passwd 파일에 나열되어 있지 않습니다.
  • third-party-app 이라는 사용자 지정 애플리케이션이 idmclient 호스트에 설치되어 있습니다.
  • third-party-app 애플리케이션에 대한 report 명령은 /opt/ third-party-app/bin/report 디렉터리에 설치됩니다.
  • third-party-app 애플리케이션에 대한 명령을 실행하기 위해 thirdpartyapp 이라는 로컬 서비스 계정을 생성했습니다.

절차

  1. IdM 관리자로 Kerberos 티켓을 검색합니다.

    [root@idmclient ~]# kinit admin
  2. sudo 명령의 IdM 데이터베이스에 /opt/third-party-app/bin/report 명령을 추가합니다.

    [root@idmclient ~]# ipa sudocmd-add /opt/third-party-app/bin/report
    ----------------------------------------------------
    Added Sudo Command "/opt/third-party-app/bin/report"
    ----------------------------------------------------
      Sudo Command: /opt/third-party-app/bin/report
  3. 이름이 run_third-party-app_reportsudo 규칙을 만듭니다.

    [root@idmclient ~]# ipa sudorule-add run_third-party-app_report
    --------------------------------------------
    Added Sudo Rule "run_third-party-app_report"
    --------------------------------------------
      Rule name: run_third-party-app_report
      Enabled: TRUE
  4. user = <user> 옵션을 사용하여 sudorule-add-runasuser 명령에 대해 RunAs 사용자를 지정합니다.

    [root@idmclient ~]# ipa sudorule-add-runasuser run_third-party-app_report --users=thirdpartyapp
      Rule name: run_third-party-app_report
      Enabled: TRUE
      RunAs External User: thirdpartyapp
    -------------------------
    Number of members added 1
    -------------------------

    로컬 서비스 계정 또는 Active Directory 사용자와 같은 IdM에 대해 --groups=* 옵션으로 지정된 사용자(또는 그룹)는 외부일 수 있습니다. 그룹 이름에 대해 % 접두사를 추가하지 마십시오.

  5. /opt/ bad-party-app/bin/report 명령을 run_knative-party-app_report 규칙에 추가합니다.

    [root@idmclient ~]# ipa sudorule-add-allow-command run_third-party-app_report --sudocmds '/opt/third-party-app/bin/report'
    Rule name: run_third-party-app_report
    Enabled: TRUE
    Sudo Allow Commands: /opt/third-party-app/bin/report
    RunAs External User: thirdpartyapp
    -------------------------
    Number of members added 1
    -------------------------
  6. IdM idmclient 호스트에 run_third-party-app_report 규칙을 적용합니다.

    [root@idmclient ~]# ipa sudorule-add-host run_third-party-app_report --hosts idmclient.idm.example.com
    Rule name: run_third-party-app_report
    Enabled: TRUE
    Hosts: idmclient.idm.example.com
    Sudo Allow Commands: /opt/third-party-app/bin/report
    RunAs External User: thirdpartyapp
    -------------------------
    Number of members added 1
    -------------------------
  7. idm_user 계정을 run_third-party-app_report 규칙에 추가합니다.

    [root@idmclient ~]# ipa sudorule-add-user run_third-party-app_report --users idm_user
    Rule name: run_third-party-app_report
    Enabled: TRUE
    Users: idm_user
    Hosts: idmclient.idm.example.com
    Sudo Allow Commands: /opt/third-party-app/bin/report
    RunAs External User: thirdpartyapp
    -------------------------
    Number of members added 1
참고

서버에서 클라이언트로 변경 사항을 전파하는 데 몇 분이 걸릴 수 있습니다.

검증 단계

  1. idmclient 호스트에 idm_user 계정으로 로그인합니다.
  2. 새 sudo 규칙을 테스트합니다.

    1. idm_user 계정이 수행할 수 있는 sudo 규칙을 표시합니다.

      [idm_user@idmclient ~]$ sudo -l
      Matching Defaults entries for idm_user@idm.example.com on idmclient:
          !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
          env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
          env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
          env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
          env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
          env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME",
          secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
      
      User idm_user@idm.example.com may run the following commands on idmclient:
          (thirdpartyapp) /opt/third-party-app/bin/report
    2. report 명령을 thirdpartyapp 서비스 계정으로 실행합니다.

      [idm_user@idmclient ~]$ sudo -u thirdpartyapp /opt/third-party-app/bin/report
      [sudo] password for idm_user@idm.example.com:
      Executing report...
      Report successful.

20.6. IdM 클라이언트에서 서비스 계정으로 명령을 실행하는 IdM WebUI에 sudo 규칙 생성

IdM에서는 RunAs 별칭 을 사용하여 sudo 규칙을 구성하여 다른 사용자 또는 그룹으로 sudo 명령을 실행할 수 있습니다. 예를 들어 데이터베이스 애플리케이션을 호스팅하는 IdM 클라이언트가 있을 수 있으며 해당 애플리케이션에 해당하는 로컬 서비스 계정으로 명령을 실행해야 합니다.

이 예제를 사용하여 run_third-party-app_report 라는 IdM WebUI에 sudo 규칙을 생성하여 idmclient 호스트의 thirdpartyapp 서비스 계정으로 idm_user 계정에서 /opt/third-party-app/bin/report 명령을 실행할 수 있습니다.

사전 요구 사항

  • IdM 관리자로 로그인되어 있습니다.
  • 사용자 암호를 생성하여 IdM에서 idm_user 에 대한 사용자 계정을 생성하고 계정을 잠금 해제했습니다. CLI를 사용하여 새 IdM 사용자를 추가하는 방법에 대한 자세한 내용은 명령줄을 사용하여 사용자 추가를 참조하십시오.
  • idmclient 호스트에 로컬 idm_user 계정이 없습니다. idm_user 사용자는 로컬 /etc/passwd 파일에 나열되어 있지 않습니다.
  • third-party-app 이라는 사용자 지정 애플리케이션이 idmclient 호스트에 설치되어 있습니다.
  • third-party-app 애플리케이션에 대한 report 명령은 /opt/ third-party-app/bin/report 디렉터리에 설치됩니다.
  • third-party-app 애플리케이션에 대한 명령을 실행하기 위해 thirdpartyapp 이라는 로컬 서비스 계정을 생성했습니다.

절차

  1. sudo 명령의 IdM 데이터베이스에 /opt/third-party-app/bin/report 명령을 추가합니다.

    1. 정책SudoSudo 명령으로 이동합니다.
    2. 오른쪽 상단에서 Add 를 클릭하여 sudo 명령 추가 대화 상자를 엽니다.
    3. /opt/third-party-app/bin/report 명령을 입력합니다.

      "Add sudo command"라는 팝업 창의 스크린샷입니다. "/opt/third-party-app/bin/report" 콘텐츠를 포함하는 "Sudo 명령"이라는 필수 필드가 있습니다. "설명" 필드가 비어 있습니다. 창의 오른쪽 아래에는 "추가" - "추가 및 추가" - "추가 및 편집" - "취소"의 네 개의 버튼이 있습니다.
    4. 추가를 클릭합니다.
  2. sudo 명령 항목을 사용하여 새 sudo 규칙을 생성합니다.

    1. 정책SudoSudo 규칙으로 이동합니다.
    2. 오른쪽 상단에서 Add 를 클릭하여 sudo 규칙 추가 대화 상자를 엽니다.
    3. sudo 규칙의 이름을 입력합니다. run_third-party-app_report.

      "Add sudo rule"라는 팝업 창의 스크린샷입니다. "run_third-party-app_report" 콘텐츠와 함께 "Rule name"이라는 레이블이 지정된 필수 필드가 있습니다. 창의 오른쪽 아래에는 "추가" - "추가 및 추가" - "추가 및 편집" - "취소"의 네 개의 버튼이 있습니다.
    4. 추가를 클릭하고 편집 을 클릭합니다.
    5. 사용자를 지정합니다.

      1. who 섹션에서 지정된 사용자 및 그룹 라디오 버튼을 선택합니다.
      2. 사용자 카테고리에서 규칙이 하위 섹션에 적용되는 경우 Add users into sudo rule "run_ third-party-app_report" 대화 상자를 클릭합니다.
      3. Add users into sudo rule "run_ third-party-app_report" 대화 상자에서 Available 열에 idm_user 확인란을 선택한 후 Prospective 열로 이동합니다.

        "Add users into sudo rule"라는 팝업 창의 스크린샷입니다. 왼쪽의 Available 목록에서 사용자를 선택하고 오른쪽의 Prospective 열로 이동할 수 있습니다. 창의 오른쪽 아래에는 "추가" - "Cancel"이라는 두 개의 버튼이 있습니다.
      4. 추가를 클릭합니다.
    6. 호스트를 지정합니다.

      1. 액세스 이 호스트 섹션에서 지정된 호스트 및 그룹 라디오 버튼을 선택합니다.
      2. 호스트 카테고리에서 이 규칙이 하위 섹션에 적용되면 Add hosts를 클릭하여 sudo 규칙 "run_ third-party-app_report" 대화 상자에 호스트 추가를 엽니다.
      3. Add hosts into sudo rule "run_ third-party-app_report" 대화 상자의 Available 열에 idm.idm.example.com 확인란을 선택하고 Prospective 열로 이동합니다.

        "Add hosts into sudo rule"라는 팝업 창의 스크린샷입니다. 왼쪽의 Available(사용 가능한) 목록에서 호스트를 선택하고 오른쪽의 Prospective 열로 이동할 수 있습니다. 창의 오른쪽 아래에는 "추가" - "Cancel"이라는 두 개의 버튼이 있습니다.
      4. 추가를 클릭합니다.
    7. 명령을 지정합니다.

      1. 명령 카테고리에서 규칙은 실행 명령 섹션의 하위 섹션에 적용되며 지정된 명령 및 그룹 라디오 버튼을 선택합니다.
      2. Sudo Allow Commands ( 명령 허용) 하위 섹션에서 Add allow sudo command into sudo rule "run_ third-party-app_report" 대화 상자를 엽니다.
      3. Add allow sudo commands into sudo rule "run_third-party-app_report" dialog box in the Available column, check the /opt/ third-party-app/bin/report 체크박스를 선택하고 Prospective 열로 이동합니다.

        "Add allow sudo commands into sudo rule"라는 팝업 창의 스크린샷입니다. 왼쪽의 Available(사용 가능) 목록에서 sudo 명령을 선택하고 오른쪽의 Prospective 열로 이동할 수 있습니다. 창의 오른쪽 아래에는 "추가" - "Cancel"이라는 두 개의 버튼이 있습니다.
      4. Add (추가)를 클릭하여 run_third-party-app_report 페이지로 돌아갑니다.
    8. Runas 사용자를 지정합니다.

      1. As whom 섹션에서 지정된 사용자 및 그룹 라디오 버튼을 선택합니다.
      2. RunAs Users 하위 섹션에서 Add 를 클릭하여 Add RunAs users into sudo rule "run_third-app_report" 대화 상자를 엽니다.
      3. Add RunAs users into sudo rule "run_third-party-app_report" 대화 상자에서 External 상자에 thirdpartyapp 서비스 계정을 입력하고 Prospective 열로 이동합니다.

        "제3자 앱" 서비스 계정을 외부 사용자로 지정할 수 있는 대화 상자의 스크린샷입니다.
      4. Add (추가)를 클릭하여 run_third-party-app_report 페이지로 돌아갑니다.
    9. 왼쪽 상단 모서리에서 저장을 클릭합니다.

새 규칙은 기본적으로 활성화되어 있습니다.

그림 20.3. sudo 규칙에 대한 세부 정보

추가된 sudo 규칙의 개요의 스크린샷입니다. Who" 섹션에는 "idm_user"에 대한 항목이 있습니다. "Access this host" 섹션에는 "idmclient.idm.example.com"이 있습니다. "실행 명령 실행" 섹션에는 "/opt/third-party-app/bin/report" 명령이 있습니다. "As whom" 섹션에는 "thirdpartyapp" 계정이 나열됩니다.
참고

서버에서 클라이언트로 변경 사항을 전파하는 데 몇 분이 걸릴 수 있습니다.

검증 단계

  1. idmclient 호스트에 idm_user 계정으로 로그인합니다.
  2. 새 sudo 규칙을 테스트합니다.

    1. idm_user 계정이 수행할 수 있는 sudo 규칙을 표시합니다.

      [idm_user@idmclient ~]$ sudo -l
      Matching Defaults entries for idm_user@idm.example.com on idmclient:
          !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
          env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
          env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
          env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
          env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
          env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME",
          secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
      
      User idm_user@idm.example.com may run the following commands on idmclient:
          (thirdpartyapp) /opt/third-party-app/bin/report
    2. report 명령을 thirdpartyapp 서비스 계정으로 실행합니다.

      [idm_user@idmclient ~]$ sudo -u thirdpartyapp /opt/third-party-app/bin/report
      [sudo] password for idm_user@idm.example.com:
      Executing report...
      Report successful.

20.7. IdM 클라이언트에서 sudo에 대한 GSSAPI 인증 활성화

다음 절차에서는 pam_sss_gss.so PAM 모듈을 통해 sudosudo -i 명령에 대한 IdM 클라이언트에 대한 일반 보안 서비스 애플리케이션 프로그램 인터페이스(GSSAPI) 인증 활성화에 대해 설명합니다. 이 구성을 통해 IdM 사용자는 Kerberos 티켓을 사용하여 sudo 명령에 인증할 수 있습니다.

사전 요구 사항

  • IdM 호스트에 적용되는 IdM 사용자에 대한 sudo 규칙을 생성했습니다. 이 예제에서는 idm_user_reboot sudo 규칙을 생성하여 idm_user 계정에 idmclient 호스트에서 /usr/sbin/reboot 명령을 실행할 수 있는 권한을 부여합니다.
  • /etc/sssd/sssd.conf 파일과 PAM 파일을 /etc/pam.d/ 디렉토리에서 수정하려면 root 권한이 필요합니다.

절차

  1. /etc/sssd/sssd.conf 설정 파일을 엽니다.
  2. [domain/ <domain_name&gt; ] 섹션에 다음 항목을 추가합니다.

    [domain/<domain_name>]
    pam_gssapi_services = sudo, sudo-i
  3. /etc/sssd/sssd.conf 파일을 저장하고 닫습니다.
  4. SSSD 서비스를 다시 시작하여 구성 변경 사항을 로드합니다.

    [root@idmclient ~]# systemctl restart sssd
  5. RHEL 9.2 이상을 실행하는 경우:

    1. [선택 사항] sssd authselect 프로필을 선택한 경우 확인합니다.

      # authselect current
      Profile ID: sssd

      출력에 sssd authselect 프로필이 선택됩니다.

    2. sssd authselect 프로필이 선택된 경우 GSSAPI 인증을 활성화합니다.

      # authselect enable-feature with-gssapi
    3. sssd authselect 프로필이 선택되어 있지 않으면 해당 프로필을 선택하고 GSSAPI 인증을 활성화합니다.

      # authselect select sssd with-gssapi
  6. RHEL 9.1 또는 이전 버전을 실행하는 경우:

    1. /etc/pam.d/sudo PAM 구성 파일을 엽니다.
    2. 다음 항목을 /etc/pam.d/sudo 파일에서 auth 섹션의 첫 번째 행으로 추가합니다.

      #%PAM-1.0
      auth sufficient pam_sss_gss.so
      auth       include      system-auth
      account    include      system-auth
      password   include      system-auth
      session    include      system-auth
    3. /etc/pam.d/sudo 파일을 저장하고 종료합니다.

검증 단계

  1. idm_user 계정으로 호스트에 로그인합니다.

    [root@idm-client ~]# ssh -l idm_user@idm.example.com localhost
    idm_user