AWS Nitro는 AWS EC2 인스턴스의 기본 플랫폼을 구성하는 혁신적인 기술 모음입니다. Amazon이 보안, 성능 및 신뢰성을 향상시키기 위해 도입한 Nitro는 맞춤형 하드웨어 구성 요소와 경량 하이퍼바이저를 활용합니다. 전통적인 가상화 기능의 많은 부분을 전용 하드웨어와 소프트웨어로 추상화하여 공격 표면을 최소화하고 자원 효율성을 향상시킵니다. 가상화 기능을 오프로드함으로써 Nitro는 EC2 인스턴스가 거의 베어 메탈 성능을 제공할 수 있게 하여 자원 집약적인 애플리케이션에 특히 유리합니다. 또한, Nitro 보안 칩은 하드웨어 및 펌웨어의 보안을 보장하여 견고한 아키텍처를 더욱 강화합니다.
Nitro Enclaves
AWS Nitro Enclaves는 Amazon EC2 인스턴스 내에서 고도로 민감한 데이터를 처리하기 위해 설계된 안전하고 격리된 컴퓨팅 환경을 제공합니다. AWS Nitro 시스템을 활용하여 이러한 엔클레이브는 강력한 격리 및 보안을 보장하며, PII나 금융 기록과 같은 기밀 정보를 처리하는 데 이상적입니다. 최소한의 환경을 제공하여 데이터 노출 위험을 크게 줄입니다. 또한, Nitro Enclaves는 암호화 인증을 지원하여 사용자가 승인된 코드만 실행되고 있음을 확인할 수 있게 하여 엄격한 준수 및 데이터 보호 표준을 유지하는 데 필수적입니다.
Nitro Enclave 이미지는 EC2 인스턴스 내부에서 실행되며, AWS 웹 콘솔에서는 EC2 인스턴스가 Nitro Enclave에서 이미지를 실행 중인지 여부를 확인할 수 없습니다.
# Install toolssudoamazon-linux-extrasinstallaws-nitro-enclaves-cli-ysudoyuminstallaws-nitro-enclaves-cli-devel-y# Config permssudousermod-aGne $USERsudousermod-aGdocker $USER# Check installationnitro-cli--version# Start and enable the Nitro Enclaves allocator service.sudosystemctlstartnitro-enclaves-allocator.service&&sudosystemctlenablenitro-enclaves-allocator.service
Nitro Enclave Images
Nitro Enclave에서 실행할 수 있는 이미지는 docker 이미지 기반이므로 다음과 같은 docker 이미지에서 Nitro Enclave 이미지를 생성할 수 있습니다:
# You need to have the docker image accesible in your running local registry# Or indicate the full docker image URL to access the imagenitro-clibuild-enclave--docker-uri<docker-img>:<tag>--output-filenitro-img.eif
Nitro Enclave 이미지가 eif (Enclave Image File) 확장자를 사용하는 것을 볼 수 있습니다.
출력은 다음과 유사하게 보일 것입니다:
Using the locally available Docker image...
Enclave Image successfully created.
{
"Measurements": {
"HashAlgorithm": "Sha384 { ... }",
"PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284",
"PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f",
"PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3"
}
}
Run an Image
문서에 따르면, enclave 이미지를 실행하려면 eif 파일 크기의 최소 4배의 메모리를 할당해야 합니다. 파일에서 기본 리소스를 구성하여 할당할 수 있습니다.
/etc/nitro_enclaves/allocator.yaml
항상 부모 EC2 인스턴스를 위해 일부 리소스를 예약해야 한다는 것을 기억하세요!
이미지에 제공할 리소스를 알고 구성 파일을 수정한 후에도 enclave 이미지를 실행할 수 있습니다:
# Restart the service so the new default values applysudosystemctlstartnitro-enclaves-allocator.service&&sudosystemctlenablenitro-enclaves-allocator.service# Indicate the CPUs and memory to givenitro-clirun-enclave--cpu-count2--memory3072--eif-pathhello.eif--debug-mode--enclave-cid16
Enclaves 열거
EC2 호스트를 손상시키면 다음을 통해 실행 중인 enclave 이미지 목록을 얻을 수 있습니다:
nitro-clidescribe-enclaves
실행 중인 enclave 이미지 내부에 shell을 얻는 것은 불가능합니다. 이는 enclave의 주요 목적이기 때문입니다. 그러나 --debug-mode 매개변수를 사용하면, 다음과 같이 stdout을 얻는 것이 가능합니다:
**Virtual Socket (vsock)**은 가상 머신(VMs)과 그 하이퍼바이저 또는 VMs 간의 통신을 용이하게 하기 위해 Linux에서 특별히 설계된 소켓 패밀리입니다. Vsock은 호스트의 네트워킹 스택에 의존하지 않고 효율적이고 양방향 통신을 가능하게 합니다. 이를 통해 네트워크 구성 없이도 VMs 간의 통신이 가능하며, 32비트 Context ID (CID)와 포트 번호를 사용하여 연결을 식별하고 관리합니다. vsock API는 TCP와 UDP와 유사하게 스트림 및 데이터그램 소켓 유형을 모두 지원하여 가상 환경에서 사용자 수준 애플리케이션에 유연한 도구를 제공합니다.
따라서 vsock 주소는 다음과 같이 보입니다: <CID>:<Port>
enclave 실행 이미지의 CIDs를 찾으려면 다음 명령어를 실행하고 **EnclaveCID**를 확인하면 됩니다: