Google Kubernetes Engine (GKE) 보안 커널 모듈 로드를 사용하면 보안 Container-Optimized OS 이미지에서 서명된 트리 외부 (OOT) 커널 모듈이 필요한 워크로드를 실행할 수 있습니다. 보안 커널 모듈 로드를 사용하면 서명 확인을 통해 CPU 또는 TPU 노드에 모듈을 로드하는 방식을 더 세부적으로 제어하여 클러스터와 노드 풀의 보안 상황을 개선할 수 있습니다.
보안 커널 모듈 로드의 작동 방식
기본적으로 GKE 노드는 노드 유형에 따라 보안 구성이 다른 Container-Optimized OS 이미지를 사용합니다.
- CPU 및 TPU 노드: Linux 보안 모듈 (LSM) Loadpin이 사용 설정된 Container-Optimized OS 이미지를 사용합니다. Loadpin은 OOT 커널 모듈 로드를 제한합니다. 이 설정은 안전하지만 OOT 모듈 로드를 방지합니다.
- GPU 노드: Loadpin이 사용 중지된 Container-Optimized OS 이미지를 사용합니다. 이 설정을 사용하면 NVIDIA 드라이버 설치와 같은 OOT 모듈을 로드할 수 있지만 기본적으로 보안이 낮습니다.
노드 풀의 LinuxNodeConfig에서 NodeKernelModuleLoading.Policy 설정을 사용하거나 클러스터 또는 노드 풀을 만들거나 업데이트할 때 --enable-kernel-module-signature-enforcement 플래그를 전달하여 보안 커널 모듈 로딩을 사용 설정합니다. 정책을 ENFORCE_SIGNED_MODULES로 설정하면 CPU 또는 TPU 노드 풀에서 Loadpin이 사용 설정되지만 루트 파일 시스템 외부에서 커널 모듈 로드를 허용하도록 구성됩니다. 모듈에 서명해야 하며 시스템은 Google 서명 모듈만 허용합니다.
보안 커널 모듈 로드를 사용해야 하는 경우
GKE 노드 유형에서 맞춤 드라이버나 Lustre와 같은 파일 시스템과 같은 Google 서명 OOT 커널 모듈을 로드해야 하는 경우 보안 커널 모듈 로드를 사용하세요. 이 기능을 사용하면 노드의 보안 상황을 줄이지 않고도 이러한 모듈을 사용할 수 있습니다. 예를 들어 제한이 적은 GPU 이미지 유형을 사용하지 않고도 CPU 노드에 필수 드라이버를 로드할 수 있습니다.
요구사항 및 제한사항
노드 풀에서 보안 커널 모듈 로드를 사용 설정하면 다음 요구사항과 제한사항이 적용됩니다.
- 지원되는 모듈: Google 서명 OOT 모듈만 허용됩니다.
- cgroup v2: 노드 풀에서 cgroup v2를 사용해야 합니다. Google Kubernetes Engine API는 cgroup v1을 사용하는 노드 풀에서 이 정책을 사용 설정하려는 요청을 거부합니다. 자세한 내용은 Kubernetes cgroup 문서를 참고하세요.
- GKE 버전: 이 기능은 GKE 클러스터 버전 1.34.1-gke.2364000 이상에서 사용할 수 있습니다.
- GPU 이미지 유형: CPU 및 TPU 이미지만 보안 커널 모듈 로딩을 지원합니다. GPU는 지원되지 않습니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면
gcloud components update명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
보안 커널 모듈 로드 정책 구성
개별 클러스터에서 또는 노드 풀 설정으로 보안 커널 모듈 로드 정책을 구성할 수 있습니다. 사용 가능한 정책은 다음과 같습니다.
ENFORCE_SIGNED_MODULES: 트리 외부 커널 모듈이 Google에서 서명되도록 강제합니다. 이 정책을 사용하려면 노드 풀에서 cgroup v2를 사용해야 합니다.DO_NOT_ENFORCE_SIGNED_MODULES: 서명된 커널 모듈과 서명되지 않은 커널 모듈을 모두 로드할 수 있습니다. 기본적으로 설정되어 있습니다.
정책을 지정하지 않으면 GKE는 서명된 모듈을 강제하지 않는 기본 동작을 사용합니다.
클러스터에서 보안 커널 모듈 로드 사용 설정
클러스터에서 보안 커널 모듈 로드를 사용 설정하려면 다음 단계 중 하나를 완료하세요.
새 클러스터에서 사용 설정하려면 다음 명령어를 실행합니다.
표준
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementAutopilot
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcement다음을 바꿉니다.
CLUSTER_NAME: 새 클러스터의 이름입니다.LOCATION: 클러스터의 리전 또는 영역입니다.PROJECT_ID: 프로젝트 ID입니다.
기존 클러스터에서 사용 설정하려면 다음 명령어를 실행합니다.
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcement다음을 바꿉니다.
CLUSTER_NAME: 클러스터 이름입니다.LOCATION: 클러스터의 리전 또는 영역입니다.PROJECT_ID: 프로젝트 ID입니다.
기존 클러스터를 업데이트하면 유지보수 기간으로 인해 방지되지 않는 한 다음 사용 가능한 기회에 노드가 다시 생성됩니다.
노드 풀에서 보안 커널 모듈 로드 사용 설정
노드 풀에서 보안 커널 모듈 로드를 사용 설정하려면 다음 단계 중 하나를 완료하세요.
새 노드 풀에서 사용 설정하려면 다음 명령어를 실행합니다.
gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcement다음을 바꿉니다.
NODEPOOL_NAME: 새 노드 풀의 이름입니다.CLUSTER_NAME: 클러스터 이름입니다.LOCATION: 클러스터의 리전 또는 영역입니다.PROJECT_ID: 프로젝트 ID입니다.
기존 노드 풀에서 사용 설정하려면 다음 명령어를 실행합니다.
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcement다음을 바꿉니다.
NODEPOOL_NAME: 업데이트할 노드 풀의 이름입니다.CLUSTER_NAME: 클러스터 이름입니다.LOCATION: 클러스터의 리전 또는 영역입니다.PROJECT_ID: 프로젝트 ID입니다.
보안 커널 모듈 정책이 설정되어 있는지 확인
클러스터에 정책이 설정되어 있는지 확인하려면 다음 명령어를 실행합니다.
gcloud container node-pools describe NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID
출력에서 linuxNodeConfig 섹션을 확인합니다. kernelModuleLoading 필드에는 현재 정책이 표시됩니다.
...
config:
linuxNodeConfig:
kernelModuleLoading:
policy: ENFORCE_SIGNED_MODULES
cgroupMode: CGROUP_MODE_V2
보안 커널 모듈 로드 사용 중지
보안 커널 모듈 로딩을 사용 중지하려면 다음 단계 중 하나를 완료하세요.
클러스터에서 사용 중지하려면 다음 명령어를 실행합니다.
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --no-enable-kernel-module-signature-enforcement기존 노드 풀에서 사용 중지하려면 다음 명령어를 실행합니다.
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --no-enable-kernel-module-signature-enforcement
다음 단계
- 클러스터 보안을 강화하는 방법을 알아봅니다.