Docker 컨테이너 보안이란?

Docker®에는 변동 사항이 많으며 그 보안을 유지하는 것은 이전 배포 기술을 보호하는 것보다 복잡합니다. 네트워크 및 애플리케이션 방화벽에서 컨테이너 런타임 방어, 호스트 보호에 이르기까지 전체적인 접근 방식이 필요합니다.

Docker 컨테이너 보안

Docker 컨테이너 보안은 다른 컨테이너의 보안과 다르지 않습니다. 호스트에서 네트워크 사이의 모든 것을 보호하는 포괄적인 접근 방식이 필요합니다. 이동하는 부분으로 인해 많은 조직에서 컨테이너 보안을 보장하기가 어렵지만, 기초적 수준 이상의 경계가 필요합니다..

고려 사항

Azure 컨테이너를 보호할 때 고려해야 할 사항은 다음과 같습니다.

  • 리소스 할당량 활용
  • Docker 컨테이너가 루트로 실행되면 안되는 이유
  • Docker 컨테이너 레지스트리의 보안 유지
  • 신뢰할 수 있는 출처 사용
  • 코드 소스로 이동
  • 보안을 염두에 둔 API 및 네트워크 설계

리소스 할당량 활용

리소스 할당량을 사용하면 메모리 및 CPU를 컨테이너로 제한할 수 있습니다. 각 컨테이너에서 리소스 할당량을 구성하면 환경의 효율성을 높이는 데 도움이 될 뿐만 아니라 환경의 모든 컨테이너에서 리소스의 불균형을 방지할 수 있습니다.

이를 통해 컨테이너는 예상한 속도로 성능을 발휘하고 보안을 강화할 수 있습니다. 컨테이너 하나가 악의적인 콘텐츠에 감염되면 할당량으로 인해 컨테이너에 많은 양의 리소스를 허용할 수 없으므로 공격에 미치는 영향을 최소화할 수 있습니다. 이것은 간단한 보안 전술이며 command-line 플래그를 사용하여 수행할 수 있습니다.

Docker 컨테이너가 루트로 실행되면 안되는 이유

응용 프로그램을 작성할 때는 최소 권한 원칙을 따르는 것이 가장 좋습니다. 즉, 응용 프로그램의 기능이 작동하는 데 필요한 리소스로만 액세스가 제한됩니다. 이는 예기치 않은 액세스로부터 컨테이너를 보호하는 가장 좋은 방법 중 하나입니다.

Docker 컨테이너의 보안과 관련하여 이는 매우 중요하며 Docker 기본 설정이 컨테이너를 루트로 실행하도록 설정되지 않은 이유입니다. 예를 들어 컨테이너형 응용 프로그램이 공격에 취약하고 루트 사용자와 함께 실행 중인 경우 공격 영역을 확장하고 공격자가 권한 상승 효과를 얻게 됩니다.

Docker 컨테이너 레지스트리의 보안 유지

컨테이너 레지스트리, 특히 Docker 컨테이너의 레지스트리는 컨테이너를 강력한 플랫폼으로 만듭니다. 레지스트리를 사용하면 쉽고 빠르게 다운로드 할 수 있는 이미지의 중앙 저장소를 만들 수 있습니다. Docker Trusted Registry와 같이 신뢰할 수 있는 레지스트리를 사용하지 않으면 많은 보안 위험이 따릅니다. Docker 레지스트리를 사용하면 IT 인프라에 이미 구현된 방화벽 뒤에 설치하지만 여전히 레지스트리에서 업로드하거나 다운로드하는 것을 거부해야 합니다.

개방적인 접근을 허용하는 것은 일처리 방식이 쉬워지지만 이 작은 불편은 레지스트리의 큰 위반을 막을 수 있습니다. 역할 기반 액세스 제어를 구현하여 등록 정보 측면에서 액세스 가능한 사용자를 정확하게 제어할 수 있는 능력을 제공합니다.

신뢰 할 수 있는 출처 사용

컨테이너 레지스트리에 보안이 적용되었으므로 신뢰할 수 없는 원본에서 가져온 컨테이너 이미지로 컨테이너 레지스트리를 감염시키지 않는 것이 좋습니다. 마우스 클릭만으로 대중이 쉽게 이용할 수 있는 컨테이너 이미지를 다운로드하는 것이 편리해 보일 수 있지만 다운로드 출처를 검증하는 것은 매우 중요합니다.

보안을 위해 공용 컨테이너 레지스트리를 피하고 Docker Hub와 같은 Docker 가 제공하는 레지스트리를 고수하는 것이 좋습니다. Docker 컨테이너의 보안을 강화하기 위해 추가 단계를 수행하려면 이미지 스캔 도구를 사용하여 Docker 이미지의 취약점을 밝혀내고 보호해야 합니다. 

코드 소스로 이동

위에서 설명한 것처럼 Docker 컨테이너에 대해 신뢰할 수 있고 신뢰할 수 있는 컨테이너 이미지를 제공하는 것이 중요합니다. 그러나 이미지가 신뢰 할 수 있는 레지스트리에서 가져온 경우라도 이미지 내의 코드를 조사하여 감염된 코드가 포함되어 있지 않은지 확인하는 것이 좋습니다. Docker 이미지에는 외부 소스의 원본 코드와 패키지 조합이 있으며 신뢰 할 수 있는 소스에서 파생되지 않을 수도 있습니다.

이 시나리오에서는 소스 코드 분석 도구를 사용하는 것이 가장 좋습니다. 이미지가 있으면 Docker 이미지 내의 모든 패키지 소스를 다운로드하여 패키지를 스캔하여 코드의 출처를 결정할 수 있습니다. 이를 통해 이미지에 알려진 보안 취약점이 있는지 확인할 수 있으므로 첫 번째 빌드로부터 보안을 유지할 수 있습니다.

보안을 염두에 둔 API 및 네트워크 설계

Docker 컨테이너가 서로 통신하기 위해 API(Application Programming Interface) 및 네트워크를 사용합니다. 이러한 통신은 컨테이너가 제대로 실행되려면 필수적이지만 적절한 보안 및 모니터링이 필요합니다. API와 네트워크는 실제로 Docker 컨테이너의 일부가 아니라 Docker와 함께 사용하는 리소스임에도 불구하고, 컨테이너의 보안에 여전히 위험을 초래합니다. 이를 염두에 두고 침입을 신속하게 차단할 수 있는 능력을 갖추기 위해서는 API와 네트워크를 설계하여 모니터링이 용이하고 보안이 유지되도록 해야 합니다. 

결론

Docker 컨테이너 보안은 쉽지는 않지만 그만한 가치가 있습니다. 컨테이너 환경을 모든 수준에서 강화하는 전체적인 접근 방식이 필요합니다. 위의 모범 사례가 많은 것처럼 보이지만 미래에 엄청난 시간을 절약하고 주요 보안 위험으로부터 해방시켜 줄 것입니다. 

관련 연구

관련 기사