18.14. 정책 기반 암호 해독을 사용하여 암호화된 볼륨의 자동 잠금 해제 구성


정책 기반 암호 해독(Policy-Based Decryption)은 물리적 및 가상 머신에서 암호화된 루트 및 보조 드라이브의 하드 드라이브의 잠금을 해제할 수 있는 기술 컬렉션입니다. PBD는 사용자 암호, 신뢰할 수 있는 플랫폼 모듈(TPM) 장치, 시스템에 연결된 PKCS #11 장치(예: 스마트 카드 또는 특수 네트워크 서버)와 같은 다양한 잠금 해제 방법을 사용합니다.

PBD를 사용하면 다른 잠금 해제 방법을 정책에 결합하여 동일한 볼륨을 다른 방식으로 잠금 해제할 수 있습니다. RHEL에서 PBD의 현재 구현은 Clevis 프레임워크와 pins라는 플러그인으로 구성되어 있습니다. 각 핀은 별도의 잠금 해제 기능을 제공합니다. 현재 다음 핀을 사용할 수 있습니다.

Tang
네트워크 서버를 사용하여 볼륨 잠금을 허용합니다.
tpm2
TPM2 정책을 사용하여 볼륨 잠금을 허용합니다.
sss
Shamir의 Secret Sharing (SSS) 암호화 체계를 사용하여 고가용성 시스템을 배포할 수 있습니다.

18.14.1. 네트워크 바인딩 디스크 암호화

NBDE(Network Bound Disc Encryption)는 암호화된 볼륨을 특수 네트워크 서버에 바인딩할 수 있는 정책 기반 암호 해독(Policy-Based Decryption)의 하위 범주입니다. Clevis의 현재 구현에는 Tang 서버 및 Tang 서버 자체에 대한 Clevis 핀이 포함되어 있습니다.

RHEL에서 NBDE는 다음 구성 요소 및 기술을 통해 구현됩니다.

그림 18.1. LUKS1 암호화 볼륨을 사용할 때의 NBDE 스키마입니다 luksmeta 패키지는 LUKS2 볼륨에 사용되지 않습니다.

Tang은 데이터를 네트워크 상에 바인딩하는 서버입니다. 시스템이 특정 보안 네트워크에 바인딩될 때 데이터를 포함하는 시스템을 사용할 수 있습니다. Tang은 상태 비저장이며 TLS 또는 인증이 필요하지 않습니다. 서버가 모든 암호화 키를 저장하고 사용된 모든 키에 대한 지식이 있는 에스크로 기반 솔루션과 달리 Tang은 클라이언트 키와 상호 작용하지 않으므로 클라이언트로부터 식별 정보를 얻을 수 없습니다.

Clevis는 자동 암호 해독을 위한 플러그형 프레임워크입니다. KnativeServing에서 Clevis는 LUKS 볼륨의 자동 잠금을 해제하는 기능을 제공합니다. clevis 패키지는 기능의 클라이언트 측면을 제공합니다.

Clevis PIN은 Clevis 프레임워크의 플러그인입니다. 이러한 핀 중 하나는 NBDE 서버 - Tang과의 상호 작용을 구현하는 플러그인입니다.

Clevis 및 Tang은 네트워크 바인딩 암호화를 제공하는 일반 클라이언트 및 서버 구성 요소입니다. RHEL에서는 LUKS와 함께 네트워크-Bound 디스크 암호화를 수행하기 위해 루트 및 루트가 아닌 스토리지 볼륨을 암호화하고 암호 해독하는 데 사용됩니다.

클라이언트 및 서버 측 구성 요소 모두 José 라이브러리를 사용하여 암호화 및 암호 해독 작업을 수행합니다.

Clevis 프로비저닝을 시작할 때 Tang 서버의 Clevis 핀은 Tang 서버의 공개된 symmetric 키 목록을 가져옵니다. 또는 키가 symmetric이므로 Tang의 공개 키 목록을 대역에서 배포할 수 있으므로 클라이언트가 Tang 서버에 액세스하지 않고도 작동할 수 있습니다. 이 모드를 오프라인 프로비저닝 이라고 합니다.

Tang의 Clevis 핀은 공개 키 중 하나를 사용하여 고유하고 암호화 방식으로 암호화 키를 생성합니다. 이 키를 사용하여 데이터를 암호화하면 키가 삭제됩니다. Clevis 클라이언트는 이 프로비저닝 작업에서 생성한 상태를 편리한 위치에 저장해야 합니다. 데이터를 암호화하는 이 프로세스는 프로비저닝 단계입니다.

LUKS 버전 2(LUKS2)는 RHEL의 기본 disk-encryption 형식입니다. 따라서 Clevis의 프로비저닝 상태는 LUKS2 헤더에 토큰으로 저장됩니다. luksmeta 패키지에 의해 NBDE의 프로비저닝 상태를 활용하는 것은 LUKS1로 암호화된 볼륨에만 사용됩니다.

Tang의 Clevis 핀은 사양 없이 LUKS1 및 LUKS2를 모두 지원합니다. Clevis는 일반 텍스트 파일을 암호화할 수 있지만 block 장치를 암호화하기 위해 cryptsetup 툴을 사용해야 합니다. 자세한 내용은 LUKS를 사용하여 블록 장치 암호화를 참조하십시오.

클라이언트가 데이터에 액세스할 준비가 되면 프로비저닝 단계에서 생성된 메타데이터를 로드하고 암호화 키를 복구할 수 있습니다. 이 과정은 회복 단계입니다.

Clevis는 자동으로 잠금 해제될 수 있도록 핀을 사용하여 LUKS 볼륨을 바인딩합니다. 바인딩 프로세스가 성공적으로 완료되면 제공된 Dracut unlocker를 사용하여 디스크의 잠금을 해제할 수 있습니다.

참고

kdump 커널 크래시 덤프 메커니즘이 시스템 메모리의 콘텐츠를 LUKS 암호화 장치에 저장하도록 설정된 경우 두 번째 커널 부팅 중에 암호를 입력하라는 메시지가 표시됩니다.

18.14.2. 강제 모드에서 SELinux를 사용하여 Tang 서버 배포

Tang 서버를 사용하여 Clevis 지원 클라이언트에서 LUKS 암호화 볼륨을 자동으로 잠금 해제할 수 있습니다. 최소 시나리오에서는 tang 패키지를 설치하고 systemctl enable tangd.socket --now 명령을 입력하여 포트 80에 Tang 서버를 배포합니다. 다음 예제 절차에서는 사용자 지정 포트에서 실행되는 Tang 서버를 SELinux 강제 모드에서 제한된 서비스로 배포하는 방법을 보여줍니다.

사전 요구 사항

  • policycoreutils-python-utils 패키지 및 해당 종속 항목이 설치됩니다.
  • firewalld 서비스가 실행 중입니다.

프로세스

  1. tang 패키지 및 해당 종속 항목을 설치하려면 root로 다음 명령을 입력합니다.

    # yum install tang
    Copy to Clipboard Toggle word wrap
  2. (예: 7500/tcp ) .occupied 포트를 선택하고 tangd 서비스가 해당 포트에 바인딩되도록 허용합니다.

    # semanage port -a -t tangd_port_t -p tcp 7500
    Copy to Clipboard Toggle word wrap

    포트는 한 번에 하나의 서비스에서만 사용할 수 있으므로 이미 사용되고 있는 포트를 사용하려는 경우 ValueError를 의미합니다. 포트가 이미 정의된 오류 메시지입니다.

  3. 방화벽에서 포트를 엽니다.

    # firewall-cmd --add-port=7500/tcp
    # firewall-cmd --runtime-to-permanent
    Copy to Clipboard Toggle word wrap
  4. tangd 서비스를 활성화합니다.

    # systemctl enable tangd.socket
    Copy to Clipboard Toggle word wrap
  5. 덮어쓰기 파일을 생성합니다.

    # systemctl edit tangd.socket
    Copy to Clipboard Toggle word wrap
  6. 다음 편집기 화면에서 /etc/systemd/system/tangd.socket.d/ 디렉터리에 있는 빈 override.conf 파일을 열고 다음 행을 추가하여 Tang 서버의 기본 포트를 80에서 이전에 선택한 숫자로 변경합니다.

    [Socket]
    ListenStream=
    ListenStream=7500
    Copy to Clipboard Toggle word wrap
    중요

    이 아래에 있는 줄과 # 줄 사이에 이전 코드 조각을 삽입합니다. 그렇지 않으면 시스템은 변경 사항을 삭제합니다.

  7. 변경 사항을 저장하고 편집기를 종료합니다. 기본 vi 편집기에서 Esc 를 눌러 명령 모드로 전환하고 :wq 를 입력한 후 Enter 키를 눌러 수행할 수 있습니다.
  8. 변경된 구성을 다시 로드합니다.

    # systemctl daemon-reload
    Copy to Clipboard Toggle word wrap
  9. 구성이 작동하는지 확인합니다.

    # systemctl show tangd.socket -p Listen
    Listen=[::]:7500 (Stream)
    Copy to Clipboard Toggle word wrap
  10. tangd 서비스를 시작합니다.

    # systemctl restart tangd.socket
    Copy to Clipboard Toggle word wrap

    tangdsystemd 소켓 활성화 메커니즘을 사용하므로 첫 번째 연결이 들어오는 즉시 서버가 시작됩니다. 새로 생성된 암호화 키 세트는 처음 시작할 때 자동으로 생성됩니다. 수동 키 생성과 같은 암호화 작업을 수행하려면 jose 유틸리티를 사용합니다.

검증

  • NBDE 클라이언트에서 다음 명령을 사용하여 Tang 서버가 올바르게 작동하는지 확인합니다. 명령은 암호화 및 암호 해독을 위해 전달하는 동일한 메시지를 반환해야 합니다.

    # echo test | clevis encrypt tang '{"url":"<tang.server.example.com:7500>"}' -y | clevis decrypt
    test
    Copy to Clipboard Toggle word wrap

18.14.3. 클라이언트에서 Tang 서버 키 교체 및 바인딩 업데이트

보안상의 이유로 Tang 서버 키를 교체하고 클라이언트에서 기존 바인딩을 정기적으로 업데이트합니다. 교체해야하는 정확한 간격은 애플리케이션, 키 크기 및 기관 정책에 따라 다릅니다.

또는 nbde_server RHEL 시스템 역할을 사용하여 Tang 키를 교체할 수 있습니다. 자세한 내용은 nbde_server 시스템 역할을 사용하여 여러 Tang 서버 설정을 참조하십시오.

사전 요구 사항

  • Tang 서버가 실행 중입니다.
  • clevisclevis-luks 패키지가 클라이언트에 설치됩니다.
  • clevis luks list,clevis luks report, clevis luks regen 은 RHEL 8.2에서 도입되었습니다.

프로세스

  1. /var/db/tang 키 데이터베이스 디렉터리의 모든 키 이름을 앞에 . 로 바꿔서 광고에서 숨길 수 있습니다. 다음 예제의 파일 이름은 Tang 서버의 키 데이터베이스 디렉터리에 있는 고유한 파일 이름과 다릅니다.

    # cd /var/db/tang
    # ls -l
    -rw-r--r--. 1 root root 349 Feb  7 14:55 UV6dqXSwe1bRKG3KbJmdiR020hY.jwk
    -rw-r--r--. 1 root root 354 Feb  7 14:55 y9hxLTQSiSB5jSEGWnjhY8fDTJU.jwk
    # mv UV6dqXSwe1bRKG3KbJmdiR020hY.jwk .UV6dqXSwe1bRKG3KbJmdiR020hY.jwk
    # mv y9hxLTQSiSB5jSEGWnjhY8fDTJU.jwk .y9hxLTQSiSB5jSEGWnjhY8fDTJU.jwk
    Copy to Clipboard Toggle word wrap
  2. 이름이 변경되었고, 따라서 Tang 서버 광고에서 모든 키를 숨겼는지 확인합니다.

    # ls -l
    total 0
    Copy to Clipboard Toggle word wrap
  3. Tang 서버의 /var/db/tang에서 /usr/libexec/tangd-keygen 명령을 사용하여 새 키를 생성합니다.

    # /usr/libexec/tangd-keygen /var/db/tang
    # ls /var/db/tang
    3ZWS6-cDrCG61UPJS2BMmPU4I54.jwk zyLuX6hijUy_PSeUEFDi7hi38.jwk
    Copy to Clipboard Toggle word wrap
  4. Tang 서버가 새 키 쌍에서 서명 키를 알리는지 확인합니다. 예를 들면 다음과 같습니다.

    # tang-show-keys 7500
    3ZWS6-cDrCG61UPJS2BMmPU4I54
    Copy to Clipboard Toggle word wrap
  5. EgressIP 클라이언트에서 clevis luks report 명령을 사용하여 Tang 서버에서 광고하는 키가 동일하게 남아 있는지 확인합니다. 다음과 같이 clevis luks list 명령을 사용하여 관련 바인딩으로 슬롯을 식별할 수 있습니다.

    # clevis luks list -d /dev/sda2
    1: tang '{"url":"http://tang.srv"}'
    # clevis luks report -d /dev/sda2 -s 1
    ...
    Report detected that some keys were rotated.
    Do you want to regenerate luks metadata with "clevis luks regen -d /dev/sda2 -s 1"? [ynYN]
    Copy to Clipboard Toggle word wrap
  6. 새 키에 대해 LUKS 메타데이터를 다시 생성하려면 이전 명령의 프롬프트에 y 를 누르거나 clevis luks regen 명령을 사용합니다.

    # clevis luks regen -d /dev/sda2 -s 1
    Copy to Clipboard Toggle word wrap
  7. 모든 이전 클라이언트가 새 키를 사용하도록 확신하면 Tang 서버에서 이전 키를 제거할 수 있습니다. 예를 들면 다음과 같습니다.

    # cd /var/db/tang
    # rm .*.jwk
    Copy to Clipboard Toggle word wrap
주의

클라이언트가 계속 사용하는 동안 이전 키를 제거하면 데이터 손실이 발생할 수 있습니다. 실수로 이러한 키를 제거하는 경우 클라이언트에서 clevis luks regen 명령을 사용하고 수동으로 LUKS 암호를 제공하십시오.

18.14.4. 웹 콘솔에서 Tang 키를 사용하여 자동 잠금 해제 구성

Tang 서버에서 제공하는 키를 사용하여 LUKS 암호화 스토리지 장치의 자동 잠금 해제를 구성할 수 있습니다.

사전 요구 사항

  • RHEL 8 웹 콘솔을 설치했습니다.
  • cockpit 서비스를 활성화했습니다.
  • 사용자 계정이 웹 콘솔에 로그인할 수 있습니다.

    자세한 내용은 웹 콘솔 설치 및 활성화를 참조하십시오.

  • cockpit-storagedclevis-luks 패키지가 시스템에 설치됩니다.
  • cockpit.socket 서비스는 포트 9090에서 실행됩니다.
  • Tang 서버를 사용할 수 있습니다. 자세한 내용은 강제 모드에서 SELinux를 사용하여 Tang 서버 배포를 참조하십시오.
  • sudo 를 사용하여 관리 명령을 입력할 수 있는 루트 권한 또는 권한이 있습니다.

프로세스

  1. RHEL 8 웹 콘솔에 로그인합니다.

    자세한 내용은 웹 콘솔에 로그인 을 참조하십시오.

  2. 관리 액세스로 전환하고 자격 증명을 제공하고 스토리지를 클릭합니다. 스토리지 테이블에서 잠금 해제를 위해 추가할 암호화된 볼륨이 포함된 디스크를 클릭합니다.
  3. 선택한 디스크에 대한 세부 정보가 있는 다음 페이지에서 Keys 섹션에서 + 를 클릭하여 Tang 키를 추가합니다.

  4. Tang 키 서버키 소스로 선택하고 Tang 서버의 주소 및 LUKS 암호화 장치를 잠금 해제하는 암호를 제공합니다. 추가를 클릭하여 확인합니다.

    다음 대화 상자 창에서 키 해시가 일치하는지 확인하는 명령을 제공합니다.

  5. Tang 서버의 터미널에서 tang-show-keys 명령을 사용하여 비교할 키 해시를 표시합니다. 이 예에서 Tang 서버는 포트 7500에서 실행되고 있습니다.

    # tang-show-keys 7500
    x100_1k6GPiDOaMlL3WbpCjHOy9ul1bSfdhI3M08wO0
    Copy to Clipboard Toggle word wrap
  6. 웹 콘솔의 키 해시와 이전에 나열된 명령의 출력에서와 이전에 나열된 명령의 출력에서 신뢰 키를 클릭하면 신뢰 키를 클릭합니다.

  7. RHEL 8.8 이상에서는 암호화된 루트 파일 시스템 및 Tang 서버를 선택한 후 커널 명령줄에 rd.neednet=1 매개변수 추가를 건너뛰고 clevis-dracut 패키지를 설치하고 초기 RAM 디스크(Initrd )를 다시 생성할 수 있습니다. 루트가 아닌 파일 시스템의 경우 웹 콘솔에서 remote-cryptsetup.targetclevis-luks-akspass.path systemd 장치를 활성화하고 clevis-systemd 패키지를 설치하고 _netdev 매개 변수를 fstabcrypttab 구성 파일에 추가합니다.

검증

  1. 새로 추가된 Tang 키가 Keyserver 유형의 Keys 섹션에 나열되어 있는지 확인합니다.

  2. 초기 부팅에 바인딩을 사용할 수 있는지 확인합니다. 예를 들면 다음과 같습니다.

    # 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
    …
    Copy to Clipboard Toggle word wrap

18.14.5. 기본 Clevis 및 TPM2 암호화-클라이언트 작업

Clevis 프레임워크는 일반 텍스트 파일을 암호화하고 JSON 웹 암호화(JWE) 형식과 LUKS 암호화 블록 장치의 암호화 텍스트를 모두 해독할 수 있습니다. Clevis 클라이언트는 암호화 작업을 위해 Tang 네트워크 서버 또는 신뢰할 수 있는 Platform Module 2.0(TPM 2.0) 칩을 사용할 수 있습니다.

다음 명령은 일반 텍스트 파일을 포함하는 예제의 Clevis에서 제공하는 기본 기능을 보여줍니다. Clevis 또는 Clevis+TPM 배포 문제를 해결하는 데도 사용할 수 있습니다.

Tang 서버에 바인딩된 암호화 클라이언트

  • Clevis 암호화 클라이언트가 Tang 서버에 바인딩되는지 확인하려면 clevis encrypt tang 하위 명령을 사용합니다.

    $ clevis encrypt tang '{"url":"http://tang.srv:port"}' < input-plain.txt > secret.jwe
    The advertisement contains the following signing keys:
    
    _OsIk0T-E2l6qjfdDiwVmidoZjA
    
    Do you wish to trust these keys? [ynYN] y
    Copy to Clipboard Toggle word wrap

    위 예제의 http://tang.srv:port URL을 tang 이 설치된 서버의 URL과 일치하도록 변경합니다. secret.jwe 출력 파일에는 JWE 형식의 암호화된 암호 텍스트가 포함되어 있습니다. 이 암호화 방식 텍스트는 input-plain.txt 입력 파일에서 읽습니다.

    또는 구성에 SSH 액세스 권한이 없는 Tang 서버와의 비대화형 통신이 필요한 경우 광고를 다운로드하여 파일에 저장할 수 있습니다.

    $ curl -sfg http://tang.srv:port/adv -o adv.jws
    Copy to Clipboard Toggle word wrap

    파일 또는 메시지의 암호화와 같은 다음 작업에 대해 adv.jws 파일의 광고를 사용합니다.

    $ echo 'hello' | clevis encrypt tang '{"url":"http://tang.srv:port","adv":"adv.jws"}'
    Copy to Clipboard Toggle word wrap
  • 데이터의 암호를 해독하려면 clevis decrypt 명령을 사용하여 JWE(암호화 텍스트)를 제공합니다.

    $ clevis decrypt < secret.jwe > output-plain.txt
    Copy to Clipboard Toggle word wrap

TPM 2.0을 사용하는 암호화 클라이언트

  • TPM 2.0 칩을 사용하여 암호화하려면 JSON 구성 개체 형식의 유일한 인수와 함께 clevis encrypt tpm2 하위 명령을 사용하십시오.

    $ clevis encrypt tpm2 '{}' < input-plain.txt > secret.jwe
    Copy to Clipboard Toggle word wrap

    다른 계층 구조, 해시 및 키 알고리즘을 선택하려면 구성 속성을 지정합니다.

    $ clevis encrypt tpm2 '{"hash":"sha256","key":"rsa"}' < input-plain.txt > secret.jwe
    Copy to Clipboard Toggle word wrap
  • 데이터의 암호를 해독하려면 JSON 웹 암호화(JWE) 형식으로 암호화 텍스트를 제공합니다.

    $ clevis decrypt < secret.jwe > output-plain.txt
    Copy to Clipboard Toggle word wrap

또한 핀은 PCR(Platform Configuration Registers) 상태에 대한 데이터 잠금을 지원합니다. 이렇게 하면 PCR 해시 값이 봉인할 때 사용된 정책과 일치하는 경우에만 데이터를 봉인 해제할 수 있습니다.

예를 들어 SHA-256 뱅크의 인덱스 0과 7로 PCR에 데이터를 봉인하려면 다음과 같이 하십시오.

$ clevis encrypt tpm2 '{"pcr_bank":"sha256","pcr_ids":"0,7"}' < input-plain.txt > secret.jwe
Copy to Clipboard Toggle word wrap
주의

PCR의 해시는 다시 작성할 수 있으며 더 이상 암호화된 볼륨을 잠금 해제할 수 없습니다. 따라서 PCR의 값이 변경된 경우에도 암호화된 볼륨을 수동으로 잠금 해제할 수 있는 강력한 암호를 추가합니다.

shim-x64 패키지를 업그레이드한 후 시스템이 암호화된 볼륨을 자동으로 잠금 해제할 수 없는 경우 Red Hat Knowledgebase 솔루션 Clevis TPM2가 다시 시작한 후 LUKS 장치의 암호를 해독하지 않음을 참조하십시오.

Clevis 프레임워크를 사용하면 선택한 Tang 서버를 사용할 수 있을 때 LUKS 암호화 볼륨의 자동 잠금 해제를 위해 클라이언트를 구성할 수 있습니다. 그러면 NBDE(Network-Bound Disk Encryption) 배포가 생성됩니다.

사전 요구 사항

  • Tang 서버가 실행 중이고 사용 가능합니다.

프로세스

  1. 기존 LUKS 암호화된 볼륨의 잠금을 자동으로 해제하려면 clevis-luks 하위 패키지를 설치합니다.

    # yum install clevis-luks
    Copy to Clipboard Toggle word wrap
  2. PBD의 LUKS 암호화 볼륨을 식별합니다. 다음 예에서 블록 장치는 /dev/sda2 라고 합니다.

    # lsblk
    NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    sda                                             8:0    0    12G  0 disk
    ├─sda1                                          8:1    0     1G  0 part  /boot
    └─sda2                                          8:2    0    11G  0 part
      └─luks-40e20552-2ade-4954-9d56-565aa7994fb6 253:0    0    11G  0 crypt
        ├─rhel-root                               253:0    0   9.8G  0 lvm   /
        └─rhel-swap                               253:1    0   1.2G  0 lvm   [SWAP]
    Copy to Clipboard Toggle word wrap
  3. clevis luks bind 명령을 사용하여 볼륨을 Tang 서버에 바인딩합니다.

    # clevis luks bind -d /dev/sda2 tang '{"url":"http://tang.srv"}'
    The advertisement contains the following signing keys:
    
    _OsIk0T-E2l6qjfdDiwVmidoZjA
    
    Do you wish to trust these keys? [ynYN] y
    You are about to initialize a LUKS device for metadata storage.
    Attempting to initialize it may result in data loss if data was
    already written into the LUKS header gap in a different format.
    A backup is advised before initialization is performed.
    
    Do you wish to initialize /dev/sda2? [yn] y
    Enter existing LUKS password:
    Copy to Clipboard Toggle word wrap

    이 명령은 다음 네 가지 단계를 수행합니다.

    1. LUKS 마스터 키와 동일한 엔트로피를 사용하여 새 키를 만듭니다.
    2. Clevis를 사용하여 새 키를 암호화합니다.
    3. LUKS2 헤더에 Clevis JWE 오브젝트를 저장하거나 기본이 아닌 LUKS1 헤더가 사용되는 경우 LUKSMeta를 사용합니다.
    4. LUKS에 사용할 새 키를 활성화합니다.
    참고

    바인딩 절차에서는 사용 가능한 LUKS 암호 슬롯이 하나 이상 있다고 가정합니다. clevis luks bind 명령은 슬롯 중 하나를 사용합니다.

    이제 Clevis 정책과 함께 기존 암호를 사용하여 볼륨을 잠금 해제할 수 있습니다.

  4. 초기 부팅 시스템이 디스크 바인딩을 처리할 수 있도록 하려면 이미 설치된 시스템에서 dracut 툴을 사용합니다. RHEL에서 Clevis는 호스트별 구성 옵션 없이 일반 initrd (초기 RAM 디스크)를 생성하고 커널 명령줄에 rd.neednet=1 과 같은 매개변수를 자동으로 추가하지 않습니다. 구성이 초기 부팅 중에 네트워크가 필요한 Tang 핀을 사용하는 경우 --hostonly-cmdline 인수를 사용하고 dracut 은 Tang 바인딩을 감지할 때 rd.neednet=1 을 추가합니다.

    1. clevis-dracut 패키지를 설치합니다.

      # yum install clevis-dracut
      Copy to Clipboard Toggle word wrap
    2. 초기 RAM 디스크를 다시 생성합니다.

      # dracut -fv --regenerate-all --hostonly-cmdline
      Copy to Clipboard Toggle word wrap
    3. 또는 /etc/dracut.conf.d/ 디렉터리에 .conf 파일을 생성하고 hostonly_cmdline=yes 옵션을 파일에 추가합니다. 그런 다음 --hostonly-cmdline 없이 dracut 을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

      # echo "hostonly_cmdline=yes" > /etc/dracut.conf.d/clevis.conf
      # dracut -fv --regenerate-all
      Copy to Clipboard Toggle word wrap
    4. Clevis가 설치된 시스템에서 grubby 툴을 사용하여 초기 부팅 시 Tang 핀의 네트워킹을 사용할 수 있는지 확인할 수도 있습니다.

      # grubby --update-kernel=ALL --args="rd.neednet=1"
      Copy to Clipboard Toggle word wrap

검증

  1. Clevis JWE 오브젝트가 LUKS 헤더에 성공적으로 배치되었는지 확인하고 clevis luks list 명령을 사용합니다.

    # clevis luks list -d /dev/sda2
    1: tang '{"url":"http://tang.srv:port"}'
    Copy to Clipboard Toggle word wrap
  2. 초기 부팅에 바인딩을 사용할 수 있는지 확인합니다. 예를 들면 다음과 같습니다.

    # 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
    …
    Copy to Clipboard Toggle word wrap

18.14.7. 고정 IP 구성을 사용하여 NBDE 클라이언트 구성

고정 IP 구성(DHCP 제외)이 있는 클라이언트에 대해 NBDE를 사용하려면 네트워크 구성을 dracut 툴에 수동으로 전달해야 합니다.

사전 요구 사항

프로세스

  1. 정적 네트워크 구성을 dracut 명령에서 kernel-cmdline 옵션 값으로 제공할 수 있습니다. 예를 들면 다음과 같습니다.

    # dracut -fv --regenerate-all --kernel-cmdline "ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100"
    Copy to Clipboard Toggle word wrap
  2. 또는 정적 네트워크 정보를 사용하여 /etc/dracut.conf.d/ 디렉터리에 .conf 파일을 생성한 다음 초기 RAM 디스크 이미지를 다시 생성합니다.

    # cat /etc/dracut.conf.d/static_ip.conf
    kernel_cmdline="ip=192.0.2.10::192.0.2.1:255.255.255.0::ens3:none nameserver=192.0.2.100"
    # dracut -fv --regenerate-all
    Copy to Clipboard Toggle word wrap

18.14.8. TPM 2.0 정책을 사용하여 LUKS 암호화 볼륨 수동 등록 구성

신뢰할 수 있는 플랫폼 모듈 2.0(TPM 2.0) 정책을 사용하여 LUKS 암호화 볼륨의 잠금을 구성할 수 있습니다.

사전 요구 사항

  • 액세스 가능한 TPM 2.0 호환 장치.
  • 64비트 Intel 또는 64비트 AMD 아키텍처가 있는 시스템.

프로세스

  1. 기존 LUKS 암호화된 볼륨의 잠금을 자동으로 해제하려면 clevis-luks 하위 패키지를 설치합니다.

    # yum install clevis-luks
    Copy to Clipboard Toggle word wrap
  2. PBD의 LUKS 암호화 볼륨을 식별합니다. 다음 예에서 블록 장치는 /dev/sda2 라고 합니다.

    # lsblk
    NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    sda                                             8:0    0    12G  0 disk
    ├─sda1                                          8:1    0     1G  0 part  /boot
    └─sda2                                          8:2    0    11G  0 part
      └─luks-40e20552-2ade-4954-9d56-565aa7994fb6 253:0    0    11G  0 crypt
        ├─rhel-root                               253:0    0   9.8G  0 lvm   /
        └─rhel-swap                               253:1    0   1.2G  0 lvm   [SWAP]
    Copy to Clipboard Toggle word wrap
  3. clevis luks bind 명령을 사용하여 TPM 2.0 장치에 볼륨을 바인딩합니다. 예를 들면 다음과 같습니다.

    # clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa"}'
    ...
    Do you wish to initialize /dev/sda2? [yn] y
    Enter existing LUKS password:
    Copy to Clipboard Toggle word wrap

    이 명령은 다음 네 가지 단계를 수행합니다.

    1. LUKS 마스터 키와 동일한 엔트로피를 사용하여 새 키를 만듭니다.
    2. Clevis를 사용하여 새 키를 암호화합니다.
    3. LUKS2 헤더에 Clevis JWE 오브젝트를 저장하거나 기본이 아닌 LUKS1 헤더가 사용되는 경우 LUKSMeta를 사용합니다.
    4. LUKS에 사용할 새 키를 활성화합니다.

      참고

      바인딩 절차에서는 사용 가능한 LUKS 암호 슬롯이 하나 이상 있다고 가정합니다. clevis luks bind 명령은 슬롯 중 하나를 사용합니다.

      또는 데이터를 특정 플랫폼 구성 등록 (PCR) 상태로 전환하려는 경우 pcr_bankpcr_ids 값을 clevis luks bind 명령에 추가합니다.

      # clevis luks bind -d /dev/sda2 tpm2 '{"hash":"sha256","key":"rsa","pcr_bank":"sha256","pcr_ids":"0,1"}'
      Copy to Clipboard Toggle word wrap
      중요

      PCR 해시 값이 밀봉 및 해시를 다시 작성할 때 사용되는 정책과 일치하는 경우에만 데이터가 음소거될 수 있으므로 PCR의 값이 변경될 때 암호화된 볼륨을 수동으로 잠금 해제할 수 있는 강력한 암호를 추가합니다.

      shim-x64 패키지를 업그레이드한 후 시스템이 암호화된 볼륨을 자동으로 잠금 해제할 수 없는 경우 Red Hat Knowledgebase 솔루션 Clevis TPM2가 다시 시작한 후 LUKS 장치의 암호를 해독하지 않음을 참조하십시오.

  4. 이제 Clevis 정책과 함께 기존 암호를 사용하여 볼륨을 잠금 해제할 수 있습니다.
  5. 초기 부팅 시스템이 디스크 바인딩을 처리할 수 있도록 하려면 이미 설치된 시스템에서 dracut 툴을 사용합니다.

    # yum install clevis-dracut
    # dracut -fv --regenerate-all
    Copy to Clipboard Toggle word wrap

검증

  1. Clevis JWE 오브젝트가 LUKS 헤더에 성공적으로 배치되었는지 확인하려면 clevis luks list 명령을 사용합니다.

    # clevis luks list -d /dev/sda2
    1: tpm2 '{"hash":"sha256","key":"rsa"}'
    Copy to Clipboard Toggle word wrap

18.14.9. LUKS 암호화된 볼륨에서 Clevis 핀 제거 수동으로 제거

clevis luks bind 명령으로 생성된 메타데이터를 수동으로 제거하고 Clevis에서 추가한 암호가 포함된 키 슬롯을 삭제하려면 다음 절차를 사용하십시오.

중요

LUKS 암호화 볼륨에서 Clevis 핀을 제거하는 권장 방법은 clevis luks unbind 명령을 사용하는 것입니다. clevis luks unbind를 사용하는 제거 절차는 하나의 단계로 구성되며 LUKS1 및 LUKS2 볼륨 모두에 대해 작동합니다. 다음 예제 명령은 바인딩 단계에서 생성한 메타데이터를 제거하고 /dev/sda2 장치의 키 슬롯 1 을 지웁니다.

# clevis luks unbind -d /dev/sda2 -s 1
Copy to Clipboard Toggle word wrap

사전 요구 사항

  • Clevis 바인딩이 있는 LUKS 암호화 볼륨.

프로세스

  1. 볼륨(예: /dev/sda2 )이 암호화된 LUKS 버전을 확인하고 Clevis에 바인딩된 슬롯과 토큰을 식별합니다.

    # cryptsetup luksDump /dev/sda2
    LUKS header information
    Version:        2
    ...
    Keyslots:
      0: luks2
    ...
    1: luks2
          Key:        512 bits
          Priority:   normal
          Cipher:     aes-xts-plain64
    ...
          Tokens:
            0: clevis
                  Keyslot:  1
    ...
    Copy to Clipboard Toggle word wrap

    이전 예에서 Clevis 토큰은 0 으로 식별되고 연결된 키 슬롯은 1 입니다.

  2. LUKS2 암호화의 경우 토큰을 제거합니다.

    # cryptsetup token remove --token-id 0 /dev/sda2
    Copy to Clipboard Toggle word wrap
  3. 장치가 LUKS1에 의해 암호화된 경우 Version으로 표시됩니다. 1 string in the output of the cryptsetup luksDump 명령 출력의 문자열 luksmeta wipe 명령을 사용하여 다음 추가 단계를 수행합니다.

    # luksmeta wipe -d /dev/sda2 -s 1
    Copy to Clipboard Toggle word wrap
  4. Clevis 암호가 포함된 키 슬롯을 지웁니다.

    # cryptsetup luksKillSlot /dev/sda2 1
    Copy to Clipboard Toggle word wrap

18.14.10. Kickstart를 사용하여 LUKS 암호화 볼륨 자동 등록 구성

이 절차의 단계에 따라 LUKS 암호화 볼륨 등록에 Clevis를 사용하는 자동화된 설치 프로세스를 구성합니다.

프로세스

  1. Kickstart에 임시 암호로 /boot 이외의 모든 마운트 지점에 대해 LUKS 암호화가 활성화되도록 디스크를 파티션하도록 지시합니다. 암호는 이 등록 프로세스 단계에서 임시적입니다.

    part /boot --fstype="xfs" --ondisk=vda --size=256
    part / --fstype="xfs" --ondisk=vda --grow --encrypted --passphrase=temppass
    Copy to Clipboard Toggle word wrap

    예를 들어 OSPP 호환 시스템에는 더 복잡한 구성이 필요합니다.

    part /boot --fstype="xfs" --ondisk=vda --size=256
    part / --fstype="xfs" --ondisk=vda --size=2048 --encrypted --passphrase=temppass
    part /var --fstype="xfs" --ondisk=vda --size=1024 --encrypted --passphrase=temppass
    part /tmp --fstype="xfs" --ondisk=vda --size=1024 --encrypted --passphrase=temppass
    part /home --fstype="xfs" --ondisk=vda --size=2048 --grow --encrypted --passphrase=temppass
    part /var/log --fstype="xfs" --ondisk=vda --size=1024 --encrypted --passphrase=temppass
    part /var/log/audit --fstype="xfs" --ondisk=vda --size=1024 --encrypted --passphrase=temppass
    Copy to Clipboard Toggle word wrap
  2. %packages 섹션에 나열하여 관련 Clevis 패키지를 설치합니다.

    %packages
    clevis-dracut
    clevis-luks
    clevis-systemd
    %end
    Copy to Clipboard Toggle word wrap
  3. 선택 사항: 필요한 경우 암호화된 볼륨을 수동으로 잠금 해제할 수 있도록 임시 암호를 제거하기 전에 강력한 암호를 추가합니다. 자세한 내용은 Red Hat Knowledgebase 솔루션에서 기존 LUKS 장치에 암호, 키 또는 키 파일을 추가하는 방법을 참조하십시오.
  4. %post 섹션에서 바인딩을 수행하기 위해 clevis luks bind를 호출합니다. 임시 암호를 삭제합니다.

    %post
    clevis luks bind -y -k - -d /dev/vda2 \
    tang '{"url":"http://tang.srv"}' <<< "temppass"
    cryptsetup luksRemoveKey /dev/vda2 <<< "temppass"
    dracut -fv --regenerate-all
    %end
    Copy to Clipboard Toggle word wrap

    구성이 초기 부팅 중에 네트워크가 필요한 Tang 핀을 사용하거나 고정 IP 구성으로 NBDE 클라이언트를 사용하는 경우 LUKS 암호화 볼륨 수동 등록 구성에 설명된 대로 dracut 명령을 수정해야 합니다.

    RHEL 8.3에서 clevis luks bind 명령의 -y 옵션을 사용할 수 있습니다. RHEL 8.2 이상에서는 -yclevis luks bind 명령에서 -f 로 바꾸고 Tang 서버에서 광고를 다운로드합니다.

    %post
    curl -sfg http://tang.srv/adv -o adv.jws
    clevis luks bind -f -k - -d /dev/vda2 \
    tang '{"url":"http://tang.srv","adv":"adv.jws"}' <<< "temppass"
    cryptsetup luksRemoveKey /dev/vda2 <<< "temppass"
    dracut -fv --regenerate-all
    %end
    Copy to Clipboard Toggle word wrap
    주의

    cryptsetup luksRemoveKey 명령은 적용한 LUKS2 장치의 추가 관리를 방지합니다. LUKS1 장치에 대해서만 dmsetup 명령을 사용하여 제거된 마스터 키를 복구할 수 있습니다.

Tang 서버 대신 TPM 2.0 정책을 사용할 때 유사한 절차를 사용할 수 있습니다.

18.14.11. LUKS 암호화 이동식 스토리지 장치의 자동 잠금 해제 구성

LUKS 암호화 USB 스토리지 장치의 자동 잠금 해제 프로세스를 설정할 수 있습니다.

프로세스

  1. USB 드라이브와 같은 LUKS로 암호화된 이동식 스토리지 장치의 잠금을 자동으로 해제하려면 clevis-udisks2 패키지를 설치합니다.

    # yum install clevis-udisks2
    Copy to Clipboard Toggle word wrap
  2. 시스템을 재부팅한 다음 LUKS 암호화 볼륨 수동 등록 구성에 설명된 대로 clevis luks bind 명령을 사용하여 바인딩 단계를 수행합니다. 예를 들면 다음과 같습니다.

    # clevis luks bind -d /dev/sdb1 tang '{"url":"http://tang.srv"}'
    Copy to Clipboard Toggle word wrap
  3. 이제 GNOME 데스크탑 세션에서 LUKS로 암호화된 이동식 장치의 잠금을 자동으로 해제할 수 있습니다. Clevis 정책에 바인딩된 장치는 clevis luks unlock 명령으로 잠금 해제할 수도 있습니다.

    # clevis luks unlock -d /dev/sdb1
    Copy to Clipboard Toggle word wrap

Tang 서버 대신 TPM 2.0 정책을 사용할 때 유사한 절차를 사용할 수 있습니다.

18.14.12. 고가용성 NBDE 시스템 배포

Tang은 고가용성 배포를 구축하기 위한 두 가지 방법을 제공합니다.

클라이언트 중복(권장)
클라이언트를 여러 Tang 서버에 바인딩할 수 있는 기능으로 구성해야 합니다. 이 설정에서 각 Tang 서버에는 자체 키가 있으며 클라이언트는 이러한 서버의 하위 집합에 연결하여 암호를 해독할 수 있습니다. Clevis는 이미 sss 플러그인을 통해 이 워크플로를 지원합니다. Red Hat은 고가용성 배포를 위해 이 방법을 권장합니다.
키 공유
중복을 위해 두 개 이상의 Tang 인스턴스를 배포할 수 있습니다. 두 번째 또는 후속 인스턴스를 설정하려면 tang 패키지를 설치하고 SSH 를 통해 rsync 를 사용하여 키 디렉터리를 새 호스트에 복사합니다. 키를 공유하면 주요 손상의 위험이 증가하고 추가 자동화 인프라가 필요하므로 Red Hat은 이 방법을 권장하지 않습니다.
Shamir의 Secret Sharing을 사용한 고가용성 NBDE

Shamir's SSS(Secret Sharing)는 비밀을 몇 가지 고유한 부분으로 나누는 암호화 체계입니다. 비밀을 재구축하려면 다음과 같은 여러 부분이 필요합니다. 숫자는 임계값이라고 하며 SSS는 임계값 체계라고도 합니다.

Clevis는 SSS 구현을 제공합니다. 키를 만들어 여러 개의 조각으로 나눕니다. 각 조각은 SSS도 반복적으로 포함하여 다른 고정을 사용하여 암호화됩니다. 또한 t 임계값을 정의합니다. NBDE 배포에서 최소한 t 조각을 암호 해독하면 암호화 키를 복구하고 암호 해독 프로세스가 성공합니다. Clevis가 임계값에 지정된 것보다 적은 수의 부분을 감지하면 오류 메시지를 출력합니다.

예 1: 두 개의 Tang 서버로 구성된 중복

다음 명령은 두 개의 Tang 서버 중 하나 이상을 사용할 수 있는 경우 LUKS 암호화 장치를 암호 해독합니다.

# clevis luks bind -d /dev/sda1 sss '{"t":1,"pins":{"tang":[{"url":"http://tang1.srv"},{"url":"http://tang2.srv"}]}}'
Copy to Clipboard Toggle word wrap

이전 명령은 다음 구성 체계를 사용했습니다.

{
    "t":1,
    "pins":{
        "tang":[
            {
                "url":"http://tang1.srv"
            },
            {
                "url":"http://tang2.srv"
            }
        ]
    }
}
Copy to Clipboard Toggle word wrap

이 구성에서 SSS 임계값 t1 로 설정되고 clevis luks bind 명령이 나열된 두 개의 tang 서버에서 하나 이상 사용할 수 있는 경우 시크릿을 성공적으로 재구축합니다.

예 2: Tang 서버 및 TPM 장치의 공유 비밀

다음 명령은 tang 서버와 tpm2 장치를 모두 사용할 수 있는 경우 LUKS 암호화 장치를 성공적으로 암호 해독합니다.

# clevis luks bind -d /dev/sda1 sss '{"t":2,"pins":{"tang":[{"url":"http://tang1.srv"}], "tpm2": {"pcr_ids":"0,7"}}}'
Copy to Clipboard Toggle word wrap

SSS 임계값 't'가 '2'로 설정된 구성 스키마가 이제 다음과 같습니다.

{
    "t":2,
    "pins":{
        "tang":[
            {
                "url":"http://tang1.srv"
            }
        ],
        "tpm2":{
            "pcr_ids":"0,7"
        }
    }
}
Copy to Clipboard Toggle word wrap

18.14.13. NBDE 네트워크에서 가상 머신 배포

clevis luks bind 명령은 LUKS 마스터 키를 변경하지 않습니다. 즉, 가상 머신 또는 클라우드 환경에서 사용하기 위해 LUKS로 암호화된 이미지를 생성하면 이 이미지를 실행하는 모든 인스턴스가 마스터 키를 공유합니다. 이는 매우 안전하지 않으며 항상 피해야 합니다.

이는 Clevis의 제한 사항이 아니라 LUKS의 설계 원칙입니다. 시나리오에서 클라우드에서 암호화된 루트 볼륨을 필요로 하는 경우 클라우드에서 Red Hat Enterprise Linux의 각 인스턴스에 대해 설치 프로세스(일반적으로 Kickstart 사용)를 수행합니다. LUKS 마스터 키를 공유하지 않고는 이미지를 공유할 수 없습니다.

가상화 환경에서의 자동 잠금 해제를 배포하려면 lorax 또는 virt-install 과 같은 시스템을 Kickstart 파일과 함께 사용하십시오( Kickstart를 사용하여 LUKS 암호화 볼륨 자동 등록 구성 참조) 또는 다른 자동화된 프로비저닝 툴을 사용하여각 암호화된 VM에 고유한 마스터 키가 있는지 확인합니다.

클라우드 환경에 자동으로 등록 가능한 암호화된 이미지를 배포하면 고유한 도전 과제를 제공할 수 있습니다. 다른 가상화 환경과 마찬가지로 LUKS 마스터 키 공유를 피하려면 단일 이미지에서 시작된 인스턴스 수를 줄이는 것이 좋습니다.

따라서 공용 리포지토리에서 공유되지 않고 제한된 인스턴스 배포를 위한 기반을 제공하는 사용자 지정 이미지를 생성하는 것이 좋습니다. 생성할 인스턴스 수는 배포의 보안 정책에 따라 정의하고 LUKS 마스터 키 공격 벡터와 관련된 위험 허용 오차를 기반으로 정의해야 합니다.

LUKS 지원 자동 배포를 빌드하려면 이미지 빌드 프로세스 중에 마스터 키 고유성을 보장하기 위해 Kickstart 파일과 함께 Lorax 또는 virt-install과 같은 시스템을 사용해야 합니다.

클라우드 환경에서는 여기에서 고려할 두 개의 Tang 서버 배포 옵션을 사용할 수 있습니다. 먼저, Tang 서버는 클라우드 환경 자체 내에 배포할 수 있습니다. 둘째, Tang 서버는 두 인프라 간에 VPN 링크를 사용하여 독립적인 인프라에 클라우드 외부에 배포할 수 있습니다.

기본적으로 클라우드에 Tang을 배포하면 쉽게 배포할 수 있습니다. 그러나 인프라를 다른 시스템의 암호화 텍스트의 데이터 지속성 계층과 공유하는 경우 Tang 서버의 개인 키와 Clevis 메타데이터가 동일한 물리적 디스크에 저장할 수 있습니다. 이 물리적 디스크에 액세스하면 암호 텍스트 데이터가 완전히 손상될 수 있습니다.

중요

항상 데이터가 저장된 위치와 Tang이 실행 중인 시스템을 물리적으로 분리합니다. 클라우드와 Tang 서버 간의 이 분리는 Tang 서버의 개인 키를 실수로 Clevis 메타데이터와 결합할 수 없도록 합니다. 클라우드 인프라가 위험할 경우 Tang 서버의 로컬 제어도 제공합니다.

18.14.15. Tang을 컨테이너로 배포

tang 컨테이너 이미지는 OpenShift Container Platform (OCP) 클러스터 또는 별도의 가상 시스템에서 실행되는 Clevis 클라이언트에 대해 Tang-server 암호 해독 기능을 제공합니다.

사전 요구 사항

  • podman 패키지 및 해당 종속성은 시스템에 설치됩니다.
  • podman login registry.redhat.io 명령을 사용하여 registry.redhat.io 컨테이너 카탈로그에 로그인했습니다. 자세한 내용은 Red Hat Container Registry Authentication 을 참조하십시오.
  • Clevis 클라이언트는 Tang 서버를 사용하여 자동으로 잠금 해제하려는 LUKS 암호화된 볼륨이 포함된 시스템에 설치됩니다.

절차

  1. registry.redhat.io 레지스트리에서 tang 컨테이너 이미지를 가져옵니다.

    # podman pull registry.redhat.io/rhel8/tang
    Copy to Clipboard Toggle word wrap
  2. 컨테이너를 실행하고 포트를 지정하고 Tang 키의 경로를 지정합니다. 이전 예제에서는 tang 컨테이너를 실행하고 포트 7500 을 지정하고 /var/db/tang 디렉터리의 Tang 키의 경로를 나타냅니다.

    # podman run -d -p 7500:7500 -v tang-keys:/var/db/tang --name tang registry.redhat.io/rhel8/tang
    Copy to Clipboard Toggle word wrap

    Tang은 기본적으로 포트 80을 사용하지만 Apache HTTP 서버와 같은 다른 서비스와 충돌할 수 있습니다.

  3. 선택 사항: 보안 강화를 위해 Tang 키를 주기적으로 순환합니다. 다음과 같이 tangd-rotate-keys 스크립트를 사용할 수 있습니다.

    # podman run --rm -v tang-keys:/var/db/tang registry.redhat.io/rhel8/tang tangd-rotate-keys -v -d /var/db/tang
    Rotated key 'rZAMKAseaXBe0rcKXL1hCCIq-DY.jwk' -> .'rZAMKAseaXBe0rcKXL1hCCIq-DY.jwk'
    Rotated key 'x1AIpc6WmnCU-CabD8_4q18vDuw.jwk' -> .'x1AIpc6WmnCU-CabD8_4q18vDuw.jwk'
    Created new key GrMMX_WfdqomIU_4RyjpcdlXb0E.jwk
    Created new key _dTTfn17sZZqVAp80u3ygFDHtjk.jwk
    Keys rotated successfully.
    Copy to Clipboard Toggle word wrap

검증

  • Tang 서버에 의해 자동으로 잠금 해제하기 위해 LUKS 암호화 볼륨이 포함된 시스템에서 Clevis 클라이언트가 Tang을 사용하여 일반 텍스트 메시지를 암호화하고 암호를 해독할 수 있는지 확인합니다.

    # echo test | clevis encrypt tang '{"url":"http://localhost:7500"}' | clevis decrypt
    The advertisement contains the following signing keys:
    
    x1AIpc6WmnCU-CabD8_4q18vDuw
    
    Do you wish to trust these keys? [ynYN] y
    test
    Copy to Clipboard Toggle word wrap

    이전 예제 명령은 Tang 서버를 localhost URL에서 사용할 수 있고 포트 7500 을 통해 통신할 때 출력 끝에 테스트 문자열을 표시합니다.

18.14.16. RHEL 시스템 역할을 사용하여 NBDE 구성

Clevis 및 Tang을 사용하여 PBD(Policy-Based Decryption) 솔루션의 자동 배포를 위해 nbde_clientnbde_server RHEL 시스템 역할을 사용할 수 있습니다. rhel-system-roles 패키지에는 이러한 시스템 역할, 관련 예제 및 참조 문서가 포함되어 있습니다.

18.14.16.1. nbde_server RHEL 시스템 역할을 사용하여 여러 Tang 서버를 설정

nbde_server 시스템 역할을 사용하면 Tang 서버를 자동화된 디스크 암호화 솔루션의 일부로 배포하고 관리할 수 있습니다. 이 역할은 다음 기능을 지원합니다.

  • Tang 키 순환
  • Tang 키 배포 및 백업

사전 요구 사항

절차

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/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: redhat.rhel_system_roles.nbde_server
        vars:
          nbde_server_rotate_keys: yes
          nbde_server_manage_firewall: true
          nbde_server_manage_selinux: true
    Copy to Clipboard Toggle word wrap

    이 예제 플레이북은 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 파일을 참조하십시오.

  2. 플레이북 구문을 확인합니다.

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

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

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

검증

  • 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
    Copy to Clipboard Toggle word wrap

nbde_client 시스템 역할을 사용하면 자동화된 방식으로 여러 Clevis 클라이언트를 배포할 수 있습니다.

이 역할은 LUKS 암호화 볼륨을 하나 이상의 NBDE(Network-Bound) 서버 - Tang 서버에 바인딩할 수 있도록 지원합니다. 기존 볼륨 암호화를 암호로 보존하거나 제거할 수 있습니다. 암호를 제거한 후 NBDE만 사용하여 볼륨을 잠금 해제할 수 있습니다. 이 기능은 시스템을 프로비저닝한 후 제거해야 하는 임시 키 또는 암호를 사용하여 볼륨을 처음 암호화할 때 유용합니다.

암호와 키 파일을 둘 다 제공하면 이 역할은 먼저 제공한 정보를 사용합니다. 유효한 이러한 항목을 찾지 못하면 기존 바인딩에서 암호를 검색하려고 합니다.

정책 기반 암호 해독(Policy-Based Decryption)은 장치를 슬롯에 매핑하는 것으로 바인딩을 정의합니다. 즉, 동일한 장치에 대해 여러 바인딩을 가질 수 있습니다. 기본 슬롯은 슬롯 1입니다.

참고

nbde_client 시스템 역할은 Tang 바인딩만 지원합니다. 따라서 TPM2 바인딩에는 사용할 수 없습니다.

사전 요구 사항

  • 컨트롤 노드 및 관리형 노드를 준비했습니다.
  • 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
  • 관리 노드에 연결하는 데 사용하는 계정에는 sudo 권한이 있습니다.
  • LUKS를 사용하여 이미 암호화된 볼륨입니다.

절차

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/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: redhat.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
    Copy to Clipboard Toggle word wrap

    이 예제 플레이북은 두 개 이상의 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 파일을 참조하십시오.

  2. 플레이북 구문을 확인합니다.

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

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

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

검증

  1. 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/>"}'
    Copy to Clipboard Toggle word wrap
  2. 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
    …
    Copy to Clipboard Toggle word wrap

nbde_client RHEL 시스템 역할은 DHCP(Dynamic Host Configuration Protocol)가 있는 시나리오만 지원합니다. 고정 IP 구성이 있는 NBDE 클라이언트에서 네트워크 구성을 커널 부팅 매개변수로 전달해야 합니다.

일반적으로 관리자는 플레이북을 재사용하고 초기 부팅 중에 Ansible이 고정 IP 주소를 할당하는 각 호스트에 대해 개별 플레이북을 유지 관리하지 않습니다. 이 경우 플레이북에서 변수를 사용하고 외부 파일에 설정을 제공할 수 있습니다. 따라서 설정이 있는 하나의 플레이북과 하나의 파일만 필요합니다.

사전 요구 사항

  • 컨트롤 노드 및 관리형 노드를 준비했습니다.
  • 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
  • 관리 노드에 연결하는 데 사용하는 계정에는 sudo 권한이 있습니다.
  • LUKS를 사용하여 이미 암호화된 볼륨입니다.

절차

  1. 호스트의 네트워크 설정으로 파일을 생성하고(예: 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
    Copy to Clipboard Toggle word wrap
  2. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/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: redhat.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: redhat.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"
    Copy to Clipboard Toggle word wrap

    이 플레이북은 ~/static-ip-settings-clients.yml 파일에 나열된 각 호스트에 대해 동적으로 특정 값을 읽습니다.

    플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의 /usr/share/ansible/roles/rhel-system-roles.network/README.md 파일을 참조하십시오.

  3. 플레이북 구문을 확인합니다.

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.

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

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat