19.3. 네트워크 RHEL 시스템 역할을 사용하여 802.1X 네트워크 인증으로 정적 이더넷 연결 구성
네트워크 RHEL 시스템 역할을 사용하면 원격 호스트에서 NAC(Network Access Control) 설정을 자동화할 수 있습니다. 플레이북에서 클라이언트에 대한 인증 세부 정보를 정의하여 권한이 있는 클라이언트만 네트워크에 액세스할 수 있도록 할 수 있습니다.
Ansible 플레이북을 사용하여 개인 키, 인증서 및 CA 인증서를 클라이언트에 복사한 다음 네트워크 RHEL 시스템 역할을 사용하여 802.1X 네트워크 인증으로 연결 프로필을 구성할 수 있습니다.
사전 요구 사항
- 컨트롤 노드와 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo권한이 있습니다. - 네트워크는 802.1X 네트워크 인증을 지원합니다.
- 관리형 노드는 NetworkManager를 사용합니다.
TLS 인증에 필요한 다음 파일이 제어 노드에 있습니다.
-
클라이언트 키는
/srv/data/client.key파일에 저장됩니다. -
클라이언트 인증서는
/srv/data/client.crt파일에 저장됩니다. -
CA(인증 기관) 인증서는
/srv/data/ca.crt파일에 저장됩니다.
-
클라이언트 키는
프로세스
중요한 변수를 암호화된 파일에 저장합니다.
자격 증명 모음을 생성합니다.
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>ansible-vault create명령이 편집기를 열고 <key > : < value> 형식으로 중요한 데이터를 입력합니다.pwd: <password>- 변경 사항을 저장하고 편집기를 종료합니다. Ansible은 자격 증명 모음의 데이터를 암호화합니다.
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml)을 생성합니다.--- - name: Configure an Ethernet connection with 802.1X authentication hosts: managed-node-01.example.com vars_files: - ~/vault.yml tasks: - name: Copy client key for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.key" dest: "/etc/pki/tls/private/client.key" mode: 0600 - name: Copy client certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.crt" dest: "/etc/pki/tls/certs/client.crt" - name: Copy CA certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/ca.crt" dest: "/etc/pki/ca-trust/source/anchors/ca.crt" - name: Ethernet connection profile with static IP address settings and 802.1X ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp1s0 type: ethernet autoconnect: yes ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 gateway4: 192.0.2.254 gateway6: 2001:db8:1::fffe dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com ieee802_1x: identity: <user_name> eap: tls private_key: "/etc/pki/tls/private/client.key" private_key_password: "{{ pwd }}" client_cert: "/etc/pki/tls/certs/client.crt" ca_cert: "/etc/pki/ca-trust/source/anchors/ca.crt" domain_suffix_match: example.com state: up예제 플레이북에 지정된 설정은 다음과 같습니다.
ieee802_1x- 이 변수에는 802.1X 관련 설정이 포함되어 있습니다.
EAP: tls-
EAP(Extensible Authentication Protocol)에 대한 인증서 기반
TLS인증 방법을 사용하도록 프로필을 구성합니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.network/README.md파일을 참조하십시오.플레이북 구문을 확인합니다.
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
$ ansible-playbook --ask-vault-pass ~/playbook.yml
검증
- 네트워크 인증이 필요한 네트워크의 리소스에 액세스합니다.