AL2023 기반 UEFI 보안 부팅 - Amazon Linux 2023

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AL2023 기반 UEFI 보안 부팅

AL2023 릴리즈 2023.1부터 UEFI 보안 부팅을 지원합니다. UEFI와 UEFI 보안 부팅을 모두 지원하는 Amazon EC2 인스턴스로 AL2023을 사용하세요. 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서인스턴스 시작을 참조하세요.

UEFI 보안 부팅이 활성화된 AL2023 인스턴스는 Linux 커널과 모듈을 포함하여 서명된 커널 수준 코드만 Amazon 허용하므로 인스턴스가 서명한 커널 수준 코드만 실행되도록 할 수 있습니다. AWS

Amazon EC2 인스턴스와 UEFI 보안 부팅에 대한 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서UEFI 보안 부팅을 참조하세요.

필수 조건
  • AL2023 릴리스 2023.1 이상에 설치된 AMI가 필요합니다.

  • 인스턴스 유형은 UEFI 보안 부팅을 지원해야 합니다. 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서인스턴스 시작을 참조하세요.

AL2023 버전에서 UEFI 보안 부팅을 활성화합니다.

기본 AL2023 AMI는 당사 키 서명이 있는 커널과 부트로더와 통합되어 있습니다. 기존 인스턴스를 등록하거나 스냅숏 이미지 등록으로 UEFI 보안 부팅이 활성화된 AMI를 생성하여 UEFI 보안 부팅을 사용할 수 있습니다. UEFI 보안 부팅은 기본 AL2023 AMI에서 사용할 수 없습니다.

인스턴스 유형이 UEFI를 지원하는 경우 이러한 AMI로 시작된 인스턴스가 UEFI 펌웨어를 사용하도록 AL2023 AMI 부팅 모드는 uefi-preferred로 설정되어 있습니다. 인스턴스 유형이 UEFI를 지원하지 않는 경우 인스턴스는 레거시 BIOS 펌웨어에서 실행합니다. 인스턴스가 레거시 BIOS 모드에서 시작되면 UEFI 보안 부팅이 되지 않습니다.

Amazon EC2 인스턴스 AMI 부팅에 대한 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서부팅 모드(Boot modes)를 참조하세요.

기존 인스턴스 등록

기존 인스턴스를 등록하려면 펌웨어가 부트로더를 검증하고 부트로더가 다음 부팅 시 커널을 검증하는 키 세트를 특정 UEFI 펌웨어 변수로 입력하세요.

  1. Amazon Linux는 등록 프로세스를 간소화하는 도구를 제공합니다. 다음 명령을 실행하여 필요한 키와 인증서 세트를 인스턴스에 프로비저닝합니다.

    sudo amazon-linux-sb enroll
  2. 다음 명령을 실행하여 인스턴스를 재부팅합니다. 인스턴스가 재부팅되면 UEFI 보안 부팅이 활성화됩니다.

    sudo reboot
참고

Amazon Linux AMI는 현재 Nitro 신뢰 플랫폼 모듈(NitroTPM)을 지원하지 않습니다. UEFI 보안 부팅뿐만 아니라 NitroTPM이 필요한 경우 다음 섹션의 정보를 사용하세요.

스냅숏 이미지 등록

Amazon EC2 register-image API를 사용하여 Amazon EBS 루트 볼륨의 스냅샷에서 AMI를 등록할 때 UEFI 변수 저장소의 상태가 포함된 바이너리 블롭으로 AMI를 프로비저닝할 수 있습니다. AL2023 UefiData로 UEFI 보안 부팅이 활성화되므로 이전 섹션의 단계를 실행하지 않아도 됩니다.

바이너리 블롭 생성 및 사용에 대한 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서옵션 B: 미리 채워진 변수 저장소가 있는 바이너리 블럽 생성(Option B: Create a binary blob containing a pre-filled variable store)을 참조하세요.

AL2023은 Amazon EC2 인스턴스에서 직접 사용할 수 있는 사전 빌드된 바이너리 블롭을 제공합니다. 바이너리 블롭은 실행 중인 인스턴스의 /usr/share/amazon-linux-sb-keys/uefi.vars에 있습니다. AL2023 AMI 2023.1 릴리스부터 기본으로 설치된 amazon-linux-sb-keys RPM 패키지에 이 블롭이 있습니다.

참고

최신 버전의 키와 폐기를 사용하려면 AMI를 생성할 때 사용한 것과 동일한 AL2023 릴리스의 블롭을 사용하세요.

이미지를 등록할 때는 uefi로 설정된 RegisterImage API의 BootMode 파라미터를 사용하는 것이 좋습니다. 이렇게 하면 TpmSupport 파라미터를 v2.0로 설정하여 NitroTPM을 활성화할 수 있습니다. UEFI를 지원하지 않는 인스턴스 유형으로 전환할 때 UEFI 보안 부팅이 활성화되고 실수로 비활성화되지 않도록 BootMode 설정을 uefi로 하세요.

NitroTPM에 대한 자세한 내용은 Linux용 Amazon EC2 사용 설명서NitroTPM을 참조하세요.

폐기 업데이트

Amazon Linux에서 업데이트된 키 서명이 포한된 최신 부트로더 버전 grub2 또는 Linux 커널을 배포해야 합니다. 이 경우 구 버전 부트로더에서 악용될 수 있는 버그가 UEFI 보안 부팅 검증 프로세스를 우회할 가능성을 방지하기 위해 구 버전 키를 폐기해야 합니다.

grub2 또는 kernel 패키지를 업데이트하면 실행 중인 인스턴스의 UEFI 변수 저장소 취소 목록을 자동으로 업데이트합니다. 즉, UEFI 보안 부팅을 활성화하면 패키지 보안 업데이트를 설치한 후에는 이전 패키지 버전을 더 이상 실행할 수 없습니다.

AL2023 상에서 UEFI 보안 부팅이 작동하는 방식

다른 Linux 배포판과 달리 Amazon Linux에는 1단계 부트로더 역할을 하는 심 (shim) 추가 구성 요소가 없습니다. 심은 일반적으로 Microsoft 키 서명이 있습니다. 예를 들어 심이 포함된 Linux 배포판에서 심은 자체 코드를 사용하여 Linux 커널을 검증하는 grub2 부트로더를 로드합니다. 또한 심은 mokutil 도구로 UEFI 변수 저장소에서 머신 소유 키(MOK) 데이터베이스에 자체 키 및 폐기 세트를 유지 관리합니다.

Amazon Linux에는 심이 없습니다. AMI 소유자가 UEFI 변수를 관리하기 때문에 이 중간 단계는 필요하지 않으며 시작 및 부팅에 부정적인 영향을 미칠 수 있습니다. 또한 원하지 않는 바이너리가 실행될 가능성을 줄이기 위해 기본적으로 공급업체 키에 대한 신뢰를 포함시키지 않았습니다. 하지만 고객은 원한다면 바이너리를 포함시킬 수 있습니다.

Amazon Linux를 사용하면 UEFI로 grub2 부트로더를 로드하고 검증할 수 있습니다. Linux 커널을 로드한 후 UEFI를 사용하여 Linux 커널을 검증하도록 grub2 부트로더를 수정했습니다. 따라서 일반 UEFI db 변수(인증된 키 데이터베이스)에 저장된 동일한 인증서를 사용하여 Linux 커널을 검증하고 부트로더 및 다른 UEFI 바이너리와 동일한 dbx 변수(폐기 데이터베이스)를 테스트합니다. db 데이터베이스 및 dbx 데이터베이스에 대한 액세스를 제어하는 자체 PK 및 KEK 키로 심과 같은 중개자 없이 필요에 따라 서명된 업데이트 및 페기를 수행할 수 있습니다.

UEFI 보안 부팅에 대한 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서UEFI 보안 부팅 작동 방식(How UEFI Secure Boot works)을 참조하세요.

자체 키 등록

이전 섹션에서 설명했듯이 Amazon EC2에서 UEFI 보안 부팅을 사용하기 위해 shimAmazon Linux에 가 없어도 됩니다. 다른 Linux 배포판에 대한 설명서에서 AL2023에는 없는 mokutil로 머신 소유자 키(MOK) 데이터베이스를 관리하는 방법에 대한 문서가 있습니다. shim 및 MOK 환경에서는 Amazon EC2에서 UEFI 보안 부팅할 때 사용할 수 없는 UEFI 펌웨어 키 등록의 일부 제한을 우회합니다. Amazon EC2에는 UEFI 변수 저장소의 키를 쉽게 조작할 수 있는 메커니즘이 있습니다.

키를 직접 등록하려면 기존 인스턴스 내에서 변수 저장소를 조작하거나(인스턴스 내에서 변수 저장소에 키 추가(Add keys to the variable store from within the instance) 참조) 미리 채워진 바이너리 블롭을 생성하면 됩니다(미리 채워진 변수 저장소가 포함된 바이너리 블롭 생성(Create a binary blob containing a pre-filled variable store) 참조).