컨테이너 보안 강화 및 개선
컨테이너를 강화하려면 공격 표면을 줄이고 잠재적 위협에 대한 복원력을 강화하기 위한 보안 조치를 구현해야 합니다. 이 섹션에서는 컨테이너를 강화하기 위해 일반적으로 사용되는 기술을 설명합니다. 이 목록은 포괄적인 목록이 아니며, 컨테이너 보안은 조직의 인프라에 따라 다를 수 있습니다.
자세한 내용은 보안 및 강화 가이드를 참조하십시오.
1. 최소 기본 이미지 사용
SUSE Manager 5.0은(는) SLE Micro 5.5을(를) 기본으로 사용합니다. 이 이미지에는 적은 수의 사전 설치 패키지가 있으므로, 잠재적인 공격 표면이 줄어듭니다.
- 축소된 크기
-
최소 기본 이미지는 기존 운영 체제 이미지에 비해 크기가 훨씬 작습니다. 이러한 이미지는 불필요한 패키지와 라이브러리를 제거하여 전체 설치 공간을 최소화하므로 다운로드 시간이 단축되고 스토리지 요구 사항이 줄어듭니다.
- 집중적인 기능
-
최소 기본 이미지는 컨테이너화된 애플리케이션을 실행하는 데 필요한 필수 기능을 제공하도록 설계되었습니다. 최소 기본 이미지는 일반적으로 포함됩니다:
-
핵심 시스템 유틸리티
-
런타임 환경(예: 셸)
-
필수 라이브러리
최소한의 기본 이미지에서는 일반적으로 다음과 같은 비필수 구성 요소가 제외됩니다.
-
문서
-
개발 도구
-
비필수 데몬
-
- 보안 향상
-
설치된 패키지와 종속 요소의 수를 최소화하여 기본 이미지를 최소화하면 컨테이너 환경 내의 공격 표면과 잠재적인 취약성을 줄일 수 있습니다. 이는 악의적인 행위자가 시스템을 악용할 수 있는 경로를 제한하여 보안을 강화합니다.
- 유연성
-
최소 기본 이미지는 개발자가 컨테이너화된 애플리케이션을 사용자 지정하고 최적화할 수 있는 유연성을 제공합니다. 이러한 이미지에는 기본 필수 요소만 포함되어 있으므로 개발자는 특정 애플리케이션 요구 사항을 충족하도록 컨테이너 환경을 조정하여 포함시킬 추가 구성 요소와 종속성에 대한 관리를 향상할 수 있습니다.
2. 정기적인 업데이트
보안 패치와 업데이트를 통해 컨테이너 이미지를 최신 상태로 유지할 수 있습니다. 다음과 같은 도구를 사용하여 컨테이너 이미지에 취약점이 있는지 정기적으로 검사합니다.
3. 이미지 서명 활성화
디지털 서명을 사용하여 컨테이너 이미지의 진위성과 무결성을 확인합니다. 이미지 서명 및 검증 메커니즘을 구현하여 신뢰할 수 있는 이미지만 배포되도록 합니다.
- 디지털 서명
-
디지털 서명은 컨테이너 이미지와 같은 디지털 콘텐츠의 진위성과 무결성을 검증하는 데 사용되는 암호화 메커니즘입니다. 여기에는 이미지 콘텐츠의 고유 해시 또는 체크섬을 생성하고 이를 개인 키로 암호화**하여 서명을 생성하는 프로세스가 포함됩니다. 이 서명은 해당 공개 키를 사용하여 복호화하여 진위 여부를 확인할 수 있습니다.
- 개인 키 및 공용 키
-
이미지 서명에서는 개인 키와 공용 키라는 한 쌍의 암호화 키를 사용하는 비대칭 암호화가 활용됩니다. 개인 키는 서명을 생성하는 데 사용되며, 공용 키는 서명을 확인하는 데 사용됩니다. 개인 키는 기밀로 유지되어 안전하게 보관되며, 공용 키는 자유롭게 배포할 수 있습니다.
- 신뢰 모델
-
이미지 서명은 이미지의 서명자를 암묵적으로 신뢰하여 이미지의 진위성을 보증하는 신뢰 모델을 구축합니다. 조직은 일반적으로 이미지 서명을 위한 자체 개인 키를 유지하고, 사용자는 해당 조직의 키로 서명된 이미지를 신뢰합니다. 이미지 소비자는 해당 공용 키를 사용하여 서명을 확인하여 악의적인 행위자에 의해 이미지가 손상되거나 변경되지 않았는지 확인할 수 있습니다.
- 레지스트리 통합
-
이미지 서명은 Docker Hub와 같은 컨테이너 이미지 레지스트리 또는 Harbor와 같은 비공개 레지스트리와 통합되는 경우가 많습니다. 레지스트리는 이미지 서명에 대한 기본 지원을 제공하여 사용자가 레지스트리 플랫폼 내에서 직접 이미지에 서명하고 확인할 수 있도록 할 수 있습니다. 서명된 이미지에는 일반적으로 서명된 상태와 서명자의 ID를 나타내는 메타데이터가 태그로 지정됩니다.
- 확인 프로세스
-
컨테이너 이미지를 배포하기 전에 이미지 소비자(예: 컨테이너 런타임 또는 오케스트레이션 플랫폼)는 서명자의 공용 키를 사용하여 이미지 서명을 확인합니다. 서명이 유효하고 이미지 콘텐츠와 일치하면 이미지가 진본으로 간주되며 안전하게 배포할 수 있습니다. 서명을 확인할 수 없거나 이미지 콘텐츠와 일치하지 않으면 잠재적인 보안 위험을 방지하기 위해 이미지가 거부됩니다.
4. 사용자 권한 구현
최소 권한 원칙으로 컨테이너를 실행합니다. 가능하면 컨테이너를 루트로 실행하지 않아야 합니다. 대신, 컨테이너 내에서는 루트가 아닌 사용자를 생성 및 사용하여 잠재적인 익스플로이트의 영향을 제한해야 합니다.
5. 보안 컨텍스트 사용
Podman과 같은 컨테이너 런타임 공급자가 제공하는 보안 기능을 활용할 수 있습니다. 보안 컨텍스트를 구성하여 리소스 제한, 네트워크 정책, SELinux/AppArmor 프로파일을 적용할 수 있습니다.
6. 네트워크 세분화
네트워크 세분화를 구현하여 컨테이너를 서로에 대해, 그리고 호스트 시스템으로부터 격리할 수 있습니다. 컨테이너 네트워크 플러그인 또는 오버레이 네트워크를 사용하여 네트워크 정책을 적용하고 컨테이너 통신을 제한할 수 있습니다.
7. 런타임 활동 모니터링
컨테이너 런타임 모니터링 도구를 사용하여 의심스러운 활동을 실시간으로 탐지하고 대응할 수 있습니다. 컨테이너 로그, 파일 무결성, 시스템 호출을 모니터링하여 침해 또는 악의적인 동작의 징후를 확인할 수 있습니다.
8. 컨테이너 기능 제한
컨테이너 내에서 불필요한 Linux 기능을 비활성화하여 권한 상승 공격의 잠재적 영향을 줄일 수 있습니다. capsh
와 같은 도구를 사용하여 필요에 따라 기능을 삭제하거나 제한할 수 있습니다.
9. 보안 호스트 환경
기본 호스트 시스템이 제대로 보호되고 있는지 확인할 수 있습니다. 운영 체제 패치를 적용하고, 방화벽 규칙을 구성하고, 액세스 제어를 구현하여 외부 위협으로부터 호스트를 보호할 수 있습니다.
10. 런타임 보호 구현
seccomp 또는 AppArmor 프로파일과 같은 런타임 보호 메커니즘을 사용하여 컨테이너 프로세스가 수행할 수 있는 작업을 제한할 수 있습니다. 세분화된 보안 정책을 정의하고 적용하여 무단 액세스 또는 악성 코드 실행을 방지할 수 있습니다.