28.9. Ansible을 사용하여 통합 eDNS 및 외부 루트 CA로 IdM 서버 설치
Ansible을 사용하여 DNS 트래픽을 암호화하여 DNS-over-TLS(DoT)와 외부 루트 CA를 사용하여 IdM(Identity Management) 서버를 설치합니다.
적용 되거나 완화 된 정책을 선택할 수 있습니다. 기본적으로 설치 프로그램은 완화 정책을 사용하여 DoT를 시도하지만 보안 연결을 설정할 수 없는 경우 암호화되지 않은 표준 DNS로 대체를 허용합니다. 강제 정책을 적용하려면 ipaserver_dns_policy 변수를 Ansible 플레이북의 vars 섹션에 적용 하도록 설정합니다.
통합 IdM 인증 기관(CA)에서 발급한 인증서를 사용하거나 외부 CA에서 발급한 사용자 정의 인증서를 제공할 수 있습니다. 인증서를 제공하지 않으면 IdM CA에서 설치 중에 DoT 인증서를 자동으로 발행합니다.
자세한 내용은 시스템의 /usr/share/ansible/collections/ansible_collections/freeipa/ansible_freeipa/README-server.md 를 참조하십시오.
사전 요구 사항
- Ansible 버전 2.15 이상을 사용하고 있습니다.
-
ansible-freeipa패키지가 설치되어 있습니다. -
이 예제에서는
secret.ymlAnsible vault가ipaadmin_password를 저장하고secret.yml파일을 보호하는 암호를 저장하는 파일에 대한 액세스 권한이 있다고 가정합니다. - IdM 서버 설치를 위한 시스템 준비에 설명된 단계를 검토했습니다.
-
강제된 DoT의 경우 DoT를 독점적으로 사용하도록 클라이언트 및 복제본 시스템 구성 단계를 완료했습니다.
프로세스
선택 사항: 외부 인증 기관에서 발급한 DoT에 대해 사용자 정의 PEM 형식의 인증서 및 키를 사용하려면 다음을 수행합니다.
IdM 서버를 설치할 호스트에 SSH를 실행합니다.
$ ssh root@server.idm.example.com두 파일을 생성하고
이름이 지정된데몬에 소유권을 할당합니다.# openssl req \ -newkey rsa:2048 \ -nodes \ -keyout /etc/pki/tls/certs/privkey.pem \ -x509 \ -days 36500 \ -out /etc/pki/tls/certs/certificate.pem \ -subj "/C=<country_code>/ST=<state>/L=<location>/O=<organization>/OU=<organizational_unit>/CN=<idm_server_fqdn>/emailAddress=<email>" && \ chown named:named /etc/pki/tls/certs/privkey.pem /etc/pki/tls/certs/certificate.pemIdM 서버에서 SSH 세션을 종료합니다.
# exit
Ansible 컨트롤러에서 외부 CA를 사용하여 IdM 서버를 설치하는 지침과 함께
install-server-external-ca-step1.yml이라는 플레이북 파일을 생성합니다.--- - name: Playbook to configure IPA server Step 1: generate CSR for IdM external CA setup hosts: ipaserver become: true vars_files: - /home/user_name/MyPlaybooks/secret.yml vars: ipaserver_domain: idm.example.com ipaserver_realm: IDM.EXAMPLE.COM ipaserver_hostname: server.idm.example.com ipaadmin_password: "{{ vault_admin_password }}" ipadm_password: "{{ vault_dm_password }}" ipaserver_setup_dns: true ipaserver_dot_forwarders: - "<server_ip>#<dns_server_hostname>" ipaserver_external_ca: true ipaserver_dns_over_tls: true ipaserver_no_dnssec_validation: true ipaserver_auto_reverse: true roles: - role: freeipa.ansible_freeipa.ipaserver post_tasks: - name: Copy CSR /root/ipa.csr from node to "{{ groups.ipaserver[0] + '-ipa.csr' }}" fetch: src: /root/ipa.csr dest: "{{ groups.ipaserver[0] + '-ipa.csr' }}" flat: true외부 인증 기관에서 발급한 사용자 지정 PEM 형식의 인증서 및 키를 사용하는 경우
vars섹션에 다음을 추가합니다.ipaserver_dns_over_tls_cert: /etc/pki/tls/certs/certificate.pem ipaserver_dns_over_tls_key: /etc/pki/tls/certs/privkey.pem설치 첫 번째 단계에 대한 지침을 사용하여 Ansible 플레이북을 실행합니다.
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-server-external-ca-step1.yml-
컨트롤러에서
ipa.csr인증서 서명 요청 파일을 찾아 외부 CA에 제출합니다. - 다음 단계의 플레이북에서 찾을 수 있도록 외부 CA 및 CA 인증서 체인에서 서명한 IdM CA 인증서를 컨트롤러 파일 시스템에 배치합니다.
다음 콘텐츠를 사용하여 IdM 서버 설치의 두 번째 단계에 대해 새 Ansible 플레이북(예:
install-server-external-ca-step2.yml)을 생성합니다.--- - name: Playbook to configure IdM server Step 2: import certificates and finalize installation hosts: ipaserver become: true vars_files: - /home/user_name/MyPlaybooks/secret.yml vars: ipaserver_domain: idm.example.com ipaserver_realm: IDM.EXAMPLE.COM ipaserver_hostname: server.idm.example.com ipaadmin_password: "{{ vault_admin_password }}" ipadm_password: "{{ vault_dm_password }}" ipaserver_setup_dns: true ipaserver_dot_forwarders: - "<server_ip>#<dns_server_hostname>" ipaserver_external_ca: true ipaserver_dns_over_tls: true ipaserver_no_dnssec_validation: true ipaserver_auto_reverse: true ipaserver_external_cert_files: - servercert20240601.pem - cacert.pem pre_tasks: - name: Copy "{{ groups.ipaserver[0] }}-{{ item }}" to "/root/{{ item }}" on node ansible.builtin.copy: src: "{{ groups.ipaserver[0] }}-{{ item }}" dest: "/root/{{ item }}" force: true with_items: - servercert20240601.pem - cacert.pem roles: - role: freeipa.ansible_freeipa.ipaserver state: present설치의 마지막 단계에 대한 지침을 사용하여 Ansible 플레이북을 실행합니다.
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-server-external-ca-step2.yml
문제 해결
IdM 서버에
SSH를 실행합니다.# ssh root@server.idm.example.comunbound서비스에 대한 자세한 로깅을 활성화합니다.# unbound-control verbosity 3unbound서비스를 다시 시작하여 업데이트된 구성을 적용합니다.# systemctl restart unboundunbound서비스의 실시간 로그를 모니터링합니다.$ journalctl -u unbound -f