VM을 안전하게 부팅

이 문서에서는 Google Distributed Cloud (GDC) 에어 갭 어플라이언스의 가상 머신 (VM) 인스턴스에서 보안 부팅 또는 가상화된 신뢰 플랫폼 모듈 (vTPM)을 사용 설정하는 방법을 설명합니다.

이 문서는 GDC 에어 갭 어플라이언스 환경의 VM에서 보안 부팅 및 vTPM을 구성하는 플랫폼 관리자 또는 애플리케이션 운영자 그룹의 개발자를 대상으로 합니다.

보안 부팅 정보

보안 부팅은 모든 부팅 구성요소의 디지털 서명을 확인하고 확인에 실패하면 프로세스를 중지하여 시스템에서 인증된 소프트웨어만 실행하도록 보장하는 기능입니다. 통합 확장 펌웨어 인터페이스 (UEFI) 펌웨어를 사용하여 제조업체에서 시스템 펌웨어, 부트 로더, 로드된 바이너리에 서명하는 데 사용하는 인증서와 키를 관리합니다.

부팅할 때마다 UEFI 펌웨어는 저장된 승인된 키를 기준으로 각 구성요소의 디지털 서명을 확인하고 서명되지 않거나 잘못 서명된 구성요소를 차단합니다. VM 인스턴스에서 보안 부팅을 사용 설정하려면 VM의 bootloader 유형을 uefi로 설정해야 합니다.

공식 UEFI 문서를 보려면 https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf를 참고하세요.

가상 신뢰 플랫폼 모듈 정보

vTPM은 시스템 액세스를 인증하는 데 사용되는 키와 인증서를 보호하는 특수한 가상 컴퓨터 칩입니다. vTPM에 대한 자세한 내용은 https://trustedcomputinggroup.org/trusted-platform-module-tpm-summary/를 참고하세요.

vTPM을 사용해 실딩 또는 실링으로 비밀번호를 보호할 수도 있습니다. 실링된 스토리지에 대한 자세한 내용은 https://en.wikipedia.org/wiki/Trusted_Computing#SEALED-STORAGE를 참고하세요. vTPM을 이 같은 용도로 사용하는 방법을 보여주는 Go 언어의 예시는 GitHub의 Go-TPM 프로젝트(https://github.com/google/go-tpm) 를 참고하세요.

시작하기 전에

gdcloud 명령줄 인터페이스 (CLI) 명령어를 사용하려면 gdcloud CLI를 다운로드, 설치, 구성했는지 확인하세요. GDC 에어 갭 어플라이언스의 모든 명령어는 gdcloud 또는 kubectl CLI를 사용하며 운영체제 (OS) 환경이 필요합니다.

kubeconfig 파일 경로 가져오기

Management API 서버에 대해 명령어를 실행하려면 다음 리소스가 있어야 합니다.

  1. Management API 서버 이름을 찾거나 플랫폼 관리자 (PA)에게 서버 이름을 문의합니다.

  2. 로그인하고 생성합니다. Management API 서버의 kubeconfig 파일이 없는 경우

  3. 경로를 사용하여 이 안내의 MANAGEMENT_API_SERVER{"</var>"}}를 바꿉니다.

IAM 역할 요청

VM에서 보안 부팅 또는 vTPM을 사용 설정하려면 프로젝트 IAM 관리자에게 문의하여 프로젝트 VirtualMachine 관리자 (project-vm-admin) 역할을 요청하세요.

모든 VM 역할은 VM이 있는 프로젝트의 네임스페이스에 바인딩되어야 합니다. 액세스 권한을 확인하는 단계를 따르세요.

보안 부팅 사용 설정

VM에 보안 부팅을 사용 설정합니다. 프로젝트 네임스페이스(PROJECT_NAMESPACE)에서 VM_NAME이라는 VM에 다음 안내를 사용합니다.

  1. VM 커스텀 리소스를 업데이트하여 보안 부팅을 사용 설정합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
     shieldConfig:
       bootType: uefi
       enableSecureBoot: true
    '
    
  2. VM이 실행 중인 경우 VM 다시 시작 안내에 따라 다시 시작합니다.

  3. 보안 부팅을 사용 설정했는지 확인합니다. VM에 대한 SSH 연결을 설정하고 다음 명령어를 실행합니다.

    mokutil --sb-state
    

    보안 부팅을 사용 설정하면 명령어가 SecureBoot enabled를 반환합니다.

    mokutil 도구에서 보안 부팅을 사용 설정하지 않았다고 보고하는 경우 보안 부팅 구성 문제 해결섹션의 단계를 따르세요.

보안 부팅 구성 문제 해결

  1. 편집기에서 VM 커스텀 리소스를 엽니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. ' "다음 명령어 실행"spec 필드에 표시된 대로 누락된 필드 또는 값을 찾습니다.' 이러한 필드는 필수입니다.

  3. 누락되거나 잘못된 필드가 있는 경우 spec을 수정하여 누락된 필드를 추가하고 잘못된 값을 수정합니다.

  4. 파일을 저장합니다.

  5. VM 다시 시작의 단계를 따르세요.

이전 단계를 수행해도 문제가 해결되지 않으면 VM의 운영체제 (OS)에 해당하는 문서를 확인하여 OS 버전이 보안 부팅을 지원하는지 확인하세요.

가상 신뢰 플랫폼 모듈 (vTPM) 사용 설정

VM에 vTPM을 사용 설정합니다. 프로젝트 네임스페이스 (PROJECT_NAMESPACE)에서 VM_NAME이라는 VM에 다음 안내를 사용합니다.

  1. VM 커스텀 리소스를 업데이트하여 vTPM을 사용 설정합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
       shieldConfig:
          enableVtpm: true
    '
    
  2. VM이 실행 중인 경우 VM 다시 시작 안내에 따라 다시 시작합니다.

  3. vTPM을 사용 설정했는지 확인합니다. VM에 대한 SSH 연결을 설정하고 다음 명령어를 실행합니다.

    dmesg | grep -i tpm
    

    vTPM을 사용 설정하면 명령어가 ACPI 테이블의 일부로 TPM 모듈을 반환합니다. 결과는 다음과 유사합니다.

    [    7.620985] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1, rev-id 1)
    

    ACPI tables에 TPM 모듈이 표시되지 않으면 vTPM 구성 문제 해결 섹션의 단계를 따르세요.

vTPM 구성 문제 해결

  1. 편집기에서 VM 커스텀 리소스를 엽니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. ' 다음 명령어 실행'의 spec 필드에 표시된 대로 누락된 필드 또는 값을 찾습니다. 이러한 필드는 필수입니다.

  3. 누락되거나 잘못된 필드가 있는 경우 spec을 수정하여 누락된 필드를 추가하고 잘못된 값을 수정합니다.

  4. 파일을 저장합니다.

  5. VM 다시 시작의 단계를 따르세요.

이전 단계를 수행해도 문제가 해결되지 않으면 VM의 운영체제 (OS)에 해당하는 문서를 확인하여 OS 버전이 vTPM을 지원하는지 확인하세요.