컨테이너 보안

이 문서에서는 컨테이너를 보호하고 보안 취약성을 방지할 수 있는 몇 가지 방법을 설명합니다. 컨테이너는 애플리케이션을 패키지하고 배포하는 효과적인 방법입니다. 애플리케이션과 서비스는 환경 내에서 구분되므로 운영 및 보안 이점을 제공합니다. 또한 컨테이너는 추상화로 인해 시스템 전체 오류의 영향을 줄이는 데 도움이 되므로 가동 시간을 보장하고 애플리케이션 또는 서비스를 손상시킬 수 있는 공격을 방지합니다. 컨테이너는 일반적으로 호스트 운영 체제 위에 있는 추상화된 계층에서 실행되며 추상화는 분리의 장벽과 계층화된 방어 모델을 적용할 수 있는 기회를 제공합니다.

컨테이너 파이프라인, 애플리케이션 및 컨테이너 배포 환경을 보호하여 지속적인 컨테이너 보안을 설정할 수도 있습니다. 컨테이너 보안을 구현하는 예제는 이 항목에 설명되어 있습니다.

이미지 보호

무단 액세스를 방지하기 위해 이미지가 안전하고 신뢰할 수 있는 레지스트리에 호스트되는지 확인합니다. 이미지에는 신뢰할 수 있는 루트 CA가 있는 TLS 인증서가 있어야 하며, 레지스트리는 강력한 인증과 함께 RBAC(역할 기반 액세스 제어)를 사용해야 합니다. 컨테이너 빌드 및 배달을 위해 CI/CD를 디자인할 때 이미지 검사 솔루션을 포함해야 합니다. 이미지 검사 솔루션은 CVE(Common Vulnerabilities and Exposures)를 식별하고 악용 가능한 이미지가 수정 없이 배포되지 않도록 하는 데 도움이 됩니다.

호스트 환경 강화

컨테이너 보안의 중요한 측면은 컨테이너가 실행되는 시스템의 보안과 런타임 중에 작동하는 방식을 강화해야 한다는 것입니다. 컨테이너 보안은 호스트 및 디먼을 포함하여 전체 스택에 집중해야 합니다. 중요하지 않은 호스트에서 서비스를 제거해야 하며, 환경에 비규격 컨테이너를 배포해서는 안 됩니다. 이렇게 하면 호스트에 대한 액세스는 컨테이너를 통해서만 발생할 수 있으며, 제어는 컨테이너 디먼에 중앙 집중화되어 공격 화면에서 호스트를 제거합니다. 이러한 단계는 프록시 서버를 사용하여 컨테이너에 액세스하는 경우 특히 유용하며, 이로 인해 컨테이너 보안 컨트롤이 실수로 무시됩니다.

컨테이너 리소스 제한

컨테이너가 손상된 경우 공격자는 기본 호스트 리소스를 사용하여 악의적인 활동을 수행하려고 할 수 있습니다. 위반의 영향을 최소화하기 위해 메모리 및 CPU 사용량 제한을 설정하는 것이 좋습니다.

비밀을 올바르게 보호합니다.

비밀은 호스트와 컨테이너 간에 전달해야 할 수 있는 중요한 정보를 포함하는 개체입니다. 비밀의 몇 가지 예로는 암호, SSL/TLS 인증서, SSH 프라이빗 키, 토큰, 연결 문자열 및 일반 텍스트로 전송하거나 암호화되지 않은 상태로 저장해서는 안 되는 기타 데이터가 있습니다. 모든 비밀을 이미지에서 유지하고 컨테이너 오케스트레이션 엔진 또는 외부 비밀 관리자를 통해 탑재해야 합니다.

격리 연습

격리를 사용하고 권한 있는 사용자 또는 루트 사용자를 사용하여 컨테이너에서 애플리케이션을 실행하지 마세요. 이렇게 하면 컨테이너가 손상된 경우 공격자가 권한을 쉽게 에스컬레이션할 수 있으므로 권한 있는 모드에서 컨테이너를 실행하지 않아야 합니다. 컨테이너에서 루트 사용자의 UID(고유 식별 코드) 및 GID(그룹 식별 코드)를 알면 공격자가 호스트 컴퓨터에서 루트로 작성된 파일에 액세스하고 수정할 수 있습니다. 또한 애플리케이션이 필요한 비밀에만 액세스할 수 있는 최소 권한 원칙을 사용해야 합니다. 애플리케이션 프로세스를 실행하는 애플리케이션 사용자를 만들 수 있습니다.

런타임 보안 모니터링 배포

인프라에 대한 공격에 대한 예방 조치를 취한 후에도 여전히 손상이 발생할 가능성이 있으므로 악의적인 활동을 방지하고 탐지하기 위해 애플리케이션의 동작을 지속적으로 모니터링하고 기록하는 것이 중요합니다. Prometheus와 같은 도구는 인프라를 모니터링하는 효과적인 수단을 제공합니다.

다음 단계