클라우드 네이티브 보안과 쿠버네티스

클라우드 네이티브 보안과 쿠버네티스

쿠버네티스는 클라우드 네이티브 아키텍처를 기반으로 하고, 클라우드 네이티브 정보 보안의 모범 사례에 관해 CNCF의 조언을 받아 설계됐어요. 이 페이지에서는 쿠버네티스가 안전한 클라우드 네이티브 플랫폼을 배포하도록 어떻게 설계되었는지 개요를 살펴봅니다.

출처: 문서

본문

클라우드 네이티브 정보 보안

클라우드 네이티브 보안에 관한 CNCF 백서는 서로 다른 _라이프사이클 단계_에 적합한 보안 통제와 실무를 정의해요.

개발(Develop) 라이프사이클 단계

  • 개발 환경의 무결성을 보장한다.
  • 자신의 맥락에 맞는 정보 보안 모범 사례에 따라 애플리케이션을 설계한다.
  • 솔루션 설계의 일부로 최종 사용자 보안을 고려한다.

이를 달성하려면 다음을 할 수 있어요:

  1. 내부 위협에도 공격 표면을 최소화하는 제로 트러스트 같은 아키텍처를 채택한다.
  2. 보안 우려를 고려하는 코드 리뷰 프로세스를 정의한다.
  3. 신뢰 경계를 식별하는 시스템·애플리케이션의 _위협 모델_을 만든다. 그 위협 모델로 위험을 식별하고 어떻게 처리할지 결정한다.
  4. 정당한 경우 _퍼징(fuzzing)_과 보안 카오스 엔지니어링 같은 고급 보안 자동화를 도입한다.

배포(Distribute) 라이프사이클 단계

  • 실행하는 컨테이너 이미지의 공급망 보안을 보장한다.
  • 애플리케이션을 실행하는 클러스터와 다른 구성 요소의 공급망 보안을 보장한다. 예를 들어 클라우드 네이티브 애플리케이션이 영속성을 위해 사용하는 외부 데이터베이스가 포함될 수 있어요.

이를 달성하려면 다음을 할 수 있어요:

  1. 컨테이너 이미지와 다른 아티팩트를 알려진 취약점에 대해 스캔한다.
  2. 소프트웨어 배포가 전송 중 암호화를 사용하고 소프트웨어 소스에 대한 신뢰 체인이 있도록 보장한다.
  3. 업데이트가 있으면 특히 보안 공지에 대응해 의존성을 업데이트하는 프로세스를 채택·수행한다.
  4. 공급망 보증을 위해 디지털 인증서 같은 검증 메커니즘을 사용한다.
  5. 보안 위험을 알려주는 피드와 다른 메커니즘을 구독한다.
  6. 아티팩트에 대한 접근을 제한한다. 컨테이너 이미지를 권한 있는 클라이언트만 이미지를 가져올 수 있는 프라이빗 레지스트리에 둔다.

배포(Deploy) 라이프사이클 단계

무엇을 배포할 수 있는지, 누가 배포할 수 있는지, 어디에 배포할 수 있는지에 대한 적절한 제한을 보장해요. 컨테이너 이미지 아티팩트의 암호화 정체성을 검증하는 것처럼 배포(Distribute) 단계의 조치를 시행할 수 있습니다.

서로 다른 애플리케이션과 클러스터 구성 요소를 서로 다른 네임스페이스에 배포할 수 있어요. 컨테이너와 네임스페이스는 모두 정보 보안과 관련된 격리 메커니즘을 제공합니다.

쿠버네티스를 배포할 때 여러분은 애플리케이션의 런타임 환경, 즉 쿠버네티스 클러스터(또는 여러 클러스터)의 기반도 함께 설정해요. 그 인프라는 상위 레이어가 기대하는 보안 보장을 제공해야 합니다.

런타임(Runtime) 라이프사이클 단계

런타임 단계는 접근, 컴퓨트, 스토리지라는 세 가지 중요한 영역으로 구성됩니다.

런타임 보호: 접근

쿠버네티스 API가 클러스터를 작동하게 만들어요. 이 API를 보호하는 것이 효과적인 클러스터 보안을 제공하는 핵심입니다.

쿠버네티스 문서의 다른 페이지에 접근 제어의 특정 측면을 설정하는 방법에 대한 더 자세한 내용이 있어요. 보안 체크리스트는 클러스터에 권장되는 기본 검사를 제공합니다.

그보다 더 나아가 클러스터를 보호한다는 것은 API 접근에 대한 효과적인 인증인가를 구현하는 것을 의미해요. ServiceAccounts를 사용해 워크로드와 클러스터 구성 요소의 보안 정체성을 제공·관리할 수 있습니다.

쿠버네티스는 TLS로 API 트래픽을 보호해요. 노드와 컨트롤 플레인 사이의 트래픽을 포함해 TLS로 클러스터를 배포하고, 암호화 키를 보호하세요. CertificateSigningRequests에 쿠버네티스 자체 API를 사용한다면 그곳에서 오용을 제한하는 데 특별히 주의하세요.

런타임 보호: 컴퓨트

컨테이너는 두 가지, 즉 애플리케이션 간 격리와 격리된 애플리케이션을 결합해 같은 호스트에서 실행하게 하는 메커니즘을 제공해요. 격리와 집계라는 이 두 측면은 런타임 보안이 트레이드오프를 식별하고 적절한 균형을 찾는 것과 관련됨을 의미합니다.

쿠버네티스는 컨테이너를 설정·실행하기 위해 컨테이너 런타임에 의존해요. 쿠버네티스 프로젝트는 특정 컨테이너 런타임을 권장하지 않고, 여러분이 선택한 런타임이 정보 보안 요구를 충족하는지 확인해야 합니다.

런타임에서 컴퓨트를 보호하려면 다음을 할 수 있어요:

  1. 애플리케이션에 Pod Security Standards를 적용해 필요한 권한만으로 실행되도록 돕는다.

  2. 컨테이너화된 워크로드 실행 전용으로 설계된 특수 운영 체제를 노드에서 실행한다. 이는 보통 컨테이너 실행에 필수적인 서비스만 제공하는 읽기 전용 운영 체제(불변 이미지)를 기반으로 해요.

    컨테이너 전용 운영 체제는 시스템 구성 요소를 격리하고, 컨테이너 탈출 시 공격 표면을 줄여줘요.

  3. 공유 리소스를 공정하게 할당하도록 ResourceQuotas를 정의하고, LimitRanges 같은 메커니즘으로 파드가 리소스 요구 사항을 지정하도록 보장한다.

  4. 격리를 위해 워크로드를 여러 노드에 분산한다. 쿠버네티스 자체나 생태계의 노드 격리 메커니즘을 사용해 서로 다른 신뢰 컨텍스트를 가진 파드가 별도의 노드 집합에서 실행되도록 한다.

  5. 보안 제한을 제공하는 컨테이너 런타임을 사용한다.

  6. Linux 노드에서는 AppArmorseccomp 같은 Linux 보안 모듈을 사용한다.

런타임 보호: 스토리지

클러스터와 그 위에서 실행되는 애플리케이션의 스토리지를 보호하려면 다음을 할 수 있어요:

  1. 볼륨에 대해 미사용 데이터 암호화를 제공하는 외부 스토리지 플러그인을 클러스터에 통합한다.
  2. API 오브젝트에 미사용 데이터 암호화를 활성화한다.
  3. 백업으로 데이터 내구성을 보호하고, 필요할 때마다 복원할 수 있는지 검증한다.
  4. 클러스터 노드와 의존하는 네트워크 스토리지 사이의 연결을 인증한다.
  5. 자신의 애플리케이션 안에서 데이터 암호화를 구현한다.

암호화 키는 특수 하드웨어 안에서 생성하는 것이 공개 위험에 대한 최상의 보호를 제공해요. _하드웨어 보안 모듈_은 보안 키가 다른 곳에 복사되지 않게 하면서 암호화 작업을 수행하게 해줍니다.

네트워킹과 보안

NetworkPolicy서비스 메시 같은 네트워크 보안 조치도 고려해야 해요. 일부 쿠버네티스 네트워크 플러그인은 가상 사설 네트워크(VPN) 오버레이 같은 기술로 클러스터 네트워크에 암호화를 제공합니다. 설계상 쿠버네티스는 자신만의 네트워킹 플러그인을 클러스터에 사용하게 해줘요. 관리형 쿠버네티스를 사용한다면 제공자가 이미 네트워크 플러그인을 선택했을 수 있습니다.

선택한 네트워크 플러그인과 통합 방식은 전송 중인 정보의 보안에 큰 영향을 줄 수 있어요.

관측성과 런타임 보안

쿠버네티스는 클러스터를 추가 도구로 확장하게 해줘요. 애플리케이션과 그 실행 클러스터를 모니터링·문제 해결하는 데 도움을 주는 서드파티 솔루션을 설정할 수 있습니다. 쿠버네티스 자체에도 기본적인 관측성 기능이 내장되어 있어요. 컨테이너 안에서 실행되는 코드는 로그를 생성하고, 메트릭을 발행하거나 다른 관측성 데이터를 제공할 수 있어요. 배포 시점에 클러스터가 그곳에서 적절한 수준의 보호를 제공하도록 해야 합니다.

메트릭 대시보드나 비슷한 것을 설정했다면, 그 대시보드에 데이터를 공급하는 구성 요소 체인과 대시보드 자체를 검토해요. 전체 체인이 충분한 복원력과 무결성 보호로 설계되어, 클러스터가 저하 중인 사고 중에도 의존할 수 있는지 확인하세요.

적절한 곳에서는 암호화 검증 부트나 시간의 인증된 배포 같은 보안 조치를 쿠버네티스 레이어 아래에 배포해, 로그와 감사 기록의 정확성을 돕습니다.

고보증(high-assurance) 환경에서는 로그가 변조 방지되고 기밀을 유지하도록 암호화 보호를 배포해요.

더 알아보기 (Learn more)

클라우드 네이티브 보안

쿠버네티스와 정보 보안