10.16. RHEL 시스템 역할을 사용하여 NBDE 구성
Clevis 및 Tang을 사용하여 PBD(Policy-Based Decryption) 솔루션의 자동 배포를 위해 nbde_client
및 nbde_server
RHEL 시스템 역할을 사용할 수 있습니다. rhel-system-roles
패키지에는 이러한 시스템 역할, 관련 예제 및 참조 문서가 포함되어 있습니다.
10.16.1. nbde_server
RHEL 시스템 역할을 사용하여 여러 Tang 서버를 설정
nbde_server
시스템 역할을 사용하면 Tang 서버를 자동화된 디스크 암호화 솔루션의 일부로 배포하고 관리할 수 있습니다. 이 역할은 다음 기능을 지원합니다.
- Tang 키 교체
- Tang 키 배포 및 백업
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.--- - name: Deploy a Tang server - hosts: tang.server.example.com - tasks: - name: Install and configure periodic key rotation ansible.builtin.include_role: name: rhel-system-roles.nbde_server vars: nbde_server_rotate_keys: yes nbde_server_manage_firewall: true nbde_server_manage_selinux: true
이 예제 플레이북은 Tang 서버와 키 교체의 배포를 확인합니다.
예제 플레이북에 지정된 설정은 다음과 같습니다.
nbde_server_manage_firewall: true
-
방화벽
시스템 역할을 사용하여nbde_server
역할에서 사용하는 포트를 관리합니다. nbde_server_manage_selinux: true
selinux
시스템 역할을 사용하여nbde_server
역할에서 사용하는 포트를 관리합니다.플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.nbde_server/README.md
파일을 참조하십시오.
플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
NBDE 클라이언트에서 다음 명령을 사용하여 Tang 서버가 올바르게 작동하는지 확인합니다. 명령은 암호화 및 암호 해독을 위해 전달하는 동일한 메시지를 반환해야 합니다.
# ansible managed-node-01.example.com -m command -a 'echo test | clevis encrypt tang '{"url":"<tang.server.example.com>"}' -y | clevis decrypt' test
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.nbde_server/README.md
파일 -
/usr/share/doc/rhel-system-roles/nbde_server/
directory
10.16.2. nbde_client
RHEL 시스템 역할을 사용하여 DHCP로 Clevis 클라이언트 설정
nbde_client
시스템 역할을 사용하면 자동화된 방식으로 여러 Clevis 클라이언트를 배포할 수 있습니다.
이 역할은 LUKS 암호화 볼륨을 하나 이상의 NBDE(Network-Bound) 서버 - Tang 서버에 바인딩할 수 있도록 지원합니다. 암호를 사용하여 기존 볼륨 암호화를 보존하거나 제거할 수 있습니다. 암호를 제거한 후 Clevis를 사용하여 볼륨의 잠금을 해제할 수 있습니다. 이 기능은 시스템을 프로비저닝한 후 제거해야 하는 임시 키 또는 암호를 사용하여 볼륨을 처음 암호화할 때 유용합니다.
암호와 키 파일을 둘 다 제공하는 경우 역할은 먼저 제공한 항목을 사용합니다. 이러한 유효한 항목이 없는 경우 기존 바인딩에서 암호를 검색하려고 합니다.
정책 기반 암호 해독(Policy-Based Decryption)은 장치를 슬롯에 매핑하는 것으로 바인딩을 정의합니다. 즉, 동일한 장치에 대한 여러 바인딩을 사용할 수 있습니다. 기본 슬롯은 슬롯 1입니다.
nbde_client
시스템 역할은 Tang 바인딩만 지원합니다. 따라서 TPM2 바인딩에는 사용할 수 없습니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다. - LUKS를 사용하여 이미 암호화된 볼륨입니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.--- - name: Configure clients for unlocking of encrypted volumes by Tang servers hosts: managed-node-01.example.com tasks: - name: Create NBDE client bindings ansible.builtin.include_role: name: rhel-system-roles.nbde_client vars: nbde_client_bindings: - device: /dev/rhel/root encryption_key_src: /etc/luks/keyfile nbde_client_early_boot: true state: present servers: - http://server1.example.com - http://server2.example.com - device: /dev/rhel/swap encryption_key_src: /etc/luks/keyfile servers: - http://server1.example.com - http://server2.example.com
이 예제 플레이북은 두 개 이상의 Tang 서버 중 하나를 사용할 수 있을 때 두 개의 LUKS 암호화 볼륨의 잠금 해제를 자동화하도록 Clevis 클라이언트를 구성합니다.
예제 플레이북에 지정된 설정은 다음과 같습니다.
state: present
-
state
값은 플레이북을 실행한 후 구성을 나타냅니다. 새 바인딩을 생성하거나 기존 바인딩을 업데이트하려면present
값을 사용합니다.clevis luks bind
명령과 반대로state: present
를 사용하여 장치 슬롯의 기존 바인딩을 덮어쓸 수도 있습니다.absent
값은 지정된 바인딩을 제거합니다. nbde_client_early_boot: true
nbde_client
역할은 기본적으로 초기 부팅 중에 Tang 핀의 네트워킹을 사용할 수 있도록 합니다. 이 기능을 비활성화해야 하는 경우nbde_client_early_boot: false
변수를 플레이북에 추가합니다.플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.nbde_client/README.md
파일을 참조하십시오.
플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
NBDE 클라이언트에서 Tang 서버에서 자동으로 잠금 해제해야 하는 암호화된 볼륨에 LUKS 핀에 해당 정보가 포함되어 있는지 확인합니다.
# ansible managed-node-01.example.com -m command -a 'clevis luks list -d /dev/rhel/root' 1: tang '{"url":"<http://server1.example.com/>"}' 2: tang '{"url":"<http://server2.example.com/>"}'
nbde_client_early_boot: false
변수를 사용하지 않는 경우 초기 부팅에 바인딩을 사용할 수 있는지 확인합니다. 예를 들면 다음과 같습니다.# ansible managed-node-01.example.com -m command -a 'lsinitrd | grep clevis-luks' lrwxrwxrwx 1 root root 48 Jan 4 02:56 etc/systemd/system/cryptsetup.target.wants/clevis-luks-askpass.path -> /usr/lib/systemd/system/clevis-luks-askpass.path …
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.nbde_client/README.md
파일 -
/usr/share/doc/rhel-system-roles/nbde_client/
directory
10.16.3. nbde_client
RHEL 시스템 역할을 사용하여 static-IP Clevis 클라이언트 설정
nbde_client
RHEL 시스템 역할은 DHCP(Dynamic Host Configuration Protocol)가 있는 시나리오만 지원합니다. 고정 IP 구성이 있는 NBDE 클라이언트에서 네트워크 구성을 커널 부팅 매개변수로 전달해야 합니다.
일반적으로 관리자는 플레이북을 재사용하고 초기 부팅 중에 Ansible이 고정 IP 주소를 할당하는 각 호스트에 대해 개별 플레이북을 유지 관리하지 않습니다. 이 경우 플레이북에서 변수를 사용하고 외부 파일에 설정을 제공할 수 있습니다. 따라서 설정이 있는 하나의 플레이북과 하나의 파일만 필요합니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다. - LUKS를 사용하여 이미 암호화된 볼륨입니다.
절차
호스트의 네트워크 설정으로 파일을 생성하고(예:
static-ip-settings-clients.yml
) 호스트에 동적으로 할당할 값을 추가합니다.clients: managed-node-01.example.com: ip_v4: 192.0.2.1 gateway_v4: 192.0.2.254 netmask_v4: 255.255.255.0 interface: enp1s0 managed-node-02.example.com: ip_v4: 192.0.2.2 gateway_v4: 192.0.2.254 netmask_v4: 255.255.255.0 interface: enp1s0
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.- name: Configure clients for unlocking of encrypted volumes by Tang servers hosts: managed-node-01.example.com,managed-node-02.example.com vars_files: - ~/static-ip-settings-clients.yml tasks: - name: Create NBDE client bindings ansible.builtin.include_role: name: rhel-system-roles.network vars: nbde_client_bindings: - device: /dev/rhel/root encryption_key_src: /etc/luks/keyfile servers: - http://server1.example.com - http://server2.example.com - device: /dev/rhel/swap encryption_key_src: /etc/luks/keyfile servers: - http://server1.example.com - http://server2.example.com - name: Configure a Clevis client with static IP address during early boot ansible.builtin.include_role: name: rhel-system-roles.bootloader vars: bootloader_settings: - kernel: ALL options: - name: ip value: "{{ clients[inventory_hostname]['ip_v4'] }}::{{ clients[inventory_hostname]['gateway_v4'] }}:{{ clients[inventory_hostname]['netmask_v4'] }}::{{ clients[inventory_hostname]['interface'] }}:none"
이 플레이북은
~/static-ip-settings-clients.yml
파일에 나열된 각 호스트에 대해 동적으로 특정 값을 읽습니다.플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.network/README.md
파일을 참조하십시오.플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
$ ansible-playbook ~/playbook.yml
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.nbde_client/README.md
파일 -
/usr/share/doc/rhel-system-roles/nbde_client/
directory - 초기 램디스크 (initrd)에서 Linux 네트워크 구성 을 예상 (Red Hat Enable Sysadmin)