우리는 최초의 항상(!) 암호화된 K8을 만들었습니다 🔐

안녕하세요 dev.to 👋

동료들과 제가 지난 1.5년 동안open sourced 지난 주에 작업한 내용을 공유하고 싶었습니다. 피드백을 받고 싶습니다.

이 프로젝트는 Constellation이라고 하며 Rancher 또는 OpenShift와 같은 K8s 배포판입니다. Constellation이 특별한 이유는 클라우드 인프라(및 클라우드 직원)로부터 전체 K8s 클러스터를 보호하고 런타임 시에도 모든 데이터를 항상 암호화하도록 설계되었다는 것입니다.



재단



핵심 요소는 AzureGCP에서 사용할 수 있는 AMD SEV 기반 기밀 VM(CVM)입니다. CVM은 손상된 호스트 및 악의적인 관리자로부터 워크로드를 보호합니다. 이를 위해 CVM은 런타임 시 메모리에서 암호화된 상태로 유지되고 강력하게 격리되며 고급 원격 증명 기능을 갖추고 있습니다. 이를 종종 기밀 컴퓨팅이라고도 합니다.

Intel과 Arm은 서버 CPU에 대한 유사한 기능을 발표했으며 이러한 기능이 제공되면 지원할 계획입니다.

목표



우리는 두 가지 목표를 염두에 두고 Constellation을 설계했습니다.
  • 가능한 최상의 보안을 제공하고 잠재적으로 손상된 인프라에서 K8s 클러스터를 안전하게 실행할 수 있도록 해야 합니다. 권한이 있는 클라우드 공급자 직원도 클러스터의 데이터에 액세스할 수 없어야 합니다.
  • UX 관점에서 일반 K8처럼 작동해야 합니다.

  • 아키텍처 및 기능



    Constellation은 CLI, 사용자 정의 노드 이미지 및 컨테이너/서비스 집합의 세 가지 주요 구성 요소로 구성됩니다.

    CLI



    CLI를 사용하면 Azure 또는 GCP에서 Constellation 클러스터를 쉽게 설정할 수 있습니다(더 많은 클라우드를 지원하기 위해 노력하고 있습니다). 예를 들어:

    $ constellation config generate azure
    $ constellation create --control-plane-nodes 1 --worker-nodes 2 -y
    $ constellation init
    $ kubectl ...
    

    CLI는 Constellation의 노드 이미지를 사용하여 CVM 기반 노드를 자동으로 생성합니다. 노드 이미지는 Fedora CoreOS를 기반으로 하며 CVM 원격 증명에 최적화되어 있습니다.

    클러스터 증명/검증



    클러스터의 첫 번째 노드는 CLI에서 직접 🔎 확인됩니다. 다른 모든 것은 기존 노드에 의해 확인됩니다. 따라서 전이적으로 사용자는 "양호한"이미지를 실행하는 "양호한"노드만 클러스터의 일부임을 압니다.

    "좋은"노드 이미지가 무엇인지 어떻게 알 수 있습니까? 우리는 모든 노드 이미지(및 CLI)에 서명하고 해당 서명을 Sigstore's public transparency log에 게시합니다.

    네트워크 및 클라우드 스토리지 암호화



    노드가 확인되면 네트워크를 통해 다른 노드와 안전하게 통신하고 클라우드 저장소에 기록되는 데이터를 암호화하기 위해 암호화 키를 받습니다. 이러한 키는 모두 Constellation에서 관리합니다. 네트워크 암호화를 위해 Constellation은 Cilium을 사용합니다.

    CVM 런타임 암호화, 네트워크 암호화 및 스토리지 암호화를 함께 사용하면 모든 데이터가 항상 암호화됩니다.

    기능 및 벤치마크 비교에 대한 보다 포괄적인 목록은 📄README을 확인하십시오.

    데모







    별자리 데모 GCP - asciinema




    asciinema.org




    이것은 무엇에 좋은가요?



    K8s 클러스터를 완전히 암호화하고 격리하면 다음과 같은 이점이 있습니다.
  • ⬆️ 데이터 보안 강화; 방지
  • 🚛 민감한 워크로드를 온프레미스에서 클라우드로 이동
  • ⚖️ 규제 요건 충족

  • 예를 들어, 모국인 독일과 다른 곳에서는 기밀 컴퓨팅 및 런타임 암호화가 특정 eHealth 애플리케이션에 이미 필수입니다.

    어떻게 생각해?

    좋은 웹페이지 즐겨찾기